計(jì)算機(jī)網(wǎng)絡(luò)自頂向下方法(第四版)ppt第3章_第1頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)自頂向下方法(第四版)ppt第3章_第2頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)自頂向下方法(第四版)ppt第3章_第3頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)自頂向下方法(第四版)ppt第3章_第4頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)自頂向下方法(第四版)ppt第3章_第5頁(yè)
已閱讀5頁(yè),還剩116頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 運(yùn)輸層1第3章 運(yùn)輸層Transport Layer 計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法 (原書(shū)第三版)陳鳴譯,機(jī)械工業(yè)出版社,2005年Computer Networking: A Top Down Approach Featuring the Internet, 3rd edition. Jim Kurose, Keith RossAddison-Wesley, July 2004. 運(yùn)輸層2第3章:運(yùn)輸層我們的目的: r理解運(yùn)輸層服務(wù)依據(jù)的原理:m復(fù)用/分解m可靠數(shù)據(jù)傳輸m流量控制m擁塞控制r學(xué)習(xí)因特網(wǎng)中的運(yùn)輸層協(xié)議:mUDP: 無(wú)連接傳輸mTCP: 面向連接傳輸mTCP 擁塞控制 運(yùn)輸層3第3

2、章 要點(diǎn)r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議r3.5 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模型 運(yùn)輸層4運(yùn)輸服務(wù)和協(xié)議r在運(yùn)行不同主機(jī)上應(yīng)用進(jìn)程之間提供邏輯通信r運(yùn)輸協(xié)議運(yùn)行在端系統(tǒng)中m發(fā)送方:將應(yīng)用報(bào)文劃分為段,傳向網(wǎng)絡(luò)層m接收方:將段重新裝配為報(bào)文,傳向應(yīng)用層r應(yīng)用可供使用的運(yùn)輸協(xié)議不止一個(gè)m因特網(wǎng):TCP和UDP應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理

3、層應(yīng)用層運(yùn)輸層網(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ù)鏈路層物理層邏輯端到端傳輸 運(yùn)輸層5運(yùn)輸層 vs. 網(wǎng)絡(luò)層r網(wǎng)絡(luò)層: 主機(jī)間的邏輯通信r運(yùn)輸層: 進(jìn)程間的邏輯通信m依賴、強(qiáng)化網(wǎng)絡(luò)層服務(wù)家庭類比:12個(gè)孩子向12個(gè)孩子發(fā)信r進(jìn)程 = 孩子r應(yīng)用報(bào)文= 信封中的信r主機(jī) = 家庭r運(yùn)輸協(xié)議 = Ann和Billr網(wǎng)絡(luò)層協(xié)議= 郵政服務(wù) 運(yùn)輸層6因特網(wǎng)運(yùn)輸層協(xié)議r可靠的、按序的交付 (TCP)m擁塞控制m流量控制m連接建立r不可靠、不按序交付: UDPm“盡力而為”IP的不提供不必要服務(wù)的擴(kuò)展r不可用的服務(wù): m時(shí)延保證m帶寬保證應(yīng)用層

4、運(yùn)輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層應(yīng)用層運(yùn)輸層網(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ù)鏈路層物理層邏輯端到端傳輸 運(yùn)輸層7第3章 要點(diǎn)r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議r3.5 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模型 運(yùn)輸層8Internet 層的復(fù)用與分解 運(yùn)輸層9復(fù)用/分解應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層

5、鏈路層物理層P1應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層鏈路層物理層應(yīng)用層運(yùn)輸層network鏈路層物理層P2P3P4P1主機(jī)1主機(jī)2主機(jī)3= 進(jìn)程= 套接字將接收到的段交付給正確的套接字在接收主機(jī)分解:從多個(gè)套接字收集數(shù)據(jù),用首部封裝數(shù)據(jù)(以后用于分解 )在發(fā)送主機(jī)復(fù)用: 運(yùn)輸層10分解工作過(guò)程r主機(jī)接收IP數(shù)據(jù)報(bào)m每個(gè)數(shù)據(jù)報(bào)有源無(wú)連接, 目的地?zé)o連接m每個(gè)數(shù)據(jù)報(bào)承載1個(gè)運(yùn)輸層段m每個(gè)段具有源、目的端口號(hào) (回想: 對(duì)特定應(yīng)用程序的周知端口號(hào))r主機(jī)使用IP地址 &端口號(hào)將段定向到適當(dāng)?shù)奶捉幼衷炊丝?#目的端口 #32 bits應(yīng)用數(shù)據(jù)(報(bào)文)其他首部字段TCP/UDP 段格式 運(yùn)輸層11無(wú)連接分解r生成

6、具有端口號(hào)的套接字:DatagramSocket mySocket1 = new DatagramSocket(99111);DatagramSocket mySocket2 = new DatagramSocket(99222);rUDP套接字由二元組標(biāo)識(shí) :r當(dāng)主機(jī)接收UDP段時(shí):m在段中檢查目的地端口號(hào)m將UDP段定向到具有該端口號(hào)的套接字r具有不同源IP地址和/或源端口號(hào)的IP數(shù)據(jù)報(bào) 定向到相同的套接字 運(yùn)輸層12無(wú)連接分解(續(xù))DatagramSocket serverSocket = new DatagramSocket(6428);客戶機(jī)IP:BP2客戶機(jī) IP: AP1P1P3

7、服務(wù)器IP: CSP: 6428DP: 9157SP: 9157DP: 6428SP: 6428DP: 5775SP: 5775DP: 6428SP提供了“返回地址” 運(yùn)輸層13面向連接分解rTCP套接字由四元組標(biāo)識(shí): m源IP地址m源端口號(hào)m目的IP地址m目的端口號(hào)r接收主機(jī)使用這四個(gè)值來(lái)將段定向到適當(dāng)?shù)奶捉幼謗服務(wù)器主機(jī)可能支持許多并行的TCP套接字:m每個(gè)套接字由其自己的四元組標(biāo)識(shí)rWeb服務(wù)器對(duì)每個(gè)連接的客戶機(jī)具有不同的套接字m非持久HTTP將為每個(gè)請(qǐng)求具有不同的套接字 運(yùn)輸層14面向連接分解 (續(xù))客戶機(jī)IP:BP1客戶機(jī) IP: AP1P2P4服務(wù)器IP: CSP: 9157DP:

8、 80SP: 9157DP: 80P5P6P3D-IP:CS-IP: AD-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B 運(yùn)輸層15面向連接分解: 多線程Web服務(wù)器客戶機(jī)IP:BP1客戶機(jī) IP: AP1P2服務(wù)器IP: CSP: 9157DP: 80SP: 9157DP: 80P4P3D-IP:CS-IP: AD-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B 運(yùn)輸層16第3章 要點(diǎn)r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議r3.5

9、 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模型 運(yùn)輸層17UDP: 用戶數(shù)據(jù)報(bào)協(xié)議 RFC 768r“沒(méi)有不必要的,” “基本要素” 互聯(lián)網(wǎng)傳輸協(xié)議r“盡力而為”服務(wù),UDP段可能:m丟包m對(duì)應(yīng)用程序交付失序r無(wú)連接:m在UDP發(fā)送方和接收方之間無(wú)握手m每個(gè)UDP段的處理獨(dú)立于其他段為何要有 UDP協(xié)議?r無(wú)連接創(chuàng)建(它將增加時(shí)延)r簡(jiǎn)單:在發(fā)送方、接收方無(wú)連接狀態(tài)r段首部小r無(wú)擁塞控制: UDP能夠盡可能快地傳輸 運(yùn)輸層18UDP: 其他r常用于流式多媒體應(yīng)用m丟包容忍m速率

10、敏感r其他UDP應(yīng)用mDNSmSNMPr經(jīng)UDP的可靠傳輸 : 在應(yīng)用層增加可靠性m應(yīng)用程序特定的差錯(cuò)恢復(fù)!源端口#目的端口#32 bits應(yīng)用數(shù)據(jù)(報(bào)文)UDP 段格式長(zhǎng)度檢查和UDP段的長(zhǎng)度,包括首部,以字節(jié)計(jì) 運(yùn)輸層19UDP檢查和發(fā)送方:r將段內(nèi)容處理為16比特整數(shù)序列r檢查和: 段內(nèi)容的加法(反碼和)r發(fā)送方將檢查和放入U(xiǎn)DP檢查和字段接收方:r計(jì)算接收的段的檢查和r核對(duì)計(jì)算的檢查和是否等于檢查和字段的值:mNO 檢測(cè)到差錯(cuò)mYES 無(wú)差錯(cuò)檢測(cè)到。雖然如此,還可能有差錯(cuò)嗎?詳情見(jiàn)后目的: 在傳輸?shù)亩沃袡z測(cè)“差錯(cuò)” (如比特翻轉(zhuǎn)) 運(yùn)輸層20互聯(lián)網(wǎng)檢查和例子r注意m當(dāng)數(shù)字作加法時(shí),最高

11、位進(jìn)比特位的進(jìn)位需要加到結(jié)果中r例子: 兩個(gè)16-bit整數(shù)相加1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 11 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 11 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 01 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1回卷 和檢查和 運(yùn)輸層21第3章 要點(diǎn)r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議r3.5 面向連接的傳輸:

12、TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模型 運(yùn)輸層22可靠數(shù)據(jù)傳輸?shù)脑瓌tr在應(yīng)用層、運(yùn)輸層、數(shù)據(jù)鏈路層的重要性m重要的網(wǎng)絡(luò)主題中的最重要的10個(gè)之一!r不可靠信道的特點(diǎn)決定了可靠數(shù)據(jù)傳輸 協(xié)議 (rdt) 的復(fù)雜性 運(yùn)輸層23可靠數(shù)據(jù)傳輸: 基本概念發(fā)送側(cè)接收側(cè)rdt_send(): called from above, (e.g., by app.). Passed data to deliver to receiver upper layerudt_send(): called by rd

13、t,to transfer packet over unreliable channel to receiverrdt_rcv(): called when packet arrives on rcv-side of channeldeliver_data(): called by rdt to deliver data to upper 運(yùn)輸層24可靠數(shù)據(jù)傳輸: 基本概念我們將:r增強(qiáng)研發(fā)發(fā)送方,可靠數(shù)據(jù)傳輸協(xié)議 (rdt) 的接收方側(cè)m僅考慮單向數(shù)據(jù)傳輸m但控制信息將在兩個(gè)方向流動(dòng)!r使用有限狀態(tài)機(jī) (FSM)來(lái)定義發(fā)送方和接收方狀態(tài)1狀態(tài)2引起狀態(tài)變遷的事件狀態(tài)變遷所采取的行動(dòng)狀態(tài): 當(dāng)

14、位于這個(gè)“狀態(tài)時(shí)”,下個(gè)狀態(tài)惟一地由下個(gè)事件決定事件動(dòng)作 運(yùn)輸層25第3章 要點(diǎn)r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議r3.5 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模型 運(yùn)輸層26Rdt1.0: 經(jīng)可靠信道的可靠傳輸r底層信道非??煽縨無(wú)比特差錯(cuò)m無(wú)分組丟失r裝發(fā)送方、接收方的單獨(dú)FSM:m發(fā)送方將數(shù)據(jù)發(fā)向底層信道m(xù)接收方從底層信道讀取數(shù)據(jù)Wait for call fro

15、m abovepacket = make_pkt(data)udt_send(packet)rdt_send(data)extract (packet,data)deliver_data(data)Wait for call from belowrdt_rcv(packet)發(fā)送方接收方 運(yùn)輸層27第3章 要點(diǎn)r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議r3.5 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量

16、mTCP公平性m時(shí)延模型 運(yùn)輸層28Rdt2.0: 具有比特差錯(cuò)的信道runderlying channel may flip bits in packetmchecksum to detect bit errorsrthe question: how to recover from errors:macknowledgements (ACKs): receiver explicitly tells sender that pkt received OKmnegative acknowledgements (NAKs): receiver explicitly tells sender tha

17、t pkt had errorsmsender retransmits pkt on receipt of NAKrnew mechanisms in rdt2.0 (beyond rdt1.0):merror detectionmreceiver feedback: control msgs (ACK,NAK) rcvr-sender 運(yùn)輸層29rdt2.0: FSM規(guī)格參數(shù) 等待來(lái)自上面的調(diào)用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)

18、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 等待來(lái)自下面的調(diào)用發(fā)送方接收方rdt_send(data)L 運(yùn)輸層30rdt2.0: 無(wú)差錯(cuò)時(shí)的操作 等待來(lái)自上面的調(diào)用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)ex

19、tract(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 等待來(lái)自下面的調(diào)用rdt_send(data)L 運(yùn)輸層31rdt2.0: 有差錯(cuò)時(shí)的情況 等待來(lái)自上面的調(diào)用snkpkt

20、= 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 等待來(lái)自下面的調(diào)用rdt_send(da

21、ta)L 運(yùn)輸層32rdt2.0有重大的缺陷!如果ACK/NAK受損,將會(huì)出現(xiàn)何種情況?r發(fā)送方不知道在接收方會(huì)發(fā)生什么情況!r不能只是重傳:可能導(dǎo)致冗余處理冗余: r發(fā)送方對(duì)每個(gè)分組增加序列號(hào)r如果ACK/NAK受損,發(fā)送方重傳當(dāng)前的分組r接收方丟棄(不再向上交付)冗余分組發(fā)送方發(fā)送一個(gè)分組,然后等待接收方響應(yīng)停止等待 運(yùn)輸層33rdt2.1: 發(fā)送方, 處理受損的ACK/NAK等待來(lái)自上面的調(diào)用0sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)rdt_send(data)等待 ACK 或 NAK 0udt_send(sndpkt)rd

22、t_rcv(rcvpkt) & ( corrupt(rcvpkt) |isNAK(rcvpkt) )sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt) udt_send(sndpkt)rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isNAK(rcvpkt) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) &

23、isACK(rcvpkt) 等待來(lái)自上面的調(diào)用1等待 ACK 或NAK 1LL 運(yùn)輸層34rdt2.1: 接收方,處理受損的ACK/NAK等待來(lái)自下面的調(diào)用0sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)rdt_rcv(rcvpkt) & not corrupt(rcvpkt) & has_seq0(rcvpkt)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt =

24、make_pkt(ACK, chksum)udt_send(sndpkt)等待來(lái)自上面的調(diào)用1rdt_rcv(rcvpkt) & notcorrupt(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) &

25、 not 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) 運(yùn)輸層35rdt2.1: 討論發(fā)送方:r序號(hào)seq # 加入分組中r兩個(gè)序號(hào)seq. #s (0,1) 將夠用. ( 為什么?)r必須檢查是否收到的ACK/NAK受損 r狀態(tài)增加一倍m狀態(tài)必須“記住”是否“當(dāng)前的”分組具有0或1序號(hào)接收方:r必須檢查是

26、否接收到的分組是冗余的m狀態(tài)指示是否0或1是所期待的分組序號(hào)seq #r注意: 接收方不能知道是否它的最后的ACK/NAK在發(fā)送方已經(jīng)接收OK 運(yùn)輸層36rdt2.2: 一種無(wú)NAK的協(xié)議r與rdt2.1一樣的功能,僅使用ACKr代替NAK,接收方對(duì)最后正確接收的分組發(fā)送ACKm接收方必須明確地包括被確認(rèn)分組的序號(hào)r在發(fā)送方冗余的ACK導(dǎo)致如同NAK相同的動(dòng)作:重傳當(dāng)前分組 運(yùn)輸層37rdt2.2: 發(fā)送方, 接收方片段等待來(lái)自上面的調(diào)用0sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)rdt_send(data)udt_send(snd

27、pkt)rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) | isACK(rcvpkt,1) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,0) 等待ACK0發(fā)送方FSM片段等待來(lái)自下面的調(diào)用0rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt)r

28、dt_rcv(rcvpkt) & (corrupt(rcvpkt) | has_seq1(rcvpkt)udt_send(sndpkt)接收方FSM片段L 運(yùn)輸層38第3章 要點(diǎn)r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議r3.5 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模型 運(yùn)輸層39rdt3.0: 具有差錯(cuò)和丟包的信道新假設(shè): 下面的信道也能丟失分組(數(shù)據(jù)或ACK)m檢查

29、和、序號(hào)、重傳將是有幫助的,但不充分方法: 發(fā)送方等待ACK一段“合理的”時(shí)間r如在這段時(shí)間沒(méi)有收到ACK則重傳r如果分組(或ACK)只是延遲(沒(méi)有丟失):m重傳將是冗余的,但序號(hào)的使用已經(jīng)處理了該情況m接收方必須定義被確認(rèn)的分組序號(hào)r需要倒計(jì)時(shí)定時(shí)器 運(yùn)輸層40rdt3.0發(fā)送方sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_timerrdt_send(data)等待 ACK0rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isACK(rcvpkt,1) )等待來(lái)自上面的調(diào)用1sndpkt

30、= make_pkt(1, data, checksum)udt_send(sndpkt)start_timerrdt_send(data)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,0) rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isACK(rcvpkt,0) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,1) stop_timerstop_timerudt_send(sndpkt)start_time

31、rtimeoutudt_send(sndpkt)start_timertimeoutrdt_rcv(rcvpkt) 等待來(lái)自上面的調(diào)用0等待 ACK1Lrdt_rcv(rcvpkt)LLL 運(yùn)輸層41rdt3.0 運(yùn)行情況無(wú)丟包時(shí)的運(yùn)行 分組丟失發(fā)送方發(fā)送方接收方接收方 運(yùn)輸層42rdt3.0運(yùn)行情況ACK丟失 過(guò)早超時(shí) 發(fā)送方發(fā)送方接收方接收方 運(yùn)輸層43rdt3.0的性能rrdt3.0能夠工作,但性能不太好r例子: 1 Gbps鏈路, 15 ms端到端傳播時(shí)延, 1KB分組:Ttransmit=8kb/pkt10*9 b/sec= 8 microsecmU sender: 利用率 發(fā)送方用

32、于發(fā)送時(shí)間的比率m每30 msec 1KB 分組 - 經(jīng)1 Gbps 鏈路有33kB/sec 吞吐量m網(wǎng)絡(luò)協(xié)議限制了物理資源的使用! U sender = .008 30.008 = 0.00027 L / R RTT + L / R = L (packet length in bits)R (transmission rate, bps)= 運(yùn)輸層44rdt3.0: 停等協(xié)議的運(yùn)行傳輸分組的第一個(gè)比特, t = 0發(fā)送方接收方RTT 傳輸分組的最后一個(gè)比特, t = L / R分組第一個(gè)比特到達(dá)傳輸最后一個(gè)比特到達(dá),發(fā)送ACKACK 到達(dá),發(fā)送下一個(gè)分組, t = RTT + L / R U

33、 sender = .008 30.008 = 0.00027 L / R RTT + L / R = 運(yùn)輸層45第3章 要點(diǎn)r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議r3.5 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模型 運(yùn)輸層46流水線協(xié)議流水線: 發(fā)送方允許發(fā)送多個(gè)、“傳輸中的”,還沒(méi)有應(yīng)答的報(bào)文段m序號(hào)的范圍必須增加m發(fā)送方和/或接收方設(shè)有緩沖r流水線協(xié)議的兩種形式: 回退

34、回退N幀法(幀法(go-Back-N), 選擇性重傳(選擇性重傳(S-R), 運(yùn)輸層47流水線協(xié)議: 增加利用率傳輸?shù)谝粋€(gè)分組比特傳輸?shù)谝粋€(gè)分組比特, t = 0發(fā)送者接收者RTT 傳輸最后一個(gè)比特傳輸最后一個(gè)比特, t = L / R第一個(gè)分組比特到達(dá)第一個(gè)分組比特到達(dá)分組最后一個(gè)比特到達(dá)分組最后一個(gè)比特到達(dá),發(fā)送發(fā)送 ACKACK 到達(dá)到達(dá), 發(fā)送下一個(gè)分組發(fā)送下一個(gè)分組, t = RTT + L / R第二個(gè)分組最后比特到達(dá)第二個(gè)分組最后比特到達(dá),發(fā)送發(fā)送ACK第三個(gè)分組最后比特到達(dá)第三個(gè)分組最后比特到達(dá),發(fā)送發(fā)送ACK U sender = .024 30.008 = 0.0008 m

35、icroseconds 3 * L / R RTT + L / R = 利用率增加利用率增加3倍倍! 運(yùn)輸層48Go-Back-N發(fā)送方發(fā)送方:r在分組首部需要K比特序號(hào),2k=Nr“窗口”最大為N, 允許N個(gè)連續(xù)的沒(méi)有應(yīng)答分組rACK(n): 確認(rèn)所有的(包括序號(hào)n)的分組 - “累計(jì)ACK”m可能收到重復(fù)的ACKs (見(jiàn)接收方)r對(duì)每個(gè)傳輸中的分組的用同一個(gè)計(jì)時(shí)器rtimeout(n):若超時(shí),重傳窗口中的分組n及所有更高序號(hào)的分組 運(yùn)輸層49GBN: 發(fā)送方擴(kuò)展的 FSM等待等待start_timerudt_send(sndpktbase)udt_send(sndpktbase+1)ud

36、t_send(sndpktnextseqnum-1)超時(shí)rdt_send(data) if (nextseqnum 沒(méi)有接收緩沖區(qū)!m重新確認(rèn)具有按序的分組Waitudt_send(sndpkt)defaultrdt_rcv(rcvpkt) & notcurrupt(rcvpkt) & hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum+ex

37、pectedseqnum=1sndpkt = make_pkt(expectedseqnum,ACK,chksum)L等等待待 運(yùn)輸層51GBN 操作發(fā)送方接收方 運(yùn)輸層52選擇性重傳(Selective Repeat)GBN改善了信道效率,但仍然有不必要重傳問(wèn)題r接收方分別確認(rèn)所有正確接收的報(bào)文段m需要緩存分組, 以便最后按序交付給給上層r發(fā)送方只需要重傳沒(méi)有收到ACK的分組m發(fā)送方定時(shí)器對(duì)每個(gè)沒(méi)有確認(rèn)的分組計(jì)時(shí)r發(fā)送窗口mN個(gè)連續(xù)的序號(hào)m也需要限制已發(fā)送但尚未應(yīng)答分組的序號(hào) 運(yùn)輸層53選擇性重傳: 發(fā)送方, 接收方窗口a. 發(fā)送方看到的序號(hào)b. 接收方看到的序號(hào)已經(jīng)確認(rèn)可用,還未發(fā)送發(fā)送,

38、還未確認(rèn)不可用可接受(窗口內(nèi)) 失序(已緩存)但未被確認(rèn) 可接受(窗口內(nèi))期待,還未收到 不可用 窗口長(zhǎng)度N窗口長(zhǎng)度N 運(yùn)輸層54選擇性重傳上層傳來(lái)數(shù)據(jù)上層傳來(lái)數(shù)據(jù) :r如果窗口中下一個(gè)序號(hào)可用, 發(fā)送報(bào)文段timeout(n):r重傳分組n, 重啟其計(jì)時(shí)器ACK(n) 在在sendbase,sendbase+N:r標(biāo)記分組 n 已經(jīng)收到r如果n 是最小未收到應(yīng)答的分組,向前滑動(dòng)窗口base指針到下一個(gè)未確認(rèn)序號(hào)發(fā)送方分組分組n在在 rcvbase, rcvbase+N-1r發(fā)送 ACK(n)r失序: 緩存r按序: 交付 (也交付所有緩存的按序分組),向前滑動(dòng)窗口到下一個(gè)未收到報(bào)文段的序號(hào)分組

39、分組n在在rcvbase-N,rcvbase-1rACK(n)其他其他: r忽略 接收方 運(yùn)輸層55選擇重傳的操作 運(yùn)輸層56選擇重傳: 困難的問(wèn)題例子:r序號(hào): 0, 1, 2, 3r窗口長(zhǎng)度 = 3r接收方:在(a)和(b)兩種情況下接收方?jīng)]有發(fā)現(xiàn)差別!r在 (a)中不正確地將新的冗余的當(dāng)為新的,而在(b)中不正確地將新的當(dāng)作冗余的問(wèn)題: 序號(hào)長(zhǎng)度與窗口長(zhǎng)度有什么關(guān)系?回答:窗口長(zhǎng)度小于等于序號(hào)空間的一半 運(yùn)輸層57可靠數(shù)據(jù)傳輸機(jī)制及用途總結(jié)機(jī)制用途和說(shuō)明檢驗(yàn)和用于檢測(cè)在一個(gè)傳輸分組中的比特錯(cuò)誤。定時(shí)器用于檢測(cè)超時(shí)/重傳一個(gè)分組,可能因?yàn)樵摲纸M(或其ACK)在信道中丟失了。由于當(dāng)一個(gè)分組被

40、時(shí)延但未丟失(過(guò)早超時(shí)),或當(dāng)一個(gè)分組已被接收方收到但從接收方到發(fā)送方的ACK丟失時(shí),可能產(chǎn)生超時(shí)事件,所以接收方可能會(huì)收到一個(gè)分組的多個(gè)冗余拷貝。序號(hào)用于為從發(fā)送方流向接收方的數(shù)據(jù)分組按順序編號(hào)。所接收分組的序號(hào)間的空隙可使該接收方檢測(cè)出丟失的分組。具有相同序號(hào)的分組可使接收方檢測(cè)出一個(gè)分組的冗余拷貝。確認(rèn)接收方用于告訴發(fā)送方一個(gè)分組或一組分組已被正確地接收到了。確認(rèn)報(bào)文通常攜帶著被確認(rèn)的分組或多個(gè)分組的序號(hào)。確認(rèn)可以是逐個(gè)的或累積的,這取決于協(xié)議。否定確認(rèn)接收方用于告訴發(fā)送方某個(gè)分組未被正確地接收。否定確認(rèn)報(bào)文通常攜帶著未被正確接收的分組的序號(hào)。窗口、流水線發(fā)送方也許被限制僅發(fā)送那些序號(hào)落

41、在一個(gè)指定范圍內(nèi)的分組。通過(guò)允許一次發(fā)送多個(gè)分組但未被確認(rèn),發(fā)送方的利用率可在停等操作模式的基礎(chǔ)上得到增加。我們很快將會(huì)看到,窗口長(zhǎng)度可根據(jù)接收方接收和緩存報(bào)文的能力或網(wǎng)絡(luò)中的擁塞程度,或兩者情況來(lái)進(jìn)行設(shè)置。 運(yùn)輸層58第3章 要點(diǎn)r3.5 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模型r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議 運(yùn)輸層59TCP概述 RFCs: 793, 1122,

42、 1323, 2018, 2581r全雙工數(shù)據(jù)全雙工數(shù)據(jù):m同一連接上的雙向數(shù)據(jù)流mMSS: 最大報(bào)文段長(zhǎng)度mMTU:最大傳輸單元r面向連接面向連接: m在進(jìn)行數(shù)據(jù)交換前,初始化發(fā)送方與接收方狀態(tài),進(jìn)行握手(交換控制信息),r流量控制流量控制:m發(fā)送方不能淹沒(méi)接收方r擁塞控制擁塞控制:m抑止發(fā)送方速率來(lái)防止過(guò)分占用網(wǎng)絡(luò)資源r點(diǎn)到點(diǎn)點(diǎn)到點(diǎn):m一個(gè)發(fā)送方, 一個(gè)接收方m連接狀態(tài)與端系統(tǒng)有關(guān),不為路由器所知 r可靠、有序的字節(jié)流可靠、有序的字節(jié)流:m沒(méi)有 “報(bào)文邊界”r流水線流水線:mTCP擁塞和流量控制設(shè)置滑動(dòng)窗口協(xié)議r發(fā)送和接收緩沖區(qū)發(fā)送和接收緩沖區(qū)socketdoorTCPsend buffe

43、rTCPreceive buffersocketdoorsegmentapplicationwrites dataapplicationreads data 運(yùn)輸層60TCP 報(bào)文段結(jié)構(gòu)源端口 #目的端口 #32 bits應(yīng)用層數(shù)據(jù) (變長(zhǎng))序號(hào)確認(rèn)號(hào)接收窗口緊急數(shù)據(jù)指針檢查和FSRPAU首部長(zhǎng)度未用選項(xiàng) (變長(zhǎng))URG: 緊急數(shù)據(jù) (一般不用)ACK: ACK 序號(hào)有效PSH: 立即提交數(shù)據(jù)(一般不用)RST, SYN, FIN:連接建立(建立和拆連)接收方允許的字節(jié)數(shù)對(duì)數(shù)據(jù)字節(jié)計(jì)數(shù)(并非對(duì)報(bào)文段計(jì)數(shù)!)因特網(wǎng)檢查和(同 UDP一樣) 運(yùn)輸層61TCP序號(hào)和確認(rèn)號(hào)序號(hào)序號(hào):m報(bào)文段中第1個(gè)數(shù)

44、據(jù)字節(jié)在字節(jié)流中的位置編號(hào)確認(rèn)號(hào)確認(rèn)號(hào):m期望從對(duì)方收到下一個(gè)字節(jié)的序號(hào)m累計(jì)應(yīng)答問(wèn)題:接收方如何處理失序報(bào)文段?回答:TCP規(guī)范沒(méi)有說(shuō)明, 由實(shí)現(xiàn)者自行選擇實(shí)現(xiàn): 拋棄/緩存 主機(jī)主機(jī) A主機(jī)主機(jī) BSeq=42, ACK=79, data = CSeq=79, ACK=43, data = CSeq=43, ACK=80用戶鍵入C主機(jī)對(duì)接收到的C回顯給出確認(rèn)主機(jī)對(duì)收到的C給出確認(rèn), 回顯 C時(shí)間時(shí)間簡(jiǎn)單的telnet情況捎帶確認(rèn)捎帶確認(rèn) 運(yùn)輸層62TCP往返時(shí)延(RTT)的估計(jì)與超時(shí)問(wèn)題: 如何設(shè)置TCP 超時(shí)值?r應(yīng)大于RTTm但RTT是變化的r太短: 過(guò)早超時(shí)m不必要的重傳r太長(zhǎng): 對(duì)

45、報(bào)文段的丟失響應(yīng)太慢問(wèn)題: 如何估計(jì)RTT?rSampleRTT: 從發(fā)送報(bào)文段到接收到ACK的測(cè)量時(shí)間m忽略重傳rSampleRTT會(huì)變化,希望估計(jì)的RTT“較平滑”m平均最近的測(cè)量值,并不僅僅是當(dāng)前SampleRTT 運(yùn)輸層63EstimatedRTT = (1- )*EstimatedRTT + *SampleRTTr指數(shù)加權(quán)移動(dòng)平均(Exponential weighted moving average)r過(guò)去的樣本指數(shù)級(jí)衰減來(lái)產(chǎn)生影響r典型值: = 0.125TCP往返時(shí)延估計(jì)與超時(shí) (續(xù)) 運(yùn)輸層64RTT估計(jì)的例子 運(yùn)輸層65TCP往返時(shí)延估計(jì)與超時(shí) (續(xù))設(shè)置超時(shí)間隔設(shè)置超時(shí)間

46、隔rEstimtedRTT 加 “安全余量”mEstimatedRTT大變化- 更大的安全余量r首先估算EstimatedRTT與SampleRTT之間差值有多大 : TimeoutInterval = EstimatedRTT + 4*DevRTTDevRTT = (1- )*DevRTT + *|SampleRTT-EstimatedRTT|(典型地, = 0.25) 然后估算超時(shí)值然后估算超時(shí)值: 運(yùn)輸層66第3章 要點(diǎn)r3.5 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模

47、型r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議 運(yùn)輸層67TCP 可靠數(shù)據(jù)傳輸rTCP在IP不可靠服務(wù)的基礎(chǔ)上創(chuàng)建可靠數(shù)據(jù)傳輸服務(wù)r流水線發(fā)送報(bào)文段r累計(jì)確認(rèn)rTCP使用單個(gè)重傳計(jì)時(shí)器r重傳被下列事件觸發(fā):m超時(shí)事件m重復(fù)ACKr先考慮簡(jiǎn)化的TCP發(fā)送方:m 忽略重復(fù)ACKm 忽略流量控制,擁塞控制 運(yùn)輸層68TCP 發(fā)送方事件1.從應(yīng)用層接收數(shù)據(jù):r根據(jù)序號(hào)創(chuàng)建報(bào)文段r序號(hào)是報(bào)文段中第一個(gè)數(shù)據(jù)字節(jié)的數(shù)據(jù)流編號(hào)r如果未啟動(dòng),啟動(dòng)計(jì)時(shí)器 (考慮計(jì)時(shí)器用于最早的沒(méi)有確認(rèn)的報(bào)文段)r超時(shí)間隔: TimeO

48、utInterval= EstimatedRTT + 4*DevRTT2.超時(shí):r重傳導(dǎo)致超時(shí)的報(bào)文段r重新啟動(dòng)計(jì)時(shí)器3.收到確認(rèn):r如果確認(rèn)了先前未被確認(rèn)的報(bào)文段 r更新被確認(rèn)的報(bào)文段序號(hào)r如果還有未被確認(rèn)的報(bào)文段,重新啟動(dòng)計(jì)時(shí)器 運(yùn)輸層69TCP 發(fā)送方(簡(jiǎn)化的) NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) switch(event) event: data received from application above create TCP segment with sequence number

49、NextSeqNum if (timer currently not running) start timer pass segment to IP NextSeqNum = NextSeqNum + length(data) event: timer timeout retransmit not-yet-acknowledged segment with smallest sequence number y start timer event: ACK received, with ACK field value of y if (y SendBase) /* 累計(jì)確認(rèn)到Y(jié) */ SendB

50、ase = y if (there are currently not-yet-acknowledged segments) start timer /* end of loop forever */ 注釋: SendBase-1: 上次累計(jì)的已確認(rèn)字節(jié)例如: SendBase-1 = 71;y= 73, 因此接收方期待73+ ;y SendBase, 因此新數(shù)據(jù)被確認(rèn) 運(yùn)輸層70TCP: 重傳的情況主機(jī) ASeq=100, 20 bytes dataACK=100時(shí)間過(guò)早超時(shí)的情況主機(jī) BSeq=92, 8 bytes dataACK=120Seq=92, 8 bytes dataSeq=9

51、2 超時(shí)ACK=120主機(jī) ASeq=92, 8 bytes dataACK=100loss超時(shí)丟失確認(rèn)的情況主機(jī) BXSeq=92, 8 bytes dataACK=100時(shí)間Seq=92 超時(shí)SendBase= 100SendBase= 120SendBase= 120Sendbase= 100 運(yùn)輸層71TCP 重傳情況(續(xù))主機(jī) ASeq=92, 8 bytes dataACK=100丟包超時(shí)累計(jì)確認(rèn)情況主機(jī) BXSeq=100, 20 bytes dataACK=120時(shí)間SendBase= 120 運(yùn)輸層72TCP ACK 產(chǎn)生 RFC 1122, RFC 2581接收方事件接收方

52、事件所期望序號(hào)的報(bào)文段按序到達(dá)。所有在期望序號(hào)及以前的數(shù)據(jù)都已經(jīng)被確認(rèn) 有期望序號(hào)的報(bào)文段按序到達(dá)。另一個(gè)按序報(bào)文段等待發(fā)送ACK 比期望序號(hào)大的失序報(bào)文段到達(dá),檢測(cè)出數(shù)據(jù)流中的間隔。 部分或者完全填充已接收到數(shù)據(jù)間隔的報(bào)文段到達(dá)TCP 接收方行為接收方行為延遲的ACK。對(duì)另一個(gè)按序報(bào)文段的到達(dá)最多等待500 ms。如果下一個(gè)按序報(bào)文段在這個(gè)時(shí)間間隔內(nèi)沒(méi)有到達(dá),則發(fā)送一個(gè)ACK 立即發(fā)送單個(gè)累積ACK,以確認(rèn)兩個(gè)按序報(bào)文段 立即發(fā)送冗余ACK,指明下一個(gè)期待字節(jié)的序號(hào)(也就是間隔的低端字節(jié)序號(hào)) 倘若該報(bào)文段起始于間隔的低端,則立即發(fā)送ACK 運(yùn)輸層73快速重傳r超時(shí)間隔常常相對(duì)較長(zhǎng):m重傳丟

53、失報(bào)文段以前有長(zhǎng)時(shí)延r通過(guò)冗余ACK,檢測(cè)丟失的報(bào)文段m發(fā)送方經(jīng)常一個(gè)接一個(gè)的發(fā)送報(bào)文段m如果報(bào)文段丟失,將會(huì)收到很多重復(fù)ACKr如果對(duì)相同數(shù)據(jù),發(fā)送方收到3個(gè)ACK, 假定被確認(rèn)的報(bào)文段以后的報(bào)文段丟失了:m快速重傳: 在定時(shí)器超時(shí)之前重傳 運(yùn)輸層74 事件: 收到ACK, ACK 域的值為 y if (y SendBase) SendBase = y if (當(dāng)前還有沒(méi)有確認(rèn)的報(bào)文段) 啟動(dòng)定時(shí)器 else 值為 y的重復(fù)確認(rèn)的次數(shù)加1 if (值為 y的重復(fù)確認(rèn)的計(jì)數(shù)= 3) 重傳序號(hào)位y的報(bào)文段 快速重傳算法:對(duì)已經(jīng)確認(rèn)的報(bào)文段收到一個(gè)重復(fù)ACK快速重傳 運(yùn)輸層75第3章 要點(diǎn)r3.5

54、 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模型r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議 運(yùn)輸層76TCP 流量控制rTCP連接的接收方有1個(gè)接收緩沖區(qū):r匹配速度服務(wù): 發(fā)送速率需要匹配接收方應(yīng)用程序的提取速率r應(yīng)用進(jìn)程可能從接收緩沖區(qū)讀數(shù)據(jù)緩慢發(fā)送方不能發(fā)送太多、太快的數(shù)據(jù)讓接收方緩沖區(qū)溢出流量控制流量控制 運(yùn)輸層77TCP流控: 工作原理(假設(shè) TCP 接收方丟棄失序的報(bào)文段

55、)r緩沖區(qū)的剩余空間= RcvWindow= RcvBuffer-LastByteRcvd - LastByteReadr接收方在報(bào)文段接收窗口字段中通告其接收緩沖區(qū)的剩余空間r發(fā)送方要限制未確認(rèn)的數(shù)據(jù)不超過(guò)RcvWindowLastByteSent-LastByteAcked linlout擁塞的擁塞的“代價(jià)代價(jià)”: r比額定的“吞吐量”做更多的工作 (重傳)r不必要重傳: 鏈路承載分組的多個(gè)拷貝 運(yùn)輸層89擁塞的原因與開(kāi)銷: 情況3 r四個(gè)發(fā)送者r多跳路徑r超時(shí)/重傳lin問(wèn)題: 隨著 和 的增加將發(fā)生什么情況 ?lin有限的共享式輸出鏈路緩存 主機(jī) Alin 原始數(shù)據(jù)主機(jī) Bloutli

56、n : 原始數(shù)據(jù), 重傳數(shù)據(jù) 運(yùn)輸層90擁塞的原因與開(kāi)銷: 情況3 (續(xù)) 另一個(gè)擁塞的“開(kāi)銷”: r當(dāng)分組丟失時(shí), 任何用于傳輸該分組的上游傳輸能力都被浪費(fèi)!Host AHost Blout 運(yùn)輸層91擁塞控制方法端到端的擁塞控制:r不能從網(wǎng)絡(luò)得到明確的反饋r從端系統(tǒng)根據(jù)觀察到的時(shí)延和丟失現(xiàn)象推斷出擁塞r這是TCP所采用的方法網(wǎng)絡(luò)輔助的擁塞控制:r路由器為端系統(tǒng)提供反饋m一個(gè)bit指示一條鏈路出現(xiàn)擁塞(SNA,DECnet,TCP/IP ECN, ATM)m指示發(fā)送方按照一定速率發(fā)送控制擁塞的兩類方法控制擁塞的兩類方法: 運(yùn)輸層92案例研究: ATM ABR 擁塞控制ABR: 可用比特率:r

57、“彈性服務(wù)” r如果發(fā)送方的路徑 “欠載”: m發(fā)送方應(yīng)該使用可用的帶寬r如果發(fā)送方的路徑擁塞: m發(fā)送方被抑制到最小的保證速率RM (資源管理) 信元:r發(fā)送方發(fā)送RM 信元, 散布在數(shù)據(jù)信元中r由交換機(jī)設(shè)置 RM 信元中的特定比特(“網(wǎng)絡(luò)輔助”) mNI bit: 速率無(wú)增長(zhǎng) (輕度擁塞)mCI bit: 擁塞指示r接收方向發(fā)送方返回RM 信元 運(yùn)輸層93rRM信元中的兩字節(jié) ER (明確速率)字段m擁塞的交換機(jī)會(huì)降低RM信元中的ER 值為m發(fā)送方以路徑上所有交換機(jī)的最小支持速率發(fā)送r數(shù)據(jù)信元中的EFCI bit : 被擁塞的交換機(jī)設(shè)置為1 m如果比RM信元先到達(dá)的數(shù)據(jù)信元的EFCI位為1

58、,接收方將在返回的RM信元的CI位置1案例研究: ATM ABR擁塞控制 運(yùn)輸層94第3章 要點(diǎn)r3.5 面向連接的傳輸: TCPm報(bào)文段結(jié)構(gòu)m可靠數(shù)據(jù)傳輸m流量控制m連接管理r3.6 擁塞控制的原則r3.7 TCP擁塞控制m機(jī)制mTCP吞吐量mTCP公平性m時(shí)延模型r3.1 運(yùn)輸層服務(wù)r3.2 復(fù)用與分解r3.3 無(wú)連接傳輸: UDPr3.4 可靠數(shù)據(jù)傳輸?shù)脑瓌tmrdt1mrdt2mrdt3m流水線協(xié)議 運(yùn)輸層95TCP 擁塞控制r端到端控制 (沒(méi)有網(wǎng)絡(luò)輔助)r發(fā)送方限制傳輸: LastByteSent-LastByteAcked CongWinr粗略地,r擁塞窗口是動(dòng)態(tài)的, 具有感知到的網(wǎng)

59、絡(luò)擁塞的函數(shù)發(fā)送方如何感知網(wǎng)絡(luò)擁塞?r丟失事件 = 超時(shí)或者 3個(gè)重復(fù)ACKr發(fā)生丟失事件后,TCP發(fā)送方降低速率(擁塞窗口)三個(gè)機(jī)制:速率 = CongWin RTT Bytes/sec 運(yùn)輸層96TCP加增倍減 AIMD乘性減乘性減: 丟包事件后,擁塞窗口值減半加性增加性增: 如沒(méi)有檢測(cè)到丟包事件,每個(gè)RTT時(shí)間擁塞窗口值增加一個(gè)MSS (最大報(bào)文段長(zhǎng)度)長(zhǎng)生命周期TCP連接 運(yùn)輸層97TCP慢啟動(dòng)r在連接開(kāi)始時(shí), 擁塞窗口值 = 1 MSSm例如: MSS= 500 bytes & RTT = 200 msecm初始化速率 = 20 kbpsr可獲得帶寬可能 MSS/RTTm希望

60、盡快達(dá)到期待的速率r當(dāng)連接開(kāi)始,以指數(shù)快地增加速率,直到第一個(gè)丟失事件發(fā)生 運(yùn)輸層98TCP 慢啟動(dòng)(續(xù))r當(dāng)連接開(kāi)始的時(shí)候,速率呈指數(shù)式上升,直到第1次報(bào)文丟失事件發(fā)生為止:m每RTT倍增擁塞窗口值m每收到ACK,增加擁塞窗口r總結(jié): 初始速率很低,但以指數(shù)快地增加主機(jī)A一個(gè)報(bào)文段RTT主機(jī)B時(shí)間兩個(gè)報(bào)文段四個(gè)報(bào)文段 運(yùn)輸層99改進(jìn)r收到3個(gè)冗余確認(rèn)后:mCongWin減半m窗口再線性增加r但是超時(shí)事件以后:mCongWin值設(shè)置為1 MSSm窗口再指數(shù)增長(zhǎng)m到達(dá)一個(gè)閾值 (Threshold) 后,再線性增長(zhǎng) 3個(gè)冗余ACK指示網(wǎng)絡(luò)還具有某些傳送報(bào)文段的能力 3個(gè)冗余ACK以前的超時(shí),則更為 “嚴(yán)重”基本思想基本思想: 運(yùn)輸層100改進(jìn) (續(xù))實(shí)現(xiàn)方法實(shí)現(xiàn)方法:r設(shè)置一個(gè)變的閾值Threshold r在丟包事件發(fā)生時(shí),閾值Threshold設(shè)置為發(fā)生丟包以前的CongWin的一半問(wèn)題: 什么時(shí)候從指數(shù)增長(zhǎng)轉(zhuǎn)變?yōu)榫€性增長(zhǎng)? 回答: CongWin達(dá)到它超時(shí)以前1/2的時(shí)候. 運(yùn)輸層101TCP 擁塞控制

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論