在linux内核中修改TCP MSS值

linux 内核 修改mss,Linux下TCP-MSS 修改,实验以及测试(详细) TCP-MSS文档,问题及实验TCP-MSS介绍MSS(Maximum Segment Size,最大报文段大小)的概念是指TCP层所能够接收的最大段大小,该值只包括TCP段的数据部分,不包括选项部分,MSS的概念只存在于TCP中2.MSS与MTU之间的转化MSS = MTU - 40(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)3.影响MSS的因素MSS的值受两... 阅读详情

本文转自http://www.cublog.cn/u3/92327/showart_2255574.html

 

 

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

以下是一段内核中修改TCP MSS的代码:


static inline u32 set_tcp_mss(struct sk_buff *pskb, struct tcphdr *tcph, u16 mtu)
{
    u32 optlen, i;
    u8 *op;
    u16 newmss, oldmss;
    u8 *mss;

    if ( !tcph->syn )
        return 0;

    // 判断是否为合法tcp选项

    if (tcph->doff*4 < sizeof(struct tcphdr))
        return 0;

    optlen = tcph->doff*4 - sizeof(struct tcphdr);
    if (!optlen)
        return 0;

    // 扫描是否有MSS选项

    op = ((u8*)tcph + sizeof(struct tcphdr));
    for (i = 0; i < optlen; ) {
        if (op[i] == TCPOPT_MSS
            && (optlen - i) >= TCPOLEN_MSS
            && op[i+1] == TCPOLEN_MSS) {
            u16 mssval;
            
            //newmss = htons( 1356 );

            oldmss = (op[i+3] << 8) | op[i+2];
            mssval = (op[i+2] << 8) | op[i+3];
            
            // 是否小于MTU-( iphdr + tcphdr )

            if ( mssval > mtu - 40 ) {
                newmss = htons( mtu - 52 );
            }
            else {
                break;
            }
     //

     mss = &newmss;
            op[i+2] = newmss & 0xFF;
            op[i+3] = (newmss & 0xFF00) >> 8;
            // 计算checksum

            inet_proto_csum_replace2( &tcph->check, pskb,
                oldmss, newmss, 0);
            
            mssval = (op[i+2] << 8) | op[i+3];
            dprintf( "Change TCP MSS %d to %d/n", ntohs( oldmss ), mssval );
            break;
            
        }
        if (op[i] < 2)
            i++;
        else
            i += op[i+1] ? : 1;
    }
    return 0;
}


windows可以通过一个工具来修改  DrTCP  http://www.dslreports.com/drtcp


Linux 内核 TCP MSS 机制详细分析 作者:Hcamael@知道创宇 404 实验室 时间:2019 年 6 月 26 日 英文版本:https://paper.seebug.org/967/ 前言 上周Linux内核修复了4个CVE漏洞[1],其中的CVE-2019-11477感觉是一个很厉害的Dos漏洞,不过因为有其他事打断,所以进展的速度比较慢,这期间网上已经有相关的分析文章了。[2][3] 而我在尝试复现CVE-2019-11... 阅读详情

相关推荐

8.1 最大报文段(MSS)选项

MSS选项用于通知对端本端能接受的每个TCP分段中的最大数据长度,发送端TCP用接收到的MSS值作为决定所发送分段的最大大小的最大值。MSS选项的总长度为4字节,MSS值为16bit,最大为65535。MSS选项只能在有SYN标记的包中携带。   在初始化socket的时候就需要设置MSS相关信息,connect时: 2752 void tcp_connect_init(struct s

Remy的学习记录 4159

linux内核中修改TCP MSS值

  最近在解决一些网络相关的问题的时候,我发现许多客户的需求可以不用费劲周折在代码中找到修改的位置,可以直接修改内核中一些网络相关的参数,在大部分情况下即可满足需求,减少时间和精力的消耗(俗称偷懒)。  MTU: Maxitum Transmission Unit 最大传输单元   MSS: Maxitum Segment Size 最大分段大小  MSS最大传输大小的缩写,是TCP协议里面的一个概念。   MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通

一只立志于养老婆的程序猿 3572

linux内核协议栈 TCP选项之MSS

目录 1MSS概述 2客户端三次握手 2.1 发送SYN段MSS选项值 2.1.1 tcp_advertise_mss() 2.1.2 tp->advmss的初始化 2.2 接收SYN+ACK段 3服务器端三次握手 3.1 接收SYN段 3.2 接收 ACK 报文 3.2.1初始化 advmss 3.3 发送SYN+ACK段 4 三次握手小结 5发送过程中获取MSS 5.1 tcp_current_mss() 5.2 tcp_sync_mss() 5.2.1 ...

3789

[摘]在linux内核中修改TCP MSS值

http://blog.youkuaiyun.com/force_eagle/article/details/4592271http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO-4.html http://lartc.org/howto/lartc.cookbook.mtu-m...

weixin_34405354的博客 392

某商场G区火灾自动报警与控制系统设计

某商场G区火灾自动报警与控制系统设计 摘要:随着我国经济建设的迅速发展,人民生活水平不断提高,城市用地日益紧张,促使建筑物正朝着高层化、密集化方向发展。高层建筑的特点决定其火灾的危险性和高层建筑的火灾自动报警系统的重要性,一套完整的火灾自动报警及联动控制系统是高层建筑发生火灾时人们生命财产的有利保障,是能否快速准确地发现火情,把火灾扑灭在萌芽状态的关键所在。文章通过消防设计,论述了火灾自动报警及消...

weixin_44026784的博客 5366

别再让电池充不满!用CN3791芯片设计太阳能充电电路,这几个调试坑我帮你踩了

本文详细解析了使用CN3791芯片设计太阳能充电电路时的常见调试问题及解决方案。从RCS电阻的选择到MPPT电压偏差的修正,再到线路损耗和温度补偿的优化,提供了全面的避坑指南。通过实测数据和优化方案,帮助工程师提升锂电池充电效率,确保太阳能充电电路的稳定性和可靠性。

weixin_42528191的博客 241

Linux内核TCP MSS机制详细分析

前言 上周Linux内核修复了4个CVE漏洞[1],其中的CVE-2019-11477感觉是一个很厉害的Dos漏洞,不过因为有其他事打断,所以进展的速度比较慢,这期间网上已经有相关的分析文章了。[2][3] 而我在尝试复现CVE-2019-11477漏洞的过程中,在第一步设置MSS的问题上就遇到问题了,无法达到预期效果,但是目前公开的分析文章却没对该部分内容进行详细分析。所以本文将通...

weixin_30369087的博客 421

【AAAI2025】【小目标检测】FBRT-YOLO:更快速、更优的实时航拍图像检测方法

FBRT-YOLO是一种新型实时航拍图像检测方法,针对小目标检测的精度与效率平衡问题提出创新解决方案。该方法通过两个轻量级模块显著提升性能:特征互补映射模块(FCM)将浅层空间位置信息深度整合至网络深层,缓解信息失衡;多核感知单元(MKP)采用多尺度卷积增强多目标感知能力。实验表明,在VisDrone、UAVDT和AI-TOD数据集上,FBRT-YOLO在检测精度和速度方面均优于现有实时检测器,特别适用于资源受限的飞行设备。该模型通过精简网络结构,在保持高性能的同时降低了计算负担,为航拍实时检测提供了高效解

weixin_44184852的博客 2906

linux 内核 修改mss,[转载]linux 内核对于TCPMSS的处理

iptables -A FORWARD -p tcp--tcp-flags SYN,RST SYN -j TCPMSS--clamp-mss-to-pmtu这条规则的目的就是改变TCP MSS以适应PMTU(PathMTU)iptables -A FORWARD -p tcp--tcp-flags SYN,RST SYN- j TCPMSS --set-mss1400设置MSS为14006 内核对...

weixin_30979229的博客 733

基于深度学习的航拍图像中地物变化检测

随着无人机技术的飞速发展,航拍图像成为获取地表信息的重要手段之一。然而,由于地球表面的不断变化,监测和识别航拍图像中的地物变化成为一项具有挑战性的任务。在人工智能领域,深度学习技术的兴起为地物变化检测提供了全新的解决方案。本文将介绍基于深度学习的航拍图像中地物变化检测的方法,并附上相应的代码实例。

一键难忘的博客 4177

Unity之如何接入NPOI 快速读取Excel

NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。 NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目

TxNet 4397

TCP 三次握手协商 MSS 前,如何确定 MSS 值(结合 Linux 内核源码分析)

TCP 三次握手协商 MSS 前,如何确定 MSS 值(结合 Linux 内核源码分析)

chirrupy_hamal的博客 584

【实战圣经】YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

m0_71589036的博客 251

《TCP MSS 与 MTU 的关联:Linux 系统中如何通过参数配置避免数据分片》

在网络通信中,数据分片会增加延迟和处理开销,因此避免分片是优化性能的关键。本文将逐步解释 TCP MSS(Maximum Segment Size)和 MTU(Maximum Transmission Unit)的关联,并详细介绍如何在 Linux 系统中通过参数配置来避免数据分片。所有配置建议基于标准 Linux 内核(如 5.x 版本),确保真实可靠。Linux 提供了内核参数来优化 MSS 和 MTU,从而避免分片。通过以上配置,Linux 系统能有效避免数据分片,提升网络效率和可靠性。

2501_93892617的博客 849

光伏微电网蓄电池储能控制系统设计及动态性能分析

本文构建了光伏微电网蓄电池储能控制系统的完整理论体系。在系统架构方面,提出了基于直流母线电压平衡的多时间尺度能量管理理论,建立了光伏发电单元的二阶物理模型和MPPT动态跟踪算法。针对蓄电池系统,设计了融合二阶RC等效电路与扩展卡尔曼滤波的SOC估计方法,误差控制在3%以内。双向DC-DC变换器采用状态空间平均建模方法,推导了小信号传递函数,为闭环控制提供理论基础。该体系实现了从瞬时功率平衡到长期能量调度的多层级协同控制,为微电网稳定运行提供了系统的解决方案。

AI的内部世界的博客 191

【Claude】权限被拒绝 (Permission Denied) 全场景排查 — 已解决

权限配置是 Claude Code 安全使用的核心机制。通过合理的 allow/deny 规则、正确的通配符使用、子代理独立配置、定期安全审计,可以在保证安全性的同时不影响开发效率。deny 优先:deny 规则优先级高于 allow,先保护敏感资源通配符精确单层匹配,**递归匹配,Bash(cmd*)允许带参数最小权限:只允许必要的操作,避免Bash(*)等危险规则CI 用 skip:Headless 模式用避免挂起子代理独立:每个子代理单独配置权限,不自动继承保护密钥:deny.env。

一键难忘的博客 3944
上一篇: 路由器的基本协议与技术
max415
博客等级 码龄22年 16粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值