虛擬機通過隧道方式通信時候會碰到mtu問題,導致報文分片影響性能甚至聯通, 通過調小虛擬機的mtu可以規避這類問題,
但是如果沒有權限客戶的mtu或者遇到了鏈路上新增的隧道(比如新增了ipsec vpn隧道), 這個時候可以通過調整mss來解決這個問題(只對tcp有效)。
通常可以通過iptables在虛擬機所在iptable修改mss配置, 在syn包建立連接的時候,設置mss協商值的大小來修改tcp通信的mss大小,命令如下:
iptables -t mangle -I POSTROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1424
mss大小值設置小于(鏈路上最小mtu-外層長度-隧道長度-內層ip頭長度-內層tcp頭長度)。
在neutron網絡下也可以通過使用Open vSwitch的ovs-ofctl工具可以通過OpenFlow協議修改最大報文段長度(MSS)。
要修改MSS,您需要發送一個OpenFlow消息到適當的交換機。下面是使用ovs-ofctl工具修改MSS的示例命令:
ovs-ofctl mod-tcp-segmentation <bridge> <flow> <mss>
其中,是指交換機的名稱或ID,是匹配流規則的條件,是要設置的新的MSS值。
請注意,此命令將修改匹配的流的MSS。您需要根據您的網絡環境和需求定義正確的流規則。
下面是一個示例命令,將MSS修改為1400:
ovs-ofctl mod-tcp-segmentation br0 "tcp,tcp_flags=SYN" 1400