参考:https://blog.youkuaiyun.com/quqi99/article/details/51066800
https://www.ibm.com/developerworks/cn/linux/l-cn-network-pt/ 重点介绍和分析
TCP TSO/GSO:
1、数据payload+TCP header(20 bytes)到达IP层后,加上IP层的20字节header
2、此时协议栈在IP层会将该数据包的总大小和MTU值进行比较,大于MTU,则会进行分包,协议栈IP层的分片和组装消耗的是CPU的资源
3、如果开启了GSO/TSO属性,则协议栈在IP层不对数据包的总大小进行检查
4、TSO开启,则数据包直接透传到网卡,在网卡上根据MTU进行分片
5、TSO开启的前提下,GSO会默认开启,GSO不仅仅支持TCP,也支持UDP,TSO仅支持TCP
6、若TSO未开启,GSO开启,数据包在协议栈会推迟分包,在最后发送到网卡前才执行分段
延迟分段会减少发送路径上的数据拷贝操作,所以即使网络设备不支持TSO,只要能够延迟分段也是有收益的
参考:https://blog.youkuaiyun.com/maxlovezyy/article/details/77824679
https://blog.youkuaiyun.com/hanpingxue/article/details/38415235
https://blog.youkuaiyun.com/substitute_coder/article/details/53909516
一条TCP发送数据流:
1、应用层在user space打开一个fd,并将user space的buffer数据发送至内核IP协议栈
2、内核IP协议栈检测该fd有效性后,会绑定一个socket到该 fd,同时会绑定一个TCB(TCP co