tcp頭部的最後乙個選項字段(options)是可變長的可選資訊。這部分最多包含40位元組,因為tcp頭部最長是60位元組(其中還包含前面討論的20位元組的固定部分)。典型的tcp頭部選項結構如圖3-4所示。
選項的第乙個欄位kind說明選項的型別。有的tcp選項沒有後面兩個字段,僅包含1位元組的kind欄位。第二個欄位length(如果有的話)指定該選項的總長度,該長度包括kind欄位和length欄位佔據的2位元組。第三個欄位info(如果有的話)是選項的具體資訊。常見的tcp選項有7種,如圖3-5所示。
kind=0是選項表結束選項。
kind=1是空操作(nop)選項,沒有特殊含義,一般用於將tcp選項的總長度填充為4位元組的整數倍。
kind=2是最大報文段長度選項。tcp連線初始化時,通訊雙方使用該選項來協商最大報文段長度(max segment size,mss)。tcp模組通常將mss設定為(mtu-40)位元組(減掉的這40位元組包括20位元組的tcp頭部和20位元組的ip頭部)。這樣攜帶tcp報文段的ip資料報的長度就不會超過mtu(假設tcp頭部和ip頭部都不包含選項字段,並且這也是一般情況),從而避免本機發生ip分片。對乙太網而言,mss值是1460(1500-40)位元組。
kind=3是視窗擴大因子選項。tcp連線初始化時,通訊雙方使用該選項來協商接收通告視窗的擴大因子。在tcp的頭部中,接收通告視窗大小是用16位表示的,故最大為65?535位元組,但實際上tcp模組允許的接收通告視窗大小遠不止這個數(為了提高tcp通訊的吞吐量)。視窗擴大因子解決了這個問題。假設tcp頭部中的接收通告視窗大小是n,視窗擴大因子(移位數)是m,那麼tcp報文段的實際接收通告視窗大小是n乘2m,或者說n左移m位。注意,m的取值範圍是0~14。我們可以通過修改/proc/sys/net/ipv4/tcp_window_scaling核心變數來啟用或關閉視窗擴大因子選項。
和mss選項一樣,視窗擴大因子選項只能出現在同步報文段中,否則將被忽略。但同步報文段本身不執行視窗擴大操作,即同步報文段頭部的接收通告視窗大小就是該tcp報文段的實際接收通告視窗大小。當連線建立好之後,每個資料傳輸方向的視窗擴大因子就固定不變了。關於視窗擴大因子選項的細節,可參考標準文件rfc 1323。
kind=4是選擇性確認(selective acknowledgment,sack)選項。tcp通訊時,如果某個tcp報文段丟失,則tcp模組會重傳最後被確認的tcp報文段後續的所有報文段,這樣原先已經正確傳輸的tcp報文段也可能重**送,從而降低了tcp效能。sack技術正是為改善這種情況而產生的,它使tcp模組只重新傳送丟失的tcp報文段,不用傳送所有未被確認的tcp報文段。選擇性確認選項用在連線初始化時,表示是否支援sack技術。我們可以通過修改/proc/sys/net/ipv4/tcp_sack核心變數來啟用或關閉選擇性確認選項。
kind=5是sack實際工作的選項。該選項的引數告訴傳送方本端已經收到並快取的不連續的資料塊,從而讓傳送端可以據此檢查並重發丟失的資料塊。每個塊邊沿(edge of block)引數包含乙個4位元組的序號。其中塊左邊沿表示不連續塊的第乙個資料的序號,而塊右邊沿則表示不連續塊的最後乙個資料的序號的下乙個序號。這樣一對引數(塊左邊沿和塊右邊沿)之間的資料是沒有收到的。因為乙個塊資訊占用8位元組,所以tcp頭部選項中實際上最多可以包含4個這樣的不連續資料塊(考慮選項型別和長度占用的2位元組)。
kind=8是時間戳選項。該選項提供了較為準確的計算通訊雙方之間的迴路時間(round trip time,rtt)的方法,從而為tcp流量控制提供重要資訊。我們可以通過修改/proc/sys/net/ipv4/tcp_timestamps核心變數來啟用或關閉時間戳選項。
IP資料報頭部,TCP頭部,偽TCP頭部結構定義
我自己整理出來的彙編版本 ip資料報頭部結構定義 ip head struct h lenver db 4位ip版本號 4位首部長度 tos db 8位服務型別 tcp len dw 16位tcp資料報總長度 ident dw 16位標識 frag and flags dw 3位分片標誌 13位分片...
TCP頭部結構
16位的字段,定義了傳送這個報文段的主機中的應用程式的埠號。16位的字段,定義了接收這個報文段的主機中的應用程式的埠號。32位的字段,定義了指派給本報文段第乙個資料位元組的編號。為了保證連線性,要傳送的每乙個位元組都要編上號。序號可以告訴終點,報文段中的第乙個位元組是這個序列中的哪乙個位元組。在建立...
TCP頭部結構
tcp頭部資訊出現再每個tcp報文段中,用於指定通訊的 源端埠,目的埠,管理tcp連線等。1 tcp固定頭部結構 16位埠號 告知主機該報文段是來自 源埠 以及傳給哪個上層協議或應用程式 目的埠 的。請注意 進行tcp通訊時,客戶端通常使用系統自動選擇的臨時埠號,而伺服器則使用知名服務埠號。32位序...