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的非线性数据,重新分配空间,这样做有什么特殊含意吗?为什么不直接使用线性数据区?
...全文
167 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧