我們不難想到,與最大段長最相關的壹個參數是網絡設備接口的MTU,以太網的MTU是1500,基本IP頭的長度是20,TCP頭的長度是20,那麽MSS的值可以達到1460(MSS不包含協議頭,只包含應用數據)。
在之前的TCP三次握手協議中,我們看到通信雙方都是通過TCP options來公布自己期望的MSS值,這個值直接來自於struct tcp_sock的成員advmss,這個值直接取自於網絡設備接口的MTU減去IP頭和TCP頭的長度。在本地以太網中,可以達到1460(如果報頭中沒有選項)。成員rx_opt是壹個結構化的TCP _ options _ received,記錄了來自對端的TCP option通知。其成員mss_clamp表示mss的上限,其來源是對端的mss通知,而mss_user是用戶設置的mss,優先級最高。如果有user_mss,則使用user_mss,忽略其他。
從上面我們可以看出,MSS可以通過SYN段協商(MSS選項只能出現在SYN段),但是在任何條件下都不能協商。如果壹方不接受另壹方的mss值,並且沒有user_mss,則MSS設置為默認值536字節(加上報頭,允許576字節的IP數據報)。其實struct TCP _ sock-->;rx _ opt-& gt;mss_clamp的初始值設置為536,在收到對端的mss通告之前不會修改。而mss_cache是struct tcp_sock的成員,用於緩存最後壹個有效的mss,其初始值也設置為536。