TCP資料報格式

2021-06-02 21:18:52 字數 4182 閱讀 6962

tcp 提供一種面向連線的、全雙工的、可靠的位元組流服務。

在乙個tcp 連線中,僅有兩方進行彼此通訊。廣播和多播不能用於tcp。

tcp 的接收端必須丟棄重複的資料。

tcp 對位元組流的內容不作任何解釋。對位元組流的解釋由tcp 連線雙方的應用層解釋。

tcp 通過下列方式來提供可靠性:

應用資料被分割成tcp 認為最適合傳送的資料塊,稱為報文段或段。

tcp 協議中採用自適應的超時及重傳策略。

tcp 可以對收到的資料進行重新排序,將收到的資料以正確的順序交給應用層。

tcp 的接收端必須丟棄重複的資料。

tcp 還能提供流量控制。

源埠和目的埠字段——各佔2 位元組。埠是傳輸層與應用層的服務介面。傳輸層的復用和分用功

能都要通過埠才能實現。

序號字段——佔4 位元組。tcp 連線中傳送的資料流中的每乙個位元組都編上乙個序號。序號欄位的值則

指的是本報文段所傳送的資料的第乙個位元組的序號。

確認號字段——佔4 位元組,是期望收到對方的下乙個報文段的資料的第乙個位元組的序號。

資料偏移——佔4bit,它指出tcp 報文段的資料起始處距離cp 報文段的起始處有多遠。「資料偏移」

的單位不是位元組而是32bit 字(4 位元組為計算單位)。

保留字段——佔6bit,保留為今後使用,但目前應置為0。

緊急位元urg——當urg=1 時,表明緊急指標字段有效。它告訴系統此報文段中有緊急資料,應

盡快傳送(相當於高優先順序的資料)。

確認位元ack——只有當ack=1 時確認號字段才有效。當ack=0 時,確認號無效。

復位位元rst(reset) —— 當rst=1 時,表明tcp 連線中出現嚴重差錯(如由於主機崩潰或其他

原因),必須釋放連線,然後再重新建立運輸連線。

同步位元syn——同步位元syn 置為1,就表示這是乙個連線請求或連線接受報文。

終止位元fin(final)——用來釋放乙個連線。當fin=1 時,表明此報文段的傳送端的資料已傳送完畢,

並要求釋放運輸連線。

視窗字段——佔2 位元組。視窗字段用來控制對方傳送的資料量,單位為位元組。tcp 連線的一端根據設

置的快取空間大小確定自己的接收視窗大小,然後通知對方以確定對方的傳送視窗的上限。

檢驗和——佔2 位元組。檢驗和字段檢驗的範圍包括首部和資料這兩部分。在計算檢驗和時,要在tcp

報文段的前面加上12 位元組的偽首部。

緊急指標字段——佔16bit。緊急指標指出在本報文段中的緊急資料的最後乙個位元組的序號。

選項字段——長度可變。tcp 首部可以有多達40 位元組的可選資訊,用於把附加資訊傳遞給終點,或

用來對齊其它選項。

填充字段——這是為了使整個首部長度是4 位元組的整數倍。

最大報文段長度mss(maximum segment size)是tcp 報文段中的資料字段的最大長度。

mss 告訴對方tcp:「我的快取所能接收的報文段的資料字段的最大長度是mss 個位元組。」

視窗擴大因子,用於長肥管道。

時間戳,可用於測量往返時延rtt。

tcp 協議是面向位元組的。tcp 將所要傳送的報文看成是位元組組成的資料流,並使每乙個位元組對應於乙個序號。

在連線建立時,雙方要商定初始序號。tcp 每次傳送的報文段的首部中的序號字段數值表

示該報文段中的資料部分的第乙個位元組的序號。

tcp 的確認是對接收到的資料的最高序號表示確認。接收端返回的確認號是已收到的資料

的最高序號加1。因此確認號表示接收端期望下次收到的資料中的第乙個資料位元組的序號。

為提高效率,tcp 可以累積確認,即在接收多個報文段後,一次確認。

tcp 採用大小可變的滑動視窗進行流量控制。視窗大小的單位是位元組。

tcp 報文段首部的視窗字段寫入的數值就是當前給對方設定的傳送視窗數值的上限。

傳送視窗在連線建立時由雙方商定。但在通訊的過程中,接收端可根據自己的資源情況,隨

時動態地調整對方的傳送視窗上限值(可增大或減小)。

傳送端要傳送900 位元組長的資料,劃分為9 個100 位元組長的報文段,而傳送視窗確定為500位元組。

傳送端只要收到了對方的確認,傳送視窗就可前移。

傳送tcp 要維護乙個指標。每傳送乙個報文段,指標就向前移動乙個報文段的距離。

傳送端已傳送400 位元組的資料,但只收到對前200 位元組資料的確認,同時視窗大小不變。

現在傳送端還可傳送300 位元組。

傳送端收到對方對前400 位元組資料的確認,但對方通知傳送端必須把視窗減小到400 位元組。

現在傳送端最多還可傳送400 位元組的資料。

利用可變視窗大小進行流量控制雙方確定的視窗值是400。

傳送端的主機在確定傳送報文段的速率時,既要根據接收端的接收能力,又要從全域性考慮不

要使網路發生擁塞。

因此,每乙個tcp 連線需要有以下兩個狀態變數:

接收端視窗rwnd(receiver window) 又稱為通知視窗(advertised window)。

擁塞視窗cwnd(congestion window)。

接收端視窗rwnd和擁塞視窗cwnd

接收視窗rwnd 這是接收端根據其目前的接收快取大小所許諾的最新的視窗值,是來自接

收端的流量控制。接收端將此視窗值放在tcp 報文的首部中的視窗字段,傳送給傳送端。

擁塞視窗cwnd(congestion window) 是傳送端根據自己估計的網路擁塞程度而設定的窗

口值,是來自傳送端的流量控制。

傳送端的傳送視窗的上限值應當取為接收端視窗rwnd 和擁塞視窗cwnd 這兩個變數中較小

的乙個,即應按以下公式確定:

傳送視窗的上限值=min[rwnd,cwnd]

當rwnd < cwnd 時,是接收端的接收能力限制傳送視窗的最大值。

當cwnd < rwnd 時,則是網路的擁塞限制傳送視窗的最大值。

在剛開始傳送時,可先將擁塞視窗cwnd 設定為乙個最大報文段mss 的數值。

在每收到乙個對新的報文段的確認後,將擁塞視窗增加至2 倍mss 的數值。

用這樣的方法逐步增大傳送端的擁塞視窗cwnd,可以使分組注入到網路的速率更加合理。

當tcp 連線進行初始化時,將擁塞視窗置為1。圖中的視窗單位不使用位元組而使用報文段。

慢啟動門限的初始值設定為16 個報文段,即ssthresh = 16。

傳送端的傳送視窗不能超過擁塞視窗cwnd 和接收端視窗rwnd 中的最小值。我們假定接收

端視窗足夠大,因此現在傳送視窗的數值等於擁塞視窗的數值。

在執行慢啟動演算法時,擁塞視窗cwnd 的初始值為1,傳送第乙個報文段m0。

傳送端收到ack1(確認m0,期望收到m1)後,將cwnd 從1 增大到2,於是傳送端可以

接著傳送m1 和m2 兩個報文段。

接收端發回ack2 和ack3。傳送端每收到乙個對新報文段的確認ack,就把傳送端的擁

塞視窗加倍。現在傳送端的cwnd 從2 增大到4,並可傳送m4—m6 共4 個報文段。

傳送端每收到乙個對新報文段的確認ack,就把傳送端的擁塞視窗加倍,因此擁塞視窗

cwnd 隨著傳輸次數按指數規律增長。

當擁塞視窗cwnd 增長到慢開始門限值ssthresh 時(即當cwnd = 16 時),就改為執行擁

塞避免演算法,擁塞視窗按線性規律增長。

假定擁塞視窗的數值增長到24 時,網路出現超時(表明網路擁塞了)。

更新後的ssthresh 值變為12(即傳送視窗數值24 的一半),擁塞視窗再重新設定為1,

並執行慢啟動演算法。

當cwnd = 12 時改為執行擁塞避免演算法,擁塞視窗按按線性規律增長,每經過乙個往返時

延就增加乙個mss 的大小。

「乘法減小「是指不論在慢啟動階段還是擁塞避免階段,只要出現一次超時(即出現一次網路擁塞),就把慢啟動門限值ssthresh 設定為當前的擁塞視窗值乘以0.5。

當網路頻繁出現擁塞時,ssthresh 值就下降得很快,以大大減少注入到網路中的分組數。

「加法增大」是指執行擁塞避免演算法後,當收到對所有報文段的確認就將擁塞視窗cwnd 增加

乙個mss 大小,使擁塞視窗緩慢增大,以防止網路過早出現擁塞。

進入擁塞避免演算法後,擁塞視窗的增大速度由指數增長變為線性增長。

tcp 中預設報文段丟失是由於網路擁塞造成超時而引起的。

「擁塞避免」並非指完全能夠避免了擁塞。利用以上的措施要完全避免網路擁塞還是不可能的。

「擁塞避免」是說在擁塞避免階段把擁塞視窗控制為按線性規律增長,使網路比較不容易出現擁塞。

TCP資料報首部

源埠 source port 目標埠 destination port 各2位元組 源埠號,標識主機上發起傳送的應用程式 目的埠標識主機上傳送要到達的應用程式。源端和目的端的埠號,用於尋找發端和收端應用程序。這兩個值加上i p首部中的源端i p位址和目的端i p位址唯一確定乙個tcp連線。乙個i p...

資料報格式 USB資料報解析

由域構成的包有四種型別,分別是令牌包 資料報 握手包和特殊包,前面三種是重要的包,不同包的域結構不同,介紹如下 1 令牌包 分為輸入包 輸出包 設定包和幀起始包 注意這裡的輸入包是用於設定輸入命令的,輸出包是用來設定輸出命令的,而不是放資料的 其中輸入包 輸出包和設定包的格式都是一樣的 sync p...

IP資料報 TCP資料報結構詳解

一般來說,網路程式設計我們僅僅須要呼叫一些封裝好的函式或者元件就能完畢大部分的工作,可是一些特殊的情況下,就須要深入的理解 網路資料報的結構,以及協議分析。如 網路監控,故障排查等 ip包是不安全的,可是它是網際網路的基礎,在各方面都有廣泛的應用。由ip協議衍生的協議族有10數種 據我所知 以後還會...