关于TCP MSS值

From:http://blog.chinaunix.net/u2/72886/showart_1802033.html

中低端路 由器 tcp mss 的实现原理 为何经常要在内网口和外网口都要配置 tcp mss 值呢
PC1(192.168.0.1) ――― Router ―――― Internet ―――- www server(238.135.1.1)

建立 tcp 连接的两端在三次握手时会协商 tcp mss 大小,具体如下:
pc1 发 出 syn 报文,其中 option 选项填充的 mss 字段一般为 1460 ,同样 www server 收到 syn 报文后,会发送 syn ack 报文应答, option 选项填充的 mss 字段也为 1460 ;协商双方会比较 syn syn+ack 报文中 mss 字段大小,选择较小的 mss 作为发送 tcp 分片的大小。通过比较,协商双方的 tcp mss 都是 1460

对于涉及 mpls l3vpn pppoe nat ipsec l2tp gre 等组网,通常由于报文太大需要分片,一般可以 通过设置 tcp mss 解 决。

针对上例说明 tcp mss 如何实现
1、
假设在路由器内网口配置 tcp mss 1200
a)
路由器收到 www server syn ack 报文时会修改 option 选项中的 mss 字段为 1200 ,然后再转发给 PC1 PC1 收到报文后认为对端的 tcp mss 1200 ,这样 PC1 发送数据给 www server 时会以 1200 作为分片大小;但路由器修改 tcp mss 1200 的操作 www server 是不知道的,因此 www server 还会以 1460 作为分片大小发送报文。

2、
假设再路由器外网口配置 tcp mss 1200
a)
路由器收到 PC1 syn 报文时会修改 option 选项中的 mss 字段为 1200 ,然后再转发给 www server ,同样 www server 发送数据给 PC1 时会以 1200 作为分片大小;同样 PC1 不知道路由器修改 tcp mss 1200 ,因为 PC1 还会以 1460 作为分片大小发送报文。

3、
因此在实现双向大包传输时需要在内外网同时修改 tcp mss

综上所述: 在路由器接口上配置的 tcp mss 命令仅对出接口方向的 syn 报文和 syn ack 报文有效,对于入接口方向的 syn syn ack 报文无效。

### TCP MSS 设置与优化 TCP 最大段大小(MSS, Maximum Segment Size)是指在一个 TCP 数据包中,数据部分的最大长度(不包括 TCP 头部)。MSS 的设置直接影响到网络传输的效率和性能。以下是关于 TCP MSS 设置与优化的相关内容。 #### 1. MSS 的作用 MSS 是在网络通信中用于避免分片的关键参数。在建立 TCP 连接时,通信双方通过三次握手协商出实际的 MSS [^1]。如果 MSS 设置过大,可能会导致 IP 分片,增加网络复杂性;如果 MSS 设置过小,则会降低传输效率。因此,合理设置 MSS 对于优化网络性能至关重要。 #### 2. MSS 的默认与计算 MSS 的默认通常由设备或操作系统根据网络接口的 MTU(最大传输单元)自动计算得出。MTU 是指网络层能够传输的最大数据帧大小,其中包括了 IP 头部和 TCP 头部。MSS 的计算公式如下: ```plaintext MSS = MTU - IP Header Size - TCP Header Size ``` 对于 IPv4,默认的 IP 头部大小为 20 字节,TCP 头部大小也为 20 字节(无选项字段时),因此: ```plaintext MSS = MTU - 20 - 20 ``` 例如,以太网的标准 MTU 为 1500 字节,则默认的 MSS 为: ```plaintext MSS = 1500 - 20 - 20 = 1460 ``` #### 3. MSS 的调整方法 在某些特殊场景下(如存在路径 MTU 较小的网络链路),可能需要手动调整 MSS 。以下是一些常见的调整方法: - **Linux 系统**:可以通过 `sysctl` 命令修改 MSS 。例如: ```bash sysctl -w net.ipv4.tcp_mss_default=1200 ``` 或者在 `/etc/sysctl.conf` 中添加以下内容并应用: ```plaintext net.ipv4.tcp_mss_default = 1200 ``` - **Windows 系统**:可以通过注册表编辑器修改 MSS 。具体路径为: ```plaintext HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters ``` 添加一个名为 `GlobalMaxTcpWindowSize` 的 DWORD ,并设置为期望的 MSS 。 #### 4. MSS 的优化策略 为了确保网络通信的高效性,以下是一些 MSS 的优化策略: - **路径 MTU 发现(PMTUD)**:启用 PMTUD 可以动态发现路径上的最小 MTU,并据此调整 MSS 。PMTUD 通过 ICMP 错误消息来检测分片问题。 - **考虑网络环境**:在复杂的网络环境中(如使用 MPLS、GRE 隧道等技术),可能需要预留额外的头部空间,因此 MSS 应适当减小。 - **避免分片**:确保 MSS 小于路径上的最小 MTU,以避免 IP 分片带来的性能损失。 #### 5. 快速恢复与 MSS 的关系 在 TCP 拥塞控制机制中,快速恢复状态会对 MSS 的实际利用率产生影响。例如,在快速恢复过程中,每当收到冗余 ACK 时,拥塞窗口(cwnd)会增加一个 MSS 的大小[^2]。因此,合理设置 MSS 能够更好地配合拥塞控制算法,提升网络吞吐量。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值