• linux内核中修改TCP MSS值


    在linux内核中修改TCP MSS值

    0. 前言

      最近在解决一些网络相关的问题的时候,我发现许多客户的需求可以不用费劲周折在代码中找到修改的位置,可以直接修改内核中一些网络相关的参数,在大部分情况下即可满足需求,减少时间和精力的消耗(俗称偷懒)。

    1. 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。

    2. 协商TCP MSS过程

      对于涉及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

    同理Ipv6只需改为ip6tables,即:

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

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

  • 相关阅读:
    Krustral算法求解最小生成树 C++实现
    数据结构第5章课后习题答案
    智慧城市排水系统,管网水位监测仪怎么监测
    angle_ll
    机器人控制器编程实践指导书旧版-实践三 直流电机(执行器)
    java计算机毕业设计springboot+vue网上购物商城系统
    C++学习day7
    RR调度是什么
    黑马es学习
    Linux网络编程-网络io与select,poll,epoll
  • 原文地址:https://blog.csdn.net/IT_xiao_bai0516/article/details/125408940