MTU 和 MSS 是您进入网络世界时应该熟悉的两个重要术语,尤其是在您使用 GRE 隧道和 IPSEC 时。hostgator美国分销主机商分享MTU 和 MSS是什么
最大传输单元 (MTU)
MTU 是最大的数据包或帧大小,以八位字节(八位字节)指定,可以在基于数据包或帧的网络中发送。互联网的传输控制协议(TCP) 使用 MTU 来确定任何传输中每个数据包的最大大小。
MTU 通常与以太网协议相关联,其中允许的最大数据包为 1500 字节。
什么是分片?
与 MTU 相关的最常见问题之一是,有时更高级别的协议可能会创建比特定链路支持的更大的数据包。推荐阅读:《数据挖掘和统计的区别》
为了解决这个问题,IPv4 允许分段,将数据报(在分组交换网络中传输的基本信息单元)分成多个片段。使用为该接口配置的 MTU 参数,每个片段都足够小,可以通过它被分段的链路。
分段过程发生在 IP 层(OSI第 3 层),它将数据包标记为分段。这确保目标主机的 IP 层知道它应该将数据包重新组合成原始数据报。
某些应用程序不支持分段,因此应避免。避免碎片的最佳方法是调整 TCP 最大分段大小 (MSS)。
MTU 由以下组件构成:
有效载荷,1460 字节
TCP 和 IP 标头,每个 20 字节
假设您要实现通用路由封装 (GRE) 协议,这是一种允许您将网络层协议封装在虚拟 IP 链路中的隧道协议。
这种数据包的总大小为 1524 字节,超过了 1500 字节的 MTU 值。为了保持 MTU 为 1500,您可以减小数据包的“数据”大小。使这成为可能的机制是 MSS。
什么是 TCP MSS?
TCP MSS 是 TCP 头的选项字段中的一个参数,它定义了最大段大小。它指定计算机或通信设备可以在单个 TCP 段中接收的最大数据量(以字节为单位)。
MSS 不包括 TCP 标头或 IP 标头。相反,它规定了数据包的“数据”部分的最大大小。使用上一节中的 GRE 隧道示例,由于总标头的大小为 64,因此 TCP MSS 值应设置为 1436 或更低,以确保不需要分片。
什么是 MSS 公告?
在三次 TCP 握手期间,接收方发送“MSS 公告”。该公告声明了接收方可以接受的 TCP 段的最大大小。MSS 可以在数据流的每个方向上独立使用。推荐阅读:《MySQL数据库为什么对 Web 设计很重要?》
由于终端设备并不总是知道将在此过程中添加到此数据包中的高级协议,因此它通常不会调整 TCP MSS 值。为了弥补这一点,网络设备可以选择重写通过它们处理的 TCP MSS 数据包的值。
例如,在 Cisco 路由器中,接口级别的命令 ip tcp mss-adjust 1436 将重写通过该接口的任何 SYN 数据包的 TCP MSS 值。
Web 应用程序防火墙 (WAF) 中的 GRE 隧道和 TCP MSS
WAF 通常使用 GRE 隧道。为了解决碎片的可能性,您需要调整 TCP MSS 值。
客户服务器发送的数据包的MSS值为1460,但是在路由器的接口中,MSS被调整为1420,这样GRE数据包就可以不分段通过。
Imperva WAF 是不对称的——它拦截入站流量,但允许出站流量直接通过 ISP。这意味着您只需在处理入站流量的路由器上设置 MSS 值。无需在组织的隧道接口上调整 MSS。
上图显示了三次握手中的 SYN 数据包如何传输。在三次握手完成并建立连接后,最终用户将发送数据不超过 1420 字节大小的数据包。此外,客户的服务器将发送数据不超过默认 1460 字节的数据包。推荐相关阅读:《2022年做好数据整合的4个关键原因》