計(jì)算機(jī)網(wǎng)絡(luò):第5章 運(yùn)輸層(培訓(xùn)資料)_第1頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò):第5章 運(yùn)輸層(培訓(xùn)資料)_第2頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò):第5章 運(yùn)輸層(培訓(xùn)資料)_第3頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò):第5章 運(yùn)輸層(培訓(xùn)資料)_第4頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò):第5章 運(yùn)輸層(培訓(xùn)資料)_第5頁(yè)
已閱讀5頁(yè),還剩104頁(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)介

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

面向信息處理

面向通信

用戶功能網(wǎng)絡(luò)功能運(yùn)輸層在層次體系結(jié)構(gòu)中的地位5.1.1進(jìn)程之間的通信一、運(yùn)輸層在體系結(jié)構(gòu)中的地位:1、從通信和信息處理角度看:運(yùn)輸層為相互通信的應(yīng)用進(jìn)程提供了邏輯通信運(yùn)輸層提供應(yīng)用進(jìn)程間的邏輯通信應(yīng)用進(jìn)程應(yīng)用進(jìn)程IP層主機(jī)AAP1AP2LAN1端口端口IP協(xié)議的作用范圍運(yùn)輸層協(xié)議TCP和UDP的作用范圍路由器1路由器2WANAP454321AP354321AP1AP2主機(jī)BLAN2AP3AP4運(yùn)輸層協(xié)議和網(wǎng)絡(luò)層協(xié)議的主要區(qū)別

應(yīng)用進(jìn)程…

應(yīng)用進(jìn)程…

IP協(xié)議的作用范圍(提供主機(jī)之間的邏輯通信)TCP和UDP協(xié)議的作用范圍(提供進(jìn)程之間的邏輯通信)因特網(wǎng)2、為什么需要運(yùn)輸層?1)、在一個(gè)網(wǎng)絡(luò)連接上復(fù)用多對(duì)進(jìn)程的通信。2)、解決多個(gè)互連的通信子網(wǎng)中通信協(xié)議的差異和提供的服務(wù)功能的不同。3)、解決網(wǎng)絡(luò)層及下兩層自身不能解決的傳輸錯(cuò)誤。二、運(yùn)輸層功能:1)提供應(yīng)用進(jìn)程的復(fù)用和分用2)為應(yīng)用進(jìn)程之間提供端到端的邏輯通信3)對(duì)收到的報(bào)文進(jìn)行差錯(cuò)檢測(cè)。4)可提供兩種不同的運(yùn)輸協(xié)議,即面向連接的TCP和無(wú)連接的UDP。

5)屏蔽掉下層通信子網(wǎng)的細(xì)節(jié),實(shí)現(xiàn)一條端到端的邏輯通信信道三、運(yùn)輸層與上下層之間的關(guān)系

運(yùn)輸實(shí)體運(yùn)輸實(shí)體運(yùn)輸協(xié)議

應(yīng)用層

網(wǎng)絡(luò)層(或網(wǎng)際層)主機(jī)A

運(yùn)輸服務(wù)用戶(應(yīng)用層實(shí)體)主機(jī)B

運(yùn)輸服務(wù)用戶(應(yīng)用層實(shí)體)運(yùn)輸層服務(wù)訪問(wèn)點(diǎn)TSAP網(wǎng)絡(luò)層服務(wù)訪問(wèn)點(diǎn)NSAP運(yùn)輸層層接口層接口5.1.2運(yùn)輸層的兩個(gè)協(xié)議

UDP(UserDatagramProtocol)——用戶數(shù)據(jù)報(bào)協(xié)議:提供無(wú)連接的服務(wù),盡最大努力交付。TCP(TransmissionControlProtocol)——傳輸控制協(xié)議:提供面向連接的服務(wù)

,可靠的服務(wù)1、幾個(gè)基本概念運(yùn)輸協(xié)議數(shù)據(jù)單元TPDU(TransportProtocolDataUnit):兩個(gè)對(duì)等運(yùn)輸實(shí)體在通信時(shí)傳送的數(shù)據(jù)單位。TCP報(bào)文段(segment):TCP傳送的數(shù)據(jù)單位UDP報(bào)文或用戶數(shù)據(jù)報(bào):

UDP傳送的數(shù)據(jù)單位。

2、兩者相同的地方:1)、UDP和TCP都使用IP協(xié)議2)、發(fā)送數(shù)據(jù)時(shí),其協(xié)議數(shù)據(jù)單元PDU都作為下面IP數(shù)據(jù)報(bào)中的數(shù)據(jù)。3)、接收數(shù)據(jù)時(shí),將IP首部去掉后,根據(jù)上層使用的什么運(yùn)輸協(xié)議,把數(shù)據(jù)部分交給上層的UDP或TCP。與各種網(wǎng)絡(luò)接口IPUDPTCP3、兩者不同的地方:1)UDP在傳送數(shù)據(jù)之前不需要先建立連接。對(duì)方的運(yùn)輸層在收到UDP報(bào)文后,不需要給出任何確認(rèn)。UDP不提供可靠交付,有時(shí)UDP是一種最有效的工作方式。2)TCP則提供面向連接的服務(wù)。TCP不提供廣播或多播服務(wù)。TCP要提供可靠的、面向連接的運(yùn)輸服務(wù),會(huì)增加許多的開(kāi)銷。使協(xié)議數(shù)據(jù)單元的首部增大很多,也占用許多的處理機(jī)資源。3)兩者有各自不同的應(yīng)用,P182,表5-1一、為什么要用端口?1、運(yùn)行在計(jì)算機(jī)中的進(jìn)程是用進(jìn)程標(biāo)識(shí)符來(lái)標(biāo)志的。2、為了使運(yùn)行不同操作系統(tǒng)的計(jì)算機(jī)的應(yīng)用進(jìn)程能夠互相通信,就必須用統(tǒng)一的方法對(duì)TCP/IP體系的應(yīng)用進(jìn)程進(jìn)行標(biāo)志。3、進(jìn)程都是動(dòng)態(tài)創(chuàng)建和撤銷的,發(fā)方無(wú)法識(shí)別其他機(jī)器上的進(jìn)程。4、有時(shí)我們會(huì)改換接收?qǐng)?bào)文的進(jìn)程,但并不需要通知所有發(fā)送方。5、要利用目的主機(jī)提供的功能來(lái)識(shí)別終點(diǎn),而不需要知道實(shí)現(xiàn)這個(gè)功能的進(jìn)程。5.1.3運(yùn)輸層的端口

二、端口的概念:1、端口(協(xié)議端口號(hào)):運(yùn)輸層服務(wù)訪問(wèn)點(diǎn)TSAP,用來(lái)標(biāo)志應(yīng)用層的進(jìn)程。2、軟件端口和硬件端口:在協(xié)議棧層間的抽象的協(xié)議端口是軟件端口。路由器或交換機(jī)上的端口是硬件端口。3、TCP的端口:用16bit端口號(hào)來(lái)標(biāo)志,端口號(hào)只有本地意義,標(biāo)志本計(jì)算機(jī)的各應(yīng)用進(jìn)程,,通過(guò)端口號(hào)進(jìn)行通信的連接。4、三類端口及舉例:P184表三類端口及舉例熟知端口:數(shù)值一般為0~1023。登記端口號(hào):數(shù)值為1024~49151,為沒(méi)有熟知端口號(hào)的應(yīng)用程序使用的。使用這個(gè)范圍的端口號(hào)必須在IANA登記,以防止重復(fù)。客戶端口號(hào)或短暫端口號(hào):數(shù)值為49152~65535,留給客戶進(jìn)程選擇暫時(shí)使用。當(dāng)服務(wù)器進(jìn)程收到客戶進(jìn)程的報(bào)文時(shí),就知道了客戶進(jìn)程所使用的動(dòng)態(tài)端口號(hào)。通信結(jié)束后,這個(gè)端口號(hào)可供其他客戶進(jìn)程以后使用。5.2用戶數(shù)據(jù)報(bào)協(xié)議UDP5.2.1UDP概述:1、UDP功能:只在IP的數(shù)據(jù)報(bào)服務(wù)之上增加了很少一點(diǎn)的功能,即端口的功能和差錯(cuò)檢測(cè)的功能。2、主要特點(diǎn):UDP是無(wú)連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接。UDP使用盡最大努力交付,即不保證可靠交付,同時(shí)也不使用擁塞控制。UDP是面向報(bào)文的。UDP沒(méi)有擁塞控制,很適合多媒體通信的要求。UDP支持一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的交互通信。UDP的首部開(kāi)銷小,只有8個(gè)字節(jié)。UDP是面向報(bào)文的IP數(shù)據(jù)報(bào)的數(shù)據(jù)部分IP首部IP層UDP首部UDP用戶數(shù)據(jù)報(bào)的數(shù)據(jù)部分運(yùn)輸層應(yīng)用層報(bào)文應(yīng)用層發(fā)送方的UDP對(duì)應(yīng)用層交下來(lái)的報(bào)文,既不合并,也不拆分,在添加首部后就向下交付IP層,即一次發(fā)送一個(gè)報(bào)文。接收方的UDP對(duì)IP層交上來(lái)的UDP用戶數(shù)據(jù)報(bào),在去除首部后就原封不動(dòng)地交付上層的應(yīng)用進(jìn)程,一次交付一個(gè)完整的報(bào)文。應(yīng)用程序必須選擇合適大小的報(bào)文。返回5.2.2UDP數(shù)據(jù)報(bào)首部格式源IP地址目的IP地址017UDP長(zhǎng)度偽首部源端口目的端口長(zhǎng)度檢驗(yàn)和首部數(shù)據(jù)數(shù)據(jù)首部UDP用戶數(shù)據(jù)報(bào)IP數(shù)據(jù)報(bào)發(fā)送在前字節(jié)44112字節(jié)122222源端口目的端口UDP數(shù)據(jù)報(bào)的長(zhǎng)度校驗(yàn)和:要增加偽首部1、UDP報(bào)文格式:2、各字段意義:UDP有:數(shù)據(jù)字段和首部字段。首部字段有8個(gè)字節(jié),由4個(gè)字段組成,每個(gè)字段都是兩個(gè)字節(jié)。UDP基于端口的分用IP層UDP數(shù)據(jù)報(bào)到達(dá)端口2端口3端口1UDP分用偽首部源端口目的端口長(zhǎng)度檢驗(yàn)和數(shù)據(jù)首部UDP長(zhǎng)度源IP地址目的IP地址017IP數(shù)據(jù)報(bào)字節(jié)44112122222字節(jié)發(fā)送在前數(shù)據(jù)首部UDP用戶數(shù)據(jù)報(bào)在計(jì)算檢驗(yàn)和時(shí),臨時(shí)把“偽首部”和UDP用戶數(shù)據(jù)報(bào)連接在一起。偽首部?jī)H僅是為了計(jì)算檢驗(yàn)和。計(jì)算UDP檢驗(yàn)和的例子1001100100010011→153.190000100001101000→8.1041010101100000011→171.30000111000001011→14.110000000000010001→0和170000000000001111→150000010000111111→10870000000000001101→130000000000001111→150000000000000000→0(檢驗(yàn)和)0101010001000101→數(shù)據(jù)0101001101010100→數(shù)據(jù)0100100101001110→數(shù)據(jù)0100011100000000→數(shù)據(jù)和0(填充)1001011011101101→求和得出的結(jié)果0110100100010010→檢驗(yàn)和153.19.8.104171.3.14.1112字節(jié)偽首部8字節(jié)UDP首部7字節(jié)數(shù)據(jù)填充按二進(jìn)制反碼運(yùn)算求和將得出的結(jié)果求反碼全0171510871315全0數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)全05.3傳輸控制協(xié)議TCP概述5.3.1TCP最主要的特點(diǎn)TCP是面向連接的運(yùn)輸層協(xié)議。每一條TCP連接只能有兩個(gè)端點(diǎn)(endpoint),每一條TCP連接只能是點(diǎn)對(duì)點(diǎn)的(一對(duì)一)。TCP提供可靠交付的服務(wù)。

TCP提供全雙工通信。面向字節(jié)流。768H

TCP面向流的概念

發(fā)送TCP報(bào)文段發(fā)送方接收方把字節(jié)寫(xiě)入發(fā)送緩存從接收緩存讀取字節(jié)應(yīng)用進(jìn)程應(yīng)用進(jìn)程1230181716151419202145131211H109H加上TCP首部構(gòu)成TCP報(bào)文段TCPTCP字節(jié)流字節(jié)流H表示TCP報(bào)文段的首部x表示序號(hào)為x的數(shù)據(jù)字節(jié)TCP連接TCP連接是一條虛連接而不是一條真正的物理連接。TCP不關(guān)心應(yīng)用進(jìn)程一次把多長(zhǎng)的報(bào)文發(fā)送到TCP的緩存中。TCP根據(jù)對(duì)方給出的窗口值和當(dāng)前網(wǎng)絡(luò)擁塞的程度來(lái)決定一個(gè)報(bào)文段應(yīng)包含多少個(gè)字節(jié)。TCP可把太長(zhǎng)的數(shù)據(jù)塊劃分短一些再傳送。TCP也可等待積累有足夠多的字節(jié)后再構(gòu)成報(bào)文段發(fā)送出去。5.3.2TCP的連接TCP把連接作為最基本的抽象。每一條TCP連接有兩個(gè)端點(diǎn)。TCP連接的端點(diǎn)不是主機(jī),不是主機(jī)的IP地址,不是應(yīng)用進(jìn)程,也不是運(yùn)輸層的協(xié)議端口。TCP連接的端點(diǎn)叫做套接字(socket)或插口。端口號(hào)拼接到(contatenatedwith)IP地址即構(gòu)成了套接字。插口/套接字(socket)套接字socket=(IP地址:端口號(hào))(5-1)每一條TCP連接唯一地被通信兩端的兩個(gè)端點(diǎn)(即兩個(gè)套接字)所確定。即:

TCP連接::={socket1,socket2}={(IP1:port1),(IP2:port2)}(5-2)插口和端口、IP地址的關(guān)系是:IP地址131.6.23.13端口號(hào)1500131.6.23.13,1500插口(socket)舉例

同一個(gè)名詞socket

有多種不同的意思應(yīng)用編程接口

API

稱為socketAPI,簡(jiǎn)稱為socket。socketAPI中使用的一個(gè)函數(shù)名也叫作socket。調(diào)用socket函數(shù)的端點(diǎn)稱為socket。調(diào)用socket函數(shù)時(shí)其返回值稱為socket描述符,可簡(jiǎn)稱為socket。在操作系統(tǒng)內(nèi)核中連網(wǎng)協(xié)議的Berkeley實(shí)現(xiàn),稱為socket實(shí)現(xiàn)。5.4可靠傳輸?shù)墓ぷ髟?a)無(wú)差錯(cuò)情況A發(fā)送M1確認(rèn)M1B發(fā)送M2發(fā)送M3確認(rèn)M2確認(rèn)M3A發(fā)送M1B超時(shí)重傳M1發(fā)送M2確認(rèn)M1丟棄有差錯(cuò)的報(bào)文

(b)超時(shí)重傳tttt一、引出:1、完全理想化的數(shù)據(jù)傳輸:

假定1(不出差錯(cuò))假定2(收方來(lái)得及處理收到的數(shù)據(jù))

2、實(shí)際過(guò)程并非如此:

信道不可靠,進(jìn)行差錯(cuò)控制進(jìn)行流量控制二、四種傳輸情況5.4.1停止等待協(xié)議請(qǐng)注意在發(fā)送完一個(gè)分組后,必須暫時(shí)保留已發(fā)送的分組的副本。分組和確認(rèn)分組都必須進(jìn)行編號(hào)。超時(shí)計(jì)時(shí)器的重傳時(shí)間應(yīng)當(dāng)比數(shù)據(jù)在分組傳輸?shù)钠骄禃r(shí)間更長(zhǎng)一些。確認(rèn)丟失和確認(rèn)遲到A發(fā)送M1B超時(shí)重傳M1發(fā)送M2丟棄重復(fù)的M1重傳確認(rèn)M1

(a)確認(rèn)丟失確認(rèn)M1A發(fā)送M1B超時(shí)重傳M1發(fā)送M2丟棄重復(fù)的M1重傳確認(rèn)M1

(b)確認(rèn)遲到確認(rèn)M1收下遲到的確認(rèn)但什么也不做tttt可靠通信的實(shí)現(xiàn)使用上述的確認(rèn)和重傳機(jī)制,就可以在不可靠的傳輸網(wǎng)絡(luò)上實(shí)現(xiàn)可靠的通信。這種可靠傳輸協(xié)議常稱為自動(dòng)重傳請(qǐng)求ARQ(AutomaticRepeatreQuest)。ARQ表明重傳的請(qǐng)求是自動(dòng)進(jìn)行的。接收方不需要請(qǐng)求發(fā)送方重傳某個(gè)出錯(cuò)的分組。三、信道利用率停止等待協(xié)議的優(yōu)點(diǎn)是簡(jiǎn)單,但缺點(diǎn)是信道利用率太低。TDRTTATD+RTT+TABtt確認(rèn)分組分組確認(rèn)(5-3)TAB分組ttAACK引出:流水線傳輸?一、連續(xù)ARQ的原理:1)連發(fā)若干個(gè)數(shù)據(jù)幀后,等應(yīng)答幀;2)收到幀發(fā)帶序號(hào)ACK/NAK;3)幀出錯(cuò)丟棄后,發(fā)NAK或不管;4)收到NAK幀或超時(shí),重發(fā)該序號(hào)及以后的幀。優(yōu)點(diǎn):連續(xù)發(fā)送,提高了效率,吞吐量提高。缺點(diǎn):誤碼率高——重傳數(shù)據(jù)幀多——效率低。連發(fā)幀的數(shù)目?5.4.2連續(xù)ARQ協(xié)議5.4.2連續(xù)ARQ協(xié)議123456789101112(a)發(fā)送方維持發(fā)送窗口(發(fā)送窗口是5)發(fā)送窗口(b)收到一個(gè)確認(rèn)后發(fā)送窗口向前滑動(dòng)向前123456789101112發(fā)送窗口二、發(fā)送窗口的概念:三、累積確認(rèn)接收方一般采用累積確認(rèn)的方式。累積確認(rèn):對(duì)按序到達(dá)的最后一個(gè)分組發(fā)送確認(rèn),表明:到這個(gè)分組為止的所有分組都已正確收到了。優(yōu)點(diǎn)是:易實(shí)現(xiàn),確認(rèn)丟失不必重傳。缺點(diǎn)是:不能向發(fā)方反映出收方已正確收到的所有分組的信息。四、連續(xù)ARQ協(xié)議--Go-back-N(回退N)協(xié)議若發(fā)方發(fā)送了前5個(gè)分組,而中間的第3個(gè)分組丟失了。收方只能對(duì)前兩個(gè)分組發(fā)出確認(rèn)。發(fā)方無(wú)法知道后面三個(gè)分組的下落,只好把后面的三個(gè)分組都再重傳一次。這就叫做Go-back-N(回退N),表示需要再退回來(lái)重傳已發(fā)送過(guò)的N個(gè)分組。可見(jiàn)當(dāng)通信線路質(zhì)量不好時(shí),連續(xù)ARQ協(xié)議會(huì)帶來(lái)負(fù)面的影響。TCP可靠通信的具體實(shí)現(xiàn)TCP連接的每一端都必須設(shè)有兩個(gè)窗口——一個(gè)發(fā)送窗口和一個(gè)接收窗口。

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

TCP兩端的四個(gè)窗口經(jīng)常處于動(dòng)態(tài)變化之中。TCP連接的往返時(shí)間RTT也不是固定不變的。需要使用特定的算法估算較為合理的重傳時(shí)間。目的端口數(shù)據(jù)偏移檢驗(yàn)和源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG32位位08162431選項(xiàng)(長(zhǎng)度可變)填充TCP數(shù)據(jù)部分TCP首部TCP報(bào)文段IP數(shù)據(jù)部分IP首部20字節(jié)的固定首部TCP首部發(fā)送在前5.5TCP報(bào)文段的首部格式TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充源端口和目的端口——各占2字節(jié)。端口是運(yùn)輸層與應(yīng)用層的服務(wù)接口。運(yùn)輸層的復(fù)用和分用功能都要通過(guò)端口才能實(shí)現(xiàn)。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充序號(hào)——占4字節(jié)。TCP連接中傳送的數(shù)據(jù)流中的每一個(gè)字節(jié)都編上一個(gè)序號(hào)。序號(hào)字段的值則指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充確認(rèn)號(hào)——占4字節(jié),是期望收到對(duì)方的下一個(gè)報(bào)文段的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充數(shù)據(jù)偏移(即首部長(zhǎng)度)——占4bit,它指出TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文段的起始處有多遠(yuǎn)?!皵?shù)據(jù)偏移”的單位是32bit字(4字節(jié)為計(jì)算單位)。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充保留——占6bit,保留為今后使用,但目前應(yīng)置為0。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充緊急比特

URG——當(dāng)URG

1時(shí)有效。它告訴系統(tǒng)此報(bào)文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級(jí)的數(shù)據(jù))。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充確認(rèn)比特

ACK——當(dāng)ACK

1時(shí)確認(rèn)號(hào)字段有效。當(dāng)ACK

0時(shí),確認(rèn)號(hào)無(wú)效。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充推送比特

PSH(PuSH)——接收TCP收到推送比特置1的報(bào)文段,就盡快地交付給接收應(yīng)用進(jìn)程,而不再等到整個(gè)緩存都填滿了后再向上交付。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充復(fù)位比特

RST(ReSeT)——當(dāng)RST

1時(shí),表明TCP連接中出現(xiàn)嚴(yán)重差錯(cuò)(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重新建立運(yùn)輸連接。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充同步比特

SYN——同步比特SYN置為1,就表示這是一個(gè)連接請(qǐng)求或連接響應(yīng)報(bào)文。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充終止比特

FIN(FINal)——用來(lái)釋放一個(gè)連接。當(dāng)FIN

1時(shí),表明此報(bào)文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運(yùn)輸連接。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充窗口——占2字節(jié)。窗口字段用來(lái)控制對(duì)方發(fā)送的數(shù)據(jù)量,單位為字節(jié)。TCP連接的一端根據(jù)設(shè)置的緩存空間大小確定自己的接收窗口大小,然后通知對(duì)方以確定對(duì)方的發(fā)送窗口的上限。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充檢驗(yàn)和——占2字節(jié)。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分。在計(jì)算檢驗(yàn)和時(shí),要在TCP報(bào)文段的前面加上12字節(jié)的偽首部。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充緊急指針——占16bit。緊急指針指出在本報(bào)文段中的緊急數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)。

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

MSS(MaximumSegmentSize)。MSS告訴對(duì)方TCP:“我的緩存所能接收的報(bào)文段的數(shù)據(jù)字段的最大長(zhǎng)度是MSS個(gè)字節(jié)?!盡SS是TCP報(bào)文段中的數(shù)據(jù)字段的最大長(zhǎng)度。數(shù)據(jù)字段加上TCP首部才等于整個(gè)的TCP報(bào)文段。其他選項(xiàng)窗口擴(kuò)大選項(xiàng)——占3字節(jié),其中有一個(gè)字節(jié)表示移位值S。新的窗口值等于TCP首部中的窗口位數(shù)增大到(16+S),相當(dāng)于把窗口值向左移動(dòng)S位后獲得實(shí)際的窗口大小。時(shí)間戳選項(xiàng)——占10字節(jié),其中最主要的字段時(shí)間戳值字段(4字節(jié))和時(shí)間戳回送回答字段(4字節(jié))。選擇確認(rèn)選項(xiàng)——在后面的5.6.3節(jié)介紹。TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長(zhǎng)度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG比特08162431填充填充——這是為了使整個(gè)首部長(zhǎng)度是4字節(jié)的整數(shù)倍。5.6TCP可靠傳輸?shù)膶?shí)現(xiàn)

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

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

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

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

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

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

新的RTTS

(1

)

(舊的RTTS)

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

1。若

很接近于零,表示RTT值更新較慢。若選擇

接近于1,則表示RTT值更新較快。RFC2988推薦的

值為1/8,即0.125。超時(shí)重傳時(shí)間RTO(RetransmissionTime-Out)

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

RTTS+4

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

)

(舊的RTTD)+

RTTS

新的RTT樣本

(5-6)

是個(gè)小于1的系數(shù),其推薦值是1/4,即0.25。往返時(shí)間RTT?往返時(shí)間的測(cè)量相當(dāng)復(fù)雜TCP報(bào)文段1沒(méi)有收到確認(rèn)。重傳(即報(bào)文段2)后,收到了確認(rèn)報(bào)文段ACK。如何判定此確認(rèn)報(bào)文段是對(duì)原來(lái)的報(bào)文段1的確認(rèn),還是對(duì)重傳的報(bào)文段2的確認(rèn)?發(fā)送一個(gè)TCP報(bào)文段超時(shí)重傳TCP報(bào)文段收到ACK時(shí)間12往返時(shí)間RTT?是對(duì)哪一個(gè)報(bào)文段的確認(rèn)?Karn算法在計(jì)算平均往返時(shí)間RTT時(shí),只要報(bào)文段重傳了,就不采用其往返時(shí)間樣本。這樣得出的加權(quán)平均往返時(shí)間RTTS

和超時(shí)重傳時(shí)間RTO就較準(zhǔn)確。修正的Karn算法報(bào)文段每重傳一次,就把RTO增大一些:新的RTO

(舊的RTO)系數(shù)

的典型值是2。當(dāng)不再發(fā)生報(bào)文段的重傳時(shí),才根據(jù)報(bào)文段的往返時(shí)延更新平均往返時(shí)延RTT和超時(shí)重傳時(shí)間RTO的數(shù)值。實(shí)踐證明,這種策略較為合理。接收到的字節(jié)流序號(hào)不連續(xù)110001501300035014500確認(rèn)號(hào)=1001L1=1501L2=3501R1=3001R1=4501……連續(xù)的字節(jié)流………第一個(gè)字節(jié)塊第二個(gè)字節(jié)塊和前后字節(jié)不連續(xù)的每一個(gè)字節(jié)塊都有兩個(gè)邊界:左邊界和右邊界。圖中用四個(gè)指針標(biāo)記這些邊界。第一個(gè)字節(jié)塊的左邊界L1=1501,但右邊界R1=3001。

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

5.7.1利用滑動(dòng)窗口實(shí)現(xiàn)流量控制1、為什么要流量控制?雖然總是希望數(shù)據(jù)傳輸?shù)酶煲恍?。但如果發(fā)送方把數(shù)據(jù)發(fā)送得過(guò)快,接收方就可能來(lái)不及接收,這就會(huì)造成數(shù)據(jù)的丟失。2、什么叫流量控制?流量控制(flowcontrol):就是讓發(fā)送方的發(fā)送速率不要太快,既要讓接收方來(lái)得及接收,也不要使網(wǎng)絡(luò)發(fā)生擁塞。3、怎么實(shí)現(xiàn)流量控制?利用滑動(dòng)窗口機(jī)制可以很方便地在TCP連接上實(shí)現(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ā)送序號(hào)201至500共300字節(jié)A發(fā)送了序號(hào)101至200,還能發(fā)送200字節(jié)A發(fā)送了序號(hào)301至400,還能再發(fā)送100字節(jié)新數(shù)據(jù)A發(fā)送了序號(hào)1至100,還能發(fā)送300字節(jié)A發(fā)送了序號(hào)401至500,不能再發(fā)送新數(shù)據(jù)了A超時(shí)重傳舊的數(shù)據(jù),但不能發(fā)送新的數(shù)據(jù)允許A發(fā)送序號(hào)501至600共100字節(jié)A發(fā)送了序號(hào)501至600,不能再發(fā)送了不允許A再發(fā)送(到序號(hào)600為止的數(shù)據(jù)都收到了)丟失!4、流量控制舉例A向B發(fā)送數(shù)據(jù)。在連接建立時(shí),

B告訴A:“我的接收窗口rwnd=400(字節(jié))”。第一次流量控制第三次流量控制第二次流量控制解決死鎖措施:設(shè)置持續(xù)計(jì)時(shí)器

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

Nagle算法三、出現(xiàn)的問(wèn)題:糊涂窗口綜合癥5.8TCP的擁塞控制

5.8.1擁塞控制的一般原理

1、概念:擁塞(congestion):若對(duì)網(wǎng)絡(luò)中某一資源的需求超過(guò)了該資源所能提供的可用部分,網(wǎng)絡(luò)的性能就要變壞。對(duì)資源需求的總和>可用資源資源:鏈路容量(帶寬),交換結(jié)點(diǎn)的緩存、處理能力等擁塞的結(jié)果:若網(wǎng)絡(luò)中有許多資源同時(shí)產(chǎn)生擁塞,網(wǎng)絡(luò)的性能就要明顯變壞,整個(gè)網(wǎng)絡(luò)的吞吐量將隨輸入負(fù)荷的增大而下降。2、擁塞控制與流量控制的關(guān)系流量控制:點(diǎn)到點(diǎn)之間收端信息反饋到發(fā)端來(lái)控制。抑制發(fā)送端發(fā)送數(shù)據(jù)的速率,以便使接收端來(lái)得及接收。擁塞控制:(網(wǎng)絡(luò)能夠承受現(xiàn)有的網(wǎng)絡(luò)負(fù)荷)全局網(wǎng)絡(luò)問(wèn)題,涉及到所有的主機(jī)、所有的路由器,以及與降低網(wǎng)絡(luò)傳輸性能有關(guān)的所有因素。舉例:例1:光纖網(wǎng),鏈路容量為1000Gb/S,巨型主機(jī)向PC發(fā)文件,發(fā)送率1Gb/s。這是哪種情況呢?例2:一網(wǎng)絡(luò)鏈路容量10Mb/s,有1000臺(tái)大型機(jī)在網(wǎng)上,其中500臺(tái)對(duì)另500臺(tái)以100kb/s發(fā)送文件。這又是什么情況呢??jī)烧哧P(guān)系:具有理想的流量控制可以減少擁塞3、擁塞控制所起的作用提供的負(fù)載吞吐量理想的擁塞控制0死鎖(吞吐量=0)無(wú)擁塞控制擁塞輕度擁塞實(shí)際的擁塞控制防止網(wǎng)絡(luò)和用戶過(guò)載,使吞吐量下降和時(shí)延增加;避免死鎖;在用戶之間合理分配資源;使網(wǎng)絡(luò)和用戶之間速率匹配。4、擁塞控制的一般原理1)原理:增加資源減少用戶對(duì)某些資源的需求擁塞控制是很難設(shè)計(jì),是一個(gè)動(dòng)態(tài)的(而不是靜態(tài)的)問(wèn)題。緩存不夠大而造成分組的丟失。但分組的丟失是網(wǎng)絡(luò)發(fā)生擁塞的征兆而不是原因。擁塞控制本身成為引起網(wǎng)絡(luò)性能惡化甚至發(fā)生死鎖的原因。2)控制方法:開(kāi)環(huán)控制和閉環(huán)控制開(kāi)環(huán)控制方法就是在設(shè)計(jì)網(wǎng)絡(luò)時(shí)事先將有關(guān)發(fā)生擁塞的因素考慮周到,力求網(wǎng)絡(luò)在工作時(shí)不產(chǎn)生擁塞。閉環(huán)控制是基于反饋環(huán)路的概念。屬于閉環(huán)控制的有以下幾種措施:

-監(jiān)測(cè)網(wǎng)絡(luò)系統(tǒng)以便檢測(cè)到擁塞在何時(shí)、何處發(fā)生。-將擁塞發(fā)生的信息傳送到可采取行動(dòng)的地方。-調(diào)整網(wǎng)絡(luò)系統(tǒng)的運(yùn)行以解決出現(xiàn)的問(wèn)題。3)監(jiān)測(cè)網(wǎng)絡(luò)擁塞的指標(biāo):5.8.2幾種擁塞控制方法控制擁塞窗口的原則是:無(wú)擁塞,擁塞窗口就再增大一些;出現(xiàn)擁塞,擁塞窗口就減小一些。一、基本概念:接收窗口:由接收緩存大小決定,來(lái)自接收端的流量控制。擁塞窗口cwnd

:由網(wǎng)絡(luò)的擁塞程度決定,來(lái)自發(fā)送方流量控制。發(fā)送窗口等于擁塞窗口,動(dòng)態(tài)地在變化。二、四種算法:1、慢開(kāi)始2、擁塞避免3、快重傳4、快恢復(fù)發(fā)送窗口的上限值

Min[rwnd,cwnd](5-8)發(fā)送窗口:1、慢開(kāi)始算法的原理在主機(jī)剛剛開(kāi)始發(fā)送報(bào)文段時(shí)可先設(shè)置擁塞窗口cwnd=1,即設(shè)置為一個(gè)最大報(bào)文段MSS的數(shù)值。在每收到一個(gè)對(duì)新的報(bào)文段的確認(rèn)后,將擁塞窗口加1,即增加一個(gè)MSS的數(shù)值。用這樣的方法逐步增大發(fā)送端的擁塞窗口cwnd,可以使分組注入到網(wǎng)絡(luò)的速率更加合理。如圖2、擁塞避免算法讓擁塞窗口cwnd緩慢地增大,即每經(jīng)過(guò)一個(gè)往返時(shí)間RTT就把發(fā)送方的擁塞窗口cwnd加1,而不是加倍,使擁塞窗口cwnd按線性規(guī)律緩慢增長(zhǎng)。慢開(kāi)始和擁塞避免算法結(jié)合使用發(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ā)送方每收到一個(gè)對(duì)新報(bào)文段的確認(rèn)(重傳的不算在內(nèi))就使cwnd加1。輪次1輪次2輪次3返回1)設(shè)置慢開(kāi)始門限狀態(tài)變量ssthresh慢開(kāi)始門限ssthresh的用法如下:當(dāng)cwnd<ssthresh時(shí),使用慢開(kāi)始算法。當(dāng)cwnd>ssthresh時(shí),停止使用慢開(kāi)始算法而改用擁塞避免算法。當(dāng)cwnd=ssthresh時(shí),既可使用慢開(kāi)始算法,也可使用擁塞避免算法。慢開(kāi)始和擁塞避免算法結(jié)合使用2)算法原理開(kāi)始時(shí)用慢開(kāi)始算法,cwnd=1,以后發(fā)送方每收到一個(gè)對(duì)新報(bào)文的確認(rèn)ACK,就使cwnd+1,cwnd隨傳輸次數(shù)按指數(shù)規(guī)律增長(zhǎng)。當(dāng)cwnd=ssthresh時(shí),改用擁塞避免算法。當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞(其根據(jù)就是沒(méi)有按時(shí)收到確認(rèn)),就要把慢開(kāi)始門限ssthresh設(shè)置為出現(xiàn)擁塞時(shí)的發(fā)送方窗口值的一半(但不能小于2)。擁塞窗口cwnd重新設(shè)置為1,執(zhí)行慢開(kāi)始算法。22163)慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例當(dāng)TCP連接進(jìn)行初始化時(shí),將擁塞窗口置為1。圖中的窗口單位不使用字節(jié)而使用報(bào)文段。慢開(kāi)始門限的初始值設(shè)置為16個(gè)報(bào)文段,即ssthresh=16?!俺朔p小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例發(fā)送端的發(fā)送窗口不能超過(guò)擁塞窗口cwnd和接收端窗口rwnd中的最小值。我們假定接收端窗口足夠大,因此現(xiàn)在發(fā)送窗口的數(shù)值等于擁塞窗口的數(shù)值。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例在執(zhí)行慢開(kāi)始算法時(shí),擁塞窗口cwnd的初始值為1,發(fā)送第一個(gè)報(bào)文段M0。

2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh的初始值慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例發(fā)送端每收到一個(gè)確認(rèn),就把cwnd加1。于是發(fā)送端可以接著發(fā)送M1和M2兩個(gè)報(bào)文段。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例接收端共發(fā)回兩個(gè)確認(rèn)。發(fā)送端每收到一個(gè)對(duì)新報(bào)文段的確認(rèn),就把發(fā)送端的cwnd加1?,F(xiàn)在cwnd從2增大到4,并可接著發(fā)送后面的4個(gè)報(bào)文段。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例發(fā)送端每收到一個(gè)對(duì)新報(bào)文段的確認(rèn),就把發(fā)送端的擁塞窗口加1,因此擁塞窗口cwnd隨著傳輸輪次按指數(shù)規(guī)律增長(zhǎng)。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例當(dāng)擁塞窗口cwnd增長(zhǎng)到慢開(kāi)始門限值ssthresh時(shí)(即當(dāng)cwnd=16時(shí)),就改為執(zhí)行擁塞避免算法,擁塞窗口按線性規(guī)律增長(zhǎng)。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例假定擁塞窗口的數(shù)值增長(zhǎng)到24時(shí),網(wǎng)絡(luò)出現(xiàn)超時(shí),表明網(wǎng)絡(luò)擁塞了。傳輸輪次2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例更新后的ssthresh值變?yōu)?2(即發(fā)送窗口數(shù)值24的一半),擁塞窗口再重新設(shè)置為1,并執(zhí)行慢開(kāi)始算法。傳輸輪次2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例當(dāng)cwnd=12時(shí)改為執(zhí)行擁塞避免算法,擁塞窗口按按線性規(guī)律增長(zhǎng),每經(jīng)過(guò)一個(gè)往返時(shí)延就增加一個(gè)MSS的大小。傳輸輪次乘法減小(multiplicativedecrease)“乘法減小“是指不論在慢開(kāi)始階段還是擁塞避免階段,只要出現(xiàn)一次超時(shí)(即出現(xiàn)一次網(wǎng)絡(luò)擁塞),就把慢開(kāi)始門限值ssthresh設(shè)置為當(dāng)前的擁塞窗口值乘以0.5。當(dāng)網(wǎng)絡(luò)頻繁出現(xiàn)擁塞時(shí),ssthresh值就下降得很快,以大大減少注入到網(wǎng)絡(luò)中的分組數(shù)。加法增大(additiveincrease)“加法增大”是指執(zhí)行擁塞避免算法后,在收到對(duì)所有報(bào)文段的確認(rèn)后(即經(jīng)過(guò)一個(gè)往返時(shí)間),就把擁塞窗口cwnd增加一個(gè)MSS大小,使擁塞窗口緩慢增大,以防止網(wǎng)絡(luò)過(guò)早出現(xiàn)擁塞。必須強(qiáng)調(diào)指出“擁塞避免”并非指完全能夠避免了擁塞。利用以上的措施要完全避免網(wǎng)絡(luò)擁塞還是不可能的?!皳砣苊狻笔钦f(shuō)在擁塞避免階段把擁塞窗口控制為按線性規(guī)律增長(zhǎng),使網(wǎng)絡(luò)比較不容易出現(xiàn)擁塞??熘貍髋e例立即重傳M3收到三個(gè)連續(xù)的對(duì)M2

的重復(fù)確認(rèn)立即重傳M3發(fā)送方接收方發(fā)送M1確認(rèn)M1t確認(rèn)M2發(fā)送M2發(fā)送M3發(fā)送M4?發(fā)送M5發(fā)送M6重復(fù)確認(rèn)M2重復(fù)確認(rèn)M2重復(fù)確認(rèn)M2t發(fā)送M7丟失3、快重傳算法接收方每收到一個(gè)失序的報(bào)文段后就立即發(fā)出重復(fù)確認(rèn)。這樣做可以讓發(fā)送方及早知道有報(bào)文段沒(méi)有到達(dá)接收方。發(fā)送方只要一連收到三個(gè)重復(fù)確認(rèn)就應(yīng)當(dāng)立即重傳對(duì)方尚未收到的報(bào)文段??熘貍鞑⒎侨∠貍饔?jì)時(shí)器,而是在某些情況下可更早地重傳丟失的報(bào)文段。返回4、快恢復(fù)算法(1)當(dāng)發(fā)送端收到連續(xù)三個(gè)重復(fù)的確認(rèn)時(shí),就執(zhí)行“乘法減小”算法,把慢開(kāi)始門限ssthresh減半。但接下去不執(zhí)行慢開(kāi)始算法。(2)由于發(fā)送方現(xiàn)在認(rèn)為網(wǎng)絡(luò)很可能沒(méi)有發(fā)生擁塞,因此現(xiàn)在不執(zhí)行慢開(kāi)始算法,即擁塞窗口cwnd現(xiàn)在不設(shè)置為1,而是設(shè)置為慢開(kāi)始門限ssthresh減半后的數(shù)值,然后開(kāi)始執(zhí)行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大。24從連續(xù)收到三個(gè)重復(fù)的確認(rèn)

轉(zhuǎn)入擁塞避免2468101214161820220048121620傳輸輪次擁塞窗口cwnd收到3個(gè)重復(fù)的確認(rèn)執(zhí)行快重傳算法慢開(kāi)始“乘法減小”擁塞避免“加法增大”TCPReno版本TCPTahoe版本(已廢棄不用)ssthresh的初始值擁塞避免“加法增大”新的ssthresh值慢開(kāi)始快恢復(fù)返回5.8.3隨機(jī)早期檢測(cè)RED(RandomEarlyDetection)

使路由器的隊(duì)列維持兩個(gè)參數(shù),即隊(duì)列長(zhǎng)度最小門限THmin

和最大門限THmax。RED對(duì)每一個(gè)到達(dá)的數(shù)據(jù)報(bào)都先計(jì)算平均隊(duì)列長(zhǎng)度LAV。若平均隊(duì)列長(zhǎng)度小于最小門限THmin,則將新到達(dá)的數(shù)據(jù)報(bào)放入隊(duì)列進(jìn)行排隊(duì)。若平均隊(duì)列長(zhǎng)度超過(guò)最大門限THmax,則將新到達(dá)的數(shù)據(jù)報(bào)丟棄。若平均隊(duì)列長(zhǎng)度在最小門限THmin和最大門限THmax之間,則按照某一概率p將新到達(dá)的數(shù)據(jù)報(bào)丟棄。RED將路由器的到達(dá)隊(duì)列

劃分成為三個(gè)區(qū)域從隊(duì)首發(fā)送最小門限THmin最大門限THmin分組到達(dá)平均隊(duì)列長(zhǎng)度Lav排隊(duì)丟棄以概率

p

丟棄丟棄概率

p與

THmin和

Thmax的關(guān)系最小門限THmin最大門限THmax平均隊(duì)列長(zhǎng)度Lav分組丟棄概率

p1.00pmax當(dāng)LAV

Thmin時(shí),丟棄概率p=0。當(dāng)LAV

Thmax時(shí),丟棄概率p=1。當(dāng)THmin

LAV

THmax時(shí),

0

p

1。

例如,按線性規(guī)律變化,從0變到pmax。瞬時(shí)隊(duì)列長(zhǎng)度和

平均隊(duì)列長(zhǎng)度的區(qū)別隊(duì)列長(zhǎng)度時(shí)間瞬時(shí)隊(duì)列長(zhǎng)度平均隊(duì)列長(zhǎng)度5.9TCP的運(yùn)輸連接管理連接建立、數(shù)據(jù)傳送和連接釋放。2、運(yùn)輸連接的管理使運(yùn)輸連接的建立和釋放都能正常地進(jìn)行。連接建立過(guò)程中要解決以下三個(gè)問(wèn)題:-要使每一方能夠確知對(duì)方的存在。-要允許雙方協(xié)商一些參數(shù)(如最大報(bào)文段長(zhǎng)度,最大窗口大小,服務(wù)質(zhì)量等)。-能夠?qū)\(yùn)輸實(shí)體資源(如緩存大小,連接表中的項(xiàng)目等)進(jìn)行分配。

3、TCP連接的建立都是采用客戶服務(wù)器方式主動(dòng)發(fā)起連接建立的應(yīng)用進(jìn)程叫做客戶(client)。被動(dòng)等待連接建立的應(yīng)用進(jìn)程叫做服務(wù)器(server)。概述:

1.運(yùn)輸連接的三個(gè)階段用三次握手建立TCP連接

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

SYN=1,seq=xCLOSEDCLOSED主動(dòng)打開(kāi)被動(dòng)打開(kāi)AB客戶服務(wù)器5.9.1TCP的連接建立SYN=1,ACK=1,seq=y,ack=x1

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

B在確認(rèn)報(bào)文段中應(yīng)使SYN=1,使ACK=1,

其確認(rèn)號(hào)ack=x

1,自己選擇的序號(hào)seq=y。SYN=1,seq=xACK=1,seq=x+1,ack=y1CLOSEDCLOSED主動(dòng)打開(kāi)被動(dòng)打開(kāi)AB客戶服務(wù)器SYN=1,ACK=1,seq=y,ack=x1

A收到此報(bào)文段后向B給出確認(rèn),其ACK=1,

確認(rèn)號(hào)ack=y

1。A的TCP通知上層應(yīng)用進(jìn)程,連接已經(jīng)建立。SYN=1,seq=xACK=1,seq=x+1,ack=y1CLOSEDCLOSED數(shù)據(jù)傳送主動(dòng)打開(kāi)被動(dòng)打開(kāi)

溫馨提示

  • 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)論