免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1756 | 回复: 0
打印 上一主题 下一主题

[请教]关于tso在tcp_sendmsg的一些疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-21 20:25 |只看该作者 |倒序浏览
我最近在看tcp的发送流程,对于tcp_sendmsg处tso特性的实现有一点疑问.理论上讲,如果网络设备支持tso特性,那么经过tcp协议栈发送到网卡的最大数据包应该是64kB(我认为这是因为skb最大支持64KB page的原故).在tcp_sendmsg中,最终会调用tcp_push,tcp_push_one或者__tcp_push_pending_frames来完成发送.在tcp_sendmsg的结尾处就是发送函数:
                        if ((seglen -= copy) == 0 && iovlen == 0)
                                goto out;

                        if (skb->len < mss_now || (flags & MSG_OOB))
                                continue;

                        if (forced_push(tp)) {
                                tcp_mark_push(tp, skb);
                                __tcp_push_pending_frames(sk, tp, mss_now, TCP_NAGLE_PUSH);
                        }
            else if (skb == sk->sk_send_head)
                                tcp_push_one(sk, mss_now);
                        continue;
如果不考虑nagle以及发送窗,拥塞窗口问题.我觉得skb不可能在此处能够填充满64kB的数据.因为只要skb->len < mss_now,就会要尝试发送此skb至网络层.我对这点比较疑惑,不知道在甚么情况下,在使能tso的前提下,能够发送一个full size(64KB)的skb到网络层.希望各位大牛指教,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP