网络层优化指南

网络层主要负责网络包的封装、寻址和路由,在网络层最主要的优化思路就是对路由、 IP分片以及 ICMP 等参数进行调整优化。

路由角度参数调整

从路由和转发的角度出发,可以调整下面的内核选项。

  • 在需要转发的服务器中,比如用作 NAT 网关的服务器或者使用 Docker 容器时,开启 IP 转发,即设置 net.ipv4.ip_forward = 1
  • 调整数据包的生存周期 TTL,比如设置 net.ipv4.ip_default_ttl = 64。注意,增大该值会降低系统性能
  • 开启数据包的反向地址校验,比如设置 net.ipv4.conf.eth0.rp_filter = 1。这样可以防止 IP 欺骗,并减少伪造 IP 带来的 DDoS 问题

数据分片的角度

数据分片最主要的是调整 MTU大小,一旦网络包超过 MTU 的大小,数据就会在网络层分片。

MTU 的大小应该根据以太网的标准来设置。以太网标准规定,一个网络帧最大为 1518B,那么去掉以太网头部的 18B 后,剩余的 1500 就是以太网 MTU 的大小。

在使用 VXLAN、GRE 等叠加网络技术时,网络叠加会使原来的网络包变大,导致 MTU 也需要调整。比如,就以 VXLAN 为例,它在原来报文的基础上,增加了 14B 的以太网头部、 8B 的 VXLAN 头部、8B 的 UDP 头部以及 20B 的 IP 头部。换句话说,每个包比原来增大了 50B。

所以,我们就需要把交换机、路由器等的 MTU,增大到 1550, 或者把 VXLAN 封包前(比如虚拟化环境中的虚拟网卡)的 MTU 减小为 1450。 另外,现在很多网络设备都支持巨帧,这种集群内部可以把 MTU 调大为 9000,以提高网络吞吐量。

网络接口的角度

对于网络接口本身,有很多方法可以优化网络的吞吐量。

  • 可以开启网络接口的多队列功能。这样,每个队列就可以用不同的中断号,调度到不同 CPU 上执行,从而提升网络的吞吐量。
  • 可以增大网络接口的缓冲区大小,以及队列长度等,提升网络传输的吞吐量
  • 还可以使用 Traffic Control 工具,为不同网络流量配置 QoS。
Last Updated:
Contributors: isno