TCP发送源码tcp_sendmsg的相关问题
pur_e 2015-01-18 04:29:49 小弟最近在研究linux中TCP的相关源码,发送函数tcp_sendmsg中有几个问题搞不明白,来咨询一下:
linux版本3.17.3
1、
1173行 copy = max - skb->len;
这里是判断SKB中是否已经达到数据包的最大限制,如果达到的话新分配SKB来存放。
按这个来理解,一个SKB包就是对应一个数据包,但是后面申请SKB时:
1184行 skb = sk_stream_alloc_skb(sk,
select_size(sk, sg),
sk->sk_allocation);
使用的select_size得到的SKB的大小,为什么不使用size_goal来分配,而使用mss_cache来分配大小??
2、这样的话,如果size_goal大于mss_cache,如网卡支持GSO等,会是mss_cache的整数倍,这样只能去使用SKB的非线性数据,重新分配空间,这样做有什么特殊含意吗?为什么不直接使用线性数据区?