当前位置: 首页 > article >正文

网络术语MSS/MTU/TSO/Len说明

在网络通信中,MSS、MTU、Len 和 TSO 是与数据包传输相关的关键概念。以下是对这些概念的详细解释和它们之间的关系。

1. MSS(Maximum Segment Size)
1.1 定义
    MSS 是 TCP 协议中的一个参数,表示 TCP 数据段中可以携带的最大数据量(不包括 TCP 头部和 IP 头部)。
    在 TCP 三次握手时,客户端和服务端会协商 MSS 值,以确保数据包不会超过网络路径的 MTU。

1.2 作用
    限制数据包大小:MSS 用于限制每个 TCP 数据段的最大数据长度,避免数据包过大导致 IP 分片。
    优化传输效率:通过合理设置 MSS,可以提高传输效率,减少网络开销。

1.3 计算
    MSS = MTU - IP 头部大小 - TCP 头部大小
    例如,以太网的 MTU 通常为 1500 字节,IP 头部为 20 字节,TCP 头部为 20 字节,因此 MSS = 1500 - 20 - 20 = 1460 字节。


2. MTU(Maximum Transmission Unit)
2.1 定义
    MTU 是网络层(IP 层)的参数,表示数据包的最大长度(包括 IP 头部和数据)。
    MTU 决定了数据包在网络中传输时的最大大小。

2.2 作用
    避免 IP 分片:如果数据包大小超过 MTU,IP 层会进行分片,这会增加网络开销并降低传输效率。
    优化网络性能:通过合理设置 MTU,可以避免分片,提高网络传输效率。

2.3 常见 MTU 值
    以太网:1500 字节。
    PPPoE:1492 字节。
    VPN:通常小于 1500 字节,具体取决于 VPN 协议。
    
3. Len(Length)
3.1 定义
    Len 表示数据包的实际数据长度(不包括头部)。
    在 TCP 数据包中,Len 是 TCP 数据段中实际携带的数据量。

3.2 作用
    数据包大小:Len 用于表示数据包的实际大小,帮助接收方正确处理数据。
    传输效率:通过合理控制 Len,可以优化数据传输效率。

3.3 与 MSS 的关系
    Len <= MSS:在正常情况下,Len 不会超过 MSS。
    Len > MSS:如果 Len 超过 MSS,TCP 会自动将数据分片为多个数据包。

4. TSO(TCP Segmentation Offload)
4.1 定义
    TSO 是一种网络优化技术,允许网卡硬件对大数据包进行分片,而不是由操作系统内核完成。
    TSO 将大数据包的分割任务从 CPU 转移到网卡,从而减轻 CPU 的负担,提高网络传输效率。
    
4.2 作用
    减少 CPU 开销:通过将分片任务交给网卡,TSO 可以显著减少 CPU 的负担。
    提高传输效率:TSO 可以提高网络传输效率,特别是在高带宽和低延迟的网络环境中。
    
4.3 与 MSS 的关系
    TSO 与 MSS 的关系:
    TSO 允许发送大于 MSS 的数据包,网卡会自动将数据包分片为多个 MSS 大小的数据包。
    例如,如果 TSO 启用,操作系统可以发送一个 64KB 的数据包,网卡会将其分片为多个 1460 字节的 TCP 数据段。

4.4 启用 TSO
    在 Linux 系统中,可以通过以下命令检查和启用 TSO:
    ethtool -k eth0 | grep tcp-segmentation-offload
    ethtool -K eth0 tso on

5. MSS、MTU、Len 和 TSO 的关系
5.1 MSS 与 MTU 的关系
    MSS = MTU - IP 头部大小 - TCP 头部大小
    例如,以太网的 MTU 为 1500 字节,MSS = 1500 - 20 - 20 = 1460 字节。
    
5.2 Len 与 MSS 的关系
    Len <= MSS:在正常情况下,Len 不会超过 MSS。
    Len > MSS:如果 Len 超过 MSS,TCP 会自动将数据分片为多个数据包。
    
5.3 TSO 与 MSS 的关系
    TSO 允许发送大于 MSS 的数据包:
    例如,如果 TSO 启用,操作系统可以发送一个 64KB 的数据包,网卡会将其分片为多个 1460 字节的 TCP 数据段。
    
5.4 TSO 与 MTU 的关系
    TSO 不影响 MTU:
    TSO 只是将分片任务从 CPU 转移到网卡,不会改变 MTU 的值。
    网卡仍然会根据 MTU 对数据包进行分片。

6. 总结
MSS:TCP 数据段中可以携带的最大数据量(不包括 TCP 头部和 IP 头部)。
MTU:数据包的最大长度(包括 IP 头部和数据),用于避免 IP 分片。
Len:数据包的实际数据长度(不包括头部)。
TSO:一种网络优化技术,允许网卡对大数据包进行分片,减轻 CPU 的负担。

关系:
    MSS = MTU - IP 头部大小 - TCP 头部大小。
    Len <= MSS,如果 Len > MSS,TCP 会自动分片。
    TSO 允许发送大于 MSS 的数据包,网卡会自动分片。


巨帧:
    巨帧是指 MTU 大于 1500 字节的数据包。
    常见的巨帧 MTU 值为 9000 字节,但也可以根据需求设置为其他值(如 4000、8000 等)。
    
作用:
    减少数据包的数量,从而减少网络开销(如减少帧头和校验的开销)。
    提高大文件传输的效率,特别是在高带宽和低延迟的网络环境中。
    
配置方法:
Linux:
    修改网络接口的 MTU 值:
    ifconfig eth0 mtu 9000
    
或者使用 ip 命令:
    ip link set dev eth0 mtu 9000    
    
巨帧需要系统网卡和交换机的支持

ethtool -g eth0
输出示例:
    Ring parameters for eth0:
    Pre-set maximums:
    RX:             4096
    RX Mini:        0
    RX Jumbo:       8192
    TX:             4096
    Current hardware settings:
    RX:             512
    RX Mini:        0
    RX Jumbo:       0
    TX:             512
    
RX Jumbo:如果 RX Jumbo 的值大于 0,说明网卡支持巨帧。

启用巨帧的接收和发送
方法:
    使用 ethtool 启用巨帧的接收和发送。
    命令:
    ethtool -G eth0 rx 8192 tx 8192

测试命令:
    ping -M do -s 8972 <destination_ip>
    -M do:禁止分片。
    -s 8972:发送 8972 字节的数据(加上 28 字节的 IP 和 ICMP 头部,总大小为 9000 字节)。

检测网卡TSO:
命令:
    ethtool -k eth0
输出示例:
    Features for eth0:
    rx-checksumming: on
    tx-checksumming: on
    scatter-gather: on
    tcp-segmentation-offload: off
    udp-fragmentation-offload: off
    generic-segmentation-offload: on
    generic-receive-offload: on
    large-receive-offload: off
    
tcp-segmentation-offload:如果显示为 on,表示 TSO 已启用;如果显示为 off,表示 TSO 未启用。
scatter-gather:如果显示为 on,表示网卡支持 TSO 所需的分散-聚集(Scatter-Gather)功能。    

开启TSO:
使用 ethtool 命令开启 TSO
    ethtool -K eth0 tso on
验证:
    使用 ethtool -k eth0 检查 TSO 是否已启用:
    ethtool -k eth0
    
修改网络接口配置文件(可选)
方法:
如果希望在系统重启后保持 TSO 的配置,可以修改网络接口的配置文件。
步骤:
    编辑网络接口的配置文件(如 /etc/sysconfig/network-scripts/ifcfg-eth0),添加以下内容:
        ETHTOOL_OPTS="tso on"

    示例:
        DEVICE=eth0
        BOOTPROTO=none
        ONBOOT=yes
        ETHTOOL_OPTS="tso on"
    重启网络服务:
        systemctl restart network
        
抓包时,TCP建立连接之初告知服务端MSS为1460,而后续数据包Len却是2920,就是因为网卡支持TSO


http://www.kler.cn/a/443231.html

相关文章:

  • 之前手写的两个好用开源组件优化升级
  • FPGA的 基本结构(Xilinx 公司Virtex-II 系列FPGA )
  • H5通过URL Scheme唤醒手机地图APP
  • 反规范化带来的数据不一致问题的解决方案
  • 微信小程序map组件所有markers展示在视野范围内
  • 用python 进行雷电接口检测
  • ABP vNext多租户配置及通过域名方式解析租户的实现
  • 构建一个rust生产应用读书笔记6-拒绝无效订阅者02
  • 深入探索Vue.js中的methods选项:事件处理与业务逻辑的核心机制
  • Android Compose Modifier
  • 简单了解一下 Go 语言的构建约束?
  • ES6中的map和set
  • PHP代码审计学习(一)--命令注入
  • Linux 常用命令功能解析:man、apropos、locate 和 which
  • OpenAI 与 ChatGPT 的关系解析
  • CSS系列(13)-- 预处理器详解
  • 2024告别培训班 数通、安全、云计算、云服务、存储、软考等1000G资源分享
  • .Net Core框架创建一个Windows服务类型的应用程序
  • 基于 uniapp 开发 android 播放 webrtc 流
  • 知乎 PB 级别 TiDB 数据库集群管控实践
  • PHP木马编写
  • Leetcode 验证二叉搜索树
  • C++类与对象学习笔记(一)
  • python 数据分析之地图数据绘制
  • linux系统下硬盘无法读写,但是服务器上硬盘没有告警,确定故障硬盘的信息
  • GPT-SoVITS语音合成模型部署及使用