• 网卡offload特性


    网络分片

    MTU(Maximum Transmission Unit )

    在以太网中,MTU 规定了经过网络层封装的数据包的最大长度。如果某个接口的MTU值为1500,则通过此接口传送的 IP 数据包的最大长度为1500字节。

    IP 分片

    当 IP 层需要传送的数据包长度超过 MTU 值时,则 IP 层需要对该数据包进行分片,使得每一片的长度小于或等于MTU的值。

    在分片的过程中,除了对 payload 进行分片外,数据包的 IP 首部也需要进行相应的更改。

    MSS( Maximum Segment Size )

    TCP 数据每次能够传输的最大数据分段长度,在 TCP 协议的实现中, MSS = MTU - (IP Header Length + TCP Header Length)。

    在 TCP 通信建立连接时,取两端提供的 MSS 的最小值作为会话的 MSS 值。由于 TCP 分段有 MSS 值的限值,通常情况下 TCP 数据包经过 IP 层封装后的长度不会大于 MTU,因此一般情况下, TCP 数据包不会进行 IP 分片。

     

    offload机制

    目前越来越多的网卡设备开始支持 offload 特性,以便提升网络收发和处理的性能。

    所谓的 offload 特性,是指将原来 在协议栈(操作系统)中进行的 IP 分片、TCP 分段、重组、checksum 校验等操作,转移到网卡中进行,降低系统 CPU 的消耗,从而提高处理性能。

     

    发送模式
    TSO (tcp-segmentation-offload)

    将 TCP 分段的过程转移到网卡中进行。当网卡支持 TSO 机制时,可以直接把不超过滑动窗口大小的 payload 下传给协议栈,即使数据长度大于 MSS,也不会在 TCP 层进行分段,同样也不会进行 IP 分片,而是直接传送给网卡驱动,由网卡驱动进行 TCP 分段操作,并执行 checksum 计算和包头、帧头的生成工作。

    UFO(udp-fragmentation-offload)

    一种专门针对udp协议的特性,主要机制就是将IP分片的过程转移到网卡中进行,用户层可以发送任意大小的udp数据包,而不需要协议栈进行任何分片操作。目前貌似没找到有支持UFO机制的网卡,主要是应用在虚拟化设备上。

    GSO(generic-segmentation-offload)

    相对于 TSO 和 UFO,GSO 机制是针对所有协议设计的,更为通用。同时与 TSO、UFO 不同的是,GSO 主要依靠软件的方式实现,对于网卡硬件没有过多的要求。其基本思想就是把数据分片的操作尽可能的向底层推迟直到数据发送给网卡驱动之前,并先检查网卡是否支持 TSO 或 UFO 机制,如果支持就直接把数据发送给网卡,否则的话再进行分片后发送给网卡,以此来保证最少次数的协议栈处理,提高数据传输和处理的效率。

     
    接收模式
    LRO(large-receive-offload)

    在网卡驱动层面上将接受到的多个 TCP 数据包聚合成一个大的数据包,然后上传给协议栈处理。这样可以减少协议栈处理的开销,提高系统接收 TCP 数据的能力和效率。

    GRO(generic-receive-offload)

    基本思想和 LRO 类似,只是改善了 LRO 的一些缺点,比 LRO 更加通用。目前及后续的网卡都采用 GRO 机制,不再使用 LRO 机制。

    网卡 offload 模式的设置

    ethtool --show-offload eth0 # 查看 eth0 网卡的 offload 模式, -k 与 --show-offload 功能一致

    ethtool --offload eth0 gso on # 设置 eth0 网卡的 gso 模式为 on 状态,-K 与 --offload 功能一致

  • 相关阅读:
    JS解析json数据(如何将json字符串转化为数组)
    c/c++学习笔记(11)
    c/c++学习笔记(14)
    c/c++学习笔记(9)
    c/c++概念整理1
    c/c++学习笔记(10)
    c/c++学习笔记(2)
    《c和指针》笔记3
    c/c++学习笔记(3)
    c/c++学习笔记(13)
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13449317.html
Copyright © 2020-2023  润新知