zoukankan      html  css  js  c++  java
  • 在linux内核中修改TCP MSS值

    MTU: Maxitum Transmission Unit 最大传输单元

    MSS: Maxitum Segment Size 最大分段大小

    MSS最大传输大小的缩写,是TCP协议里面的一个概念。
    MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes), 通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。

    而一般以太网MTU都为1500, 所以在以太网中, 往往TCP MSS为1460

    协商TCP MSS大小具体过程如下:
    TCP client发出SYN报文,其中option选项填充的MSS字段一般为(MTU-IP头大小-TCP头大小),同样TCP server收到SYN报文后,会发送SYN+ACK报文应答,option选项填充的mss字段也为(MTU-IP头大小-TCP头大小);协商双方会比较SYN和SYN+ACK报文中MSS字段大小,选择较小的MSS作为发送TCP分片的大小。

    对于涉及PPPOE+NAT、IPsec、L2TP、GRE等组网,通常由于报文太大需要分片,这样会降低传输速率; 所以选择一个合适的MSS对传输数据来说比较重要. Linux中一般可以通过netfilter iptables设置TCP MSS来解决。

    iptables -A FORWARD -p tcp- -tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

    这条规则的目的就是改变TCP MSS以适应PMTU(Path MTU)

    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN- j TCPMSS --set-mss 128

    设置MSS为128

    实际运用:

    在NAT服务器上设置 

    iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1260

    其中gre 线路的 mtu 为 1300 

    在 vxlan 环境中的 NAT服务器上设置:

    iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1366

    其中  算法是1514-vxlan 54-vxlan54-ipip20-ip20=1366

  • 相关阅读:
    Junit单元测试
    win7的6个网络命令
    WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
    WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
    woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序
    woj1018(HDU4384)KING KONG 循环群
    woj1016 cherry blossom woj1017 Billiard ball 几何
    woj1013 Barcelet 字符串 woj1014 Doraemon's Flashlight 几何
    woj1012 Thingk and Count DP好题
    woj1010 alternate sum 数学 woj1011 Finding Teamates 数学
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/7413009.html
Copyright © 2011-2022 走看看