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

  • 相关阅读:
    PHP导出数据到淘宝助手CSV的方法分享
    创业日志:壹百款购物客户中心正式上线啦!
    THINKPHP+JS缩放图片式截图的实现
    入园3年来的感慨
    CentOS 5 全攻略 一步一步配置详解
    创业日记:进入电子商务领域,需未雨绸缪,更要步步谨慎
    IT商悟读书笔记
    震惊的事情一波接一波的,找自己的FREE
    创业日记:微团队,技术应用思考
    博客园我回来了!
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/7413009.html
Copyright © 2011-2022 走看看