天天看點

tcp滑動視窗_常用的TCP選項

MSS選項:通知最大可接收量。發送SYN的TCP一端使用本選項通告對端它的最大分節大小(maximum segment size)即MSS,也就是它在本連接配接的每個TCP分節中願意接受的最大資料量。發送端TCP使用接收端的MSS值作為所發送位元組的最大大小。

視窗規模選項:主要指的是滑動視窗中視窗的規模。TCP連接配接任何一端能夠通告對端的最大視窗大小是65535,因為在TCP首部中相應的字段占16位。當然會有特殊情況,後面會講到。

在以Unix為核心的一些作業系統中,SO_RCVBUF選項決定了TCP視窗的大小,你設定為多少視窗就為多少。對于用戶端,SO_RCVBUF選項必須在connect之前設定;對于伺服器,SO_RCVBUF選項必須在listen前設定。因為TCP的視窗規模選項是在建立連接配接時用SYN與對方互換得到的。

在Windows上可以随時設定,一旦設定後,會随着下一個ACK包,或者普通資料包通告給對方最新的TCP視窗大小,需要注意的是此時視窗隻能增大,不能減小,也就是說SO_RCVBUF設定的比上一次小的話,該值是不會作為新視窗大小通告給對方的。需要cover的點如下:

一、TCP的滑動視窗大小實際上就是socket的接收緩沖區大小的位元組數

二、對于server端的socket一定要在listen之間設定緩沖區大小,因為,accept時新産生的socket會繼承監聽socket的緩沖區大小。對于client端的socket一定要在connect之前設定緩沖區大小,因為connet時需要進行三次握手過程,會通知對方自己的視窗大小。在connect之後再設定緩沖區,已經沒有什麼意義。

三、由于緩沖區大小在TCP頭部隻有16位來表示,是以它的最大值是65535,但是對于一些情況來說需要使用更大的滑動視窗,這時候就要使用擴充的滑動視窗,如光纖高速通信網絡,或者是衛星長連接配接網絡,需要視窗盡可能的大。這時會使用擴充的32位的滑動視窗大小(要求有更大的視窗以獲得盡可能大的吞吐量)。

四、滑動視窗聽移動規則:

1、視窗合攏:在收到對端資料後,自己确認了資料的正确性,這些資料會被存儲到緩沖區,等待應用程式擷取。但這時候因為已經确認了資料的正确性,需要向對方發送确認響應ACK,又因為這些資料還沒有被應用程序取走,這時候便需要進行視窗合攏,緩沖區的視窗左邊緣向右滑動。注意響應的ACK序号是對方發送資料包的序号,一個對方發送的序号,可能因為視窗張開會被響應(ACK)多次。

2、視窗張開:視窗收縮後,應用程序一旦從緩沖區中取出資料,TCP的滑動視窗需要進行擴張,這時候視窗的右邊緣向右擴張,實際上視窗這是一個環形緩沖區,視窗的右邊緣擴張會使用原來被應用程序取走内容的緩沖區。在視窗進行擴張後,需要使用ACK通知對端,這時候ACK的序号依然是上次确認收到包的序号。

3、視窗收縮,視窗的右邊緣向左滑動,稱為視窗收縮,Host Requirement RFC強烈建議不要這樣做,但TCP必須能夠在某一端産生這種情況時進行處理。

時間戳選項:這個選項對高速網絡連接配接是必要的,它可以防止由失而複現的分組可能造成的資料破壞。

tcp滑動視窗_常用的TCP選項

繼續閱讀