网络的分片,重组

  • Post author:
  • Post category:其他


个人学习,如有错误或补充,请多指教~



MTU

Maximum Transmission Unit,MTU:最大传输单元,接收数据包的最大单元,MTU在网络通信中是非常重要的,是网络分片和重组的基础。



IP分片

  • 首先IP分片发生在网络层
  • 当发送的数据包大小超过了MTU,则需要对数据包进行切片划分,使每一片长度小于等于MTU,其中涉及到一些数据包ip首部值的修改,标志位偏移位等,自行查阅。



IP重组

  • 重组发生在目的ip的网络层
  • 通过标志位和偏移位的设置,将分片的数据包通过数据的堆栈进行进一步处理。



避免IP分片

因为在网络层是没有超时重传机制的,如果分片之后其中的某一个分片丢失,就会导致传输层的重传,是对所有分片的重传,所以会降低传输效率和成功率,所以要避免IP分片。

  • 对于TCP的数据包:三次握手保证了数据包不会超过MTU值,避免了IP分片。
  • 对于UDP的数据包: 我们需要限制数据包的大小,保证不超过MTU值。



网卡的offload机制

早期处理网络低速传输以及网络传输的不可靠问题,是通过操作系统进行数据包的处理。这样会占用很多cpu的使用率。为了解决这样的问题,将网卡加入了offload机制,来提高网络的收发性能,将原本操作系统操作对数据包的处理,放到网卡中去做。



LSO(Large Segment Offload)/LRO(Large Receive Offload)

  • LSO:当发送数据超过了MTU的时候,操作系统将传输请求给网卡,网卡接收请求后将数据包进行切割,并封包发出。
  • LRO:LRO会将接收的碎片包自动组合,提交给操作系统处理。
  • 一般来说,LSO和LRO主要面向TCP报文。



GSO(Generic Segmentation Offload)/GRO(Generic Receive Offload)

比LSO/LRO更通用,会自动检测网卡支持的特性。



TSO(TCP Segmentation Offload)/UFO(UDP fragmentation offload)

分别对应TCP报文和UDP报文



查看以上说的各个选项

ethtool -k eth0

[root@dut dpdk]# ethtool -k eno1
Features for eno1:
rx-checksumming: on
tx-checksumming: on
	tx-checksum-ipv4: off [fixed]
	tx-checksum-ip-generic: on
	tx-checksum-ipv6: off [fixed]
	tx-checksum-fcoe-crc: off [fixed]
	tx-checksum-sctp: on
scatter-gather: on
	tx-scatter-gather: on
	tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
	tx-tcp-segmentation: on
	tx-tcp-ecn-segmentation: off [fixed]
	tx-tcp6-segmentation: on
	tx-tcp-mangleid-segmentation: off
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: on [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: on
tx-ipip-segmentation: on
tx-sit-segmentation: on
tx-udp_tnl-segmentation: on
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
busy-poll: off [fixed]
tx-gre-csum-segmentation: on
tx-udp_tnl-csum-segmentation: on
tx-gso-partial: on
tx-sctp-segmentation: off [fixed]
rx-gro-hw: off [fixed]
l2-fwd-offload: off [fixed]
hw-tc-offload: on
rx-udp_tunnel-port-offload: off [fixed]

ethtool -K eth0 gso off/on 开关命令



版权声明:本文为bicongcha5626原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。