版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章:運輸層本章目的:
理解運輸層服務(wù)的原理:復(fù)用/分用可靠數(shù)據(jù)傳輸流量控制擁塞控制了解Internet運輸層協(xié)議:UDP:無連接運輸TCP:基于連接的運輸TCP擁塞控制2025/12/221目錄3.1運輸層服務(wù)3.2復(fù)用和分用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸?shù)脑?.5面向連接的運輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制2025/12/222運輸服務(wù)和協(xié)議為不同主機(jī)上運行的應(yīng)用進(jìn)程之間提供邏輯通信(logicalcommunication)運輸協(xié)議發(fā)送方:把應(yīng)用數(shù)據(jù)劃分成報文段(segments),交給網(wǎng)絡(luò)層接收方:把報文段重組成應(yīng)用數(shù)據(jù),交付給應(yīng)用層應(yīng)用程序可以使用多種運輸層協(xié)議:因特網(wǎng):TCP和UDP應(yīng)用層運輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層應(yīng)用層運輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層邏輯端到端傳輸2025/12/223運輸層為相互通信的應(yīng)用進(jìn)程提供了邏輯通信54321運輸層提供應(yīng)用進(jìn)程間的邏輯通信主機(jī)A主機(jī)B應(yīng)用進(jìn)程應(yīng)用進(jìn)程路由器1路由器2AP1LAN2WANAP2AP3AP4IP層LAN1AP1AP2AP4端口端口54321IP協(xié)議的作用范圍運輸層協(xié)議TCP和UDP的作用范圍AP32025/12/224運輸層和網(wǎng)絡(luò)層網(wǎng)絡(luò)層:
不同主機(jī)之間的邏輯通信運輸層:
應(yīng)用進(jìn)程之間的邏輯通信類似于家庭間通信:12個孩子要與另一個家庭的12個孩子相互通信進(jìn)程=孩子們進(jìn)程間報文=信封中的信箋主機(jī)=家庭的房子運輸協(xié)議=張三
和李四網(wǎng)絡(luò)層協(xié)議=郵局提供的服務(wù)2025/12/225Internet運輸層協(xié)議Internet的運輸層有兩個不同的協(xié)議用戶數(shù)據(jù)報協(xié)議UDP(UserDatagramProtocol)傳輸控制協(xié)議TCP(TransmissionControlProtocol)2025/12/226Internet運輸層協(xié)議兩個對等運輸實體在通信時傳送的數(shù)據(jù)單位叫作運輸協(xié)議數(shù)據(jù)單元
TPDU(TransportProtocolDataUnit)。TCP傳送的數(shù)據(jù)單位協(xié)議是TCP報文段(segment)UDP傳送的數(shù)據(jù)單位協(xié)議是UDP報文或用戶數(shù)據(jù)報。2025/12/227Internet運輸層協(xié)議TCP和UDP的基本任務(wù)多路復(fù)用、多路分解TCP可靠的數(shù)據(jù)傳輸流量控制擁塞控制UDP沒有對IP協(xié)議的盡力而為服務(wù)提供任何擴(kuò)展不提供的服務(wù)延時承諾、帶寬承諾2025/12/228目錄3.1運輸層服務(wù)3.2復(fù)用和分用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸?shù)脑?.5面向連接的運輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制2025/12/229復(fù)用和分用(multiplexing/Demultiplexing)應(yīng)用層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層P1應(yīng)用層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層應(yīng)用層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層P2P3P4P1主機(jī)1主機(jī)2主機(jī)3=進(jìn)程=套接字(socket)將收到的報文段交付給正確的套接字接收方主機(jī)的分用:從不同套接字收集數(shù)據(jù)塊,為每個數(shù)據(jù)塊封裝傳輸層首部信息(這將在分用時使用)發(fā)送方主機(jī)的復(fù)用:2025/12/2210復(fù)用和分用(multiplexing/Demultiplexing)回顧:segment(段)-運輸層實體間交換數(shù)據(jù)的單位TPDU:運輸層數(shù)據(jù)單元應(yīng)用層運輸層網(wǎng)絡(luò)層MP2應(yīng)用層運輸層網(wǎng)絡(luò)層接收方HtHnsegment報文段M應(yīng)用層運輸層網(wǎng)絡(luò)層P1MMMP3P4報文段首部應(yīng)用層數(shù)據(jù)2025/12/2211復(fù)用和分用(multiplexing/Demultiplexing)應(yīng)用層運輸層網(wǎng)絡(luò)層TCP
報文段UDP用戶數(shù)據(jù)報應(yīng)用進(jìn)程TCP
復(fù)用
IP
復(fù)用UDP復(fù)用
TCP
報文段UDP用戶數(shù)據(jù)報
應(yīng)用進(jìn)程端口端口TCP
分用UDP
分用IP
分用IP數(shù)據(jù)報IP數(shù)據(jù)報發(fā)送方接收方2025/12/2212端口端口的作用就是讓應(yīng)用層的各種應(yīng)用進(jìn)程都能將其數(shù)據(jù)通過端口向下交付給運輸層,以及讓運輸層知道應(yīng)當(dāng)將其報文段中的數(shù)據(jù)向上通過端口交付給應(yīng)用層相應(yīng)的進(jìn)程。從這個意義上講,端口是用來標(biāo)志應(yīng)用層的進(jìn)程。端口用一個16bit端口號進(jìn)行標(biāo)志。2025/12/2213兩類端口一類是熟知端口,其數(shù)值一般為0~1023。當(dāng)一種新的應(yīng)用程序出現(xiàn)時,必須為它指派一個熟知端口。另一類則是一般端口,用來隨時分配給請求通信的客戶進(jìn)程。2025/12/2214套接字TCP使用“連接”(而不僅僅是“端口”)作為最基本的抽象,同時將TCP連接的端點稱為套接字(socket)。套接字和端口、IP地址的關(guān)系是:IP地址3端口號1500
3,1500套接字(socket)2025/12/2215分用是如何工作的?主機(jī)收到IP包每個數(shù)據(jù)包都有源IP地址和目的IP地址每個數(shù)據(jù)包都攜帶一個傳輸層的數(shù)據(jù)報文段每個數(shù)據(jù)報文段都有源、目的端口號
主機(jī)根據(jù)“IP地址+端口號”將報文段定向到相應(yīng)的套接字源端口#目的端口#32位應(yīng)用數(shù)據(jù)(報文)其他首部字段TCP/UDP報文段格式2025/12/2216無連接的復(fù)用與分用根據(jù)端口號創(chuàng)建socket:DatagramSocketmySocket1=newDatagramSocket(99111);DatagramSocketmySocket2=newDatagramSocket(99222);UDPsocket由一個二元組來標(biāo)識:(目的IP地址,目的端口號)當(dāng)主機(jī)收到UDP報文段時:檢查報文段中的目的端口號將UDP報文段定向到相應(yīng)的套接字具有不同源IP地址和/或源端口但具有相同的目的IP地址和端口的IP包定向到相同的套接字2025/12/2217無連接的復(fù)用與分用(續(xù))DatagramSocket
serverSocket=newDatagramSocket(6428);客戶IP:BP2客戶IP:AP1P1P3服務(wù)器IP:CSP:6428DP:9157SP:9157DP:6428SP:6428DP:5775SP:5775DP:6428SP提供“返回地址”(完整的返回地址是源IP地址和源端口號)2025/12/2218面向連接的復(fù)用與分用TCP套接字由一個四元組來標(biāo)識:源IP地址源端口號目的IP地址目的端口號接收方主機(jī)根據(jù)這四個值將報文段定向到相應(yīng)的套接字服務(wù)器主機(jī)同時支持多個并發(fā)的TCP套接字:每一個套接字都由其四元組來標(biāo)識Web服務(wù)器為每一個客戶連接都產(chǎn)生不同的套接字非持久HTTP對每一個請求都建立不同的套接字(會影響性能)2025/12/2219面向連接的復(fù)用與分用(續(xù))客戶IP:BP1客戶IP:AP1P2P4服務(wù)器IP:CSP:9157DP:80SP:9157DP:80P5P6P3D-IP:CS-IP:AD-IP:CS-IP:BSP:5775DP:80D-IP:CS-IP:B2025/12/2220面向連接的復(fù)用與分用:
多線程的Web服務(wù)器客戶IP:BP1客戶IP:AP1P2服務(wù)器IP:CSP:9157DP:80SP:9157DP:80P4P3D-IP:CS-IP:AD-IP:CS-IP:BSP:5775DP:80D-IP:CS-IP:B2025/12/2221復(fù)用/分用:舉例主機(jī)A服務(wù)器Bsourceport:xdest.port:23sourceport:23dest.port:x端口的使用:簡單的telnet應(yīng)用Web客戶端主機(jī)AWeb服務(wù)器BWeb客戶端主機(jī)CSourceIP:CDestIP:Bsourceport:xdest.port:80SourceIP:CDestIP:Bsourceport:ydest.port:80端口的使用:Web服務(wù)器SourceIP:ADestIP:Bsourceport:xdest.port:802025/12/2222目錄3.1運輸層服務(wù)3.2復(fù)用和分用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸?shù)脑?.5面向連接的運輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制2025/12/2223UDP:用戶數(shù)據(jù)報協(xié)議
[RFC768]只提供必要服務(wù)的最簡化的Internet運輸協(xié)議“盡力而為”服務(wù),UDP報文段可能會:丟失應(yīng)用數(shù)據(jù)不按序到達(dá)無連接:在UDP發(fā)送方和接收方之間無握手過程UDP報文段之間是相互獨立的為什么會選擇UDP?無需建立連接(建立連接會增加延遲)簡單:發(fā)送方和接收方無需維護(hù)連接狀態(tài)段首部開銷小無擁塞控制:UDP可按需要隨時發(fā)送2025/12/2224UDP:(續(xù))多用于流媒體應(yīng)用允許丟包對傳輸速率要求高其他使用UDP的應(yīng)用DNSSNMP若希望實現(xiàn)基于UDP的可靠傳輸:在應(yīng)用層增加可靠性保證,應(yīng)用程序要有差錯恢復(fù)機(jī)制源端口#目的端口#32位應(yīng)用數(shù)據(jù)(報文)UDP報文段結(jié)構(gòu)長度檢查和包括首部在內(nèi)的UDP報文段長度,(以字節(jié)為單位)2025/12/2225UDP校驗和(checksum)發(fā)送方:把報文段看作是16比特字的序列檢查和:對報文段的所有16比特字的和進(jìn)行1的補(bǔ)運算發(fā)送方將計算校驗和的結(jié)果寫入UDP校驗和字段中接收方:計算接收到的報文段的校驗和檢查計算結(jié)果是否與收到報文段的校驗和字段中的值相同:不同–檢測到錯誤相同–沒有檢測到錯誤(但仍可能存在錯誤)目標(biāo):
檢測收到的報文段的“差錯”(例如,出現(xiàn)突變的比特)2025/12/2226Internet中計算校驗和的例子例子:將兩個16比特字相加1111001100110011011101010101010101110111011101110111101110111011110010100010001000011回卷和檢查和注意最高有效位的進(jìn)位要回卷加到結(jié)果當(dāng)中2025/12/2227目錄3.1運輸層服務(wù)3.2復(fù)用和分用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸?shù)脑?.5面向連接的運輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制2025/12/2228可靠數(shù)據(jù)傳輸?shù)脑碓趹?yīng)用層、運輸層和鏈路層都很重要網(wǎng)絡(luò)中最重要的top-10問題之一!不可靠信道的特性決定了可靠數(shù)據(jù)傳輸協(xié)議(rdt)的復(fù)雜性。2025/12/2229可靠數(shù)據(jù)傳輸(rdt)發(fā)送方接收方rdt_send():
由上層(如應(yīng)用層)調(diào)用,將數(shù)據(jù)發(fā)送給接收方的上層udt_send():
由rdt調(diào)用,將分組通過不可靠通道傳給接收方rdt_rcv():
當(dāng)分組到達(dá)接收方時調(diào)用deliver_data():
由
rdt
調(diào)用,將數(shù)據(jù)交付上層2025/12/2230可靠數(shù)據(jù)傳輸(rdt)我們將要:逐步地開發(fā)可靠數(shù)據(jù)傳輸協(xié)議(rdt)的發(fā)送方和接收方只考慮單向數(shù)據(jù)傳輸(unidirectionaldatatransfer)的情況但控制信息是雙向傳輸?shù)?用有限狀態(tài)機(jī)(FSM)來描述發(fā)送方和接收方狀態(tài)1狀態(tài)2事件引起狀態(tài)變遷狀態(tài)轉(zhuǎn)換過程中的動作狀態(tài):
由事件引起一個狀態(tài)到另一個狀態(tài)的變遷。事件動作2025/12/2231Rdt1.0:可靠信道上的可靠傳輸?shù)讓有诺劳耆煽坎粫a(chǎn)生比特錯誤不會丟失分組分別為發(fā)送方和接收方建立FSM:發(fā)送方將數(shù)據(jù)發(fā)送給底層信道接收方從底層信道接收數(shù)據(jù)packet=make_pkt(data)udt_send(packet)rdt_send(data)extract(packet,data)deliver_data(data)等待來自下層的調(diào)用rdt_rcv(packet)發(fā)送方接收方等待來自上層的調(diào)用2025/12/2232Rdt2.0:具有比特差錯的信道上的rdt底層信道中分組可能出現(xiàn)比特跳變回顧:UDP用校驗和來檢測比特錯誤問題:如何從差錯中恢復(fù):確認(rèn)——acknowledgements(ACKs):
接收方明確告訴發(fā)送方正確收到分組否認(rèn)——negativeacknowledgements(NAKs):
接收方明確告訴發(fā)送方分組有錯發(fā)送方在收到NAK時重傳分組rdt2.0
中新的機(jī)制:差錯檢測接收方反饋:控制信息(ACK,NAK)接收方->發(fā)送方重傳2025/12/2233rdt2.0:FSM說明等待來自上層的調(diào)用snkpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)&&
notcorrupt(rcvpkt)rdt_rcv(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&
isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&&
corrupt(rcvpkt)等待
ACK或NAK等待來自下層的調(diào)用發(fā)送方接收方rdt_send(data)L2025/12/2234rdt2.0:無差錯的處理等待來自上層的調(diào)用snkpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)&&
notcorrupt(rcvpkt)rdt_rcv(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&
isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&&
corrupt(rcvpkt)等待
ACK或NAK等待來自下層的調(diào)用rdt_send(data)L發(fā)送方接收方2025/12/2235rdt2.0:有差錯的情況等待來自上層的調(diào)用snkpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)&&
notcorrupt(rcvpkt)rdt_rcv(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&
isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&&
corrupt(rcvpkt)等待
ACK或NAK等待來自下層的調(diào)用rdt_send(data)L發(fā)送方接收方2025/12/2236rdt2.0有一個致命的缺陷!如果ACK/NAK受損會出現(xiàn)什么情況?發(fā)送方不知道接收方發(fā)生了什么!如果只考慮重傳:可能會出現(xiàn)大量重復(fù)分組對重復(fù)分組的處理:發(fā)送方對每一個分組增加序號(equencenumber
)發(fā)送方只重傳沒有收到ACK/NAK的分組接收方丟棄重復(fù)分組(不向上遞交)發(fā)送方發(fā)出一個分組,然后等待接收方的應(yīng)答停止等待(stop-and-wait)2025/12/2237rdt2.1:發(fā)送方對ACK/NAK的處理等待來自上層的調(diào)用0sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)等待
ACK或NAK0udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt))sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt)
等待來自上層的調(diào)用1等待ACK或NAK1LL2025/12/2238rdt2.1:接收方對ACK/NAK的處理等待來自下層的0sndpkt=make_pkt(NAK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)
extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)等待來自下層的1rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)sndpkt=make_pkt(NAK,chksum)udt_send(sndpkt)2025/12/2239rdt2.1:討論發(fā)送方:分組中增加序號兩個序號(0,1)是否足夠,為什么?如果收到亂序的ACK/NAK必須進(jìn)行檢查狀態(tài)數(shù)是以前的兩倍狀態(tài)必須反映出當(dāng)前正在發(fā)送的分組的序號是0還是1接收方:如果收到重復(fù)的分組必須檢查狀態(tài)必須反映出當(dāng)前希望接收的分組的序號是0還是1注意:接收方不知道它最后發(fā)出的ACK/NAK是否被發(fā)送方正確接收2025/12/2240rdt2.2:在具有比特差錯信道上的無NAK的可靠數(shù)據(jù)傳輸協(xié)議功能等同于rdt2.1,但只使用ACK取消了NAK,接收方對最后一個正確收到的分組發(fā)送ACK接收方必須明確指出被確認(rèn)的分組的序號發(fā)送方收到的重復(fù)的ACK將按照NAK來進(jìn)行處理重傳正確的分組2025/12/2241rdt2.2:發(fā)送方和接收方等待來自上層的調(diào)用0sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||
isACK(rcvpkt,1))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,0)
等待ACK0發(fā)送方部分FSM等待來自下層的0rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK1,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||
has_seq1(rcvpkt))udt_send(sndpkt)接收方部分FSML2025/12/2242rdt3.0:在具有比特差錯的丟包信道上的可靠數(shù)據(jù)傳輸新的假設(shè):
底層信道會丟包(數(shù)據(jù)或ACK)檢查和,序號,ACK和重傳可以有助于解決問題,但這些遠(yuǎn)遠(yuǎn)不夠Q:
如何處理數(shù)據(jù)丟失?發(fā)送方可以等待,當(dāng)某些數(shù)據(jù)或ACK丟失時,進(jìn)行重傳想一想:缺點?解決方法:
發(fā)送方對ACK等待“適當(dāng)?shù)摹睍r間如果在這個時間內(nèi)沒有收到ACK則重傳如果分組或ACK僅僅是延遲到達(dá)(而非丟失):重傳將造成重復(fù),但序號可以解決這個問題接收方必須指出確認(rèn)的分組序號需要倒計時的計時器2025/12/2243rdt3.0發(fā)送方sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)start_timerrdt_send(data)等待ACK0rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,1))等待來自上層的調(diào)用1sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)start_timerrdt_send(data)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,0)
rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,0))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,1)
stop_timerstop_timerudt_send(sndpkt)start_timertimeoutudt_send(sndpkt)start_timertimeoutrdt_rcv(rcvpkt)等待來自上層的調(diào)用0等待ACK1Lrdt_rcv(rcvpkt)LLL2025/12/2244rdt3.0時序圖2025/12/2245rdt3.0時序圖2025/12/2246rdt3.0的性能rdt3.0功能可用,但性能不盡如人意例如:1Gbps的鏈路,15ms的端到端延遲,分組大小為1KB:Ttransmit=8kb/pkt109b/sec=8μsUsender:利用率
–發(fā)送方用于發(fā)送的時間片每30ms內(nèi)只能發(fā)送1KB:1Gbps
的鏈路只有33kB/sec的吞吐量網(wǎng)絡(luò)協(xié)議限制了物理資源的利用率!L(比特為單位的分組大小)R(傳輸速率,bps)=2025/12/2247rdt3.0:停等操作首個分組的第1個比特被傳輸,t=0發(fā)送方接收方RTT
首個分組的最后1比特被傳輸,
t=L/R首個分組的第1個比特到達(dá)首個分組的最后1個比特到達(dá),發(fā)送ACKACK到達(dá),發(fā)送下一個分組,t=RTT+L/R2025/12/2248流水線協(xié)議流水線(Pipelining):
允許發(fā)送方發(fā)送多個分組而無需等待確認(rèn)必須增大序號范圍協(xié)議的發(fā)送方和接收方必須對分組進(jìn)行緩存兩種流水線協(xié)議:回退N步(go-Back-N)和選擇重傳(selectiverepeat)2025/12/2249流水線:提高利用率發(fā)送方接收方RTT
利用率提高3倍!首個分組的第1個比特被傳輸,t=0首個分組的最后1比特被傳輸,
t=L/RACK到達(dá),發(fā)送下一個分組,t=RTT+L/R首個分組的第1個比特到達(dá)首個分組的最后1個比特到達(dá),發(fā)送ACK第2個分組的最后1個比特到達(dá),發(fā)送ACK第3個分組的最后1個比特到達(dá),發(fā)送ACK2025/12/2250Go-Back-N發(fā)送方:分組首部用k-比特字段表示序號已被傳輸?shù)€未確認(rèn)的分組的許可序號范圍可以看作是一個在序號范圍內(nèi)大小為N的“窗口(window)”2025/12/2251Go-Back-N(續(xù))ACK(n):對序號n之前包括n在內(nèi)的所有分組進(jìn)行確認(rèn)
-“累積ACK”為每一個已發(fā)送但未確認(rèn)的分組設(shè)置定時器超時(n):
重傳分組n和窗口中所有序號大于n的分組2025/12/2252GBN:發(fā)送方的擴(kuò)展FSM等待start_timerudt_send(sndpkt[base])udt_send(sndpkt[base+1])…udt_send(sndpkt[nextseqnum-1])timeoutrdt_send(data)
if(nextseqnum<base+N){
sndpkt[nextseqnum]=make_pkt(nextseqnum,data,chksum)
udt_send(sndpkt[nextseqnum])if(base==nextseqnum)
start_timer
nextseqnum++}else
refuse_data(data)base=getacknum(rcvpkt)+1If(base==nextseqnum)
stop_timerelse
start_timerrdt_rcv(rcvpkt)&&
notcorrupt(rcvpkt)base=1nextseqnum=1rdt_rcv(rcvpkt)&&corrupt(rcvpkt)
L2025/12/2253GBN:接收方的擴(kuò)展FSMACK-only:只對正確按序到達(dá)的分組中最高的序號發(fā)送ACK可能會產(chǎn)生重復(fù)的ACK只需要記住期待序號
expectedseqnum失序分組:丟棄(不緩存)->接收方無緩存!重發(fā)按序到達(dá)的最高序號分組的ACK等待udt_send(sndpkt)defaultrdt_rcv(rcvpkt)&¬currupt(rcvpkt)&&hasseqnum(rcvpkt,expectedseqnum)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum++expectedseqnum=1sndpkt=
make_pkt(expectedseqnum,ACK,chksum)L2025/12/2254GBN
時序圖2025/12/2255選擇重傳接收方逐個對所有正確收到的分組進(jìn)行確認(rèn)如有必要,對接收到的(失序)分組進(jìn)行緩存,以便最后對上層進(jìn)行有序遞交發(fā)送方只重發(fā)沒有收到ACK的那些分組發(fā)送方為每一個沒有收到ACK的分組設(shè)置定時器發(fā)送窗口大小為N限制已發(fā)送但未被確認(rèn)的分組數(shù)2025/12/2256選擇重傳:發(fā)送方和接收方的窗口發(fā)送基序號下一個序號窗口長度N已被確認(rèn)發(fā)送,還未確認(rèn)可用,還未發(fā)送不可用不可用失序(已緩存)但未被確認(rèn)可接收(窗口內(nèi))期待,還未收到窗口長度N接收基序號(a)發(fā)送方看到的序號(b)接收方看到的序號2025/12/2257選擇重傳從上層收到數(shù)據(jù):如果下一個可用于該分組的序號在窗口內(nèi),則將數(shù)據(jù)打包并發(fā)送超時(n):重傳分組n,重置定時器收到確認(rèn)(n)在
[sendbase,sendbase+N]范圍內(nèi)標(biāo)記分組n為已接收如果n是發(fā)送窗口基序號sendbase,則將窗口基序號前推到下一個未確認(rèn)序號發(fā)送方2025/12/2258選擇重傳分組序號n在[rcvbase,rcvbase+N-1]范圍內(nèi)發(fā)送n的確認(rèn)ACK(n)如果分組序號不連續(xù)(失序):將其緩存按序分組:將該分組以及以前緩存的序號連續(xù)的分組一起交付給上層,將窗口前推到下一個未收到的分組分組序號n在[rcvbase-N,rcvbase-1]范圍內(nèi):雖然曾經(jīng)確認(rèn)過,仍再次發(fā)送n的確認(rèn)ACK(n)其他情況:忽略該分組接收方2025/12/2259選擇重傳時序圖0123456789分組0發(fā)送0123456789分組1發(fā)送0123456789分組2發(fā)送0123456789分組3發(fā)送,窗口滿1234056789ACK0收到,分組4發(fā)送1234056789分組0收到,交付,ACK0發(fā)送2345016789ACK1收到,分組5發(fā)送2345016789分組2超時,重發(fā)分組2
2345016789ACK3收到,無分組可發(fā)2345016789分組1收到,交付,ACK1發(fā)送
2345016789分組3收到,緩存,ACK3發(fā)送
2345016789分組4收到,緩存,ACK4發(fā)送2345016789分組5收到,緩存,ACK5發(fā)送6789012345分組2收到,分組2、3、4、5交付,ACK2發(fā)送×丟失2025/12/2260選擇重傳的問題:例如:分組序號范圍為4個序號:0,1,2,3窗口長度=3兩種情況對接收方來說沒有差別。圖(a)中接收方本要接收新的序號為0的分組,但收到的是重復(fù)的上一個分組0Q:
序號范圍長度與窗口長度有何關(guān)系?012301201230120123012012301201230120123012分組0分組1分組2×××0123012超時重傳分組0分組0接收具有序號0的分組ACK0ACK1ACK2(a)發(fā)送方窗口接收方窗口012301201230120123012012301201230120123012分組0分組1分組2×0123012分組0接收具有序號0的分組ACK0ACK1ACK2(b)發(fā)送方窗口接收方窗口0123012分組32025/12/2261目錄3.1運輸層服務(wù)3.2復(fù)用和分用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸?shù)脑?.5面向連接的傳輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制2025/12/2262TCP:概述
RFCs:793,1122,1323,2018,2581全雙工:一條連接上有雙向數(shù)據(jù)傳輸MSS:(maximumsegmentsize)最大報文段長面向連接:
握手(交換控制信息)過程在數(shù)據(jù)交換之前初始化發(fā)送方和接收方的狀態(tài)流量控制:使得發(fā)送方不會使接收方的緩存溢出點對點:單個發(fā)送方與單個接收方之間的連接可靠的按序字節(jié)流:沒有“報文邊界”流水線:TCP有擁塞控制,可以利用窗口進(jìn)行流量控制發(fā)送和接收緩存2025/12/2263TCP的發(fā)送和接收緩存
端口…發(fā)送
TCP
報文段TCP…TCP接收緩存發(fā)送緩存報文段…報文段報文段端口發(fā)送端接收端向發(fā)送緩存寫入數(shù)據(jù)塊從接收緩存讀取數(shù)據(jù)塊應(yīng)用進(jìn)程應(yīng)用進(jìn)程
2025/12/2264TCP首部20字節(jié)的固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FIN32bitSYNRSTPSHACKURG比特08162431填充TCP
數(shù)據(jù)部分TCP首部TCP報文段IP數(shù)據(jù)部分IP首部發(fā)送在前TCP報文段結(jié)構(gòu)2025/12/2265TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充源端口和目的端口字段——各占2字節(jié)。端口是運輸層與應(yīng)用層的服務(wù)接口。運輸層的復(fù)用和分用功能都要通過端口才能實現(xiàn)。2025/12/2266TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充序號字段——占4字節(jié)。TCP連接中傳送的數(shù)據(jù)流中的每一個字節(jié)都編上一個序號。序號字段的值則指的是本報文段所發(fā)送的數(shù)據(jù)的第一個字節(jié)在整個報文字節(jié)流中的序號。2025/12/2267TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充確認(rèn)號字段——占4字節(jié),是期望收到對方的下一個報文段的數(shù)據(jù)的第一個字節(jié)的序號。2025/12/2268TCP序列號和確認(rèn)序列號Q:
接收方如何處理非按序到達(dá)的報文段?A:TCPRFC未明確規(guī)定,由實現(xiàn)者自己去處理主機(jī)A主機(jī)BSeq=42,ACK=79,data=‘C’Seq=79,ACK=43,data=‘C’Seq=43,ACK=80用戶鍵入‘C’主機(jī)確認(rèn)收到回顯的‘C’主機(jī)確認(rèn)收到’C’,回顯’C’時間簡單的Telnet例子2025/12/2269TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充數(shù)據(jù)偏移——占4bit,它指出TCP報文段的數(shù)據(jù)起始處距離TCP報文段的起始處有多遠(yuǎn)?!皵?shù)據(jù)偏移”的單位不是字節(jié)而是32bit字(4字節(jié)為計算單位)。2025/12/2270TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充保留字段——占6bit,保留為今后使用,但目前應(yīng)置為0。2025/12/2271TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充緊急比特URG——當(dāng)URG
1時,表明緊急指針字段有效。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù),應(yīng)盡快傳送。(一般不使用)2025/12/2272TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充確認(rèn)比特ACK——只有當(dāng)ACK
1時確認(rèn)號字段才有效。當(dāng)ACK
0時,確認(rèn)號無效。2025/12/2273TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充推送比特PSH(PuSH)——接收TCP收到推送比特置1的報文段,就盡快地交付給接收應(yīng)用進(jìn)程,而不再等到整個緩存都填滿了后再向上交付。2025/12/2274TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充復(fù)位比特RST(ReSeT)——當(dāng)RST
1時,表明TCP連接中出現(xiàn)嚴(yán)重差錯(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。2025/12/2275TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充同步比特SYN——同步比特SYN置為1,就表示這是一個連接請求或連接接受報文。2025/12/2276TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充終止比特FIN(FINal)——用來釋放一個連接。當(dāng)FIN
1時,表明此報文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運輸連接。2025/12/2277TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充窗口字段——占2字節(jié)。窗口字段用來控制對方發(fā)送的數(shù)據(jù)量,單位為字節(jié)。TCP連接的一端根據(jù)設(shè)置的緩存空間大小確定自己的接收窗口大小,然后通知對方以確定對方的發(fā)送窗口的上限。2025/12/2278TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充檢驗和——占2字節(jié)。檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分。在計算檢驗和時,要在TCP報文段的前面加上12字節(jié)的偽首部。2025/12/2279TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充緊急指針字段——占16bit。緊急指針指出在本報文段中的緊急數(shù)據(jù)的最后一個字節(jié)的序號。
2025/12/2280TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充選項字段——長度可變。TCP只規(guī)定了一種選項,即最大報文段長度
MSS(MaximumSegmentSize)。MSS告訴對方TCP:“我的緩存所能接收的報文段的數(shù)據(jù)字段的最大長度是MSS個字節(jié)?!盡SS是TCP報文段中的數(shù)據(jù)字段的最大長度。數(shù)據(jù)字段加上TCP首部才等于整個的TCP報文段。2025/12/2281TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充填充字段——這是為了使整個首部長度是4字節(jié)的整數(shù)倍。2025/12/2282TCP往返時延(RTT)與超時Q:
如何設(shè)置TCP的超時?應(yīng)該大于RTT但RTT是變化的太短:造成不必要的重傳太長:對丟包反應(yīng)太慢Q:
如何估算RTT?樣本RTT(SampleRTT):對報文段被發(fā)出到收到該報文段的確認(rèn)之間的時間進(jìn)行測量忽略重傳樣本RTT會有波動,要使得估算RTT更平滑將最近幾次的測量進(jìn)行平均,而非僅僅采用最近一次的SampleRTT2025/12/2283TCP往返時延(RTT)與超時EstimatedRTT=(1-
)*EstimatedRTT+
*SampleRTT指數(shù)加權(quán)移動平均(Exponentialweightedmovingaverage,EWMA)參考值:=0.1252025/12/2284估計RTT的例子:2025/12/2285TCP往返時延(RTT)與超時設(shè)置超時EstimtedRTT
加上“安全系數(shù)”EstimatedRTT波動較大
->
加大安全系數(shù)首先估計SampleRTT與EstimatedRTT偏差:TimeoutInterval=EstimatedRTT+4*DevRTTDevRTT=(1-
)*DevRTT+
*|SampleRTT-EstimatedRTT|(參考值,=0.25)然后設(shè)置超時間隔:2025/12/2286目錄3.1運輸層服務(wù)3.2復(fù)用和分用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸?shù)脑?.5面向連接的傳輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制2025/12/2287TCP可靠數(shù)據(jù)傳輸TCP在IP的不可靠服務(wù)基礎(chǔ)上提供可靠數(shù)據(jù)傳輸服務(wù)數(shù)據(jù)流累積確認(rèn)TCP使用簡單的重傳定時器重傳由以下情況觸發(fā):超時重復(fù)的ACK先考慮TCP發(fā)送方的簡化描述:忽略重復(fù)的ACK忽略流量控制和擁塞控制2025/12/2288TCP發(fā)送方事件:從應(yīng)用程序接收數(shù)據(jù)將數(shù)據(jù)封裝入報文段中,每個報文段都包含一個序號序號是該報文段第一個數(shù)據(jù)字節(jié)的字節(jié)流編號啟動定時器超時間隔:TimeOutInterval
超時:重傳認(rèn)為超時的報文段重啟定時器收到Ack:如果是對以前的未確認(rèn)報文段的確認(rèn)更新SendBase如果當(dāng)前有未被確認(rèn)的報文段,TCP還要重啟定時器2025/12/2289TCP
發(fā)送方
(簡化情況)
NextSeqNum=InitialSeqNum
SendBase=InitialSeqNum
loop(forever){
switch(event)
event:datareceivedfromapplicationabovecreateTCPsegmentwithsequencenumberNextSeqNum
if(timercurrentlynotrunning)starttimerpasssegmenttoIP
NextSeqNum=NextSeqNum+length(data)
event:timertimeoutretransmitnot-yet-acknowledgedsegmentwithsmallestsequencenumberstarttimer
event:ACKreceived,withACKfieldvalueofyif(y>SendBase){
SendBase=yif(therearecurrentlynot-yet-acknowledgedsegments)starttimer}
}/*endofloopforever*/
注釋:SendBase-1:最后一個確認(rèn)的字節(jié)例子:SendBase-1=71;
y=73,接收方期待73以后的字節(jié);
y>SendBase,確認(rèn)新的數(shù)據(jù)2025/12/2290TCP:重傳情況主機(jī)ASeq=92,8字節(jié)數(shù)據(jù)ACK=100丟失超時由于ACK丟失而重傳主機(jī)BXSeq=92,8字節(jié)數(shù)據(jù)ACK=100時間SendBase=100主機(jī)ASeq=100,20字節(jié)數(shù)據(jù)ACK=100時間由于超時過短而重傳主機(jī)BSeq=92,8字節(jié)數(shù)據(jù)ACK=120Seq=92,8字節(jié)數(shù)據(jù)Seq=92超時ACK=120Seq=92超時SendBase=120SendBase=120Sendbase=1002025/12/2291TCP重傳情況(續(xù))主機(jī)ASeq=92,8字節(jié)數(shù)據(jù)ACK=100丟失超時累積確認(rèn)避免了第一個報文的重傳主機(jī)BXSeq=100,20字節(jié)數(shù)據(jù)ACK=120時間SendBase=1202025/12/2292產(chǎn)生TCPACK的建議
[RFC1122,RFC2581]接收方事件所期望序號的報文段按序到達(dá)。所有在期望序號及其以前的數(shù)據(jù)都已經(jīng)被確認(rèn)有期望序號的報文段按序到達(dá)。另一個按序報文段等待發(fā)送ACK比期望序號大的失序報文段到達(dá),檢測出數(shù)據(jù)流中的間隔能部分或完全填充接收數(shù)據(jù)間隔的報文段到達(dá)TCP接收方動作延遲的ACK。對另一個按序報文段的到達(dá)最多等待500ms。如果下一個按序報文段在這個時間間隔內(nèi)沒有到達(dá),則發(fā)送一個ACK立即發(fā)送單個累積ACK,以確認(rèn)兩個按序報文段立即發(fā)送冗余ACK,指明下一個期待字節(jié)的序號(也就是間隔的低端字節(jié)序號)倘若該報文段起始于間隔的低端,則立即發(fā)送ACK2025/12/2293快速重傳超時周期往往太長:增加重發(fā)丟失分組的延時通過重復(fù)的ACK檢測丟失報文段.發(fā)送方常要連續(xù)發(fā)送大量報文段如果一個報文段丟失,會引起很多連續(xù)的重復(fù)ACK.如果發(fā)送收到一個數(shù)據(jù)的3個ACK,它會認(rèn)為確認(rèn)數(shù)據(jù)之后的報文段丟失:快速重傳:
在超時到來之前重傳報文段2025/12/2294
event:ACKreceived,withACKfieldvalueofyif(y>SendBase){
SendBase=yif(therearecurrentlynot-yet-acknowledgedsegments)starttimer}else{incrementcountofdupACKsreceivedforyif(countofdupACKsreceivedfory=3){resendsegmentwithsequencenumbery}
快速重傳算法:重復(fù)的ACK報文快速重傳2025/12/2295目錄3.1運輸層服務(wù)3.2復(fù)用和分用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸?shù)脑?.5面向連接的運輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制2025/12/2296TCP流量控制TCP連接的接收方有一個接收緩存:速度匹配服務(wù):匹配發(fā)送方的發(fā)送速率與接收方應(yīng)用進(jìn)程的讀取速率應(yīng)用進(jìn)程從緩沖區(qū)中讀取數(shù)據(jù)可能很慢發(fā)送方不會由于傳得太多太快而使得接收方緩存溢出流量控制空閑空間緩存中的TCP數(shù)據(jù)RcvWindow來自IP的數(shù)據(jù)應(yīng)用進(jìn)程RcvBufferRcvBuffer
=接收端的TCP緩存大小RcvWindow=緩存中空閑的部分2025/12/2297TCP流量控制:如何工作?(假設(shè)TCP接收方將失序到達(dá)的報文段丟棄掉)緩存中的空閑空間=RcvWindow=RcvBuffer-[LastByteRcvd-LastByteRead]接收方把RcvWindow的值放在報文段的接收窗口字段中來通知發(fā)送方它緩存中的空閑空間發(fā)送方將未被確認(rèn)的數(shù)據(jù)量限制在RcvWindow允許范圍內(nèi)保證接收方緩存不會溢出空閑空間緩存中的TCP數(shù)據(jù)RcvWindow來自IP的數(shù)據(jù)應(yīng)用進(jìn)程RcvBuffer2025/12/2298目錄3.1運輸層服務(wù)3.2復(fù)用和分用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸?shù)脑?.5面向連接的運輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制2025/12/2299TCP連接管理回顧:
TCP的發(fā)送方和接收方在互發(fā)數(shù)據(jù)之前要先建立“連接”初始化:序號緩存,流量控制信息(如
RcvWindow)客戶端:
連接發(fā)起者SocketclientSocket=newSocket("hostname","portnumber");
服務(wù)器端:
接收連接者SocketconnectionSocket=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 19941.1-2025皮革和毛皮甲醛含量的測定第1部分:高效液相色譜法
- 2026年歷史建筑保護(hù)保險合同中
- 2026年快遞服務(wù)合同
- 2025年聊城市檢察機(jī)關(guān)公開招聘聘用制書記員77人備考題庫完整答案詳解
- 廣東2025年民生銀行汕頭分行社會招聘備考題庫完整答案詳解
- 2025年昭覺縣應(yīng)急管理局關(guān)于公開招聘綜合應(yīng)急救援隊伍人員的備考題庫完整參考答案詳解
- 春節(jié)放假通知、值班備勤表、值班巡查簽到表
- 2025年西藏革吉縣財政局招聘財會監(jiān)督人員的備考題庫帶答案詳解
- 2025年鄭州市中原銀行農(nóng)村普惠金融支付服務(wù)點招聘備考題庫及答案詳解參考
- 2025年煙臺市檢察機(jī)關(guān)公開招聘聘用制書記員的備考題庫(24人)及一套答案詳解
- 江蘇南通市如皋市2026屆高三上學(xué)期教學(xué)質(zhì)量調(diào)研(二)語文試題+答案
- 數(shù)據(jù)庫應(yīng)用技術(shù)-004-國開機(jī)考復(fù)習(xí)資料
- 測量年終工作總結(jié)
- 博士論文寫作精解
- 10年寶馬320i使用說明書
- 元旦節(jié)日快樂游戲課件
- NB/T 11431-2023土地整治煤矸石回填技術(shù)規(guī)范
- 演講與口才-形成性考核二-國開(HB)-參考資料
- 水稻種植天氣指數(shù)保險條款
- FZ∕T 12013-2014 萊賽爾纖維本色紗線
- “超級電容器”混合儲能在火電廠AGC輔助調(diào)頻中的應(yīng)用實踐分析報告-培訓(xùn)課件
評論
0/150
提交評論