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