1. 程式人生 > >TCP的連線建立與釋放

TCP的連線建立與釋放

TCP --- 傳輸控制協議

報頭格式:


(1)源埠和目的埠:與UDP類似,TCP的分用是通過埠實現的。 (2)序號:TCP是面向位元組流的,在TCP連線中傳送的位元組流的每一個位元組都是有順序的,整個要傳送的位元組流的起始序號必須要在連線建立時設定。首部中的序號欄位值表示本報文段的資料的第一個位元組的序號。該欄位也稱為“報文段序號”。 (3)確認號:是期望收到對方下一個報文段的第一個資料位元組的序號。 (4)4位首部長度:它指出TCP報文段的資料起始處距離TCP報文段起始處有多遠,因此也稱為“資料偏移”。由於4位二進位制數最大能表示十進位制數字是15,因此資料偏移最大值是60,則選項長度最大為40位元組。 (5)保留:佔6位,為今後使用,目前置為0 (6)設定位: 緊急URG:當URG=1時,表明緊急指標有效,它告訴系統此報文段中有緊急資料,應儘快傳送,而不需要按原來的順序排列等待。傳送方會將緊急資料插入到本報文段最前面,在緊急資料之後的仍是普通資料。這是需要與首部緊急指標(Urgent Point)配合使用。 確認ACK:僅當ACK=1時確認欄位有效,建立連線後所有傳輸的報文段必須將ACK置為1。 推送PSH:PSH=1時表示,該報文段希望到達對端時,將這個報文以及快取區之間快取尚未交付的資料一併交給程序。 復位RST:當RST=1時表明,TCP連結出現嚴重差錯,必須釋放連線,然後再重新建立連線。當其為 1 的時候也可以用來拒絕一個非法的報文段或拒絕開啟一個連線,也稱為重建位或重置位。 同步SYN:連線建立時用來同步序號,SYN=1表示這是一個連線請求或接受報文。SYN=1,ACK=0時表明這是一個連線請求報文,SYN=1,ACK=1表示同意與對方建立連線。 終止FIN:用來釋放一個連線。FIN=1表示資料已經發送完,要求釋放連線。 (7)視窗:指傳送本報文段一方的接收視窗,告訴對方:從本報文段首部中的確認序號算起,接收方目前允許對方傳送的資料量。視窗值經常動態變化著。 (8)檢驗和:檢驗和欄位檢驗的範圍包括首部和資料兩部分。和UDP一樣,在計算檢驗和時,要在TCP報文段的前面加上12位元組的偽首部。 (9)緊急指標:僅在URG=1時才有意義,它指出本報文段中的緊急資料的位元組數。緊急指標指出了緊急資料的末尾在報文段中的位置。 以上是對TCP報頭各個欄位的簡單解釋,詳情參考資料《計算機網路  謝希仁  第六版》

TCP建立連線(三次握手):

連線建立的過程: ·Client向Server傳送連線請求 ·Server接收到Client的請求後,同意建立連線後向Client傳送ACK確認報文,併為這次連線的建立分配資源 ·Client接收到對方發來的ACK確認後也向Server傳送ACK確認報文,連線建立完成
思考題:TCP的連線建立為什麼需要三次握手(即進行了兩次確認)? :這主要是為了防止已經失效的連線請求報文段突然又傳給了伺服器,因而會產生錯誤。假如現在Client端向Server端傳送請求連線,而這個報文段卻在網路結點中長時間滯留了,在連線釋放以後Client傳送的這個報文段才到達對方,此時這個報文段就是一個已經失效的連線請求報文段。但Server收到這個報文段後並不知其失效,以為是Client又傳送的一次請求,就會向Client傳送同意建立連線的確認報文段。但問題是Client並沒有給Server傳送請求,因此也會對這個確認報文段不予理睬,也不會發送資料。但Server會以為連線建立了,並會一直處於等待狀態,等待對方的資料,在這樣的情況下,Server的一些資源就會浪費了。

TCP拆除連線(四次揮手):

資料傳輸完成後,Client和Server都處於ESTABLISHED狀態,通訊的雙方都可以進行釋放連線的動作。 TCP連線釋放的過程比較複雜,下來我們一條一條分析: ·Client主動傳送釋放連線的請求,並停止傳送資料。Client將連線釋放報文段的首部的FIN置為1,其序號為u,它等於前面已傳送過的資料的最後一個位元組的序號加1。此時Client進入FIN-WAIT-1(終止等待1)狀態。 ·Server接收到Client的釋放請求後發出確認,確認號是u+1,而確認報文段自己的序號是v,等於Server前面已經傳送過的資料的最後一個位元組的序號加1。接著Server進入CLOSE-WAIT(關閉等待)狀態,並且TCP會通知高層應用程式,此時Client到Server的連線已經關閉,但Server到Client的連線仍然存在,因此此時的TCP連線處於半關閉狀態。Server仍然有可能會給Client傳送資料,Client也要接收。 ·
Client收到來自對方的確認後,進入FIN-WAIT-2(終止等待2)狀態,等待Server釋放連線。 ·Server傳送完資料後傳送釋放報文段,其應用程式就通知TCP釋放連線。Server傳送的報文段中必須將FIN置為1。由於在半關閉狀態Server可能也傳送了資料,因此假定此時Server的序號為w,除此之外,Server也必須重複上次傳送的確認號u+1。傳送完後Server進入LAST-ACK(最後確認)狀態,等待Client確認。 ·Client收到釋放報文段後傳送確認報文段。此時Client並沒有釋放掉連線,而是進入TIME-WAIT(時間等待)狀態,等過了2MSL時間後才進入到CLOSED狀態。

補充:UDP --- 使用者資料報協議

報頭格式:


特點:

(1)UDP是無連線的。 (2)UDP使用盡最大努力交付,即不保證可靠交付。 (3)UDP是面向報文的。傳送方的UDP對應用程式交下來的報文,在新增首部後就直接交付給IP層,既不合並也不拆分,而是保留這些報文的邊界。 (4)沒有擁塞控制,因此網路出現擁塞時不會使源主機的傳送速率很低。 (5)支援一對一、一對多、多對一、多對多的互動通訊。 (6)首部開銷小。 總結一點:UDP是一個簡單的面向資料報的運輸層協議,它不提供可靠性服務。