常用的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必須能夠在某一端產生這種情況時進行處理。


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM