一、基本概念

由于以太網(wǎng)EthernetII最大的數(shù)據(jù)幀是1518Bytes,刨去以太網(wǎng)幀的幀頭(DMAC目的地址MAC48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和幀尾CRC校驗(yàn)部分4Bytes(這個(gè)部門有時(shí)候大家也把它叫做FCS),那么剩下承載上層協(xié)議的地方也就是Data域最大就只能有1500Bytes. 這個(gè)值我們就把它稱之為MTU。
MTU: Maximum Transmit Unit,最大傳輸單元,即物理接口(數(shù)據(jù)鏈路層)提供給其上層(通常是IP層)最大一次傳輸數(shù)據(jù)的大??;以普遍使用的以太網(wǎng)接口為例,缺省MTU=1500 Byte,這是以太網(wǎng)接口對(duì)IP層的約束,如果IP層有<=1500 byte 需要發(fā)送,只需要一個(gè)IP包就可以完成發(fā)送任務(wù);如果IP層有> 1500 byte 數(shù)據(jù)需要發(fā)送,需要分片才能完成發(fā)送,這些分片有一個(gè)共同點(diǎn),即IP Header ID相同。
MSS:Maximum Segment Size ,TCP提交給IP層最大分段大小,不包含TCP Header和 TCP Option,只包含TCP Payload ,MSS是TCP用來限制application層最大的發(fā)送字節(jié)數(shù)。如果底層物理接口MTU= 1500 byte,則 MSS = 1500- 20(IP Header) -20 (TCP Header) = 1460 byte,如果application 有2000 byte發(fā)送,需要兩個(gè)segment才可以完成發(fā)送,第一個(gè)TCP segment = 1460,第二個(gè)TCP segment = 540。
以太網(wǎng)的MTU是1500,再減去PPP的包頭包尾的開銷(8Bytes),就變成1492。
MSS就是TCP數(shù)據(jù)包每次能夠傳輸?shù)淖畲髷?shù)據(jù)分段。為了達(dá)到最佳的傳輸效能,TCP協(xié)議在建立連接的時(shí)候通常要協(xié)商雙方的MSS值,這個(gè)值TCP協(xié)議在實(shí)現(xiàn)的,時(shí)候往往用MTU值代替(需要減去IP數(shù)據(jù)包包頭的大小20Bytes和TCP數(shù)據(jù)段的包頭20Bytes)所以往往MSS為1460或1452。通訊雙方會(huì)根據(jù)雙方提供的MSS值得最小值確定為這次連接的最大MSS值。
二、TCP-MSS確定

如上圖 端口53842 為 A; 端口 80 為 B。
TCP SYN消息,A 發(fā)送給B 的MSS= 1460,告訴B,B發(fā)給A最大segment 為1452 byte.
以后每次通訊,可以看出發(fā)送的數(shù)據(jù)都是 1452 byte。
可以發(fā)現(xiàn) MSS 的值,取決與發(fā)送端和接收端兩者較小的 MSS 的值。
轉(zhuǎn)載文章
MTU 和 MSS 區(qū)別
【TCP協(xié)議】MTU和MSS詳解