tcp中的mss是536?
1. tcp 中的mss為什麼是536?
我知道,對於,由於乙太網的流行,所以計算機都遵循,以太幀1518個位元組,也就說,pay load : 1518-18 - 20(ip) -20(tcp頭) 為1460個位元組,
tcp 中的滑動大小是2的16次放-1,也就說65535個位元組(不算其移位運算) 。
我不明白,為什麼要搞個mss,且mss的536 是哪裡來的?
MSS的設計初衷是想約束TCP,以避免發送大包給IP,造成不必要的分片。
既然MSS是一個TCP選項,各個TCP協議棧可以支持,也可以不支持(老的版本)。如果遇到對方不支持MSS選項,那該如何是好呢?
那就採用最保守的方法,如果TCP握手發現對方MSS為空,默認對方不支持MSS,採用default MSS = 536 來建立TCP連接。
Default MSS 536 如何得來?
MSS= Maximum IP -IP Header - TCP Header = 576 -20 -20 = 536
那為何選擇 Maximum IP 為576?
常用的各種物理介面MTU &> 1000,所以選擇576這個值非常安全,可以避免極端情況下的分片。
最早的操作系統UDP應用程序使用512 Byte作為UDP Datagram,加上8 byte UDP Header,再加上 20 byte IP Header ,就會變成540 byte 的IP包。後來TCP標準化就使用了IP Maximum Size =576。
536是IPv4最小重組緩衝區位元組數576減去IPv4首部位元組數20和TCP首部位元組數20的結果。一般情況下,如果沒有收到來自對端的MSS選項,本端TCP就採用536這個MSS值。
TCP有一個MSS(maximum segment size,最大分節大小),用於向對端TCP通告對端在每個分節中能發送的最大TCP數據量。MSS的目的是告訴對端其重組緩衝區大小的實際值,從而試圖避免分片。MSS經常設置成MTU減去IP和TCP首部的固定長度。
IPv4和IPv6都定義了最小重組緩衝區大小(minimum reassembly buffer size),它是IPv4或IPv6的任何實現都必須保證支持的最小數據報大小。其值對於IPv4為576位元組,對於IPv6為1500位元組。例如,就IPv4而言,我們不能判定某個給定目的地能否接受577位元組的數據報。為此有許多使用UDP的IPv4網路應用(如DNS、RIP、TFTP、BOOTP、SNMP)避免產生大於這個大小的數據報。
為什麼TCP要設MSS? - 計算機網路
這裡有為什麼需要設置MSS。
rfc879,所以默認是536,潛規則~
至於潛規則怎麼來的,暫時不清楚。
推薦閱讀:
※為什麼區域網要用mac地址而不直接使用IP地址,統一用IP地址不是更好嗎?
※高帶寬往低帶寬傳送數據的處理機制是怎樣的?
※測試TCP server的QPS的合適方法?
※為什麼traceroute通過外網到了一個內網地址?
※《TCP/IP詳解卷一》中這一句話應該怎麼理解?