計算機網(wǎng)絡(luò)-第三章傳輸層課件_第1頁
計算機網(wǎng)絡(luò)-第三章傳輸層課件_第2頁
計算機網(wǎng)絡(luò)-第三章傳輸層課件_第3頁
計算機網(wǎng)絡(luò)-第三章傳輸層課件_第4頁
計算機網(wǎng)絡(luò)-第三章傳輸層課件_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1第三章第三章 傳輸層傳輸層2第三章第三章: 傳輸層傳輸層目標(biāo)目標(biāo): 理解傳輸層服務(wù)理解傳輸層服務(wù)以后的原則以后的原則: 復(fù)用復(fù)用/分解復(fù)用分解復(fù)用 可靠數(shù)據(jù)傳輸可靠數(shù)據(jù)傳輸 流量控制流量控制 擁塞控制擁塞控制 學(xué)習(xí)因特網(wǎng)的傳輸學(xué)習(xí)因特網(wǎng)的傳輸層協(xié)議層協(xié)議: UDP: 無連接傳輸無連接傳輸 TCP: 面向連接傳面向連接傳輸輸 TCP 擁塞控制擁塞控制3第三章第三章 提綱提綱 3.1 傳輸層服務(wù)傳輸層服務(wù) 3.2多路復(fù)用和多路分多路復(fù)用和多路分解解 3.3 無連接傳輸無連接傳輸: UDP 3.4 可靠數(shù)據(jù)傳輸原理可靠數(shù)據(jù)傳輸原理 3.5 面向連接傳輸面向連接傳輸: TCP 報文段結(jié)構(gòu)報文段結(jié)構(gòu)

2、可靠數(shù)據(jù)傳輸可靠數(shù)據(jù)傳輸 流量控制流量控制 連接管理連接管理 3.6 擁塞控制原理擁塞控制原理 3.7 TCP 擁塞控制擁塞控制4傳輸層服務(wù)和協(xié)議傳輸層服務(wù)和協(xié)議 在兩個不同的主機上運行在兩個不同的主機上運行的應(yīng)用程序之間提供的應(yīng)用程序之間提供 邏輯邏輯通信通信 傳輸層協(xié)議運行在端系統(tǒng)傳輸層協(xié)議運行在端系統(tǒng) 發(fā)送方發(fā)送方: 將應(yīng)用程序報將應(yīng)用程序報文分成數(shù)據(jù)段傳遞給網(wǎng)文分成數(shù)據(jù)段傳遞給網(wǎng)絡(luò)層絡(luò)層, 接受方接受方: 將數(shù)據(jù)段重新將數(shù)據(jù)段重新組裝成報文傳遞到應(yīng)用組裝成報文傳遞到應(yīng)用層層 不只一個傳輸層協(xié)議可以不只一個傳輸層協(xié)議可以用于應(yīng)用程序用于應(yīng)用程序 因特網(wǎng)因特網(wǎng): TCP 和和 UDP應(yīng)用層

3、應(yīng)用層傳輸層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)層鏈路層鏈路層物理層物理層應(yīng)用層應(yīng)用層傳輸層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)層鏈路層鏈路層物理層物理層networkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysical邏輯的端到端傳輸邏輯的端到端傳輸5傳輸層和網(wǎng)絡(luò)層傳輸層和網(wǎng)絡(luò)層網(wǎng)絡(luò)層網(wǎng)絡(luò)層:兩個主機之兩個主機之間的邏輯通信間的邏輯通信傳輸層傳輸層:兩個進(jìn)程之兩個進(jìn)程之間的邏輯通信間的邏輯通信 可靠可靠, 增強的網(wǎng)絡(luò)層增強的網(wǎng)絡(luò)層服務(wù)服務(wù)6Internet 傳

4、輸層協(xié)議傳輸層協(xié)議 可靠按序遞交可靠按序遞交 (TCP) 擁塞控制擁塞控制 流量控制流量控制 連接建立連接建立 不可靠的無序傳遞不可靠的無序傳遞: UDP “盡力傳遞盡力傳遞” IP的直接的直接擴(kuò)展擴(kuò)展 不提供的服務(wù)不提供的服務(wù): 延遲保證延遲保證 帶寬保證帶寬保證applicationtransportnetworkdata linkphysicalapplicationtransportnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetwork

5、data linkphysicalnetworkdata linkphysicallogical end-end transport7第三章第三章 提綱提綱 3.1 傳輸層服務(wù)傳輸層服務(wù) 3.2 多路復(fù)用和多路分多路復(fù)用和多路分解解 3.3 無連接傳輸無連接傳輸: UDP 3.4 可靠數(shù)據(jù)傳輸原理可靠數(shù)據(jù)傳輸原理 3.5 面向連接傳輸面向連接傳輸: TCP 報文段結(jié)構(gòu)報文段結(jié)構(gòu) 可靠數(shù)據(jù)傳輸可靠數(shù)據(jù)傳輸 流量控制流量控制 連接管理連接管理 3.6 擁塞控制原理擁塞控制原理 3.7 TCP 擁塞控制擁塞控制8多路復(fù)用多路復(fù)用/多路分解多路分解applicationtransportnetwork

6、linkphysicalP1applicationtransportnetworklinkphysicalapplicationtransportnetworklinkphysicalP2P3P4P1host 1host 2host 3= 進(jìn)程進(jìn)程= 套接字套接字將接收到的數(shù)據(jù)段傳遞到將接收到的數(shù)據(jù)段傳遞到正確的套接字(多路分解)正確的套接字(多路分解)在接收主機多路分解在接收主機多路分解:從多個套接字收集數(shù)據(jù)從多個套接字收集數(shù)據(jù), 用首部封裝數(shù)據(jù),然后將用首部封裝數(shù)據(jù),然后將報文段傳遞到網(wǎng)絡(luò)層報文段傳遞到網(wǎng)絡(luò)層(多路復(fù)用)(多路復(fù)用)在發(fā)送主機多路復(fù)用在發(fā)送主機多路復(fù)用:9多路分解如何工作多

7、路分解如何工作 主機收到主機收到IP數(shù)據(jù)報數(shù)據(jù)報 每個數(shù)據(jù)報有源每個數(shù)據(jù)報有源IP地址,地址,目的目的IP地址地址 每個數(shù)據(jù)報搬運一個數(shù)每個數(shù)據(jù)報搬運一個數(shù)據(jù)段據(jù)段 每個數(shù)據(jù)段有源和目的每個數(shù)據(jù)段有源和目的端口號端口號 (回憶(回憶: 對于特定應(yīng)用程對于特定應(yīng)用程序具有周知端口號序具有周知端口號) 主機用主機用IP地址和端口號地址和端口號指明數(shù)據(jù)段屬于哪個合指明數(shù)據(jù)段屬于哪個合適的套接字適的套接字源端口源端口 #目的端口目的端口 #32 bits應(yīng)用程序數(shù)據(jù)應(yīng)用程序數(shù)據(jù)(報文報文)其他首部域其他首部域TCP/UDP 報文段格式報文段格式10無連接多路分解無連接多路分解 用端口號創(chuàng)建套接字用端口

8、號創(chuàng)建套接字:DatagramSocket mySocket1 = new DatagramSocket(9911);DatagramSocket mySocket2 = new DatagramSocket(9922); UDP 套接字由兩個因素指套接字由兩個因素指定定:(目的目的IP地址地址, 目的端口號目的端口號) 當(dāng)主機收到當(dāng)主機收到UDP數(shù)據(jù)數(shù)據(jù)段段: 檢查數(shù)據(jù)段中的目的檢查數(shù)據(jù)段中的目的端口號端口號 用端口號指示用端口號指示UDP數(shù)數(shù)據(jù)段屬于哪個套接字據(jù)段屬于哪個套接字 具有不同的源具有不同的源IP地址地址且且/或源端口號,但具或源端口號,但具有相同的目的有相同的目的IP地址地址和

9、目的端口號的和目的端口號的IP數(shù)數(shù)據(jù)報指向同樣的套接據(jù)報指向同樣的套接字字11無連接多路分解無連接多路分解 (續(xù)續(xù))DatagramSocket serverSocket = new DatagramSocket(6428);ClientIP:BP2client IP: AP1P1P3serverIP: CSP: 6428DP: 9157SP: 9157DP: 6428SP: 6428DP: 5775SP: 5775DP: 6428請求報文段中提供返回地址(包括請求報文段中提供返回地址(包括IP地址和端口號)地址和端口號)12面向連接的多路分解面向連接的多路分解 TCP 套接字由套接字由4部分

10、指部分指定定: 源源IP地址地址 源端口號源端口號 目的目的IP地址地址 目的端口號目的端口號 接收主機使用所有四個接收主機使用所有四個值將數(shù)據(jù)段定位到合適值將數(shù)據(jù)段定位到合適的套接字的套接字 服務(wù)器主機支持很多同服務(wù)器主機支持很多同時的時的 TCP 套接字套接字: 每個套接字用每個套接字用4部分來部分來表示表示 Web服務(wù)器對每個連接服務(wù)器對每個連接的客戶都有不同的套接的客戶都有不同的套接字字 非持久非持久 HTTP 將對每個將對每個請求有一個不同的套接請求有一個不同的套接字字13面向連接的多路分解面向連接的多路分解 (續(xù)續(xù))ClientIP:BP1client IP: AP1P2P4ser

11、verIP: CSP: 9157DP: 80SP: 9157DP: 80P5P6P3D-IP:CS-IP: AD-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B14面向連接的多路分解面向連接的多路分解: web服務(wù)服務(wù)器如何工作?器如何工作?ClientIP:BP1client IP: AP1P2serverIP: CSP: 9157DP: 80SP: 9157DP: 80P4P3D-IP:CS-IP: AD-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B15第三章第三章 提綱提綱 3.1 傳輸層服務(wù)傳輸層服務(wù) 3.2多路復(fù)用和多路復(fù)

12、多路復(fù)用和多路復(fù)用用 3.3 無連接傳輸無連接傳輸: UDP 3.4 可靠數(shù)據(jù)傳輸原理可靠數(shù)據(jù)傳輸原理 3.5 面向連接傳輸面向連接傳輸: TCP 報文段結(jié)構(gòu)報文段結(jié)構(gòu) 可靠數(shù)據(jù)傳輸可靠數(shù)據(jù)傳輸 流量控制流量控制 連接管理連接管理 3.6 擁塞控制原理擁塞控制原理 3.7 TCP 擁塞控制擁塞控制16UDP: 用戶數(shù)據(jù)報協(xié)議用戶數(shù)據(jù)報協(xié)議 RFC 768 “無修飾無修飾” “不加渲染的不加渲染的” 因特網(wǎng)傳輸層協(xié)議因特網(wǎng)傳輸層協(xié)議 “盡最大努力盡最大努力”服務(wù)服務(wù), UDP 數(shù)據(jù)段可能數(shù)據(jù)段可能: 丟失丟失 會傳遞失序的報文到會傳遞失序的報文到應(yīng)用程序應(yīng)用程序無連接無連接: 在在UDP接收者發(fā)

13、送者接收者發(fā)送者之間沒有握手之間沒有握手 每個每個UDP 數(shù)據(jù)段的處數(shù)據(jù)段的處理獨立于其他數(shù)據(jù)段理獨立于其他數(shù)據(jù)段為什么有為什么有 UDP? 不需要建立連接不需要建立連接 (減少延減少延遲遲) 簡單簡單: 在發(fā)送者接受者之在發(fā)送者接受者之間不需要連接狀態(tài)間不需要連接狀態(tài) 很小的數(shù)據(jù)段首部很小的數(shù)據(jù)段首部 沒有擁塞控制沒有擁塞控制: UDP 能能夠用想象的快的速度傳夠用想象的快的速度傳遞遞17UDP:用戶數(shù)據(jù)報協(xié)議(續(xù))用戶數(shù)據(jù)報協(xié)議(續(xù)) 經(jīng)常用于流式多媒體應(yīng)經(jīng)常用于流式多媒體應(yīng)用用 容忍丟失容忍丟失 速率敏感速率敏感 其它其它 UDP 應(yīng)用應(yīng)用 DNS SNMP UDP上的可靠傳輸上的可靠傳

14、輸: 在應(yīng)在應(yīng)用層增加可靠性用層增加可靠性 應(yīng)用特有的錯誤恢復(fù)應(yīng)用特有的錯誤恢復(fù)!源端口號源端口號目的端口號目的端口號32 bits應(yīng)用數(shù)據(jù)(報文)應(yīng)用數(shù)據(jù)(報文)UDP 數(shù)據(jù)報格式數(shù)據(jù)報格式長度長度校驗和校驗和長度以字節(jié)為長度以字節(jié)為單位,包括報文首單位,包括報文首都和數(shù)據(jù)都和數(shù)據(jù)18UDP 校驗和校驗和發(fā)送方發(fā)送方: 將數(shù)據(jù)段看成將數(shù)據(jù)段看成16bit的的整數(shù)序列整數(shù)序列 校驗和校驗和: 數(shù)據(jù)段內(nèi)容數(shù)據(jù)段內(nèi)容相加相加 (1的補碼和的補碼和) 發(fā)送者將校驗和值放發(fā)送者將校驗和值放入入UDP的校驗和域的校驗和域接收方接收方: 計算接收到數(shù)據(jù)段的校驗計算接收到數(shù)據(jù)段的校驗和和 檢查檢查 計算的校

15、驗和是否等計算的校驗和是否等于校驗和域中的值于校驗和域中的值: NO 檢測到錯誤檢測到錯誤 YES 沒有檢測到錯誤沒有檢測到錯誤. 但是可能是錯誤的但是可能是錯誤的 ?后面更多后面更多 .目標(biāo)目標(biāo): 檢測傳輸?shù)臄?shù)據(jù)段的檢測傳輸?shù)臄?shù)據(jù)段的 “錯誤錯誤” 如如bit丟失丟失)19Internet 校驗和例子校驗和例子 Note 在加數(shù)字的時候,從最高位溢出的在加數(shù)字的時候,從最高位溢出的bit必須必須要加到結(jié)果上要加到結(jié)果上 例例:加兩個加兩個16位整數(shù)位整數(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

16、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回卷回卷和和校驗和校驗和20第三章第三章 提綱提綱 3.1 傳輸層服務(wù)傳輸層服務(wù) 3.2多路復(fù)用和多路分多路復(fù)用和多路分解解 3.3 無連接傳輸無連接傳輸: UDP 3.4 可靠數(shù)據(jù)傳輸原理可靠數(shù)據(jù)傳輸原理 3.5 面向連接傳輸面向連接傳輸: TCP 報文段結(jié)構(gòu)報文段結(jié)構(gòu) 可靠數(shù)據(jù)傳輸可靠數(shù)據(jù)傳輸 流量控制流量控制 連接管理連接管理 3.6 擁塞控制原理擁塞控制原理 3.7 TCP 擁塞控制擁塞控制21可靠

17、數(shù)據(jù)傳輸原理可靠數(shù)據(jù)傳輸原理 在應(yīng)用層、傳輸層、鏈路層都有所應(yīng)用在應(yīng)用層、傳輸層、鏈路層都有所應(yīng)用 不可靠信道的特性將決定可靠數(shù)據(jù)傳輸協(xié)議不可靠信道的特性將決定可靠數(shù)據(jù)傳輸協(xié)議(rdt)的復(fù)雜的復(fù)雜性性22可靠數(shù)據(jù)傳輸可靠數(shù)據(jù)傳輸:sendsidereceivesiderdt_send(): 上層應(yīng)用調(diào)用該函數(shù)上層應(yīng)用調(diào)用該函數(shù)要求可靠傳輸數(shù)據(jù)到接收者要求可靠傳輸數(shù)據(jù)到接收者udt_send(): 可靠傳輸調(diào)用該可靠傳輸調(diào)用該函數(shù),在不可靠的信道上傳輸數(shù)函數(shù),在不可靠的信道上傳輸數(shù)據(jù)給接收者據(jù)給接收者rdt_rcv(): 接收方接收到數(shù)據(jù)后調(diào)接收方接收到數(shù)據(jù)后調(diào)用該函數(shù)完成可靠傳輸用該函數(shù)完成

18、可靠傳輸deliver_data(): 可靠傳輸調(diào)可靠傳輸調(diào)用該函數(shù)將數(shù)據(jù)傳給上層應(yīng)用用該函數(shù)將數(shù)據(jù)傳給上層應(yīng)用23可靠數(shù)據(jù)傳輸可靠數(shù)據(jù)傳輸:我們將我們將 逐步開發(fā)發(fā)送方和接收方的可靠數(shù)據(jù)傳輸協(xié)議逐步開發(fā)發(fā)送方和接收方的可靠數(shù)據(jù)傳輸協(xié)議 (rdt) 僅考慮單向數(shù)據(jù)傳輸僅考慮單向數(shù)據(jù)傳輸 但控制信息將雙向流動但控制信息將雙向流動! 用有限狀態(tài)機用有限狀態(tài)機 (FSM) 來標(biāo)示發(fā)送方和接收方來標(biāo)示發(fā)送方和接收方狀態(tài)狀態(tài)1狀態(tài)狀態(tài)2事件導(dǎo)致狀態(tài)轉(zhuǎn)換事件導(dǎo)致狀態(tài)轉(zhuǎn)換狀態(tài)轉(zhuǎn)換時執(zhí)行的動作狀態(tài)轉(zhuǎn)換時執(zhí)行的動作狀態(tài)狀態(tài): 在一個狀態(tài)時,由在一個狀態(tài)時,由事件唯一的確定狀態(tài)的轉(zhuǎn)事件唯一的確定狀態(tài)的轉(zhuǎn)換換事件事

19、件動作動作24Rdt1.0: 完全可靠信道上的可靠數(shù)據(jù)傳完全可靠信道上的可靠數(shù)據(jù)傳輸輸 在完美可靠的信道上在完美可靠的信道上 沒有沒有bit錯誤錯誤 沒有分組丟失沒有分組丟失 發(fā)送方,接收方分離的發(fā)送方,接收方分離的 FSMs : 發(fā)送方發(fā)送數(shù)據(jù)到下層信道發(fā)送方發(fā)送數(shù)據(jù)到下層信道 接收方從下層信道接收數(shù)據(jù)接收方從下層信道接收數(shù)據(jù)等待來自等待來自上層的調(diào)上層的調(diào)用用packet = make_pkt(data)udt_send(packet)rdt_send(data)extract (packet,data)deliver_data(data)等待來自等待來自下層的調(diào)下層的調(diào)用用rdt_rcv

20、(packet)senderreceiver25Rdt2.0: 具有具有bit錯誤的信道錯誤的信道 下層信道可能讓傳輸分組中的下層信道可能讓傳輸分組中的bit受損受損 校驗和將檢測到校驗和將檢測到bit錯誤錯誤問題問題: 如何從錯誤中恢復(fù)如何從錯誤中恢復(fù)確認(rèn)確認(rèn)(ACKs): 接收方明確告訴發(fā)送方接收方明確告訴發(fā)送方 分組接收正確分組接收正確否認(rèn)否認(rèn) (NAKs):接收方明確告訴發(fā)送方接收方明確告訴發(fā)送方 分組接收出錯分組接收出錯 發(fā)送方收到發(fā)送方收到NAK后重發(fā)這個分組后重發(fā)這個分組 在在 rdt2.0的新機制的新機制 (在在 rdt1.0中沒有的中沒有的): 差錯檢測差錯檢測 接收方反饋接

21、收方反饋: 控制信息控制信息 (ACK,NAK) rcvr-sender26rdt2.0: FSM 規(guī)范規(guī)范extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt)等待來自下層的等待來自下層的調(diào)用調(diào)用receiver等待來自上等待來自上層的調(diào)用層的調(diào)用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)rdt_rcv(rcvp

22、kt) & isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt) & isNAK(rcvpkt)等待等待 ACK 或或NAKsenderrdt_send(data)L L27rdt2.0: 沒有錯誤時的操作沒有錯誤時的操作等待上等待上層調(diào)用層調(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(rcv

23、pkt) & isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt) & isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt)等待等待 ACK 或或NAK等待下等待下層的調(diào)用層的調(diào)用rdt_send(data)L L28rdt2.0: 錯誤場景錯誤場景Wait for call from abovesnkpkt = make_pkt(data, checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)u

24、dt_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)Wait for ACK or NAKWait for call from belowrdt_send(data)L L29rdt2.0 有一個致命缺陷有一個致命缺陷!如果如果ACK/NAK混淆了混淆了會發(fā)生什么?會發(fā)生什么

25、? 發(fā)送方并不知道接收方發(fā)發(fā)送方并不知道接收方發(fā)生了什么生了什么! 不能正確重發(fā)不能正確重發(fā): 可能重復(fù)可能重復(fù)處理重復(fù)處理重復(fù): 發(fā)送方給每個分組加一個發(fā)送方給每個分組加一個序號序號 在在 ACK/NAK 混淆時發(fā)送混淆時發(fā)送方重發(fā)當(dāng)前分組方重發(fā)當(dāng)前分組 接收方丟棄重復(fù)的分組接收方丟棄重復(fù)的分組(并不向上傳遞)(并不向上傳遞)發(fā)送方發(fā)送一個報文,然后發(fā)送方發(fā)送一個報文,然后等待接受方的響應(yīng)等待接受方的響應(yīng)停止等待停止等待30rdt2.1: 發(fā)送方處理混亂的發(fā)送方處理混亂的 ACK/NAKs等待來自等待來自上層的上層的調(diào)用調(diào)用0sndpkt = make_pkt(0, data, checks

26、um)udt_send(sndpkt)rdt_send(data)等待等待 ACK 或或 NAK 0udt_send(sndpkt)rdt_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(rcv

27、pkt) |isNAK(rcvpkt) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt) 等待來自等待來自 上層的上層的調(diào)用調(diào)用1等待等待 ACK 或或 NAK 1L LL L31rdt2.1: 接收方處理混亂的接收方處理混亂的 ACK/NAKssndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)等待來等待來自下層自下層的的0rdt_rcv(rcvpkt) & not corrupt(rcvpkt) & has_seq0(rcvpkt)rdt_rcv(rcvpkt)

28、 & notcorrupt(rcvpkt) & has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)等待來等待來自下層自下層的的1rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq0(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)rdt_

29、rcv(rcvpkt) & (corrupt(rcvpkt)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)rdt_rcv(rcvpkt) & 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)32rdt2.1: 討論討論發(fā)送方發(fā)送方: 序號序號

30、 加到分組上加到分組上 兩個序號兩個序號 (0,1) 就可以就可以滿足滿足. 為什么為什么? 必須檢查是否收到混必須檢查是否收到混淆的淆的 ACK/NAK 狀態(tài)加倍狀態(tài)加倍 狀態(tài)必須記住當(dāng)前的狀態(tài)必須記住當(dāng)前的報文是報文是1號還是號還是0號號接收方接收方: 必須檢查是否接收到必須檢查是否接收到重復(fù)的報文重復(fù)的報文 狀態(tài)指示狀態(tài)指示0或者或者1是否是否希望的報文序號希望的報文序號 注意注意:接收方并不知道接收方并不知道它的上一個它的上一個ACK/NAK 是否被發(fā)是否被發(fā)送方收到送方收到33rdt2.2: 一個不要一個不要NAK的協(xié)議的協(xié)議 同同 rdt2.1一樣的功能一樣的功能, 只用只用 AC

31、Ks 不用不用 NAK, 如果上個報文接收正確接收方發(fā)送如果上個報文接收正確接收方發(fā)送 ACK 接收方必須明確包含被確認(rèn)的報文的序號接收方必須明確包含被確認(rèn)的報文的序號 發(fā)送方收到重復(fù)發(fā)送方收到重復(fù) ACK 將導(dǎo)致和將導(dǎo)致和 NAK一樣的處一樣的處理理: 重發(fā)當(dāng)前報文重發(fā)當(dāng)前報文34rdt2.2: 發(fā)送方發(fā)送方,接收方片斷接收方片斷等待來自等待來自上層的調(diào)上層的調(diào)用用0sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)rdt_send(data)udt_send(sndpkt)rdt_rcv(rcvpkt) & ( corrupt(

32、rcvpkt) | isACK(rcvpkt,1) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,0) 等待等待 ACK0sender FSMfragment等待來等待來自下層自下層的的0rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt)rdt_rcv(rcvpkt) &am

33、p; (corrupt(rcvpkt) | has_seq1(rcvpkt)udt_send(sndpkt)receiver FSMfragmentL L35rdt3.0: 具有出錯和丟失的信道具有出錯和丟失的信道新假設(shè)新假設(shè): 下層信道還要丟下層信道還要丟失報文失報文 (數(shù)據(jù)或者數(shù)據(jù)或者 ACKs) 校驗和校驗和, 序號序號, 確認(rèn)確認(rèn), 重重發(fā)將會有幫助,但是發(fā)將會有幫助,但是不夠不夠方法方法: 發(fā)送者等待發(fā)送者等待“合理合理的的”確認(rèn)時間確認(rèn)時間 如果在這個時間內(nèi)沒有收如果在這個時間內(nèi)沒有收到確認(rèn)就重發(fā)到確認(rèn)就重發(fā) 如果報文(或者確認(rèn))只如果報文(或者確認(rèn))只是延遲是延遲 (沒有丟失沒有

34、丟失): 重發(fā)將導(dǎo)致重復(fù),但是重發(fā)將導(dǎo)致重復(fù),但是使用序號已經(jīng)處理了這使用序號已經(jīng)處理了這個問題個問題 接受方必須指定被確認(rèn)接受方必須指定被確認(rèn)的報文序號的報文序號 要求倒計時定時器要求倒計時定時器36rdt3.0 發(fā)送方發(fā)送方sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_timerrdt_send(data)等待等待 ACK0rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isACK(rcvpkt,1) )等待來自上等待來自上層的調(diào)用層的調(diào)用1sndpkt = make_pkt(1, da

35、ta, 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_timertimeoutudt_send

36、(sndpkt)start_timertimeoutrdt_rcv(rcvpkt)等待來自上等待來自上層的調(diào)用層的調(diào)用0等待等待 ACK1L Lrdt_rcv(rcvpkt)L LL LL L37rdt3.0 操作操作38rdt3.0 操作操作39rdt3.0的性能的性能 rdt3.0 工作但是性能很差工作但是性能很差 例如例如: 1 Gbps鏈路鏈路, 15 ms 端到端傳輸延遲端到端傳輸延遲, 1KB 報文報文:Ttransmit=8kb/pkt10*9 b/sec= 8 microsecU sender: 利用率利用率 發(fā)送方忙于發(fā)送的時間部分發(fā)送方忙于發(fā)送的時間部分1KB pkt ev

37、ery 30 msec - 33kB/sec throughput over 1 Gbps link網(wǎng)絡(luò)協(xié)議限制了物質(zhì)資源的使用網(wǎng)絡(luò)協(xié)議限制了物質(zhì)資源的使用! U sender = .008 30.008 = 0.00027 L / R RTT + L / R = L (packet length in bits)R (transmission rate, bps)=40rdt3.0: 停等操作停等操作首個分組的第首個分組的第1比特被傳輸比特被傳輸, t = 0發(fā)送方發(fā)送方接收方接收方RTT 首個分組的最后首個分組的最后1比特被傳輸比特被傳輸, t = L / R首個分組的第首個分組的第1比特

38、到達(dá)比特到達(dá)首個分組的最后首個分組的最后1個比特到達(dá)個比特到達(dá), 發(fā)發(fā)送送 ACKACK 到達(dá)到達(dá), 發(fā)送下一個分組發(fā)送下一個分組, t = RTT + L / R U sender = .008 30.008 = 0.00027 L / R RTT + L / R = 41流水線技術(shù)流水線技術(shù)流水線流水線: 發(fā)送方允許發(fā)送多個發(fā)送方允許發(fā)送多個 “在路上的在路上的”, 還還沒有確認(rèn)的報文沒有確認(rèn)的報文 序號數(shù)目的范圍必須增加序號數(shù)目的范圍必須增加 在發(fā)送方在發(fā)送方/接收方必須有緩沖區(qū)接收方必須有緩沖區(qū) 流水線技術(shù)的兩個通用形式流水線技術(shù)的兩個通用形式: go-Back-N, 選擇重傳選擇重傳

39、42流水線流水線: 增加利用率增加利用率首個分組的第首個分組的第1個比特被傳輸個比特被傳輸, t = 0senderreceiverRTT 首個分組的最后首個分組的最后1比特被傳比特被傳輸輸, t = L / R首個分組的第首個分組的第1比特到達(dá)比特到達(dá)首個分組的最后首個分組的最后1比特到達(dá)比特到達(dá),發(fā)送發(fā)送ACKACK到達(dá)到達(dá), 發(fā)送下一個分組發(fā)送下一個分組, t = RTT + L / R第第2分組的最后分組的最后1比特到達(dá)比特到達(dá), 發(fā)送發(fā)送ACK第第3分組的最后分組的最后1比特到達(dá)比特到達(dá),發(fā)送發(fā)送ACK U sender = .024 30.008 = 0.0008 microsec

40、onds 3 * L / R RTT + L / R = 利用率提高了利用率提高了3倍倍43Go-Back-N發(fā)送方發(fā)送方: 在分組頭中規(guī)定一個在分組頭中規(guī)定一個k位的序號位的序號 “窗口窗口”, 允許的連續(xù)未確認(rèn)的報文允許的連續(xù)未確認(rèn)的報文ACK(n): 確認(rèn)所有的報文直到(包含)序號確認(rèn)所有的報文直到(包含)序號n - “累積累積ACK”對每個在路上的報文定時對每個在路上的報文定時超時超時(n): 重發(fā)窗口中的報文重發(fā)窗口中的報文n及以上更高序號的報文及以上更高序號的報文(只有一個定時器記錄只有一個定時器記錄最早的未被確認(rèn)報文的發(fā)送時間最早的未被確認(rèn)報文的發(fā)送時間)44GBN: 接收方接收

41、方ACK-only: 總是為正確接收的最高序號的分組發(fā)送總是為正確接收的最高序號的分組發(fā)送ACK。 可能生成重復(fù)的可能生成重復(fù)的ACKs 只需要記住被期待接收的序號只需要記住被期待接收的序號expectedseqnum 接收到失序分組接收到失序分組: 丟棄丟棄(不緩沖不緩沖) - 沒有接收緩沖區(qū)沒有接收緩沖區(qū)! 重發(fā)最高序號分組的重發(fā)最高序號分組的ACK45GBN操作操作46選擇性重傳選擇性重傳 接收方分別確認(rèn)已經(jīng)收到的分組接收方分別確認(rèn)已經(jīng)收到的分組 必要時,緩沖報文必要時,緩沖報文, 最后按序提交給上層最后按序提交給上層 發(fā)送者只重發(fā)沒有收到確認(rèn)的分組發(fā)送者只重發(fā)沒有收到確認(rèn)的分組 對每個

42、沒有確認(rèn)的報文發(fā)送者都要啟動一個定時對每個沒有確認(rèn)的報文發(fā)送者都要啟動一個定時器器(每個未被確認(rèn)的報文都有一個定時器每個未被確認(rèn)的報文都有一個定時器) 發(fā)送窗口發(fā)送窗口 N 個連續(xù)序號個連續(xù)序號 限制被發(fā)送的未確認(rèn)的分組數(shù)量限制被發(fā)送的未確認(rèn)的分組數(shù)量47選擇性重傳選擇性重傳: 發(fā)送者,接收者窗口發(fā)送者,接收者窗口48選擇性重傳選擇性重傳從上層收到數(shù)據(jù)從上層收到數(shù)據(jù) : 如果下一個可用的序號如果下一個可用的序號在發(fā)送方窗口內(nèi),則將在發(fā)送方窗口內(nèi),則將數(shù)據(jù)打包并發(fā)送數(shù)據(jù)打包并發(fā)送超時超時(n): 重發(fā)分組重發(fā)分組n, 重啟定時器重啟定時器收到收到ACK(n)在在sendbase,sendbase

43、+N內(nèi)內(nèi): 標(biāo)記分組標(biāo)記分組n被接收被接收 如果如果n是最小的未確認(rèn)分是最小的未確認(rèn)分組,則增加窗口基序號組,則增加窗口基序號到下一個未被確認(rèn)的序到下一個未被確認(rèn)的序號號發(fā)送方發(fā)送方分組分組n的序號在的序號在rcvbase, rcvbase+N-1內(nèi)內(nèi)發(fā)送發(fā)送ACK(n)失序分組失序分組: 緩沖緩沖有序分組有序分組: 交付上層交付上層 (包括已經(jīng)緩包括已經(jīng)緩沖的有序分組沖的有序分組), 提高窗口到下一提高窗口到下一個沒有接收的分組個沒有接收的分組 not-yet-received pkt分組分組n在在rcvbase-N,rcvbase-1內(nèi)內(nèi)發(fā)送發(fā)送ACK(n)其他其他: 忽略忽略接收方接收方

44、49選擇性重傳的操作選擇性重傳的操作50選擇性重傳選擇性重傳: 兩難選擇兩難選擇例子例子: 序號序號: 0, 1, 2, 3 window size=3 在兩種情況下接收在兩種情況下接收方?jīng)]有感覺到差別方?jīng)]有感覺到差別!Q: 序號大小和窗口大序號大小和窗口大小有什么關(guān)系小有什么關(guān)系?(?。ㄐ∮诨虻扔谛蛱柨臻g于或等于序號空間大小的一半)大小的一半)51第三章第三章 提綱提綱 3.1 傳輸層服務(wù)傳輸層服務(wù) 3.2多路復(fù)用和多路復(fù)多路復(fù)用和多路復(fù)用用 3.3 無連接傳輸無連接傳輸: UDP 3.4 可靠數(shù)據(jù)傳輸原理可靠數(shù)據(jù)傳輸原理 3.5 面向連接傳輸面向連接傳輸: TCP 報文段結(jié)構(gòu)報文段結(jié)構(gòu) 可

45、靠數(shù)據(jù)傳輸可靠數(shù)據(jù)傳輸 流量控制流量控制 連接管理連接管理 3.6 擁塞控制原理擁塞控制原理 3.7 TCP 擁塞控制擁塞控制52TCP: 概述概述 RFCs: 793, 1122, 1323, 2018, 2581 點到點點到點: 一個發(fā)送者一個發(fā)送者,一個接收一個接收者者 可靠按序的字節(jié)流可靠按序的字節(jié)流: 沒有沒有“信息邊界信息邊界” 流水線流水線: TCP 擁塞和流量控制擁塞和流量控制設(shè)置窗口大小設(shè)置窗口大小收發(fā)緩沖區(qū)收發(fā)緩沖區(qū)53TCP: 概述概述 RFCs: 793, 1122, 1323, 2018, 2581TCP發(fā)送發(fā)送數(shù)據(jù)緩存數(shù)據(jù)緩存報文段報文段TCP接收接收數(shù)據(jù)緩存數(shù)據(jù)緩

46、存進(jìn)程寫進(jìn)程寫數(shù)據(jù)數(shù)據(jù)套接字套接字進(jìn)程讀進(jìn)程讀數(shù)據(jù)數(shù)據(jù)套接字套接字收發(fā)緩沖區(qū)收發(fā)緩沖區(qū)54TCP: 概述概述 RFCs: 793, 1122, 1323, 2018, 2581 全雙工數(shù)據(jù)全雙工數(shù)據(jù): 同一個連接上的雙向數(shù)同一個連接上的雙向數(shù)據(jù)流據(jù)流 MSS: 最大報文段長最大報文段長 面向連接面向連接: 在數(shù)據(jù)交換前握手在數(shù)據(jù)交換前握手(交換交換控制信息控制信息) 初始化發(fā)送方初始化發(fā)送方和接收方的狀態(tài)和接收方的狀態(tài) 流量控制流量控制: 發(fā)送方不會淹沒接收方發(fā)送方不會淹沒接收方55TCP 報文段結(jié)構(gòu)報文段結(jié)構(gòu)源端口號源端口號目的端口號目的端口號32 bits數(shù)據(jù)數(shù)據(jù)(可變長度可變長度)序號序

47、號確認(rèn)號確認(rèn)號接收窗口接收窗口緊急數(shù)據(jù)指針緊急數(shù)據(jù)指針檢查和檢查和FSRPAU首部首部長度長度保留保留未用未用選項選項 (可變長度可變長度)URG: urgent data (generally not used)ACK: ACK #validPSH: push data now(generally not used)RST, SYN, FIN:connection estab(setup, teardowncommands)接收方愿意接收方愿意接收的字節(jié)數(shù)接收的字節(jié)數(shù)用數(shù)據(jù)的首字節(jié)用數(shù)據(jù)的首字節(jié)編號填充編號填充差錯檢測,同差錯檢測,同UDP中的一樣中的一樣56TCP 序號和確認(rèn)序號和確認(rèn)序號

48、序號: 數(shù)據(jù)段中第一個字節(jié)數(shù)據(jù)段中第一個字節(jié)在數(shù)據(jù)流中的位置編在數(shù)據(jù)流中的位置編號號確認(rèn)確認(rèn): 期望從另外一邊收到期望從另外一邊收到的下一個字節(jié)的序號的下一個字節(jié)的序號 累計累計ACK問問: 接收方如何處理失序的接收方如何處理失序的數(shù)據(jù)段數(shù)據(jù)段 答答: TCP規(guī)范沒有明規(guī)范沒有明確規(guī)定確規(guī)定, 由編程人員由編程人員處理處理Host AHost BSeq=42, ACK=79, data = CSeq=79, ACK=43, data = CSeq=43, ACK=80UsertypesChost ACKsreceipt of echoedChost ACKsreceipt ofC, echoe

49、sback Ctimesimple telnet scenario57TCP 往返時延的估計和超時往返時延的估計和超時問問: 如何設(shè)置如何設(shè)置 TCP 超時值超時值? 比比 RTT長長 但但 RTT變化變化 太短太短: 不成熟的超時不成熟的超時 不必要的重傳不必要的重傳 太長太長: 對數(shù)據(jù)段丟失響應(yīng)慢對數(shù)據(jù)段丟失響應(yīng)慢58TCP往返時延的估計和超時往返時延的估計和超時EstimatedRTT = (1- a a)*EstimatedRTT + a a*SampleRTT上述均值計算被稱為上述均值計算被稱為:指數(shù)加權(quán)移動平均指數(shù)加權(quán)移動平均典型的典型的: a a = 0.125問問: 如何估計如

50、何估計 RTT? 樣本樣本RTT(SampleRTT): 測量從報文段發(fā)送到收到確認(rèn)測量從報文段發(fā)送到收到確認(rèn)的時間的時間 忽略重傳忽略重傳 樣本樣本RTTRTT會變化會變化, ,因此需要一個樣本因此需要一個樣本RTTRTT均值(均值( estimated estimated RTTRTT) 對收到的樣本對收到的樣本RTTRTT要根據(jù)以下公式進(jìn)行均值處理要根據(jù)以下公式進(jìn)行均值處理59RTT 估計例子估計例子:RTT: to fantasia.eurecom.fr1001502002503003501815222936435057647178859299106

51、time (seconnds)RTT (milliseconds)SampleRTTEstimated RTT60TCP往返時延的估計和超時往返時延的估計和超時設(shè)置超時設(shè)置超時 EstimtedRTT 加上加上 “安全余量安全余量” EstimatedRTT變化大變化大 - 更大的安全余量更大的安全余量 SampleRTT 偏離偏離 EstimatedRTT多少的估計多少的估計TimeoutInterval = EstimatedRTT + 4*DevRTTDevRTT = (1-b b)*DevRTT + b b*|SampleRTT-EstimatedRTT|(典型地典型地, b b =

52、0.25) 然后設(shè)置超時時間間隔然后設(shè)置超時時間間隔:61第三章第三章 提綱提綱 3.1 傳輸層服務(wù)傳輸層服務(wù) 3.2多路復(fù)用和多路分多路復(fù)用和多路分解解 3.3 無連接傳輸無連接傳輸: UDP 3.4 可靠數(shù)據(jù)傳輸原理可靠數(shù)據(jù)傳輸原理 3.5 面向連接傳輸面向連接傳輸: TCP 報文段結(jié)構(gòu)報文段結(jié)構(gòu) 可靠數(shù)據(jù)傳輸可靠數(shù)據(jù)傳輸 流量控制流量控制 連接管理連接管理 3.6 擁塞控制原理擁塞控制原理 3.7 TCP 擁塞控制擁塞控制62TCP 可靠數(shù)據(jù)傳輸可靠數(shù)據(jù)傳輸 TCP在在IP不可靠服務(wù)不可靠服務(wù)之上創(chuàng)建之上創(chuàng)建rdt服務(wù)服務(wù) 流水線技術(shù)處理報文流水線技術(shù)處理報文段段 累積確認(rèn)累積確認(rèn) TC

53、P 使用單個重發(fā)定使用單個重發(fā)定時器時器 觸發(fā)重發(fā)觸發(fā)重發(fā): 超時事件超時事件 重復(fù)確認(rèn)重復(fù)確認(rèn)63TCP 發(fā)送方事件發(fā)送方事件:從應(yīng)用程序接收數(shù)據(jù)從應(yīng)用程序接收數(shù)據(jù): 用序號創(chuàng)造一個數(shù)據(jù)段用序號創(chuàng)造一個數(shù)據(jù)段 序號是數(shù)據(jù)段中第一個序號是數(shù)據(jù)段中第一個數(shù)據(jù)字節(jié)在字節(jié)流中的數(shù)據(jù)字節(jié)在字節(jié)流中的位置編號位置編號 如果沒有啟動定時器,如果沒有啟動定時器,則啟動定時器則啟動定時器 (定時器是定時器是最早沒有被確認(rèn)的數(shù)據(jù)最早沒有被確認(rèn)的數(shù)據(jù)段發(fā)送時啟動的段發(fā)送時啟動的) 設(shè)置超時間隔設(shè)置超時間隔: TimeOutInterval 超時超時: 重發(fā)導(dǎo)致超時的數(shù)據(jù)重發(fā)導(dǎo)致超時的數(shù)據(jù)段段 重新開始定時器重新開

54、始定時器 收到確認(rèn)收到確認(rèn): 如果確認(rèn)了還沒有確如果確認(rèn)了還沒有確認(rèn)的數(shù)據(jù)段認(rèn)的數(shù)據(jù)段 更新還沒有確認(rèn)的狀更新還沒有確認(rèn)的狀態(tài)態(tài) 還有未完成的數(shù)據(jù)段,還有未完成的數(shù)據(jù)段,重新開始定時器重新開始定時器64TCP 發(fā)送方發(fā)送方(簡化的簡化的) NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) switch(event) event: data received from application above create TCP segment with sequence number NextSeqNum if (

55、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 start timer event: ACK received, with ACK field value of y if (y SendBase) SendBase = y if (there are currentl

56、y not-yet-acknowledged segments) start timer /* end of loop forever */ 注意注意: SendBase-1: last cumulatively acked byteExample: SendBase-1 = 71;y= 73, so the rcvrwants 73+ ;y SendBase, sothat new data is acked65TCP: 重發(fā)場景重發(fā)場景Host ASeq=100, 20 bytes dataACK=100time過早的超時設(shè)置過早的超時設(shè)置Host BSeq=92, 8 bytes dat

57、aACK=120Seq=92, 8 bytes dataSeq=92 timeoutACK=120Host ASeq=92, 8 bytes dataACK=100losstimeout丟失丟失ACK的情況的情況Host BXSeq=92, 8 bytes dataACK=100timeSeq=92 timeoutSendBase= 100SendBase= 120SendBase= 120Sendbase= 10066TCP 重發(fā)場景重發(fā)場景 (更多更多)Host ASeq=92, 8 bytes dataACK=100losstimeout累積累積ACK的情況的情況Host BXSeq=1

58、00, 20 bytes dataACK=120timeSendBase= 12067TCP ACK 的產(chǎn)生的產(chǎn)生 RFC 1122, RFC 2581接收方的事件接收方的事件期望序號的報文段按序到達(dá)期望序號的報文段按序到達(dá). 所有所有在期望序號以前的報文段都在期望序號以前的報文段都被確認(rèn)被確認(rèn)期望序號的報文段按序到達(dá)期望序號的報文段按序到達(dá).另一個按序報文段等待發(fā)送另一個按序報文段等待發(fā)送ACK收到一個失序的報文段,高于收到一個失序的報文段,高于期望的序號,檢測到縫隙期望的序號,檢測到縫隙到達(dá)的報文段部分地或者完到達(dá)的報文段部分地或者完全地填充接收數(shù)據(jù)間隔全地填充接收數(shù)據(jù)間隔TCP 接收方行

59、為接收方行為延遲延遲ACK. 等到等到 500ms看是否有下一個看是否有下一個報文段,如果沒有,發(fā)送報文段,如果沒有,發(fā)送ACK立即發(fā)送單個累積立即發(fā)送單個累積ACK, 確認(rèn)兩個有序的報文段確認(rèn)兩個有序的報文段立即發(fā)送重復(fù)立即發(fā)送重復(fù) ACK, 指出期望的序號指出期望的序號立即發(fā)送立即發(fā)送 ACK, 證實縫隙低端的證實縫隙低端的報文段已經(jīng)收到報文段已經(jīng)收到68快速重傳快速重傳 超時觸發(fā)重傳存在問超時觸發(fā)重傳存在問題題:超時周期往往太長超時周期往往太長: 重傳丟失報文之前要重傳丟失報文之前要等待很長時間等待很長時間,因此增因此增加了網(wǎng)絡(luò)的時延加了網(wǎng)絡(luò)的時延 發(fā)送方可以在超時之前通發(fā)送方可以在超時

60、之前通過重復(fù)的過重復(fù)的ACK檢測丟失報檢測丟失報文段文段 發(fā)送方常常一個接一個地發(fā)送方常常一個接一個地發(fā)送很多發(fā)送很多報文段報文段 如果報文段丟失如果報文段丟失,則發(fā)送方則發(fā)送方將可能接收到很多重復(fù)的將可能接收到很多重復(fù)的 ACKs. 如果發(fā)送方收到如果發(fā)送方收到3個對同個對同樣報文段的確認(rèn),則發(fā)送樣報文段的確認(rèn),則發(fā)送方認(rèn)為該報文段之后的數(shù)方認(rèn)為該報文段之后的數(shù)據(jù)已經(jīng)丟失。據(jù)已經(jīng)丟失。 啟動啟動快速重傳快速重傳: 在定時器超在定時器超時之前重發(fā)丟失的報文段時之前重發(fā)丟失的報文段69 event: ACK received, with ACK field value of y if (y SendBase) SendBase = y if (there are currently not-yet-acknowledged segments) start timer else increment count of dup ACKs received for y if (coun

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論