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

下載本文檔

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

文檔簡介

計算機網(wǎng)絡(luò)第5章運輸層第5章運輸層5.1運輸層協(xié)議概述5.2用戶數(shù)據(jù)報協(xié)議UDP5.3傳輸控制協(xié)議TCP概述5.4可靠傳輸?shù)墓ぷ髟?.5TCP報文段的首部格式5.6TCP可靠傳輸?shù)膶崿F(xiàn)5.7TCP的流量控制5.8TCP的擁塞控制5.9TCP的運輸連接管理

應(yīng)用進(jìn)程…5.1運輸層協(xié)議概述

網(wǎng)絡(luò)層或互聯(lián)網(wǎng)層提供主機通信服務(wù)傳輸層提供程通信服務(wù)應(yīng)用進(jìn)程…IP協(xié)議的作用范圍(提供主機之間的邏輯通信)TCP和UDP協(xié)議的作用范圍(提供進(jìn)程之間的邏輯通信)因特網(wǎng)傳輸層與網(wǎng)絡(luò)層或互聯(lián)網(wǎng)層的關(guān)系網(wǎng)絡(luò)層與互聯(lián)網(wǎng)層功能:主機通信協(xié)議:IP、CLNP(ISO/OSI)特點:hop-by-hop傳輸層功能:進(jìn)程通信協(xié)議:UDP和TCP、TP0~4(ISO/OSI)特點:end-to-endIP地址和端口為了提供進(jìn)程通信功能,TCP/IP協(xié)議族提出了端口(port)的概念,用于標(biāo)識進(jìn)程運輸層為相互通信的應(yīng)用進(jìn)程提供了邏輯通信54321運輸層提供應(yīng)用進(jìn)程間的邏輯通信主機A主機B應(yīng)用進(jìn)程應(yīng)用進(jìn)程路由器1路由器2AP1LAN2WANAP2AP3AP4IP層LAN1AP1AP2AP4端口端口54321IP協(xié)議的作用范圍運輸層協(xié)議TCP和UDP的作用范圍AP3端口分配方法第一種叫全局分配這是一種集中控制方式,由IANA進(jìn)行統(tǒng)一分配,并將結(jié)果公布于眾。眾所周知端口就是屬于這一類。第二種是本地分配注冊端口動態(tài)分配動態(tài)綁定三類端口熟知端口,數(shù)值一般為0~1023。登記端口號,數(shù)值為1024~49151,為沒有熟知端口號的應(yīng)用程序使用的。使用這個范圍的端口號必須在IANA登記,以防止重復(fù)。客戶端口號或短暫端口號,數(shù)值為49152~65535,留給客戶進(jìn)程選擇暫時使用。當(dāng)服務(wù)器進(jìn)程收到客戶進(jìn)程的報文時,就知道了客戶進(jìn)程所使用的動態(tài)端口號。通信結(jié)束后,這個端口號可供其他客戶進(jìn)程以后使用。TCP/UDP眾所周知端口號TCP/IP體系中的運輸層協(xié)議TCPUDPIP應(yīng)用層與各種網(wǎng)絡(luò)接口運輸層TCP/IP的運輸層有兩個不同的協(xié)議:

(1)用戶數(shù)據(jù)報協(xié)議UDP(UserDatagramProtocol) (2)傳輸控制協(xié)議TCP(TransmissionControlProtocol)5.2用戶數(shù)據(jù)報協(xié)議UDP提供主機通信IP服務(wù)特性報文可能丟失報文可能出錯報文可能亂序到達(dá)報文在網(wǎng)絡(luò)上可能被延遲任意長時間支持多路復(fù)用提供進(jìn)程通信UDP服務(wù)特性報文可能丟失報文可能出錯報文可能亂序到達(dá)報文在網(wǎng)絡(luò)上可能被延遲任意長時間支持多路復(fù)用IP與UDP關(guān)系IP提供主機通信通信對象命名是IP地址IP地址定位到主機UDP提供進(jìn)程通信通信對象命名是Port號Port號定位到進(jìn)程UDP用戶數(shù)據(jù)報UDP首部UDP用戶數(shù)據(jù)報的數(shù)據(jù)部分運輸層IP數(shù)據(jù)報的數(shù)據(jù)部分IP首部IP層應(yīng)用層報文應(yīng)用層源端口目的端口長度檢驗和數(shù)據(jù)首部IP數(shù)據(jù)報2222字節(jié)發(fā)送在前數(shù)據(jù)首部UDP用戶數(shù)據(jù)報用戶數(shù)據(jù)報UDP有兩個字段:數(shù)據(jù)字段和首部字段。首部字段有8個字節(jié),由4個字段組成,每個字段都是兩個字節(jié)。UDP的報文格式UDP的報文格式源端口目的端口長度檢驗和數(shù)據(jù)首部IP數(shù)據(jù)報UDP長度源IP地址目的IP地址017字節(jié)441122222偽首部12字節(jié)發(fā)送在前數(shù)據(jù)首部UDP用戶數(shù)據(jù)報在計算檢驗和時,臨時把“偽首部”和UDP用戶數(shù)據(jù)報連接在一起。偽首部僅僅是為了計算檢驗和。計算UDP檢驗和的例子1001100100010011→153.190000100001101000→8.1041010101100000011→171.30000111000001011→14.110000000000010001→0和170000000000001111→150000010000111111→10870000000000001101→130000000000001111→150000000000000000→0(檢驗和)0101010001000101→數(shù)據(jù)0101001101010100→數(shù)據(jù)0100100101001110→數(shù)據(jù)0100011100000000→數(shù)據(jù)和0(填充)1001011011101101→求和得出的結(jié)果0110100100010010→檢驗和153.19.8.104171.3.14.1112字節(jié)偽首部8字節(jié)UDP首部7字節(jié)數(shù)據(jù)填充按二進(jìn)制反碼運算求和將得出的結(jié)果求反碼全0171510871315全0數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)全0多路復(fù)用Port4Port1……Port4Port1……5.3傳輸控制協(xié)議TCP概述面向連接全雙工點到點可靠交付字節(jié)流服務(wù)多路復(fù)用流量控制保證發(fā)送方不要“淹沒”接收方擁塞控制保證發(fā)送方不要“淹沒”網(wǎng)絡(luò)TCP面向流的概念768HTCP面向流的概念發(fā)送TCP報文段發(fā)送方接收方把字節(jié)寫入發(fā)送緩存從接收緩存讀取字節(jié)應(yīng)用進(jìn)程應(yīng)用進(jìn)程1230181716151419202145131211H109H加上TCP首部構(gòu)成TCP報文段TCPTCP字節(jié)流字節(jié)流H表示TCP報文段的首部x表示序號為x的數(shù)據(jù)字節(jié)TCP連接TCP的連接套接字socket=(IP地址:端口號)(5-1)每一條TCP連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定。即:

TCP連接::={socket1,socket2}={(IP1:port1),(IP2:port2)}(5-2)TCP連接的端點叫做套接字(socket)或插口。5.4可靠傳輸?shù)墓ぷ髟?/p>

1)停止等待協(xié)議2)連續(xù)自動重傳請求協(xié)議ARQ (AutomaticRepeatreQuest)停止等待協(xié)議發(fā)送方發(fā)送方的發(fā)送一個分組后就停止下來,等待接收方返回的確認(rèn)分組。如果經(jīng)過一段時間后發(fā)送方還沒有收到確認(rèn)分組,則發(fā)送方定時器超時,并重傳該分組。接收方接收方每接收到一個正確的新分組就上交給高層,然后返回發(fā)送方一個ACK;如果接收到是正確的舊分組,接收方只返回發(fā)送方一個ACK;停止等待協(xié)議

A發(fā)送M1B超時重傳M1發(fā)送M2確認(rèn)M1丟棄有差錯的報文(b)超時重傳tt(a)無差錯情況A發(fā)送M1確認(rèn)M1B發(fā)送M2發(fā)送M3確認(rèn)M2確認(rèn)M3tt確認(rèn)丟失和確認(rèn)遲到A發(fā)送M1B超時重傳M1發(fā)送M2丟棄重復(fù)的M1重傳確認(rèn)M1(a)確認(rèn)丟失確認(rèn)M1ttA發(fā)送M1B超時重傳M1發(fā)送M2丟棄重復(fù)的M1重傳確認(rèn)M1(b)確認(rèn)遲到確認(rèn)M1收下遲到的確認(rèn)但什么也不做tt信道利用率停止等待協(xié)議的優(yōu)點是簡單,但缺點是信道利用率太低。TDRTTATD+RTT+TAB分組確認(rèn)tt分組確認(rèn)信道的利用率流水線傳輸發(fā)送方可連續(xù)發(fā)送多個分組,不必每發(fā)完一個分組就停頓下來等待對方的確認(rèn)。由于信道上一直有數(shù)據(jù)不間斷地傳送,這種傳輸方式可獲得很高的信道利用率。B分組ttAACK連續(xù)ARQ協(xié)議123456789101112(a)發(fā)送方維持發(fā)送窗口(發(fā)送窗口是5)發(fā)送窗口(b)收到一個確認(rèn)后發(fā)送窗口向前滑動向前123456789101112發(fā)送窗口發(fā)送方看到的序號累積確認(rèn)接收方一般采用累積確認(rèn)的方式。即不必對收到的分組逐個發(fā)送確認(rèn),而是對按序到達(dá)的最后一個分組發(fā)送確認(rèn),這樣就表示:到這個分組為止的所有分組都已正確收到了。優(yōu)點:容易實現(xiàn),即使確認(rèn)丟失也不必重傳。缺點:不能向發(fā)送方反映出接收方已經(jīng)正確收到的所有分組的信息。Go-back-N(回退N)舉例發(fā)送窗口尺寸最大為:2n-1,接收窗口尺寸為:1選擇重傳協(xié)議發(fā)送緩沖區(qū)2n-1>1接收緩沖區(qū)2n-1>1發(fā)送方和接收方看到的序號舉例TCP可靠通信的具體實現(xiàn)TCP連接的每一端都必須設(shè)有兩個窗口——一個發(fā)送窗口和一個接收窗口。

TCP的可靠傳輸機制用字節(jié)的序號進(jìn)行控制。TCP所有的確認(rèn)都是基于序號而不是基于報文段。

TCP兩端的四個窗口經(jīng)常處于動態(tài)變化之中。TCP連接的往返時間RTT也不是固定不變的。需要使用特定的算法估算較為合理的重傳時間。TCP首部20字節(jié)的固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FIN32位SYNRSTPSHACKURG位08162431填充TCP數(shù)據(jù)部分TCP首部TCP報文段IP數(shù)據(jù)部分IP首部發(fā)送在前5.5TCP報文段的首部格式TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充源端口和目的端口字段——各占2字節(jié)。端口是運輸層與應(yīng)用層的服務(wù)接口。運輸層的復(fù)用和分用功能都要通過端口才能實現(xiàn)。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充序號字段——占4字節(jié)。TCP連接中傳送的數(shù)據(jù)流中的每一個字節(jié)都編上一個序號。序號字段的值則指的是本報文段所發(fā)送的數(shù)據(jù)的第一個字節(jié)的序號。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充確認(rèn)號字段——占4字節(jié),是期望收到對方的下一個報文段的數(shù)據(jù)的第一個字節(jié)的序號。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充數(shù)據(jù)偏移(即首部長度)——占4位,它指出TCP報文段的數(shù)據(jù)起始處距離TCP報文段的起始處有多遠(yuǎn)?!皵?shù)據(jù)偏移”的單位是32位字(以4字節(jié)為計算單位)。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充保留字段——占6位,保留為今后使用,但目前應(yīng)置為0。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充緊急URG——當(dāng)URG1時,表明緊急指針字段有效。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級的數(shù)據(jù))。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充確認(rèn)ACK——只有當(dāng)ACK1時確認(rèn)號字段才有效。當(dāng)ACK0時,確認(rèn)號無效。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充推送PSH(PuSH)——接收TCP收到PSH=1的報文段,就盡快地交付接收應(yīng)用進(jìn)程,而不再等到整個緩存都填滿了后再向上交付。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充復(fù)位RST(ReSeT)——當(dāng)RST1時,表明TCP連接中出現(xiàn)嚴(yán)重差錯(如由于主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充同步SYN——同步SYN=1表示這是一個連接請求或連接接受報文。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充終止FIN(FINis)——用來釋放一個連接。FIN1表明此報文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運輸連接。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充窗口字段——占2字節(jié),用來讓對方設(shè)置發(fā)送窗口的依據(jù),單位為字節(jié)。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充檢驗和——占2字節(jié)。檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分。在計算檢驗和時,要在TCP報文段的前面加上12字節(jié)的偽首部。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充緊急指針字段——占16位,指出在本報文段中緊急數(shù)據(jù)共有多少個字節(jié)(緊急數(shù)據(jù)放在本報文段數(shù)據(jù)的最前面)。

TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充選項字段——長度可變。TCP最初只規(guī)定了一種選項,即最大報文段長度

MSS。MSS告訴對方TCP:“我的緩存所能接收的報文段的數(shù)據(jù)字段的最大長度是MSS個字節(jié)。”MSS(MaximumSegmentSize)是TCP報文段中的數(shù)據(jù)字段的最大長度。數(shù)據(jù)字段加上TCP首部才等于整個的TCP報文段。其他選項窗口擴(kuò)大選項——占3字節(jié),其中有一個字節(jié)表示移位值S。新的窗口值等于TCP首部中的窗口位數(shù)增大到(16+S),相當(dāng)于把窗口值向左移動S位后獲得實際的窗口大小。時間戳選項——占10字節(jié),其中最主要的字段時間戳值字段(4字節(jié))和時間戳回送回答字段(4字節(jié))。選擇確認(rèn)選項——在后面的5.6.3節(jié)介紹。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充填充字段——這是為了使整個首部長度是4字節(jié)的整數(shù)倍。5-9TCP的運輸連接管理運輸連接就有三個階段,即:連接建立、數(shù)據(jù)傳送和連接釋放。運輸連接的管理就是使運輸連接的建立和釋放都能正常地進(jìn)行。連接建立過程中要解決以下三個問題:要使每一方能夠確知對方的存在。要允許雙方協(xié)商一些參數(shù)(如最大報文段長度,最大窗口大小,服務(wù)質(zhì)量等)。能夠?qū)\輸實體資源(如緩存大小,連接表中的項目等)進(jìn)行分配。TCP連接的建立都是采用客戶服務(wù)器方式。主動發(fā)起連接建立的應(yīng)用進(jìn)程叫做客戶(client)。被動等待連接建立的應(yīng)用進(jìn)程叫做服務(wù)器(server)。

用三次握手建立TCP連接SYN=1,seq=xCLOSEDCLOSED主動打開被動打開AB客戶服務(wù)器A的TCP向B發(fā)出連接請求報文段,其首部中的同步位SYN=1,并選擇序號seq=x,表明傳送數(shù)據(jù)時的第一個數(shù)據(jù)字節(jié)的序號是x。

用三次握手建立TCP連接

SYN=1,seq=xCLOSEDCLOSED主動打開被動打開AB客戶服務(wù)器SYN=1,ACK=1,seq=y,ack=x1

B的TCP收到連接請求報文段后,如同意,則發(fā)回確認(rèn)。

B在確認(rèn)報文段中應(yīng)使SYN=1,使ACK=1,其確認(rèn)號ack=x1,自己選擇的序號seq=y。SYN=1,seq=xACK=1,seq=x+1,ack=y1CLOSEDCLOSED主動打開被動打開AB客戶服務(wù)器SYN=1,ACK=1,seq=y,ack=x1

A收到此報文段后向B給出確認(rèn),其ACK=1,確認(rèn)號ack=y1。

A的TCP通知上層應(yīng)用進(jìn)程,連接已經(jīng)建立。SYN=1,seq=xACK=1,seq=x+1,ack=y1CLOSEDCLOSED數(shù)據(jù)傳送主動打開被動打開AB客戶服務(wù)器SYN=1,ACK=1,seq=y,ack=x1

B的TCP收到主機A的確認(rèn)后,也通知其上層應(yīng)用進(jìn)程:TCP連接已經(jīng)建立。SYN-SENTESTAB-LISHEDSYN-RCVDLISTENESTAB-LISHED

用三次握手建立TCP連接的各狀態(tài)

SYN=1,seq=xACK=1,seq=x+1,ack=y1CLOSEDCLOSED數(shù)據(jù)傳送主動打開被動打開AB客戶服務(wù)器SYN=1,ACK=1,seq=y,ack=x1FIN=1,seq=uCLOSED主動關(guān)閉數(shù)據(jù)傳送ESTAB-LISHEDESTAB-LISHEDAB客戶服務(wù)器CLOSEDTCP

的連接釋放數(shù)據(jù)傳輸結(jié)束后,通信的雙方都可釋放連接?,F(xiàn)在A的應(yīng)用進(jìn)程先向其TCP發(fā)出連接釋放報文段,并停止再發(fā)送數(shù)據(jù),主動關(guān)閉TCP

連接。

A把連接釋放報文段首部的FIN=1,其序號

seq=u,等待B的確認(rèn)。FIN=1,seq=uACK=1,seq=v,ack=u1主動關(guān)閉數(shù)據(jù)傳送通知應(yīng)用進(jìn)程ESTAB-LISHEDESTAB-LISHEDAB客戶服務(wù)器TCP

的連接釋放

B發(fā)出確認(rèn),確認(rèn)號ack=u1,而這個報文段自己的序號seq=v。

TCP服務(wù)器進(jìn)程通知高層應(yīng)用進(jìn)程。從A到B這個方向的連接就釋放了,TCP連接處于半關(guān)閉狀態(tài)。B若發(fā)送數(shù)據(jù),A仍要接收。FIN=1,seq=uACK=1,seq=v,ack=u1FIN=1,ACK=1,seq=w,ack=u1主動關(guān)閉被動關(guān)閉數(shù)據(jù)傳送通知應(yīng)用進(jìn)程ESTAB-LISHEDESTAB-LISHEDAB客戶服務(wù)器數(shù)據(jù)傳送TCP

的連接釋放若B已經(jīng)沒有要向A發(fā)送的數(shù)據(jù),其應(yīng)用進(jìn)程就通知TCP釋放連接。FIN=1,seq=uACK=1,seq=v,ack=u1FIN=1,ACK=1,seq=w,ack=u1主動關(guān)閉被動關(guān)閉數(shù)據(jù)傳送通知應(yīng)用進(jìn)程ESTAB-LISHEDESTAB-LISHEDAB客戶服務(wù)器數(shù)據(jù)傳送TCP

的連接釋放

A收到連接釋放報文段后,必須發(fā)出確認(rèn)。ACK=1,seq=u+1,ack=w1FIN=1,seq=uACK=1,seq=v,ack=u1FIN=1,ACK=1,seq=w,ack=u1主動關(guān)閉被動關(guān)閉數(shù)據(jù)傳送通知應(yīng)用進(jìn)程ESTAB-LISHEDESTAB-LISHEDAB客戶服務(wù)器數(shù)據(jù)傳送TCP

的連接釋放在確認(rèn)報文段中ACK=1,確認(rèn)號ack

w1,自己的序號seq=u+1。ACK=1,seq=u+1,ack=w1CLOSEDACK=1,seq=u+1,ack=w1FIN=1,seq=uACK=1,seq=v,ack=u1FIN=1,ACK=1,seq=w,ack=u1FIN-WAIT-1CLOSE-WAITFIN-WAIT-2LAST-ACK等待2MSLTIME-WAIT主動關(guān)閉被動關(guān)閉數(shù)據(jù)傳送通知應(yīng)用進(jìn)程ESTAB-LISHEDESTAB-LISHEDAB客戶服務(wù)器數(shù)據(jù)傳送CLOSED5.9.2TCP

的連接釋放TCP連接必須經(jīng)過時間2MSL后才真正釋放掉。A必須等待2MSL的時間TCP的有限狀態(tài)機TCP有限狀態(tài)機的圖中每一個方框都是TCP可能具有的狀態(tài)。每個方框中的大寫英文字符串是TCP標(biāo)準(zhǔn)所使用的TCP連接狀態(tài)名。狀態(tài)之間的箭頭表示可能發(fā)生的狀態(tài)變遷。箭頭旁邊的字,表明引起這種變遷的原因,或表明發(fā)生狀態(tài)變遷后又出現(xiàn)什么動作。圖中有三種不同的箭頭。粗實線箭頭表示對客戶進(jìn)程的正常變遷。粗虛線箭頭表示對服務(wù)器進(jìn)程的正常變遷。另一種細(xì)線箭頭表示異常變遷。TCP

態(tài)

機CLOSEDESTABLISHEDLISTENCLOSE_WAITFIN_WAIT_1SYN_RCVDFIN_WAIT_2CLOSINGTIME_WAITSYN_SENTLAST_ACK主動打開被動打開被動關(guān)閉主動關(guān)閉起點被動打開主動打開發(fā)送SYN同時打開收到SYN,發(fā)送SYN,ACK收到ACK數(shù)據(jù)傳送階段關(guān)閉發(fā)送FIN關(guān)閉發(fā)送FIN關(guān)閉發(fā)送FIN收到RST收到SYN發(fā)送SYN,ACK關(guān)閉或超時收到ACK收到SYN,ACK發(fā)送ACK收到ACK收到ACK收到FIN發(fā)送ACK收到FIN,ACK

發(fā)送ACK收到FIN發(fā)送ACK同時關(guān)閉收到FIN發(fā)送ACK發(fā)送SYN定時經(jīng)過兩倍報文段壽命后關(guān)閉5.6TCP可靠傳輸?shù)膶崿F(xiàn)

5.6.1以字節(jié)為單位的滑動窗口前移不允許發(fā)送已發(fā)送并收到確認(rèn)A的發(fā)送窗口=20允許發(fā)送的序號26272829303132333435363738394041424344454647484950515253545556B期望收到的序號前沿后沿前移收縮根據(jù)B給出的窗口值A(chǔ)構(gòu)造出自己的發(fā)送窗口TCP標(biāo)準(zhǔn)強烈不贊成發(fā)送窗口前沿向后收縮不允許發(fā)送已發(fā)送并收到確認(rèn)A的發(fā)送窗口位置不變允許發(fā)送但尚未發(fā)送262728293031323334353637383940414243444546474849505152535455已發(fā)送但未收到確認(rèn)56P1P2P3不允許接收已發(fā)送確認(rèn)并交付主機B的接收窗口允許接收26272829303132333435363738394041424344454647484950515253545556未按序收到可用窗口A發(fā)送了11個字節(jié)的數(shù)據(jù)P3–P1=A的發(fā)送窗口(又稱為通知窗口)P2–P1=已發(fā)送但尚未收到確認(rèn)的字節(jié)數(shù)P3–P2=允許發(fā)送但尚未發(fā)送的字節(jié)數(shù)(又稱為可用窗口)允許發(fā)送但尚未發(fā)送A的發(fā)送窗口向前滑動262728293031323334353637383940414243444546474849505152535455已發(fā)送并收到確認(rèn)不允許發(fā)送已發(fā)送但未收到確認(rèn)56P1P2P3允許接收B的接收窗口向前滑動262728293031323334353637383940414243444546474849505152535455已發(fā)送確認(rèn)并交付主機不允許接收56未按序收到A收到新的確認(rèn)號,發(fā)送窗口向前滑動先存下,等待缺少的數(shù)據(jù)的到達(dá)不允許發(fā)送已發(fā)送并收到確認(rèn)A的發(fā)送窗口已滿,有效窗口為零262728293031323334353637383940414243444546474849505152535455已發(fā)送但未收到確認(rèn)56P1P2P3A的發(fā)送窗口內(nèi)的序號都已用完,但還沒有再收到確認(rèn),必須停止發(fā)送。發(fā)送緩存最后被確認(rèn)的字節(jié)發(fā)送應(yīng)用程序發(fā)送緩存最后發(fā)送的字節(jié)發(fā)送窗口已發(fā)送TCP序號增大接收緩存接收應(yīng)用程序已收到接收窗口TCP接收緩存下一個讀取的字節(jié)序號增大下一個期望收到的字節(jié)(確認(rèn)號)發(fā)送緩存與接收緩存的作用發(fā)送緩存用來暫時存放:

發(fā)送應(yīng)用程序傳送給發(fā)送方TCP準(zhǔn)備發(fā)送的數(shù)據(jù);

TCP已發(fā)送出但尚未收到確認(rèn)的數(shù)據(jù)。接收緩存用來暫時存放:

按序到達(dá)的、但尚未被接收應(yīng)用程序讀取的數(shù)據(jù);

不按序到達(dá)的數(shù)據(jù)。

需要強調(diào)三點A的發(fā)送窗口并不總是和B的接收窗口一樣大(因為有一定的時間滯后)。TCP標(biāo)準(zhǔn)沒有規(guī)定對不按序到達(dá)的數(shù)據(jù)應(yīng)如何處理。通常是先臨時存放在接收窗口中,等到字節(jié)流中所缺少的字節(jié)收到后,再按序交付上層的應(yīng)用進(jìn)程。TCP要求接收方必須有累積確認(rèn)的功能,這樣可以減小傳輸開銷。5.6.2超時重傳時間的選擇重傳機制是TCP中最重要和最復(fù)雜的問題之一。TCP每發(fā)送一個報文段,就對這個報文段設(shè)置一次計時器。只要計時器設(shè)置的重傳時間到但還沒有收到確認(rèn),就要重傳這一報文段。往返時延的方差很大由于TCP的下層是一個互聯(lián)網(wǎng)環(huán)境,IP數(shù)據(jù)報所選擇的路由變化很大。因而運輸層的往返時間的方差也很大。時間數(shù)據(jù)鏈路層運輸層T1T2T3往返時間的概率分布加權(quán)平均往返時間TCP保留了RTT的一個加權(quán)平均往返時間

RTTS(這又稱為平滑的往返時間)。第一次測量到RTT樣本時,RTTS值就取為所測量到的RTT樣本值。以后每測量到一個新的RTT樣本,就按下式重新計算一次RTTS:

新的RTTS

(1

)(舊的RTTS)

(新的RTT樣本)(5-4)式中,0

1。若很接近于零,表示RTT值更新較慢。若選擇接近于1,則表示RTT值更新較快。RFC2988推薦的值為1/8,即0.125。超時重傳時間RTO(RetransmissionTime-Out)

RTO應(yīng)略大于上面得出的加權(quán)平均往返時間RTTS。RFC2988建議使用下式計算RTO:

RTORTTS+4RTTD(5-5)RTTD是RTT的偏差的加權(quán)平均值。RFC2988建議這樣計算RTTD。第一次測量時,RTTD值取為測量到的RTT樣本值的一半。在以后的測量中,則使用下式計算加權(quán)平均的RTTD:新的RTTD=(1

)(舊的RTTD)+

RTTS

新的RTT樣本

(5-6)是個小于1的系數(shù),其推薦值是1/4,即0.25。往返時間RTT?往返時間的測量相當(dāng)復(fù)雜TCP報文段1沒有收到確認(rèn)。重傳(即報文段2)后,收到了確認(rèn)報文段ACK。如何判定此確認(rèn)報文段是對原來的報文段1的確認(rèn),還是對重傳的報文段2的確認(rèn)?發(fā)送一個TCP報文段超時重傳TCP報文段收到ACK時間12往返時間RTT?是對哪一個報文段的確認(rèn)?Karn

算法在計算平均往返時間RTT時,只要報文段重傳了,就不采用其往返時間樣本。這樣得出的加權(quán)平均平均往返時間RTTS

和超時重傳時間RTO就較準(zhǔn)確。報文段每重傳一次,就把RTO增大一些:新的RTO

(舊的RTO)系數(shù)的典型值是2。當(dāng)不再發(fā)生報文段的重傳時,才根據(jù)報文段的往返時延更新平均往返時延RTT和超時重傳時間RTO的數(shù)值。實踐證明,這種策略較為合理。修正的Karn

算法5.6.3選擇確認(rèn)SACK

(SelectiveACK)

接收方收到了和前面的字節(jié)流不連續(xù)的兩個字節(jié)塊。如果這些字節(jié)的序號都在接收窗口之內(nèi),那么接收方就先收下這些數(shù)據(jù),但要把這些信息準(zhǔn)確地告訴發(fā)送方,使發(fā)送方不要再重復(fù)發(fā)送這些已收到的數(shù)據(jù)。110001501300035014500確認(rèn)號=1001L1=1501L2=3501R1=3001R1=4501接收到的字節(jié)流序號不連續(xù)……連續(xù)的字節(jié)流………第一個字節(jié)塊第二個字節(jié)塊和前后字節(jié)不連續(xù)的每一個字節(jié)塊都有兩個邊界:左邊界和右邊界。圖中用四個指針標(biāo)記這些邊界。第一個字節(jié)塊的左邊界L1=1501,但右邊界R1=3001。左邊界指出字節(jié)塊的第一個字節(jié)的序號,但右邊界減1才是字節(jié)塊中的最后一個序號。第二個字節(jié)塊的左邊界L2=3501,而右邊界R2=4501。RFC2018的規(guī)定如果要使用選擇確認(rèn),那么在建立TCP連接時,就要在TCP首部的選項中加上“允許SACK”的選項,而雙方必須都事先商定好。如果使用選擇確認(rèn),那么原來首部中的“確認(rèn)號字段”的用法仍然不變。只是以后在TCP報文段的首部中都增加了SACK選項,以便報告收到的不連續(xù)的字節(jié)塊的邊界。由于首部選項的長度最多只有40字節(jié),而指明一個邊界就要用掉4字節(jié),因此在選項中最多只能指明4個字節(jié)塊的邊界信息。5.7TCP的流量控制

5.7.1利用滑動窗口實現(xiàn)流量控制一般說來,我們總是希望數(shù)據(jù)傳輸?shù)酶煲恍5绻l(fā)送方把數(shù)據(jù)發(fā)送得過快,接收方就可能來不及接收,這就會造成數(shù)據(jù)的丟失。流量控制(flowcontrol)就是讓發(fā)送方的發(fā)送速率不要太快,既要讓接收方來得及接收,也不要使網(wǎng)絡(luò)發(fā)生擁塞。利用滑動窗口機制可以很方便地在TCP連接上實現(xiàn)流量控制。seq=1,DATAseq=201,DATAseq=401,DATAseq=301,DATAseq=101,DATAseq=201,DATAseq=501,DATAACK=1,ack=201,rwnd=300ACK=1,ack=601,rwnd=0ACK=1,ack=501,rwnd=100AB允許A發(fā)送序號201至500共300字節(jié)A發(fā)送了序號101至200,還能發(fā)送200字節(jié)A發(fā)送了序號301至400,還能再發(fā)送100字節(jié)新數(shù)據(jù)A發(fā)送了序號1至100,還能發(fā)送300字節(jié)A發(fā)送了序號401至500,不能再發(fā)送新數(shù)據(jù)了A超時重傳舊的數(shù)據(jù),但不能發(fā)送新的數(shù)據(jù)允許A發(fā)送序號501至600共100字節(jié)A發(fā)送了序號501至600,不能再發(fā)送了不允許A再發(fā)送(到序號600為止的數(shù)據(jù)都收到了)丟失!流量控制舉例A向B發(fā)送數(shù)據(jù)。在連接建立時,

B告訴A:“我的接收窗口rwnd=400(字節(jié))”。持續(xù)計時器

(persistencetimer)。TCP為每一個連接設(shè)有一個持續(xù)計時器。只要TCP連接的一方收到對方的零窗口通知,就啟動持續(xù)計時器。若持續(xù)計時器設(shè)置的時間到期,就發(fā)送一個零窗口探測報文段(僅攜帶1字節(jié)的數(shù)據(jù)),而對方就在確認(rèn)這個探測報文段時給出了現(xiàn)在的窗口值。若窗口仍然是零,則收到這個報文段的一方就重新設(shè)置持續(xù)計時器。若窗口不是零,則死鎖的僵局就可以打破了。5.7.2必須考慮傳輸效率可以用不同的機制來控制TCP報文段的發(fā)送時機:第一種機制是TCP維持一個變量,它等于最大報文段長度MSS。只要緩存中存放的數(shù)據(jù)達(dá)到MSS字節(jié)時,就組裝成一個TCP報文段發(fā)送出去。第二種機制是由發(fā)送方的應(yīng)用進(jìn)程指明要求發(fā)送報文段,即TCP支持的推送(push)操作。第三種機制是發(fā)送方的一個計時器期限到了,這時就把當(dāng)前已有的緩存數(shù)據(jù)裝入報文段(但長度不能超過MSS)發(fā)送出去。5.8TCP的擁塞控制

5.8.1擁塞控制的一般原理在某段時間,若對網(wǎng)絡(luò)中某資源的需求超過了該資源所能提供的可用部分,網(wǎng)絡(luò)的性能就要變壞——產(chǎn)生擁塞(congestion)。出現(xiàn)資源擁塞的條件:對資源需求的總和>可用資源(5-7)若網(wǎng)絡(luò)中有許多資源同時產(chǎn)生擁塞,網(wǎng)絡(luò)的性能就要明顯變壞,整個網(wǎng)絡(luò)的吞吐量將隨輸入負(fù)荷的增大而下降。擁塞控制與流量控制的關(guān)系擁塞控制所要做的都有一個前提,就是網(wǎng)絡(luò)能夠承受現(xiàn)有的網(wǎng)絡(luò)負(fù)荷。擁塞控制是一個全局性的過程,涉及到所有的主機、所有的路由器,以及與降低網(wǎng)絡(luò)傳輸性能有關(guān)的所有因素。流量控制往往指在給定的發(fā)送端和接收端之間的點對點通信量的控制。流量控制所要做的就是抑制發(fā)送端發(fā)送數(shù)據(jù)的速率,以便使接收端來得及接收。擁塞控制所起的作用提供的負(fù)載吞吐量理想的擁塞控制實際的擁塞控制0死鎖(吞吐量=0)無擁塞控制擁塞輕度擁塞擁塞控制的一般原理擁塞控制是很難設(shè)計的,因為它是一個動態(tài)的(而不是靜態(tài)的)問題。當(dāng)前網(wǎng)絡(luò)正朝著高速化的方向發(fā)展,這很容易出現(xiàn)緩存不夠大而造成分組的丟失。但分組的丟失是網(wǎng)絡(luò)發(fā)生擁塞的征兆而不是原因。在許多情況下,甚至正是擁塞控制本身成為引起網(wǎng)絡(luò)性能惡化甚至發(fā)生死鎖的原因。這點應(yīng)特別引起重視。開環(huán)控制和閉環(huán)控制開環(huán)控制方法就是在設(shè)計網(wǎng)絡(luò)時事先將有關(guān)發(fā)生擁塞的因素考慮周到,力求網(wǎng)絡(luò)在工作時不產(chǎn)生擁塞。閉環(huán)控制是基于反饋環(huán)路的概念。屬于閉環(huán)控制的有以下幾種措施:監(jiān)測網(wǎng)絡(luò)系統(tǒng)以便檢測到擁塞在何時、何處發(fā)生。將擁塞發(fā)生的信息傳送到可采取行動的地方。調(diào)整網(wǎng)絡(luò)系統(tǒng)的運行以解決出現(xiàn)的問題。5.8.2幾種擁塞控制方法

1.慢開始和擁塞避免發(fā)送方維持一個叫做擁塞窗口cwnd(congestionwindow)的狀態(tài)變量。擁塞窗口的大小取決于網(wǎng)絡(luò)的擁塞程度,并且動態(tài)地在變化。發(fā)送方讓自己的發(fā)送窗口等于擁塞窗口。如再考慮到接收方的接收能力,則發(fā)送窗口還可能小于擁塞窗口。發(fā)送方控制擁塞窗口的原則是:只要網(wǎng)絡(luò)沒有出現(xiàn)擁塞,擁塞窗口就再增大一些,以便把更多的分組發(fā)送出去。但只要網(wǎng)絡(luò)出現(xiàn)擁塞,擁塞窗口就減小一些,以減少注入到網(wǎng)絡(luò)中的分組數(shù)。慢開始算法的原理在主機剛剛開始發(fā)送報文段時可先設(shè)置擁塞窗口cwnd=1,即設(shè)置為一個最大報文段MSS的數(shù)值。在每收到一個對新的報文段的確認(rèn)后,將擁塞窗口加1,即增加一個MSS的數(shù)值。用這樣的方法逐步增大發(fā)送端的擁塞窗口cwnd,可以使分組注入到網(wǎng)絡(luò)的速率更加合理。發(fā)送方接收方發(fā)送M1確認(rèn)M1發(fā)送M2~M3確認(rèn)M2~M3發(fā)送M4~M7確認(rèn)M4~M7cwnd=1cwnd=2cwnd=4發(fā)送M8~M15cwnd=8…tt發(fā)送方每收到一個對新報文段的確認(rèn)(重傳的不算在內(nèi))就使cwnd

加1。輪次1輪次2輪次3傳輸輪次

(transmissionround)使用慢開始算法后,每經(jīng)過一個傳輸輪次,擁塞窗口cwnd

就加倍。一個傳輸輪次所經(jīng)歷的時間其實就是往返時間RTT?!皞鬏斴喆巍备訌娬{(diào):把擁塞窗口cwnd

所允許發(fā)送的報文段都連續(xù)發(fā)送出去,并收到了對已發(fā)送的最后一個字節(jié)的確認(rèn)。例如,擁塞窗口cwnd=4,這時的往返時間RTT就是發(fā)送方連續(xù)發(fā)送4個報文段,并收到這4個報文段的確認(rèn),總共經(jīng)歷的時間。設(shè)置慢開始門限狀態(tài)變量ssthresh慢開始門限ssthresh

的用法如下:當(dāng)cwnd<ssthresh

時,使用慢開始算法。當(dāng)cwnd>ssthresh

時,停止使用慢開始算法而改用擁塞避免算法。當(dāng)cwnd=ssthresh

時,既可使用慢開始算法,也可使用擁塞避免算法。擁塞避免算法的思路是讓擁塞窗口cwnd

緩慢地增大,即每經(jīng)過一個往返時間RTT就把發(fā)送方的擁塞窗口cwnd

加1,而不是加倍,使擁塞窗口cwnd

按線性規(guī)律緩慢增長。當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞時無論在慢開始階段還是在擁塞避免階段,只要發(fā)送方判斷網(wǎng)絡(luò)出現(xiàn)擁塞(其根據(jù)就是沒有按時收到確認(rèn)),就要把慢開始門限ssthresh

設(shè)置為出現(xiàn)擁塞時的發(fā)送方窗口值的一半(但不能小于2)。然后把擁塞窗口cwnd

重新設(shè)置為1,執(zhí)行慢開始算法。這樣做的目的就是要迅速減少主機發(fā)送到網(wǎng)絡(luò)中的分組數(shù),使得發(fā)生擁塞的路由器有足夠時間把隊列中積壓的分組處理完畢。2216慢開始和擁塞避免算法的實現(xiàn)舉例當(dāng)TCP連接進(jìn)行初始化時,將擁塞窗口置為1。圖中的窗口單位不使用字節(jié)而使用報文段。慢開始門限的初始值設(shè)置為16個報文段,即ssthresh=16?!俺朔p小”24681012141618200048122024擁塞窗口cwnd新的ssthresh

值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh

的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現(xiàn)舉例發(fā)送端的發(fā)送窗口不能超過擁塞窗口cwnd

和接收端窗口rwnd

中的最小值。我們假定接收端窗口足夠大,因此現(xiàn)在發(fā)送窗口的數(shù)值等于擁塞窗口的數(shù)值。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh

值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh

的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現(xiàn)舉例在執(zhí)行慢開始算法時,擁塞窗口cwnd

的初始值為1,發(fā)送第一個報文段M0。

2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh

值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh

的初始值慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現(xiàn)舉例發(fā)送端每收到一個確認(rèn),就把cwnd

加1。于是發(fā)送端可以接著發(fā)送M1和M2兩個報文段。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh

值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh

的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現(xiàn)舉例接收端共發(fā)回兩個確認(rèn)。發(fā)送端每收到一個對新報文段的確認(rèn),就把發(fā)送端的cwnd

加1?,F(xiàn)在cwnd

從2增大到4,并可接著發(fā)送后面的4個報文段。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh

值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh

的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現(xiàn)舉例發(fā)送端每收到一個對新報文段的確認(rèn),就把發(fā)送端的擁塞窗口加1,因此擁塞窗口cwnd

隨著傳輸輪次按指數(shù)規(guī)律增長。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh

值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh

的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現(xiàn)舉例當(dāng)擁塞窗口cwnd

增長到慢開始門限值ssthresh

時(即當(dāng)cwnd=16時),就改為執(zhí)行擁塞避免算法,擁塞窗口按線性規(guī)律增長。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh

值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh

的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh

值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh

的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”慢開始和

溫馨提示

  • 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

提交評論