




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第7章運輸層協議及分析7.1運輸層協議概述7.2TCP/IP體系中的運輸層7.3用戶數據報協議UDP7.4傳輸控制協議TCP 7.4.1TCP概述
7.4.2TCP可靠傳輸的工作原理
7.4.3TCP報文段的首部格式
7.4.4TCP的流量控制與擁塞控制
7.4.5TCP的重傳機制
7.4.6TCP的運輸連接管理7.5流控制傳輸協議(SCTP)第7章運輸層協議及分析7.1運輸層協議概述7.1運輸層協議概述運輸層向它上面的應用層提供通信服務,屬于面向通信部分的最高層,用戶功能中的最低層。物理層網絡層運輸層應用層數據鏈路層面向信息處理面向通信用戶功能網絡功能一、運輸層在網絡體系結構中的作用7.1運輸層協議概述運輸層向它上面的應用層提供通信服運輸層為相互通信的應用進程提供了邏輯通信54321運輸層端到端的邏輯通信主機A主機B應用進程應用進程路由器1路由器2AP1LAN2WANAP2AP3AP4IP層LAN1AP1AP2AP4端口端口54321IP協議的作用范圍運輸層協議TCP和UDP的作用范圍AP3運輸層為相互通信的應用進程提供了邏輯通信5運輸層端到端的邏二、運輸層要解決的問題要提供端到端的可靠通信必需解決的問題在一個連接上實現多對進程間通信的復用彌補通信子網提供的差異和不足解決通信子網自身無法解決的傳輸錯誤總之,運輸層填補了高層用戶的要求與通信子網提供的服務之間的間隙。通信子網提供的服務越多,運輸層就越簡單。通信子網提供的服務越少,運輸層就越復雜。二、運輸層要解決的問題要提供端到端的可靠通信必需解決的問題三、運輸層的主要功能
運輸層的兩項主要功能:流量控制:通過滑動窗口實現;可靠傳輸:由序號和確認來實現。運輸層主要提供TCP和UDP兩種傳輸協議:TCP是面向連接的、可靠的傳輸協議。它把報文分解為多個段進行傳輸,在目的站再重新裝配這些段,必要時重新發送沒有收到的段。UDP是無連接的。由于對發送的段不進行校驗和確認,因此它是“不可靠”的。三、運輸層的主要功能運輸層的兩項主要功能:運輸層主要提供T運輸層協議和網絡層協議的主要區別應用進程…應用進程…IP協議的作用范圍(提供主機之間的邏輯通信)TCP和UDP協議的作用范圍(提供進程之間的邏輯通信)因特網運輸層為應用進程之間提供端到端的邏輯通信網絡層是為主機之間提供邏輯通信運輸層協議和網絡層協議的主要區別應用進程…應用進程…運輸層與上下層之間關系的OSI表示法運輸實體運輸實體運輸協議運輸層層接口
運輸服務用戶(應用層實體)
運輸服務用戶(應用層實體)層接口
網絡層(或網際層)應用層主機A主機B運輸層服務訪問點TSAP網絡層服務訪問點NSAP運輸層與上下層之間關系的OSI表示法運輸實體運輸實體運運輸層向上提供的兩種服務?應用層運輸層發送進程接收進程接收進程數據數據全雙工可靠信道數據數據使用TCP協議使用UDP協議不可靠信道發送進程運輸層向上提供的兩種服務?應運發接接數據數據全雙工可靠信道數TCP/IP的運輸層有兩個不同的協議:用戶數據報協議
UDP(UserDatagramProtocol)傳輸控制協議TCP(TransmissionControlProtocol)兩個對等運輸實體在通信時傳送的數據單位叫作運輸協議數據單元
TPDU(TransportProtocolDataUnit)。TCP傳送的數據協議單元是TCP報文段(segment)UDP傳送的數據協議單元是UDP報文或用戶數據報。7.2TCP/IP體系中的運輸層
7.2.1運輸層中的兩個協議TCP/IP的運輸層有兩個不同的協議:7.2TCP/IPTCP/IP體系中的運輸層協議TCPUDPIP應用層與各種網絡接口運輸層UDP不提供可靠交付,但UDP是一種高效的工作方式。TCP提供面向連接的服務,傳送數據之前需要先建立連接。TCP提供可靠交付,但增加了許多的開銷。使協議數據單元的首部增大很多,占用許多的處理機資源。SCTP是流控制傳輸協議,面向報文,可靠。SCTP具有UTP和TCP最好的一些特點。SCTPTCP/IP體系中的運輸層協議TCPUDPIP應用層與各7.2.2端口的概念運輸控制層最主要任務是實現進程通信功能,要進行進程通信是通過端口來實現的。在協議棧層間的抽象的協議端口是軟件端口。路由器或交換機上的端口是硬件端口。硬件端口是不同硬件設備進行交互的接口,軟件端口是應用層的各種協議進程與運輸實體進行層間交互的一種地址。
端口的作用就是讓各種應用進程都能將其數據通過端口向下交付給運輸層,讓運輸層知道應當將其報文段中的數據向上通過端口交付給應用層相應的進程。端口用一個16bit端口號進行標志。端口號只具有本地意義。在因特網中不同計算機的相同端口號是沒有聯系的。7.2.2端口的概念運輸控制層最主要任務是實現進程通信功端口在進程之間的通信中所起的作用應用層運輸層網絡層TCP報文段UDP用戶數據報應用進程TCP復用IP復用UDP復用TCP報文段UDP用戶數據報應用進程端口端口TCP分用UDP分用IP分用IP數據報IP數據報發送方接收方端口在進程之間的通信中所起的作用應運網TCP報文段UDP三類端口熟知端口:TCP/IP體系確定并公布的,其數值一般為0~1023。用來表示公共應用程序。指示了正在使用的上層協議。登記端口號,數值為1024~49151,為沒有熟知端口號的應用程序使用的。使用這個范圍的端口號必須登記,以防止重復。客戶端口號或短暫端口號,數值為49152~65535,留給客戶進程選擇暫時使用。當服務器進程收到客戶進程的報文時,就知道了客戶進程所使用的動態端口號。IPFTPSMTPTFTPDNSTelnetSNMP2123255369161TCPUDP應用層傳輸層保留的端口號:<255,公共應用255-1023,公司176網絡層三類端口IPFSTDTS2123255369161TCP常用的默認端口代理服務器常用端口:
(1).HTTP協議代理服務器常用端口號:80/8080/3128/8081/9080
(2).SOCKS代理協議服務器常用端口號:1080
(3).FTP協議代理服務器常用端口號:21
(4).Telnet協議代理服務器常用端口:23常用的默認端口代理服務器常用端口:
(1).HTTP協7.3用戶數據報協議UDP
7.3.1UDP概述
UDP只在IP的數據報服務之上增加了很少一點的功能,即端口的功能和差錯檢測的功能。雖然UDP用戶數據報只能提供不可靠的交付,但UDP在某些方面有其特殊的優點。發送數據之前不需要建立連接UDP的主機不需要維持復雜的連接狀態表。UDP用戶數據報只有8個字節的首部開銷。UDP可支持一對一、一對多、多對一和多對多的交互通信。網絡出現的擁塞不會使源主機的發送速率降低。這對某些實時應用是很重要的。
7.3用戶數據報協議UDP
7.3.1UDP概述端口是用報文隊列來實現UDP端口51000UDP端口69出隊列入隊列出隊列入隊列TFTP服務器TFTP客戶UDP用戶數據報應用層運輸層服務器端用熟知端口,客戶端請求用一般端口端口是用報文隊列來實現UDP端口51000U7.3.2UDP用戶數據報的
首部格式偽首部源端口目的端口長度檢驗和數據首部UDP長度源IP地址目的IP地址017IP數據報字節44112122222字節發送在前數據首部UDP用戶數據報7.3.2UDP用戶數據報的
首部格式偽首部源端口目偽首部源端口目的端口長度檢驗和數據首部UDP長度源IP地址目的IP地址017IP數據報字節44112122222字節發送在前數據首部UDP用戶數據報用戶數據報UDP有兩個字段:數據字段和首部字段。首部字段有8個字節,由4個字段組成,每個字段都是兩個字節。偽首部源端口目的端口長度檢驗和數據首偽首部源端口目的端口長度檢驗和數據首部UDP長度源IP地址目的IP地址017IP數據報字節44112122222字節發送在前數據首部UDP用戶數據報檢驗和檢驗部分包括首部和數據。在計算檢驗和時,臨時把“偽首部”和UDP用戶數據報連接在一起。偽首部僅僅是為了計算檢驗和。不向上和向下傳輸。偽首部源端口目的端口長度檢驗和數據首1001100100010011→153.190000100001101000→8.1041010101100000011→171.30000111000001011→14.110000000000010001→0和170000000000001111→150000010000111111→10870000000000001101→130000000000001111→150000000000000000→0(檢驗和)0101010001000101→數據0101001101010100→數據0100100101001110→數據0100011100000000→數據和0(填充)1001011011101011→求和得出的結果0110100100010100→檢驗和04112字節偽首部8字節UDP首部7字節數據填充按二進制反碼運算求和將得出的結果求反碼全0171510871315全0數據數據數據數據數據數據數據全01001100100010011→153.1915TCP是面向連接的運輸層協議。每一條TCP連接只能有兩個端點(endpoint),每一條TCP連接只能是點對點的(一對一)。TCP提供可靠交付的服務。
TCP提供全雙工通信。面向字節流。7.4傳輸控制協議TCP
7.4.1TCP概述TCP是面向連接的運輸層協議。7.4傳輸控制協議T768HTCP面向流的概念發送TCP報文段發送方接收方把字節寫入發送緩存從接收緩存讀取字節應用進程應用進程1230181716151419202145131211H109H加上TCP首部構成TCP報文段TCPTCP字節流字節流H表示TCP報文段的首部x表示序號為x的數據字節TCP連接768HTCP面向流的概念發送TCP報文段發送方每一條TCP連接有兩個端點。TCP連接的端點不是主機,不是主機的IP地址,不是應用進程,也不是運輸層的協議端口。TCP連接的端點叫做套接字(socket)或插口。端口號拼接到(contatenatedwith)IP地址即構成了套接字。套接字和端口、IP地址的關系是:IP地址3端口號15003,1500套接字(socket)TCP的連接每一條TCP連接有兩個端點。IP地址131.6.23.socket有多種不同的意思應用編程接口
API
稱為socketAPI,簡稱為socket。socketAPI中使用的一個函數名也叫作socket。調用socket函數的端點稱為socket。調用socket函數時其返回值稱為socket描述符,可簡稱為socket。在操作系統內核中連網協議的Berkeley實現,稱為socket實現。socket有多種不同的意思應用編程接口API稱為7.4.2可靠傳輸的工作原理(a)無差錯情況A發送M1確認M1B發送M2發送M3確認M2確認M3A發送M1B超時重傳M1發送M2確認M1丟棄有差錯的報文(b)超時重傳tttt7.4.2可靠傳輸的工作原理(a)無差錯情況A發送M確認丟失和確認遲到A發送M1B超時重傳M1發送M2丟棄重復的M1重傳確認M1(a)確認丟失確認M1A發送M1B超時重傳M1發送M2丟棄重復的M1重傳確認M1(b)確認遲到確認M1收下遲到的確認但什么也不做tttt確認丟失和確認遲到A發送M1B超時發送M2丟棄(a)流水線傳輸發送方可連續發送多個分組,不必每發完一個分組就停頓下來等待對方的確認。由于信道上一直有數據不間斷地傳送,這種傳輸方式可獲得很高的信道利用率。B分組ttAACK流水線傳輸發送方可連續發送多個分組,不必每發完一個分組就停累積確認接收方一般采用累積確認的方式。即不必對收到的分組逐個發送確認,而是對按序到達的最后一個分組發送確認,這樣就表示:到這個分組為止的所有分組都已正確收到了。累積確認有的優點是:容易實現,即使確認丟失也不必重傳。缺點是:不能向發送方反映出接收方已經正確收到的所有分組的信息。累積確認接收方一般采用累積確認的方式。即不必對收到的分組逐TCP可靠通信的具體實現TCP連接的每一端都必須設有兩個窗口——一個發送窗口和一個接收窗口。
TCP的可靠傳輸機制用字節的序號進行控制。TCP所有的確認都是基于序號而不是基于報文段。
TCP兩端的四個窗口經常處于動態變化之中。TCP連接的往返時間RTT也不是固定不變的。需要使用特定的算法估算較為合理的重傳時間。TCP可靠通信的具體實現TCP連接的每一端都必須設有兩TCP首部20字節的固定首部32bit比特08162431目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充TCP數據部分TCP首部TCP報文段IP數據部分IP首部發送在前7.4.3TCP報文段的首部格式TCP20字節的32bit比特0TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG比特08162431填充源端口和目的端口字段——各占2字節。端口是運輸層與應用層的服務接口。運輸層的復用和分用功能都要通過端口才能實現。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG比特08162431填充序號字段——占4字節。TCP連接中傳送的數據流中的每一個字節都編上一個序號。序號字段的值則指的是本報文段所發送的數據的第一個字節的序號。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充確認號字段——占4字節,是期望收到對方的下一個報文段的數據的第一個字節的序號。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充數據偏移——占4bit,它指出TCP報文段的數據起始處距離TCP報文段的起始處有多遠。“數據偏移”的單位是32bit字。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充保留字段——占6bit,保留為今后使用,但目前應置為0。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充緊急比特URG——當URG1時,表明緊急指針字段有效。它告訴系統此報文段中有緊急數據,應盡快傳送(相當于高優先級的數據)。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充確認比特ACK——只有當ACK1時確認號字段才有效。當ACK0時,確認號無效。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充推送比特PSH(PuSH)——接收TCP收到推送比特置1的報文段,就盡快地交付給接收應用進程,而不再等到整個緩存都填滿了后再向上交付。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充復位比特RST(ReSeT)——當RST1時,表明TCP連接中出現嚴重差錯(如由于主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充同步比特SYN——同步比特SYN置為1,就表示這是一個連接請求或連接接受報文。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充終止比特FIN(FINal)——用來釋放一個連接。當FIN1時,表明此報文段的發送端的數據已發送完畢,并要求釋放運輸連接。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充窗口字段——占2字節。用來控制對方發送的數據量。端點根據設置的緩存空間大小確定自己接收窗口大小,然后通知對方以確定對方的發送窗口的上限。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充檢驗和——占2字節。檢驗的范圍包括首部和數據這兩部分。在計算檢驗和時,要在TCP報文段的前面加上12字節的偽首部。TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充緊急指針字段——占16bit。當URG=1時,緊急指針指出在本報文段中的緊急數據的最后一個字節的序號。
TCP20目的端口數據檢驗和選TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG比特08162431填充選項字段——長度可變。TCP只規定了一種選項,即最大報文段長度
MSS(MaximumSegmentSize)。MSS告訴對方TCP:“我的緩存所能接收的報文段的數據字段的最大長度是MSS個字節。”MSS是TCP報文段中的數據字段的最大長度。數據字段加上TCP首部才等于整個的TCP報文段。TCP20目的端口數據檢驗和選選項字段
窗口擴大選項——占3字節,其中有一個字節表示移位值S。新的窗口值等于TCP首部中的窗口位數增大到(16+S),相當于把窗口值向左移動S位后獲得實際的窗口大小。時間戳選項——占10字節,其中最主要的字段時間戳值字段(4字節)和時間戳回送回答字段(4字節)。選擇確認選項——在后面的5.6.3節介紹。選項字段
窗口擴大選項——占3字節,其中有一個字節表示選項字段舉例——選擇確認SACK接收方收到了和前面的字節流不連續的兩個字節塊。如果這些字節的序號都在接收窗口之內,那么接收方就先收下這些數據,但要把這些信息準確地告訴發送方,使發送方不要再重復發送這些已收到的數據。如果要使用選擇確認,那么在建立TCP連接時,就要在TCP首部的選項中加上“允許SACK”的選項,而雙方必須都事先商定好。首部中的“確認號字段”的用法仍然不變。只是以后在TCP報文段的首部中都增加了SACK選項,以便報告收到的不連續的字節塊的邊界。由于首部選項的長度最多只有40字節,而指明一個邊界就要用掉4字節,因此在選項中最多只能指明4個字節塊的邊界信息。選項字段舉例——選擇確認SACK接收方收到了和前面的字節流110001501300035014500確認號=1001L1=1501L2=3501R1=3001R1=4501接收到的字節流序號不連續……連續的字節流………第一個字節塊第二個字節塊
和前后字節不連續的每一個字節塊都有兩個邊界:左邊界和右邊界。用四個指針標記這些邊界。第一個字節塊的左邊界L1=1501,但右邊界R1=3001。左邊界指出字節塊的第一個字節的序號,但右邊界減1才是字節塊中的最后一個序號。第二個字節塊的左邊界L2=3501,而右邊界R2=4501。11TCP首部20字節固定首部目的端口數據偏移檢驗和選項(長度可變)源端口序號緊急指針窗口確認號保留FINSYNRSTPSHACKURG填充填充字段——這是為了使整個首部長度是4字節的整數倍。TCP20目的端口數據檢驗和選7.4.4TCP的流量控制與擁塞控制
一、流量控制的概念TCP采用可變的滑動窗口進行流量控制。窗口的單位是字節。TCP報文段在首部的窗口字段寫入的數值就是當前給對方設置的發送窗口數值的上限。發送窗口在連接建立時由雙方商定。但在通信的過程中,接收端可根據自己的資源情況,隨時動態地調整對方的發送窗口上限值(可增大或減小)。連接建立時,雙方要商定初始序號。TCP報文首部中的序號字段數值表示該報文段中的數據部分的第一個字節的序號。TCP的確認是對接收到的數據的最高序號表示確認。接收端返回的確認號接收端期望下次收到的數據中的第一個數據字節的序號(已收到的數據的最高序號加1)。7.4.4TCP的流量控制與擁塞控制
一、流量控制的概前移不允許發送已發送并收到確認A的發送窗口=20允許發送的序號26272829303132333435363738394041424344454647484950515253545556B期望收到的序號前沿后沿前移收縮根據B給出的窗口值A構造出自己的發送窗口TCP標準強烈不贊成發送窗口前沿向后收縮窗口控制的概念前移不允許發送已發送并A的發送窗口=20允許發送的序號不允許發送已發送并收到確認A的發送窗口位置不變允許發送但尚未發送262728293031323334353637383940414243444546474849505152535455已發送但未收到確認56P1P2P3不允許接收已發送確認并交付主機B的接收窗口允許接收26272829303132333435363738394041424344454647484950515253545556未按序收到可用窗口A發送了11個字節的數據P3–P1=A的發送窗口(又稱為通知窗口)P2–P1=已發送但尚未收到確認的字節數P3–P2=允許發送但尚未發送的字節數(又稱為可用窗口)不允許發送已發送并A的發送窗口位置不變允許發送但尚未發送2允許發送但尚未發送A的發送窗口向前滑動262728293031323334353637383940414243444546474849505152535455已發送并收到確認不允許發送已發送但未收到確認56P1P2P3允許接收B的接收窗口向前滑動262728293031323334353637383940414243444546474849505152535455已發送確認并交付主機不允許接收56未按序收到A收到新的確認號,發送窗口向前滑動先存下,等待缺少的數據的到達允許發送但尚未發送A的發送窗口向前滑動2627282930不允許發送已發送并收到確認A的發送窗口已滿,有效窗口為零262728293031323334353637383940414243444546474849505152535455已發送但未收到確認56P1P2P3A的發送窗口內的序號都已用完,但還沒有再收到確認,必須停止發送。A的發送窗口并不總是和B的接收窗口一樣大(因為有一定的時間滯后)。TCP標準沒有規定對不按序到達的數據應如何處理。通常是先臨時存放在接收窗口中,等到字節流中所缺少的字節收到后,再按序交付上層的應用進程。TCP要求接收方必須有累積確認的功能,這樣可以減小傳輸開銷。不允許已發送并收到確認A的發送窗口已滿,有效窗口為零262發送緩存與接收緩存的作用發送緩存用來暫時存放:
發送應用程序傳送給發送方TCP準備發送的數據;
TCP已發送出但尚未收到確認的數據。接收緩存用來暫時存放:
按序到達的、但尚未被接收應用程序讀取的數據;不按序到達的數據。
發送緩存與接收緩存的作用發送緩存用來暫時存放: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發送序號201至500共300字節A發送了序號101至200,還能發送200字節A發送了序號301至400,還能再發送100字節新數據A發送了序號1至100,還能發送300字節A發送了序號401至500,不能再發送新數據了A超時重傳舊的數據,但不能發送新的數據允許A發送序號501至600共100字節A發送了序號501至600,不能再發送了不允許A再發送(到序號600為止的數據都收到了)丟失!流量控制舉例A向B發送數據。在連接建立時,
B告訴A:“我的接收窗口rwnd=400(字節)”。seq=1,DATAseq=201,DATAse持續計時器TCP為每一個連接設有一個持續計時器。只要TCP連接的一方收到對方的零窗口通知,就啟動持續計時器。若持續計時器設置的時間到期,就發送一個零窗口探測報文段(僅攜帶1字節的數據),而對方就在確認這個探測報文段時給出了現在的窗口值。若窗口仍然是零,則收到這個報文段的一方就重新設置持續計時器。若窗口不是零,則死鎖的僵局就可以打破了。持續計時器TCP為每一個連接設有一個持續計時器。二、擁塞控制的一般原理擁塞控制是很難設計的,因為它是一個動態的(而不是靜態的)問題。當前網絡正朝著高速化的方向發展,這很容易出現緩存不夠大而造成分組的丟失。但分組的丟失是網絡發生擁塞的征兆而不是原因。在許多情況下,甚至正是擁塞控制本身成為引起網絡性能惡化甚至發生死鎖的原因。這點應特別引起重視。
TCP采用慢開始和擁塞避免法進行擁塞控制二、擁塞控制的一般原理擁塞控制是很難設計的,因為它是一個動慢開始和擁塞避免發送端的主機在確定發送報文段的速率時,既要根據接收端的接收能力,又要從全局考慮不要使網絡發生擁塞。因此,每一個TCP連接需要有以下兩個狀態變量:接收端窗口
rwnd(receiverwindow)又稱為通知窗口(advertisedwindow)。擁塞窗口
cwnd(congestionwindow)。慢開始和擁塞避免發送端的主機在確定發送報文段的速率時,既要根接收端窗口rwnd和擁塞窗口cwnd接收端窗口rwnd這是接收端根據其目前的接收緩存大小所許諾的最新的窗口值,是來自接收端的流量控制。接收端將此窗口值放在TCP報文的首部中的窗口字段,傳送給發送端。擁塞窗口cwnd(congestionwindow)是發送端根據自己估計的網絡擁塞程度而設置的窗口值,是來自發送端的流量控制。接收端窗口rwnd和擁塞窗口cwnd接收端窗口rw發送窗口的上限值發送端的發送窗口的上限值應當取為接收端窗口rwnd和擁塞窗口cwnd這兩個變量中較小的一個,即應按以下公式確定:發送窗口的上限值
Min[rwnd,cwnd]
當rwnd<cwnd時,是接收端的接收能力限制發送窗口的最大值。當cwnd<rwnd時,則是網絡的擁塞限制發送窗口的最大值。
發送窗口的上限值發送端的發送窗口的上限值應當取為接收端窗口慢開始算法的原理為了防止出現擁塞現象,需要對發送端的發送啟動速度進行控制。在主機剛剛開始發送報文段時可先將擁塞窗口cwnd設置為一個最大報文段MSS的數值。在每收到一個對新的報文段的確認后,將擁塞窗口增加一個MSS的數值。用這樣的方法逐步增大發送端的擁塞窗口cwnd,可以使分組注入到網絡的速率更加合理。慢開始算法的原理為了防止出現擁塞現象,需要對發送端的發送啟發送方接收方發送M1
確認M1發送M2~M3
確認M2~M3發送M4~M7
確認M4~M7cwnd=1cwnd=2cwnd=4發送M8~M15cwnd=8…tt發送方每收到一個對新報文段的確認(重傳的不算在內)就使cwnd加1。輪次1輪次2輪次3發送方接收方發送M1確認M1發送M2~M3確認M傳輸輪次使用慢開始算法后,每經過一個傳輸輪次,擁塞窗口cwnd就加倍。一個傳輸輪次所經歷的時間其實就是往返時間RTT。“傳輸輪次”更加強調:把擁塞窗口cwnd所允許發送的報文段都連續發送出去,并收到了對已發送的最后一個字節的確認。例如,擁塞窗口cwnd=4,這時的往返時間RTT就是發送方連續發送4個報文段,并收到這4個報文段的確認,總共經歷的時間。傳輸輪次使用慢開始算法后,每經過一個傳輸輪次,擁塞窗口cw設置慢開始門限狀態變量ssthresh慢開始門限ssthresh的用法如下:當cwnd<ssthresh時,使用慢開始算法。當cwnd>ssthresh時,停止使用慢開始算法而改用擁塞避免算法。當cwnd=ssthresh時,既可使用慢開始算法,也可使用擁塞避免算法。擁塞避免算法的思路是讓擁塞窗口cwnd緩慢地增大,即每經過一個往返時間RTT就把發送方的擁塞窗口cwnd加1,而不是加倍,使擁塞窗口cwnd按線性規律緩慢增長。設置慢開始門限狀態變量ssthresh慢開始門限ssthr當網絡出現擁塞時無論在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞(其根據就是沒有按時收到確認),就要把慢開始門限ssthresh設置為出現擁塞時的發送方窗口值的一半(但不能小于2)。然后把擁塞窗口cwnd重新設置為1,執行慢開始算法。這樣做的目的就是要迅速減少主機發送到網絡中的分組數,使得發生擁塞的路由器有足夠時間把隊列中積壓的分組處理完畢。當網絡出現擁塞時無論在慢開始階段還是在擁塞避免階段,只要發送2216慢開始和擁塞避免算法的實現舉例當TCP連接進行初始化時,將擁塞窗口置為1。窗口單位不使用字節而使用報文段。慢開始門限的初始值設置為16個報文段,即ssthresh=16。“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網絡擁塞指數規律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次2216慢開始和擁塞避免算法的實現舉例當TCP連接進行慢開始和擁塞避免算法的實現舉例發送端的發送窗口不能超過擁塞窗口cwnd和接收端窗口rwnd中的最小值。我們假定接收端窗口足夠大,因此現在發送窗口的數值等于擁塞窗口的數值。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網絡擁塞指數規律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現舉例發送端的發送窗口不能超過擁塞慢開始和擁塞避免算法的實現舉例在執行慢開始算法時,擁塞窗口cwnd的初始值為1,發送第一個報文段M0。
2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網絡擁塞指數規律增長ssthresh的初始值慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現舉例在執行慢開始算法時,擁塞窗口慢開始和擁塞避免算法的實現舉例發送端每收到一個確認,就把cwnd加1。于是發送端可以接著發送M1和M2兩個報文段。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網絡擁塞指數規律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現舉例發送端每收到一個確認,就把慢開始和擁塞避免算法的實現舉例接收端共發回兩個確認。發送端每收到一個對新報文段的確認,就把發送端的cwnd加1。現在cwnd從2增大到4,并可接著發送后面的4個報文段。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網絡擁塞指數規律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現舉例接收端共發回兩個確認。發送端慢開始和擁塞避免算法的實現舉例發送端每收到一個對新報文段的確認,就把發送端的擁塞窗口加1,因此擁塞窗口cwnd隨著傳輸輪次按指數規律增長。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網絡擁塞指數規律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現舉例發送端每收到一個對新報文段的慢開始和擁塞避免算法的實現舉例當擁塞窗口cwnd增長到慢開始門限值ssthresh時(即當cwnd=16時),就改為執行擁塞避免算法,擁塞窗口按線性規律增長。2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網絡擁塞指數規律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開始和擁塞避免算法的實現舉例當擁塞窗口cwnd增長到2216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網絡擁塞指數規律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”慢開始和擁塞避免算法的實現舉例假定擁塞窗口的數值增長到24時,網絡出現超時,表明網絡擁塞了。傳輸輪次2216“乘法減小”246810121416182000482216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網絡擁塞指數規律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”慢開始和擁塞避免算法的實現舉例更新后的ssthresh值變為12(即發送窗口數值24的一半),擁塞窗口再重新設置為1,并執行慢開始算法。傳輸輪次2216“乘法減小”246810121416182000482216“乘法減小”24681012141618200048122024擁塞窗口cwnd新的ssthresh值網絡擁塞指數規律增長ssthresh的初始值慢開始慢開始慢開始擁塞避免“加法增大”擁塞避免“加法增大”慢開始和擁塞避免算法的實現舉例當cwnd=12時改為執行擁塞避免算法,擁塞窗口按按線性規律增長,每經過一個往返時延就增加一個MSS的大小。傳輸輪次2216“乘法減小”24681012141618200048擁塞避免的乘法減小與加法增大“乘法減小“是指不論在慢開始階段還是擁塞避免階段,只要出現一次超時(即出現一次網絡擁塞),就把慢開始門限值ssthresh設置為當前的擁塞窗口值乘以0.5。當網絡頻繁出現擁塞時,ssthresh值就下降得很快,以大大減少注入到網絡中的分組數。“加法增大”是指執行擁塞避免算法后,當收到對所有報文段的確認就將擁塞窗口cwnd增加一個MSS大小,使擁塞窗口緩慢增大,以防止網絡過早出現擁塞。擁塞避免的乘法減小與加法增大“乘法減小“是指不論在慢開始階段
擁塞控制算法中的快重傳和快恢復快重傳算法:發送端只要一連收到三個重復的ACK
即可斷定有分組丟失了,就立即重傳報文段而不必繼續等待重傳計時器的超時。快恢復算法:當發送端收到連續三個重復的ACK時,就執行“乘法減小”算法,把慢開始門限ssthresh減半。但接下去不執行慢開始算法。由于發送方現在認為網絡很可能沒有發生擁塞,因此現在不執行慢開始算法,即擁塞窗口cwnd現在不設置為1,而是設置為慢開始門限ssthresh減半后的數值,然后開始執行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大。
擁塞控制算法中的快重傳和快恢復快重傳算法:發送端只要一連收24從連續收到三個重復的確認
轉入擁塞避免2468101214161820220048121620傳輸輪次擁塞窗口cwnd收到3個重復的確認執行快重傳算法慢開始“乘法減小”擁塞避免“加法增大”TCPReno版本TCPTahoe版本(已廢棄不用)ssthresh的初始值擁塞避免“加法增大”新的ssthresh值慢開始快恢復24從連續收到三個重復的確認
轉入擁塞避免24681012快重傳舉例M1,M2ack2,ack3M4主機A主機BB確認M1
和
M2A發送M1和M2A收到了三個重復的確認ACK3,就立即重傳M3,而不必等待超時重傳。M3丟失!A發送M3但丟失了A發送M4ack3M5A發送M5ack3B發送第二個重復確認
ACK3M6A發送M6ack3M3B發送第三個重復確認
ACK3B只能再次確認
M2(因為M3
沒有收到)快重傳舉例M1,M2ack2,ack3M4主機A主機7.4.5TCP的重傳機制重傳機制是TCP中最重要和最復雜的問題之一。也是保證報文段可靠傳輸的措施之一。由于TCP的下層是一個互連網環境,IP數據報所選擇的路由變化很大。因而運輸層的往返時延的方差很大。時間數據鏈路層運輸層T1T2T3往返時延的概率分布7.4.5TCP的重傳機制重傳機制是TCP中最重往返時延的自適應算法重發方法:TCP每發送一個報文段,就對這個報文段設置一次計時器。只要計時器設置的重傳時間到但還沒有收到確認,就重傳這一報文段。超時時間的選擇:運輸層的往返時延的方差大,需采用自適應算法。——超時重傳時間RTO略大于平均往返時延RTT。每測量到一個新的往返時延樣本,就按下式重新計算一次平均往返時延RTT:平均往返時延RTT
(舊的RTT)(1
)(新的往返時延樣本)0
1典型的值為7/8
往返時延的自適應算法重發方法:TCP每發送一個報文段,就往返時延RTT?計時器的RTO應略大于RTT,即:RTO
RTTTCP原先的標準推薦將值取為2實際上往返時間的測量相當復雜,特別是已經重傳的條件下。
TCP報文段1沒有收到確認。重傳(即報文段2)后,收到了確認報文段ACK。如何判定此確認報文段是對原來的報文段1的確認,還是對重傳的報文段2的確認?發送一個TCP報文段超時重傳TCP報文段收到ACK時間12往返時延RTT?是對哪一個報文段的確認?往返時延的自適應算法往返時延RTT?計時器的RTO應略大于RTT,即:Karn算法在計算平均往返時延RTT時,只要報文段重傳了,就不采用其往返時延樣本。這樣得出的平均往返時延RTT和重傳時間就較準確。重傳時間無法更新報文段每重傳一次,就將重傳時間增大一些:新的重傳時間
(舊的重傳時間)系數的典型值是2。當不再發生報文段的重傳時,才根據報文段的往返時延更新平均往返時延RTT和重傳時間的數值。修正的Karn算法Karn算法在計算平均往返時延RTT時,只要報文段重7.4.6TCP的運輸連接管理
1.運輸連接的三個階段
運輸連接有三個階段,即:連接建立、數據傳送和連接釋放。連接建立過程中要解決以下三個問題:確知對方的存在協商參數(如最大報文段長度,最大窗口大小,服務質量等)分配資源(如緩存大小,連接表中的項目等)TCP的連接和建立都是采用客戶服務器方式。主動發起連接建立的應用進程叫做客戶(client)。被動等待連接建立的應用進程叫做服務器(server)。
7.4.6TCP的運輸連接管理
1.運輸連接的用三次握手建立TCP連接
SYN=1,seq=xCLOSEDCLOSED主動打開被動打開AB客戶服務器TCP的連接建立A的TCP向B發出連接請求報文段,其首部中的同步位SYN=1,并選擇序號seq=x,表明傳送數據時的第一個數據字節的序號是x。用三次握手建立TCP連接SYN=1,seq=用三次握手建立TCP連接
SYN=1,seq=xCLOSEDCLOSED主動打開被動打開AB客戶服務器TCP的連接建立SYN=1,ACK=1,seq=y,ack=x1B的TCP收到連接請求報文段后,如同意,則發回確認。
B在確認報文段中應使SYN=1,使ACK=1,其確認號ack=x1,自己選擇的序號seq=y。用三次握手建立TCP連接SYN=1,seq=SYN=1,seq=xACK=1,seq=x+1,ack=y1CLOSEDCLOSED主動打開被動打開AB客戶服務器SYN=1,ACK=1,seq=y,ack=x1A收到此報文段后向B給出確認,其ACK=1,確認號ack=y1。
A的TCP通知上層應用進程,連接已經建立。SYN=1,seq=xACK=1,seq=SYN=1,seq=xACK=1,seq=x+1,ack=y1CLOSEDCLOSED數據傳送主動打開被動打開AB客戶服務器SYN=1,ACK=1,seq=y,ack=x1B的TCP收到主機A的確認后,也通知其上層應用進程:TCP連接已經建立。SYN=1,seq=xACK=1,seq=SYN-SENTESTAB-LISHEDSYN-RCVDLISTENESTAB-LISHED用三次握手建立TCP連接的各狀態
SYN=1,seq=xACK=1,seq=x+1,ack=y1CLOSEDCLOSED數據傳送主動打開被動打開AB客戶服務器TCP的連接建立SYN=1,ACK=1,seq=y,ack=x1SYN-ESTAB-SYN-LISTENESTAB-用三次握FIN=1,seq=uCLOSED主動關閉數據傳送ESTAB-LISHEDESTAB-LISHEDAB客戶服務器CLOSEDTCP
的連接釋放
數據傳輸結束后,通信的雙方都可釋放連接。現在A的應用進程先向其TCP發出連接釋放報文段,并停止再發送數據,主動關閉TCP
連接。
A把連接釋放報文段首部的FIN=1,其序號
seq=u,等待B的確認。FIN=1,seq=uCLOSED主動關閉數據傳送FIN=1,seq=uACK=1,seq=v,ack=u1主動關閉數據傳送通知應用進程ESTAB-LISHEDESTAB-LISHEDAB客戶服務器TCP
的連接釋放B發出確認,確認號ack=u1,而這個報文段自己的序號seq=v。
TCP服務器進程通知高層應用進程。從A到B這個方向的連接就釋放了,TCP連接處于半關閉狀態。B若發送數據,A仍要接收。FIN=1,seq=uACK=1,seq=FIN=1,seq=uACK=1,seq=v,ack=u1FIN=1,ACK=1,seq=w,ack=u1主動關閉被動關閉數據傳送通知應用進程ESTAB-LISHEDESTAB-LISHEDAB客戶服務器數據傳送TCP
的連接釋放
若B已經沒有要向A發送的數據,其應用進程就通知TCP釋放連接。FIN=1,seq=uACK=1,seq=FIN=1,seq=uACK=1,seq=v,ack=u1FIN=1,ACK=1,seq=w,ack=u1主動關閉被動關閉數據傳送通知應用進程ESTAB-LISHEDESTAB-LISHEDAB客戶服務器數據傳送TCP
的連接釋放A收到連接釋放報文段后,必須發出確認。ACK=1,seq=u+1,ack=w1FIN=1,seq=uACK=1,seq=FIN=1,seq=uACK=1,seq=v,ack=u1FIN=1,ACK=1,seq=w,ack=u1主動關閉被動關閉數據傳送通知應用進程ESTAB-LISHEDESTAB-LISHEDAB客戶服務器數據傳送TCP
的連接釋放
在確認報文段中ACK=1,確認號ackw1,自己的序號seq=u+1。ACK=1,seq=u+1,ack=w1FIN=1,seq=uACK=1,seq=CLOSEDACK=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等待TIME-WAIT主動關閉被動關閉數據傳送通知應用進程ESTAB-LISHEDESTAB-LISHEDAB客戶服務器數據傳送CLOSED5.9.2TCP
的連接釋放TCP連接必須經過一段時間后才真正釋放掉。CLOSEDACK=1,seq=u+1,acA必須等待2MSL的時間第一,為了保證A發送的最后一個ACK報文段能夠到達B。第二,防止“已失效的連接請求報文段”出現在本連接中。A在發送完最后一個ACK報文段后,再經過時間2MSL,就可以使本連接持續的時間內所產生的所有報文段,都從網絡中消失。這樣就可以使下一個新的連接中不會出現這種舊的連接請求報文段。A必須等待2MSL的時間第一,為了保證A發送的最后7.5流控制傳輸協議(SCTP)UTP:面向報文,不可靠TCP:面向字節,可靠SCTP:面向報文,可靠。保留報文邊界檢測丟失數據、重復數據和失序數據擁塞控制、流量控制SCTP具有UTP和TCP最好的一些特點。被稱為超級TCP7.5流控制傳輸協議(SCTP)UTP:面向報文,不可靠SCTP的服務進程到進程的通信SCTP使用TCP空間的所有熟知端口SCTP還使用一些外加的端口多重流SCTP中的一個關聯可以包含多重流協議端口號描述IUA9990在IP上運行ISDNM2UA2904SS7電話信令M3UA2905SS7電話信令H.2482945媒體網關控制H.3231718,1719,1720,11720IP電話SIP5060IP電話SCTP的服務進程到進程的通信協議端口號描述IUA9990在SCTP的服務
多重流的概念發送進程接收進程數據塊的流使用SCTP協議數據塊的流使用SCTP協議TCP每一個連接只能包含一個流,SCTP允許每一個關聯中使用多重流當一個流被中斷時,其他流可繼續交付數據SCTP的服務
多重流的概念發接數據塊的流使用SCTP協SCTP的服務連接多個網絡SCTP中的關聯允許每一端使用多個IP地址當一對IP出現故障時,可選用另一對IP進行通信全雙工通信面向連接的服務兩個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設計材料代用管理制度
- 診所內科門診管理制度
- 診所藥品進貨管理制度
- 試用員工流程管理制度
- 財務績效考核管理制度
- 財政水利資金管理制度
- 貨物電梯設備管理制度
- 貨運物流公司管理制度
- 2025年中國互聯力量訓練器材行業市場全景分析及前景機遇研判報告
- 2025年中國催化加熱器行業市場全景分析及前景機遇研判報告
- 紫銅材質證明
- (參考)菲達公司國內電除塵器業績表
- 步進式加熱爐耐材砌筑施工方案
- GB-T12232-2005- 通用閥門 法蘭連接鐵制閘閥
- 大學生職業生涯規劃與就業指導教案第5講:興趣探索
- 2022年中國電信店長技能四級認證教材
- 門店電表記錄表
- 七年級勞技 花卉種植 花卉用途 PPT學習教案
- 常見散料堆積密度匯總-共10
- 企業勞動用工法律風險與防范
- 海洋牧場生態融合漁光互補項目資金申請報告寫作模板
評論
0/150
提交評論