From:http://blog.chinaunix.net/u2/72886/showart_1802033.html
中低端路
由器
tcp mss
的實現原理
為何經常要在內網口和外網口都要配置
tcp mss 值呢
?
PC1(192.168.0.1)
―――
Router
――――
Internet
―――-
www
server(238.135.1.1)
建立
tcp
串連的兩端在三向交握時會協商
tcp mss
大小,具體如下:
pc1
發
出
syn
報文,其中
option
選項填充的
mss
欄位一般為
1460
,同樣
www server
收到
syn
報文後,會發送
syn
+
ack
報文應答,
option
選項填充的
mss
欄位也為
1460
;協商雙方會比較
syn
和
syn+ack
報文中
mss
欄位大小,選擇較小的
mss
作為發送
tcp
分區的大小。通過比較,協商雙方的
tcp mss
都是
1460
。
對於涉及
mpls l3vpn
、
pppoe
+
nat
、
ipsec
、
l2tp
、
gre
等組網,通常由於報文太大需要分區,一般可以
通過設定
tcp mss
解
決。
針對上例說明
tcp mss
如何?
1、
假設在路由器內網口配置
tcp mss 1200
a)
路由器收到
www server
的
syn
+
ack
報文時會修改
option
選項中的
mss
欄位為
1200
,然後再轉寄給
PC1
,
PC1
收到報文後認為對端的
tcp mss
為
1200
,這樣
PC1
發送資料給
www server
時會以
1200
作為分區大小;但路由器修改
tcp mss
為
1200
的操作
www server
是不知道的,因此
www server
還會以
1460
作為分區大小發送報文。
2、
假設再路由器外網口配置
tcp mss 1200
a)
路由器收到
PC1
的
syn
報文時會修改
option
選項中的
mss
欄位為
1200
,然後再轉寄給
www server
,同樣
www server
發送資料給
PC1
時會以
1200
作為分區大小;同樣
PC1
不知道路由器修改
tcp mss
為
1200
,因為
PC1
還會以
1460
作為分區大小發送報文。
3、
因此在實現雙向大包傳輸時需要在內外網同時修改
tcp mss
綜上所述:
在路由器介面上配置的
tcp mss
命令僅對出介面方向的
syn
報文和
syn
+
ack
報文有效,對於入介面方向的
syn
和
syn
+
ack
報文無效。