版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1計算機(jī)網(wǎng)絡(luò)(第6版)謝希仁編著
電子工業(yè)出版社主講劉彥保教授2第5章運(yùn)輸層本章主要內(nèi)容運(yùn)輸層協(xié)議概述用戶數(shù)據(jù)報協(xié)議UDP傳輸控制協(xié)議TCP可靠傳輸?shù)墓ぷ髟鞹CP報文段的首部格式TCP可靠傳輸?shù)膶崿F(xiàn)TCP的流量控制
TCP的擁塞控制TCP的運(yùn)輸連接管理35.1運(yùn)輸層協(xié)議概述5.1.1進(jìn)程之間的通信從通信和信息處理的角度看:運(yùn)輸層向它上面的應(yīng)用層提供通信服務(wù);運(yùn)輸層屬于面向通信部分的最高層;是用戶功能中的最低層;網(wǎng)絡(luò)的邊緣部分中的兩個主機(jī)使用網(wǎng)絡(luò)的核心部分的功能進(jìn)行端到端的通信時:只有位于網(wǎng)絡(luò)邊緣部分的主機(jī)的協(xié)議棧才有運(yùn)輸層網(wǎng)絡(luò)核心部分中的路由器在轉(zhuǎn)發(fā)分組時都只用到下三層的功能。4運(yùn)輸層的作用:運(yùn)輸層為相互通信的應(yīng)用進(jìn)程提供了邏輯通信54321運(yùn)輸層提供應(yīng)用進(jìn)程間的邏輯通信主機(jī)A主機(jī)B應(yīng)用進(jìn)程應(yīng)用進(jìn)程路由器1路由器2AP1LAN2WANAP2AP3AP4IP層LAN1AP1AP2AP4端口端口54321IP協(xié)議的作用范圍運(yùn)輸層協(xié)議TCP和UDP的作用范圍AP35應(yīng)用進(jìn)程之間的通信主機(jī)間通信的實體:是兩個主機(jī)中的應(yīng)用進(jìn)程互相通信應(yīng)用進(jìn)程之間的通信:又稱端到端的通信。上圖中的通信:
AP1與AP3、AP2與AP4運(yùn)輸層的一個很重要的功能:復(fù)用和分用。復(fù)用:是指發(fā)送方不同的的應(yīng)用進(jìn)程可以使用同一運(yùn)輸層協(xié)議傳輸數(shù)據(jù),應(yīng)用層不同進(jìn)程的報文通過不同的端口向下交到運(yùn)輸層,再往下就共用網(wǎng)絡(luò)層提供的服務(wù)。分用:是指接收方運(yùn)輸層在剝?nèi)笪牡氖撞亢竽軌虬堰@些數(shù)據(jù)正確交付到目的進(jìn)程6運(yùn)輸層提供應(yīng)用進(jìn)程間的邏輯通信:即運(yùn)輸層之間的通信好像是沿水平方向傳送數(shù)據(jù)。但事實上這兩個運(yùn)輸層之間并沒有一條水平方向的物理連接。運(yùn)輸層協(xié)議和網(wǎng)絡(luò)層協(xié)議的主要區(qū)別運(yùn)輸層協(xié)議為應(yīng)用進(jìn)程之間提供端到端的邏輯通信網(wǎng)絡(luò)層協(xié)議為主機(jī)之間提供邏輯通信7運(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)8運(yùn)輸層的主要功能運(yùn)輸層為應(yīng)用進(jìn)程之間提供端到端的邏輯通信。差錯檢測:運(yùn)輸層還要對收到的報文進(jìn)行差錯檢測。流量控制:擁塞控制:提供可靠傳輸服務(wù)9運(yùn)輸層提供兩種不同協(xié)議:即面向連接的TCP和無連接的UDP。運(yùn)輸層向高層用戶屏蔽了下面網(wǎng)絡(luò)核心的細(xì)節(jié)(如網(wǎng)絡(luò)拓?fù)洹⑺捎玫穆酚蛇x擇協(xié)議等),它使應(yīng)用進(jìn)程看見的就是好像在兩個運(yùn)輸層實體之間有一條端到端的邏輯通信信道。當(dāng)運(yùn)輸層采用面向連接的TCP協(xié)議時,盡管下面的網(wǎng)絡(luò)是不可靠的(只提供盡最大努力服務(wù)),但這種邏輯通信信道就相當(dāng)于一條全雙工的可靠信道。當(dāng)運(yùn)輸層采用無連接的UDP
協(xié)議時,這種邏輯通信信道是一條不可靠信道。101、TCP/IP的運(yùn)輸層有兩個不同的協(xié)議:用戶數(shù)據(jù)報協(xié)議UDP(UserDatagramProtocol):無連接、不確認(rèn)、高效傳輸控制協(xié)議TCP(TransmissionControlProtocol):面向連接、不提供廣播、可靠、開銷大運(yùn)輸協(xié)議數(shù)據(jù)單元
TPDU(TransportProtocolDataUnit):兩個對等運(yùn)輸實體在通信時傳送的數(shù)據(jù)單位。TCP報文段(segment):TCP傳送的數(shù)據(jù)單位協(xié)議。
UDP報文或用戶數(shù)據(jù)報:UDP傳送的數(shù)據(jù)單位協(xié)議。5.1.2運(yùn)輸層的兩個主要協(xié)議112、TCP/IP體系中的運(yùn)輸層協(xié)議TCPUDPIP應(yīng)用層與各種網(wǎng)絡(luò)接口運(yùn)輸層123、使用UDP和TCP協(xié)議的各種應(yīng)用與應(yīng)用層協(xié)議應(yīng)用應(yīng)用層協(xié)議運(yùn)輸層協(xié)議名字轉(zhuǎn)換DNSUDP文件傳輸TFTPUDP路由選擇協(xié)議RIPUDPIP地址配置BOOTP,DHCPUDP網(wǎng)絡(luò)管理SNMPUDP遠(yuǎn)程文件服務(wù)器NFSUDPIP電話專用協(xié)議UDP流式多媒體通信專用協(xié)議UDP電子郵件SMTPTCP遠(yuǎn)程終端接入TELNETTCP萬維網(wǎng)HTTPTCP文件傳輸FTPTCP135.1.3運(yùn)輸層的端口1、概述復(fù)用:應(yīng)用層所有的應(yīng)用進(jìn)程都可以通過運(yùn)輸層再傳送到IP層分用:運(yùn)輸層從IP層收到的數(shù)據(jù)后必須交付給指明的應(yīng)用進(jìn)程單臺計算機(jī)中的進(jìn)程:用進(jìn)程標(biāo)識符來標(biāo)志的。在Internet中的進(jìn)程:不能用計算機(jī)操作系統(tǒng)所指派的進(jìn)程標(biāo)示符來標(biāo)識運(yùn)行在應(yīng)用層的各種應(yīng)用進(jìn)程,原因是:在因特網(wǎng)上使用的計算機(jī)的操作系統(tǒng)種類很多,而不同的操作系統(tǒng)又使用不同格式的進(jìn)程標(biāo)識符。14為了使運(yùn)行不同操作系統(tǒng)的計算機(jī)的應(yīng)用進(jìn)程能夠互相通信,就必須用統(tǒng)一的方法對TCP/IP體系的應(yīng)用進(jìn)程進(jìn)行標(biāo)志。不能把一個特定機(jī)器上運(yùn)行的特定進(jìn)程指明為最終目的站點:進(jìn)程的創(chuàng)建和撤銷都是動態(tài)的,發(fā)送方幾乎無法識別其他機(jī)器上的進(jìn)程。有時只需要知道目的主機(jī)提供的服務(wù),而不需要知道哪個進(jìn)程。152、協(xié)議端口號(protocolportnumber)協(xié)議端口號簡稱為端口(port)雖然通信的終點是應(yīng)用進(jìn)程,但我們可以把端口想象是通信的終點,因為我們只要把要傳送的報文交到目的主機(jī)的某一個合適的目的端口,剩下的工作(即最后交付目的進(jìn)程)就由TCP來完成。軟件端口與硬件端口在協(xié)議棧層間的抽象的協(xié)議端口是軟件端口。路由器或交換機(jī)上的端口是硬件端口。軟件端口是應(yīng)用層的各種協(xié)議進(jìn)程與運(yùn)輸實體進(jìn)行層間交互的一種地址16TCP/IP運(yùn)輸層的端口用一個16位端口號進(jìn)行標(biāo)志。端口號只具有本地意義,即端口號只是為了標(biāo)志本計算機(jī)應(yīng)用層中的各進(jìn)程。在因特網(wǎng)中不同計算機(jī)的相同端口號是沒有聯(lián)系的。Internet上計算機(jī)之間的通信采用客戶/服務(wù)器模式,客戶在發(fā)起通信請求時,必須先知道對方服務(wù)器的IP地址和端口號。17TCP/IP端口的分類熟知端口(系統(tǒng)端口):數(shù)值一般為0~1023。
FTP應(yīng)用:21
telnet應(yīng)用:23簡單郵件傳輸協(xié)議SMTP:25HTTP:80DNS:53簡單文件傳輸協(xié)議TFTP:69簡單網(wǎng)絡(luò)管理協(xié)議SNMP:161SNMP(trap):16218登記端口號:數(shù)值為1024~49151,為沒有熟知端口號的應(yīng)用程序使用的。使用這個范圍的端口號必須在IANA(互聯(lián)網(wǎng)數(shù)字分配機(jī)構(gòu))登記,以防止重復(fù)??蛻舳丝谔柣蚨虝憾丝谔枺簲?shù)值為49152~65535,留給客戶進(jìn)程選擇暫時使用。當(dāng)服務(wù)器進(jìn)程收到客戶進(jìn)程的報文時,就知道了客戶進(jìn)程所使用的動態(tài)端口號。通信結(jié)束后,這個端口號可供其他客戶進(jìn)程以后使用。195.2用戶數(shù)據(jù)報協(xié)議UDP5.2.1UDP概述
UDP只在IP的數(shù)據(jù)報服務(wù)之上增加了很少一點的功能:復(fù)用和差錯檢測的功能。1.
UDP的主要特點UDP是無連接的。減少開銷。UDP使用盡最大努力交付。即不保證可靠交付,主機(jī)不需要維持復(fù)雜的連接狀態(tài)表(連接狀態(tài)表中有好多參數(shù))。UDP是面向報文的。20發(fā)送方UDP對應(yīng)用程序交下來的報文,在添加首部后就向下交付IP層。UDP對應(yīng)用層交下來的報文,既不合并,也不拆分,而是保留這些報文的邊界。應(yīng)用層交給UDP多長的報文,UDP就照樣發(fā)送,即一次發(fā)送一個報文。接收方UDP對IP層交上來的UDP用戶數(shù)據(jù)報,在去除首部后就原封不動地交付上層的應(yīng)用進(jìn)程,一次交付一個完整的報文。應(yīng)用程序必須選擇合適大小的報文。21UDP是面向報文的IP數(shù)據(jù)報的數(shù)據(jù)部分IP首部IP層UDP首部UDP用戶數(shù)據(jù)報的數(shù)據(jù)部分運(yùn)輸層應(yīng)用層報文應(yīng)用層22UDP沒有擁塞控制。允許網(wǎng)絡(luò)出現(xiàn)擁塞;網(wǎng)絡(luò)擁塞不降低發(fā)送端速度;允許網(wǎng)絡(luò)丟失一些數(shù)據(jù);適合實時傳輸,多媒體通信。UDP支持一對一、一對多、多對一和多對多的交互通信。UDP的首部開銷小,只有8個字節(jié)。235.2.2UDP的首部格式偽首部源端口目的端口長度檢驗和數(shù)據(jù)首部UDP長度源IP地址目的IP地址017IP數(shù)據(jù)報字節(jié)44112122222字節(jié)發(fā)送在前數(shù)據(jù)首部UDP用戶數(shù)據(jù)報24偽首部源端口目的端口長度檢驗和數(shù)據(jù)首部UDP長度源IP地址目的IP地址017IP數(shù)據(jù)報字節(jié)44112122222字節(jié)發(fā)送在前數(shù)據(jù)首部UDP用戶數(shù)據(jù)報1、用戶數(shù)據(jù)報UDP有兩個字段:數(shù)據(jù)字段和首部字段。首部字段有8個字節(jié),由4個字段組成,每個字段都是兩個字節(jié)。252、各字段的含義源端口:源端口號,需要對方回信時選用。不需要可全0。目的端口:目的端口號。終點交付報文時必須使用。長度:UDP用戶數(shù)據(jù)報的長度,最小值為8字節(jié)。檢驗和:檢測UDP用戶數(shù)據(jù)報在傳輸中是否有錯。有錯就丟失。偽首部:26UDP基于端口的分用IP層UDP數(shù)據(jù)報到達(dá)端口2端口3端口1UDP分用27偽首部源端口目的端口長度檢驗和數(shù)據(jù)首部UDP長度源IP地址目的IP地址017IP數(shù)據(jù)報字節(jié)44112122222字節(jié)發(fā)送在前數(shù)據(jù)首部UDP用戶數(shù)據(jù)報3、計算檢驗和發(fā)送端:增加12個字節(jié)的“偽首部”;首部和數(shù)據(jù)部分一起檢驗;方法同IP數(shù)據(jù)報檢驗(檢驗和置0);偽首部和UDP按16位字符串分割;數(shù)據(jù)部分為奇數(shù)個字節(jié)時添加一個全0字節(jié)(添加部分不發(fā)送);二進(jìn)制反碼求和;將和的二進(jìn)制反碼填入經(jīng)驗和字段;發(fā)送。接收端:同樣計算,全1正確,接收。28計算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→檢驗和04112字節(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ù)全0295.3傳輸控制協(xié)議TCP概述5.3.1TCP最主要的特點TCP是面向連接的運(yùn)輸層協(xié)議:每一條TCP連接只能有兩個端點(endpoint),即點對點的(一對一)。TCP提供可靠交付的服務(wù):無差錯、不丟失、不重復(fù)、按序。
TCP提供全雙工通信:允許雙方任何時候都發(fā)送數(shù)據(jù);兩端都設(shè)有緩存,即發(fā)送緩存、接收緩存。面向字節(jié)流:30TCP中的流:指流入到進(jìn)程或從進(jìn)程流出的字節(jié)序列;面向字節(jié)流:雖然應(yīng)用進(jìn)程和TCP的交互是一次一個數(shù)據(jù)塊(大小不等),但TCP把應(yīng)用程序交下來的數(shù)據(jù)看成僅僅是一連串的無結(jié)構(gòu)的字節(jié)流;TCP并不知道所傳送的字節(jié)流的含義;TCP不保證接收方應(yīng)用程序所收到的數(shù)據(jù)塊和發(fā)送方所發(fā)出的數(shù)據(jù)塊具有對應(yīng)的大小關(guān)系;但接收方應(yīng)用程收到的字節(jié)流必須和發(fā)送方應(yīng)用程序發(fā)出的字節(jié)流完全一樣。31768H
TCP面向流的概念
發(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連接32應(yīng)當(dāng)注意TCP連接是一條虛連接而不是一條真正的物理連接。TCP對應(yīng)用進(jìn)程一次把多長的報文發(fā)送到TCP的緩存中是不關(guān)心的。TCP根據(jù)對方給出的窗口值和當(dāng)前網(wǎng)絡(luò)擁塞的程度來決定一個報文段應(yīng)包含多少個字節(jié)(UDP發(fā)送的報文長度是應(yīng)用進(jìn)程給出的)。TCP可把太長的數(shù)據(jù)塊劃分短一些再傳送。TCP也可等待積累有足夠多的字節(jié)后再構(gòu)成報文段發(fā)送出去。335.3.2TCP的連接概念
TCP是面向連接的,即在兩個端點通信前要建立一條TCP連接TCP連接是在兩主機(jī)間建立一個虛路徑(虛擬連接),即不是物理連接同屬于一個報文的所有報文段都沿著這條虛路徑發(fā)送整個報文確認(rèn)、重傳都使用這條虛路徑發(fā)送IP并不知道TCP的重傳、確認(rèn)、排序等TCP連接的端點不是主機(jī),不是主機(jī)的IP地址,不是應(yīng)用進(jìn)程,也不是運(yùn)輸層的協(xié)議端口。TCP連接的端點叫做套接字(socket)或插口。端口號拼接到(contatenatedwith)IP地址即構(gòu)成了套接字34套接字(socket)
套接字socket=(IP地址:端口號)(5-1)每一條TCP連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定。即:
TCP連接::={socket1,socket2}={(IP1:port1),(IP2:port2)}(5-2)35同一個名詞socket有多種不同的意思應(yīng)用編程接口API稱為socketAPI,簡稱為socket。socketAPI中使用的一個函數(shù)名也叫作socket。調(diào)用socket函數(shù)的端點稱為socket。調(diào)用socket函數(shù)時其返回值稱為socket描述符,可簡稱為socket。在操作系統(tǒng)內(nèi)核中連網(wǎng)協(xié)議的Berkeley實現(xiàn),稱為socket實現(xiàn)。365.4可靠傳輸?shù)墓ぷ髟鞩P層提供盡最大努力服務(wù),即不可靠的TCP如何提供可靠的服務(wù):信道傳輸出現(xiàn)錯誤:確認(rèn)、重傳發(fā)送端速度太快而是接收端數(shù)據(jù)淹沒:控制流量375.4.1停止等待協(xié)議假設(shè):A發(fā)送方B接收方傳輸數(shù)據(jù)單元:分組停止等待協(xié)議:發(fā)送方:發(fā)送完一個分組后,就停止發(fā)送,等待對方確認(rèn);收到對方確認(rèn)后再發(fā)送下一分組接收方:接收;校驗正確;發(fā)送確認(rèn)。38(a)無差錯情況A發(fā)送M1確認(rèn)M1B發(fā)送M2發(fā)送M3確認(rèn)M2確認(rèn)M3A發(fā)送M1B超時重傳M1發(fā)送M2確認(rèn)M1丟棄有差錯的報文
(b)超時重傳tttt1.無差錯情況2.出現(xiàn)差錯:傳輸錯、超時39請注意在發(fā)送完一個分組后,必須暫時保留已發(fā)送的分組的副本。收到確認(rèn)后,清除副本。分組和確認(rèn)分組都必須進(jìn)行編號,保證是對哪一個分組的確認(rèn)。超時計時器的確定:重傳時間應(yīng)當(dāng)比數(shù)據(jù)在分組傳輸?shù)钠骄禃r間更長一些。403.確認(rèn)丟失和確認(rèn)遲到B發(fā)送的對M1的確認(rèn)丟失A:超時(分組出錯、分組丟失、確認(rèn)丟失、確認(rèn)遲到),重傳機(jī)制B:丟棄重傳的分組M1,不向上層交付;使用上述的確認(rèn)和重傳機(jī)制,我們就可以在不可靠的傳輸網(wǎng)絡(luò)上實現(xiàn)可靠的通信。這種可靠傳輸協(xié)議常稱為自動重傳請求ARQ(AutomaticRepeatreQuest)。ARQ表明重傳的請求是自動進(jìn)行的,接收方不需要請求發(fā)送方重傳某個出錯的分組。41確認(rèn)丟失和確認(rèn)遲到A發(fā)送M1B超時重傳M1發(fā)送M2丟棄重復(fù)的M1重傳確認(rèn)M1
(a)確認(rèn)丟失確認(rèn)M1A發(fā)送M1B超時重傳M1發(fā)送M2丟棄重復(fù)的M1重傳確認(rèn)M1
(b)確認(rèn)遲到確認(rèn)M1收下遲到的確認(rèn)但什么也不做tttt424.信道利用率停止等待協(xié)議的優(yōu)點是簡單,但缺點是信道利用率太低。TD
:發(fā)送一個分組時間;RTT:往返時間;
TA:確認(rèn)時間TDRTTATD+RTT+TAB分組確認(rèn)tt分組確認(rèn)43信道的利用率U
(5-3)44流水線傳輸發(fā)送方可連續(xù)發(fā)送多個分組,不必每發(fā)完一個分組就停頓下來等待對方的確認(rèn)。由于信道上一直有數(shù)據(jù)不間斷地傳送,這種傳輸方式可獲得很高的信道利用率。B分組ttAACK455.4.2連續(xù)ARQ協(xié)議發(fā)送窗口123456789101112(a)發(fā)送方維持發(fā)送窗口(發(fā)送窗口是5)(b)收到一個確認(rèn)后發(fā)送窗口向前滑動向前123456789101112發(fā)送窗口發(fā)送窗口:位于發(fā)送窗口內(nèi)的5個分組都可以連續(xù)發(fā)送出去,而不需要等待對方確認(rèn)。連續(xù)ARQ規(guī)定:發(fā)送方每收到一個確認(rèn),就把發(fā)送窗口向前滑動一個分組的位置。46累積確認(rèn)接收方一般采用累積確認(rèn)的方式。即不必對收到的分組逐個發(fā)送確認(rèn),而是對按序到達(dá)的最后一個分組發(fā)送確認(rèn),這樣就表示:到這個分組為止的所有分組都已正確收到了。累積確認(rèn)有的優(yōu)點是:容易實現(xiàn),即使確認(rèn)丟失也不必重傳。缺點是:不能向發(fā)送方反映出接收方已經(jīng)正確收到的所有分組的信息。47Go-back-N(回退N)如果發(fā)送方發(fā)送了前5個分組,而中間的第3個分組丟失了。這時接收方只能對前兩個分組發(fā)出確認(rèn)。發(fā)送方無法知道后面三個分組的下落,而只好把后面的三個分組都再重傳一次。這就叫做Go-back-N(回退N),表示需要再退回來重傳已發(fā)送過的N個分組??梢姰?dāng)通信線路質(zhì)量不好時,連續(xù)ARQ協(xié)議會帶來負(fù)面的影響。48TCP可靠通信的具體實現(xiàn)TCP連接的每一端都必須設(shè)有兩個窗口:一個發(fā)送窗口和一個接收窗口。
TCP的可靠傳輸機(jī)制用字節(jié)的序號進(jìn)行控制。TCP所有的確認(rèn)都是基于序號而不是基于報文段。
TCP兩端的四個窗口經(jīng)常處于動態(tài)變化之中。TCP連接的往返時間RTT也不是固定不變的。需要使用特定的算法估算較為合理的重傳時間。49TCP首部20字節(jié)的固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FIN32位SYNRSTPSHACKURG位08162431填充TCP數(shù)據(jù)部分TCP首部TCP報文段IP數(shù)據(jù)部分IP首部發(fā)送在前5.5TCP報文段的首部格式50TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充1.源端口和目的端口字段:各占2字節(jié)。分別寫入源端口號和目的端口號。TCP的復(fù)用和分用功能都要通過端口實現(xiàn)。51TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充2.序號字段:占4字節(jié)。TCP連接中傳送的數(shù)據(jù)流中的每一個字節(jié)都編上一個序號。序號字段的值則指的是本報文段所發(fā)送的數(shù)據(jù)的第一個字節(jié)的序號。52TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充3.確認(rèn)號字段:占4字節(jié),是期望收到對方的下一個報文段的數(shù)據(jù)的第一個字節(jié)的序號。53TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充4.數(shù)據(jù)偏移(即首部長度):占4位,它指出TCP報文段的數(shù)據(jù)起始處距離TCP報文段的起始處有多遠(yuǎn)?!皵?shù)據(jù)偏移”的單位是32位字(以4字節(jié)為計算單位)。54TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充5.保留字段:占6位,保留為今后使用,但目前應(yīng)置為0。55TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充6.緊急URG:當(dāng)URG
1時,表明緊急指針字段有效。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級的數(shù)據(jù))。56TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充7.確認(rèn)ACK:只有當(dāng)ACK
1時確認(rèn)號字段才有效。當(dāng)ACK
0時,確認(rèn)號無效。57TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充8.推送PSH(PuSH):接收TCP收到PSH=1的報文段,就盡快地交付接收應(yīng)用進(jìn)程,而不再等到整個緩存都填滿了后再向上交付。58TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充9.復(fù)位RST(ReSeT):當(dāng)RST
1時,表明TCP連接中出現(xiàn)嚴(yán)重差錯(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重新建立運(yùn)輸連接。59TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充10.同步SYN:同步SYN=1表示這是一個連接請求或連接接受報文。60TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充11.終止FIN(FINis):
用來釋放一個連接。FIN
1表明此報文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運(yùn)輸連接。61TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充12.窗口字段:占2字節(jié),是指發(fā)送本報文段的一方的接收窗口。窗口值告訴對方:從本報段首部中的確認(rèn)號算起,接收方目前允許對方發(fā)送的數(shù)據(jù)量。用來讓對方設(shè)置發(fā)送窗口的依據(jù),單位為字節(jié)。62TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充13.檢驗和:占2字節(jié)。檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分。在計算檢驗和時,要在TCP報文段的前面加上12字節(jié)的偽首部。63TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充14.緊急指針字段:占16位,指出在本報文段中緊急數(shù)據(jù)共有多少個字節(jié)(緊急數(shù)據(jù)放在本報文段數(shù)據(jù)的最前面)。
64TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG比特08162431填充15.選項字段:長度可變。TCP最初只規(guī)定了一種選項,即最大報文段長度
MSS。MSS告訴對方TCP:“我的緩存所能接收的報文段的數(shù)據(jù)字段的最大長度是MSS個字節(jié)。”
MSS(MaximumSegmentSize)是TCP報文段中的數(shù)據(jù)字段的最大長度。數(shù)據(jù)字段加上TCP首部才等于整個的TCP報文段。默認(rèn)值536字節(jié)。6516.其他選項窗口擴(kuò)大選項:占3字節(jié),其中有一個字節(jié)表示移位值S。新的窗口值等于TCP首部中的窗口位數(shù)增大到(16+S),相當(dāng)于把窗口值向左移動S位后獲得實際的窗口大小。時間戳選項:占10字節(jié),其中最主要的字段時間戳值字段(4字節(jié))和時間戳回送回答字段(4字節(jié))。選擇確認(rèn)選項:在后面的5.6.3節(jié)介紹。66TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充17.填充字段:
這是為了使整個首部長度是4字節(jié)的整數(shù)倍。675.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)強(qiáng)烈不贊成發(fā)送窗口前沿向后收縮68不允許發(fā)送已發(fā)送并收到確認(rèn)A的發(fā)送窗口位置不變允許發(fā)送但尚未發(fā)送262728293031323334353637383940414243444546474849505152535455已發(fā)送但未收到確認(rèn)56P1P2P3不允許接收已發(fā)送確認(rèn)并交付主機(jī)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ù)(又稱為可用窗口)69允許發(fā)送但尚未發(fā)送A的發(fā)送窗口向前滑動262728293031323334353637383940414243444546474849505152535455已發(fā)送并收到確認(rèn)不允許發(fā)送已發(fā)送但未收到確認(rèn)56P1P2P3允許接收B的接收窗口向前滑動262728293031323334353637383940414243444546474849505152535455已發(fā)送確認(rèn)并交付主機(jī)不允許接收56未按序收到A收到新的確認(rèn)號,發(fā)送窗口向前滑動先存下,等待缺少的數(shù)據(jù)的到達(dá)70不允許發(fā)送已發(fā)送并收到確認(rèn)A的發(fā)送窗口已滿,有效窗口為零262728293031323334353637383940414243444546474849505152535455已發(fā)送但未收到確認(rèn)56P1P2P3A的發(fā)送窗口內(nèi)的序號都已用完,但還沒有再收到確認(rèn),必須停止發(fā)送。71發(fā)送緩存最后被確認(rèn)的字節(jié)發(fā)送應(yīng)用程序發(fā)送緩存最后發(fā)送的字節(jié)發(fā)送窗口已發(fā)送TCP序號增大72接收緩存接收應(yīng)用程序已收到接收窗口TCP接收緩存下一個讀取的字節(jié)序號增大下一個期望收到的字節(jié)(確認(rèn)號)73發(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ù)。
74需要強(qiáng)調(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)的功能,這樣可以減小傳輸開銷。755.6.2超時重傳時間的選擇重傳機(jī)制是TCP中最重要和最復(fù)雜的問題之一。TCP每發(fā)送一個報文段,就對這個報文段設(shè)置一次計時器。只要計時器設(shè)置的重傳時間到但還沒有收到確認(rèn),就要重傳這一報文段。76往返時延的方差很大由于TCP的下層是一個互聯(lián)網(wǎng)環(huán)境,IP數(shù)據(jù)報所選擇的路由變化很大。因而運(yùn)輸層的往返時間的方差也很大。時間數(shù)據(jù)鏈路層運(yùn)輸層T1T2T3往返時間的概率分布77加權(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。78超時重傳時間RTO(RetransmissionTime-Out)RTO應(yīng)略大于上面得出的加權(quán)平均往返時間RTTS。RFC2988建議使用下式計算RTO:
RTO
RTTS+4
RTTD(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。79往返時間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)?80Karn算法在計算平均往返時間RTT時,只要報文段重傳了,就不采用其往返時間樣本。這樣得出的加權(quán)平均平均往返時間RTTS
和超時重傳時間RTO就較準(zhǔn)確。81報文段每重傳一次,就把RTO增大一些:新的RTO
(舊的RTO)系數(shù)
的典型值是2。當(dāng)不再發(fā)生報文段的重傳時,才根據(jù)報文段的往返時延更新平均往返時延RTT和超時重傳時間RTO的數(shù)值。實踐證明,這種策略較為合理。修正的Karn算法825.6.3選擇確認(rèn)SACK(SelectiveACK)
收到報文無差錯,但未按序號接收,中間缺少一些序號的數(shù)據(jù),即接收方收到了和前面的字節(jié)流不連續(xù)的兩個字節(jié)塊。如果這些字節(jié)的序號都在接收窗口之內(nèi),那么接收方就先收下這些數(shù)據(jù),但要把這些信息準(zhǔn)確地告訴發(fā)送方,使發(fā)送方不要再重復(fù)發(fā)送這些已收到的數(shù)據(jù)。83110001501300035014500確認(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。84RFC2018的規(guī)定如果要使用選擇確認(rèn),那么在建立TCP連接時,就要在TCP首部的選項中加上“允許SACK”的選項,而雙方必須都事先商定好。如果使用選擇確認(rèn),那么原來首部中的“確認(rèn)號字段”的用法仍然不變。只是以后在TCP報文段的首部中都增加了SACK選項,以便報告收到的不連續(xù)的字節(jié)塊的邊界。由于首部選項的長度最多只有40字節(jié),而指明一個邊界就要用掉4字節(jié),因此在選項中最多只能指明4個字節(jié)塊的邊界信息。855.7TCP的流量控制5.7.1利用滑動窗口實現(xiàn)流量控制一般說來,我們總是希望數(shù)據(jù)傳輸?shù)酶煲恍?。但如果發(fā)送方把數(shù)據(jù)發(fā)送得過快,接收方就可能來不及接收,這就會造成數(shù)據(jù)的丟失。流量控制(flowcontrol):就是讓發(fā)送方的發(fā)送速率不要太快,既要讓接收方來得及接收,也不要使網(wǎng)絡(luò)發(fā)生擁塞。利用滑動窗口機(jī)制可以很方便地在TCP連接上實現(xiàn)流量控制。86seq=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é))”。87持續(xù)計時器(persistencetimer)。TCP為每一個連接設(shè)有一個持續(xù)計時器。只要TCP連接的一方收到對方的零窗口通知,就啟動持續(xù)計時器。若持續(xù)計時器設(shè)置的時間到期,就發(fā)送一個零窗口探測報文段(僅攜帶1字節(jié)的數(shù)據(jù)),而對方就在確認(rèn)這個探測報文段時給出了現(xiàn)在的窗口值。若窗口仍然是零,則收到這個報文段的一方就重新設(shè)置持續(xù)計時器。若窗口不是零,則死鎖的僵局就可以打破了。885.7.2必須考慮傳輸效率可以用不同的機(jī)制來控制TCP報文段的發(fā)送時機(jī):第一種機(jī)制是:TCP維持一個變量,它等于最大報文段長度MSS。只要緩存中存放的數(shù)據(jù)達(dá)到MSS字節(jié)時,就組裝成一個TCP報文段發(fā)送出去。第二種機(jī)制是:由發(fā)送方的應(yīng)用進(jìn)程指明要求發(fā)送報文段,即TCP支持的推送(push)操作。第三種機(jī)制是:發(fā)送方的一個計時器期限到了,這時就把當(dāng)前已有的緩存數(shù)據(jù)裝入報文段(但長度不能超過MSS)發(fā)送出去。895.8TCP的擁塞控制5.8.1擁塞控制的一般原理網(wǎng)絡(luò)資源:計算機(jī)網(wǎng)絡(luò)中的鏈路容量(即帶寬)、交換結(jié)點中的緩存、處理機(jī)等。擁塞(congestion):在某段時間,若對網(wǎng)絡(luò)中某資源的需求超過了該資源所能提供的可用部分,網(wǎng)絡(luò)的性能就要變壞。出現(xiàn)資源擁塞的條件:對資源需求的總和>可用資源
若網(wǎng)絡(luò)中有許多資源同時產(chǎn)生擁塞,網(wǎng)絡(luò)的性能就要明顯變壞,整個網(wǎng)絡(luò)的吞吐量將隨輸入負(fù)荷的增大而下降。90網(wǎng)絡(luò)擁塞控制是個復(fù)雜問題,靠簡單增加鏈路容量、增大交換結(jié)點中的緩存、提高處理機(jī)能力解決不了問題增大交換結(jié)點中的緩存:重傳問題(處理機(jī)慢、線路容量不足)提高處理機(jī)能力:擁塞可能轉(zhuǎn)到其他地方路由器緩存不足:重傳問題擁塞控制與流量控制的關(guān)系擁塞控制:就是防止過多的數(shù)據(jù)注入到網(wǎng)絡(luò)中,這樣可以使網(wǎng)絡(luò)中的路由器或鏈路不致過載。91擁塞控制所要做的都有一個前提,就是網(wǎng)絡(luò)能夠承受現(xiàn)有的網(wǎng)絡(luò)負(fù)荷。擁塞控制是一個全局性的過程,涉及到所有的主機(jī)、所有的路由器,以及與降低網(wǎng)絡(luò)傳輸性能有關(guān)的所有因素。流量控制往往指在給定的發(fā)送端和接收端之間的點對點通信量的控制。流量控制所要做的就是抑制發(fā)送端發(fā)送數(shù)據(jù)的速率,以便使接收端來得及接收。某些擁塞控制算法是向發(fā)送端發(fā)送控制報文,要求發(fā)送端降低發(fā)送速率92擁塞控制需要付出代價結(jié)點之間交換信息需要將一些資源分配給個別用戶單獨使用,網(wǎng)絡(luò)資源不能共享擁塞控制所起的作用提供的負(fù)載(輸入負(fù)載、網(wǎng)絡(luò)負(fù)載):代表單位時間內(nèi)輸入給網(wǎng)絡(luò)的分組數(shù)目吞吐量:代表單位時間內(nèi)從網(wǎng)絡(luò)傳出的分組數(shù)目理想擁塞控制的網(wǎng)絡(luò)飽和狀態(tài)、輕度擁塞、網(wǎng)絡(luò)進(jìn)入擁塞狀態(tài)、死鎖93擁塞控制所起的作用提供的負(fù)載吞吐量理想的擁塞控制實際的擁塞控制0死鎖(吞吐量=0)無擁塞控制擁塞輕度擁塞94擁塞控制的一般原理本質(zhì):尋找使“對資源需求的總和>可用資源”不成立的條件擁塞控制是很難設(shè)計的,因為它是一個動態(tài)的(而不是靜態(tài)的)問題。當(dāng)前網(wǎng)絡(luò)正朝著高速化的方向發(fā)展,這很容易出現(xiàn)緩存不夠大而造成分組的丟失。但分組的丟失是網(wǎng)絡(luò)發(fā)生擁塞的征兆而不是原因。在許多情況下,甚至正是擁塞控制本身成為引起網(wǎng)絡(luò)性能惡化甚至發(fā)生死鎖的原因。這點應(yīng)特別引起重視。95開環(huán)控制和閉環(huán)控制開環(huán)控制方法:在設(shè)計網(wǎng)絡(luò)時事先將有關(guān)發(fā)生擁塞的因素考慮周到,力求網(wǎng)絡(luò)在工作時不產(chǎn)生擁塞。閉環(huán)控制:基于反饋環(huán)路的概念。有以下幾種措施:監(jiān)測網(wǎng)絡(luò)系統(tǒng)以便檢測到擁塞在何時、何處發(fā)生。將擁塞發(fā)生的信息傳送到可采取行動的地方。調(diào)整網(wǎng)絡(luò)系統(tǒng)的運(yùn)行以解決出現(xiàn)的問題。監(jiān)測網(wǎng)絡(luò)擁塞的指標(biāo):丟失分組的百分?jǐn)?shù);平均隊列長度;超時重傳的分組數(shù);平均分組時延;分組時延的標(biāo)準(zhǔn)差等。擁塞控制的方法:監(jiān)測到擁塞發(fā)生,將擁塞信息發(fā)送到源站;在路由器轉(zhuǎn)發(fā)的分組保留一個比特或字段,說明擁塞是否發(fā)生。965.8.2幾種擁塞控制方法1999年公布四種方法:慢開始、擁塞避免、快重傳、快恢復(fù)假設(shè):數(shù)據(jù)是單項傳送,另一方向只出送確認(rèn);接收方總是有足夠大的緩存空間,發(fā)送窗口的大小由網(wǎng)絡(luò)的擁塞程度來決定。1.慢開始和擁塞避免擁塞窗口cwnd(congestionwindow):發(fā)送方維持一個擁塞窗口的狀態(tài)變量。擁塞窗口的大小取決于網(wǎng)絡(luò)的擁塞程度,并且動態(tài)地在變化發(fā)送方讓自己的發(fā)送窗口等于擁塞窗口。如再考慮到接收方的接收能力,則發(fā)送窗口還可能小于擁塞窗口。97發(fā)送方控制擁塞窗口的原則是:只要網(wǎng)絡(luò)沒有出現(xiàn)擁塞,擁塞窗口就再增大一些,以便把更多的分組發(fā)送出去。但只要網(wǎng)絡(luò)出現(xiàn)擁塞,擁塞窗口就減小一些,以減少注入到網(wǎng)絡(luò)中的分組數(shù)。慢開始算法的原理主機(jī)開始發(fā)送報文段時,可先設(shè)置擁塞窗口cwnd=1,即設(shè)置為一個最大報文段MSS的數(shù)值。在每收到一個對新的報文段的確認(rèn)后,將擁塞窗口加1(變?yōu)樵瓉淼?倍),即增加一個MSS的數(shù)值。用這樣的方法逐步增大發(fā)送端的擁塞窗口cwnd,可以使分組注入到網(wǎng)絡(luò)的速率更加合理。98發(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輪次399傳輸輪次(transmissionround)使用慢開始算法后,每經(jīng)過一個傳輸輪次,擁塞窗口cwnd就加倍。一個傳輸輪次所經(jīng)歷的時間其實就是往返時間RTT。“傳輸輪次”更加強(qiáng)調(diào):把擁塞窗口cwnd所允許發(fā)送的報文段都連續(xù)發(fā)送出去,并收到了對已發(fā)送的最后一個字節(jié)的確認(rèn)。例如,擁塞窗口cwnd=4,這時的往返時間RTT就是發(fā)送方連續(xù)發(fā)送4個報文段,并收到這4個報文段的確認(rèn),總共經(jīng)歷的時間。100設(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ī)律緩慢增長。101當(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í)行慢開始算法。這樣做的目的就是要迅速減少主機(jī)發(fā)送到網(wǎng)絡(luò)中的分組數(shù),使得發(fā)生擁塞的路由器有足夠時間把隊列中積壓的分組處理完畢。1022216慢開始和擁塞避免算法的實現(xiàn)舉例當(dāng)TCP連接進(jìn)行初始化時,將擁塞窗口置為1。圖中的窗口單位不使用字節(jié)而使用報文段。慢開始門限的初始值設(shè)置為16個報文段,即ssthresh=16。“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次103慢開始和擁塞避免算法的實現(xiàn)舉例發(fā)送端的發(fā)送窗口不能超過擁塞窗口cwnd和接收端窗口rwnd中的最小值。我們假定接收端窗口足夠大,因此現(xiàn)在發(fā)送窗口的數(shù)值等于擁塞窗口的數(shù)值。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次104慢開始和擁塞避免算法的實現(xiàn)舉例在執(zhí)行慢開始算法時,擁塞窗口cwnd的初始值為1,發(fā)送第一個報文段M0。
2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh的初始值慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次105慢開始和擁塞避免算法的實現(xiàn)舉例發(fā)送端每收到一個確認(rèn),就把cwnd加1。于是發(fā)送端可以接著發(fā)送M1和M2兩個報文段。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次106慢開始和擁塞避免算法的實現(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的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次107慢開始和擁塞避免算法的實現(xiàn)舉例發(fā)送端每收到一個對新報文段的確認(rèn),就把發(fā)送端的擁塞窗口加1,因此擁塞窗口cwnd隨著傳輸輪次按指數(shù)規(guī)律增長。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次108慢開始和擁塞避免算法的實現(xiàn)舉例當(dāng)擁塞窗口cwnd增長到慢開始門限值ssthresh時(即當(dāng)cwnd=16時),就改為執(zhí)行擁塞避免算法,擁塞窗口按線性規(guī)律增長。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次1092216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”慢開始和擁塞避免算法的實現(xiàn)舉例假定擁塞窗口的數(shù)值增長到24時,網(wǎng)絡(luò)出現(xiàn)超時,表明網(wǎng)絡(luò)擁塞了。傳輸輪次1102216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”慢開始和擁塞避免算法的實現(xiàn)舉例更新后的ssthresh值變?yōu)?2(即發(fā)送窗口數(shù)值24的一半),擁塞窗口再重新設(shè)置為1,并執(zhí)行慢開始算法。傳輸輪次1112216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”慢開始和擁塞避免算法的實現(xiàn)舉例當(dāng)cwnd=12時改為執(zhí)行擁塞避免算法,擁塞窗口按按線性規(guī)律增長,每經(jīng)過一個往返時延就增加一個MSS的大小。傳輸輪次112乘法減小(multiplicativedecrease)
“乘法減小“是指不論在慢開始階段還是擁塞避免階段,只要出現(xiàn)一次超時(即出現(xiàn)一次網(wǎng)絡(luò)擁塞),就把慢開始門限值ssthresh設(shè)置為當(dāng)前的擁塞窗口值乘以0.5。當(dāng)網(wǎng)絡(luò)頻繁出現(xiàn)擁塞時,ssthresh值就下降得很快,以大大減少注入到網(wǎng)絡(luò)中的分組數(shù)。113加法增大(additiveincrease)
“加法增大”是指執(zhí)行擁塞避免算法后,在收到對所有報文段的確認(rèn)后(即經(jīng)過一個往返時間),就把擁塞窗口cwnd增加一個MSS大小,使擁塞窗口緩慢增大,以防止網(wǎng)絡(luò)過早出現(xiàn)擁塞。114必須強(qiáng)調(diào)指出“擁塞避免”并非指完全能夠避免了擁塞。利用以上的措施要完全避免網(wǎng)絡(luò)擁塞還是不可能的。“擁塞避免”是說在擁塞避免階段把擁塞窗口控制為按線性規(guī)律增長,使網(wǎng)絡(luò)比較不容易出現(xiàn)擁塞。1152.快重傳和快恢復(fù)快重傳算法:首先要求接收方每收到一個失序的報文段后就立即發(fā)出重復(fù)確認(rèn)。這樣做可以讓發(fā)送方及早知道有報文段沒有到達(dá)接收方。發(fā)送方只要一連收到三個重復(fù)確認(rèn)就應(yīng)當(dāng)立即重傳對方尚未收到的報文段。不難看出,快重傳并非取消重傳計時器,而是在某些情況下可更早地重傳丟失的報文段。116快重傳舉例發(fā)送方接收方發(fā)送M1
確認(rèn)M1t
確認(rèn)M2發(fā)送M2發(fā)送M3發(fā)送M4
?發(fā)送M5發(fā)送M6
重復(fù)確認(rèn)M2立即重傳M3
重復(fù)確認(rèn)M2
重復(fù)確認(rèn)M2t發(fā)送M7收到三個連續(xù)的對M2
的重復(fù)確認(rèn)立即重傳M3丟失117快恢復(fù)算法(1)當(dāng)發(fā)送端收到連續(xù)三個重復(fù)的確認(rèn)時,就執(zhí)行“乘法減小”算法,把慢開始門限ssthresh減半。但接下去不執(zhí)行慢開始算法。(2)由于發(fā)送方現(xiàn)在認(rèn)為網(wǎng)絡(luò)很可能沒有發(fā)生擁塞,因此現(xiàn)在不執(zhí)行慢開始算法,即擁塞窗口cwnd現(xiàn)在不設(shè)置為1,而是設(shè)置為慢開始門限ssthresh減半后的數(shù)值,然后開始執(zhí)行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大。118從連續(xù)收到三個重復(fù)的確認(rèn)轉(zhuǎn)入擁塞避免242468101214161820220048121620傳輸輪次擁塞窗口cwnd收到3個重復(fù)的確認(rèn)執(zhí)行快重傳算法慢開始“乘法減小”擁塞避免“加法增大”TCPReno版本TCPTahoe版本(已廢棄不用)ssthresh的初始值擁塞避免“加法增大”新的ssthresh值慢開始快恢復(fù)119發(fā)送窗口的上限值發(fā)送方的發(fā)送窗口的上限值應(yīng)當(dāng)取為接收方窗口rwnd和擁塞窗口cwnd這兩個變量中較小的一個,即應(yīng)按以下公式確定:發(fā)送窗口的上限值
Min[rwnd,cwnd](5-8)當(dāng)rwnd<cwnd時,是接收方的接收能力限制發(fā)送窗口的最大值。當(dāng)cwnd<rwnd時,則是網(wǎng)絡(luò)的擁塞限制發(fā)送窗口的最大值。1205.8.3隨機(jī)早期檢測RED
(RandomEarlyDetection)
使路由器的隊列維持兩個參數(shù),即隊列長度最小門限THmin
和最大門限THmax。RED對每一個到達(dá)的數(shù)據(jù)報都先計算平均隊列長度LAV。RED算法:若平均隊列長度小于最小門限THmin,則將新到達(dá)的數(shù)據(jù)報放入隊列進(jìn)行排隊。若平均隊列長度超過最大門限THmax,則將新到達(dá)的數(shù)據(jù)報丟棄。若平均隊列長度在最小門限THmin和最大門限THmax之間,則按照某一概率p將新到達(dá)的數(shù)據(jù)報丟棄。121RED將路由器的到達(dá)隊列劃分成為三個區(qū)域從隊首發(fā)送最小門限THmin最大門限THmin分組到達(dá)平均隊列長度Lav排隊丟棄以概率
p
丟棄122丟棄概率
p與
THmin和
Thmax的關(guān)系最小門限THmin最大門限THmax平均隊列長度Lav分組丟棄概率
p1.00pmax當(dāng)LAV
Thmin時,丟棄概率p=0。當(dāng)LAV
Thmax時,丟棄概率p=1。當(dāng)THmin
LAV
THmax時,
0
p
1。例如,按線性規(guī)律變化,從0變到pmax。123瞬時隊列長度和平均隊列長度的區(qū)別
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生活垃圾填埋作業(yè)工創(chuàng)新應(yīng)用競賽考核試卷含答案
- 農(nóng)作物種植技術(shù)員班組管理水平考核試卷含答案
- 變電設(shè)備檢修工崗前理論技術(shù)考核試卷含答案
- 鋁電解操作工7S執(zhí)行考核試卷含答案
- 加工洗沙合同范本
- 鋼構(gòu)勞務(wù)合同范本
- 開發(fā)房產(chǎn)合同協(xié)議
- 重慶物流合同范本
- 意向合同合作協(xié)議
- 釘釘上寫合同協(xié)議
- 江西省2024年“三新”協(xié)同教研共同體高三聯(lián)考 地理試卷(含答案解析)
- 餐(飲)具消毒及供應(yīng)、配送服務(wù)方案投標(biāo)文件
- 部編高教版2023·職業(yè)模塊 中職語文 2.《寧夏閩寧鎮(zhèn):昔日干沙灘今日金沙灘》 課件
- 國家開放大學(xué)《幼兒園課程與活動設(shè)計》期末大作業(yè)參考答案
- 時尚流行文化解讀知到智慧樹章節(jié)測試答案2024年秋天津科技大學(xué)
- 中醫(yī)門診病歷范文30份
- 北師大版三年級數(shù)學(xué)上冊第一單元《混合運(yùn)算》(大單元教學(xué)設(shè)計)
- 人工智能輔助的高血壓腎病變早期診斷
- 《做一個學(xué)生喜歡的老師》讀書分享
- GB/T 23132-2024電動剃須刀
- 03D201-4 10kV及以下變壓器室布置及變配電所常用設(shè)備構(gòu)件安裝
評論
0/150
提交評論