免费注册 查看新帖 |

Chinaunix

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

[网络子系统] tcp sendmsg中的2个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-02 23:51 |只看该作者 |倒序浏览
本帖最后由 Huntsmen 于 2013-11-03 00:02 编辑

问题1,关于发送窗口的问题
前提条件:
mss=300,接收方通告了一个窗口为1000,然后发送3个段即900个字节,但是都没有收到确认,剩余发送窗口只剩下100个字节;
场景:
这个时候又有300字节的数据到来,tcp_sendmsg会产生一个新的skb挂在sk_send_head下面,产生skb的时候并没有考虑snd_wnd,而是考虑的mss来决定skb的大小,所以skb->len=300,
skb组好之后就调用tcp_push->tcp_write_xmit->tcp_snd_wnd_test时检查是否在发送窗口之内,
虽然发送窗口还可以发送100个字节,但是tcp_snd_wnd_test检查没有通过,这一包数据不能发送,只有等通告窗口变大之后才能接着发,这样是否不太合理
  1. static bool tcp_snd_wnd_test(const struct tcp_sock *tp,
  2.                              const struct sk_buff *skb,
  3.                              unsigned int cur_mss)
  4. {
  5.         u32 end_seq = TCP_SKB_CB(skb)->end_seq;

  6.         if (skb->len > cur_mss)
  7.                 end_seq = TCP_SKB_CB(skb)->seq + cur_mss;

  8.         return !after(end_seq, tcp_wnd_end(tp));
  9. }
复制代码
问题2:对OOB数据的理解是否正确?
对于带外数据OOB,TCP的处理是当做紧急URG数据来处理,
在发送端它的发送也是按照应用层递交的顺序来发送的,比如应用层调用send发送了10包数据之后再调用send发送一个oob数据,tcp的处理是将10包普通数据发送完之后才会发送这1包oob数据,不会将他们的顺序颠倒;
但是在接收方,收到这些数据之后,递交给应用层的顺序是有可能颠倒的;

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2013-11-03 10:28 |只看该作者
回复 1# Huntsmen
这个时候又有300字节的数据到来,tcp_sendmsg会产生一个新的skb挂在sk_send_head下面,产生skb的时候并没有考虑snd_wnd,而是考虑的mss来决定skb的大小,所以skb->len=300,
skb组好之后就调用tcp_push->tcp_write_xmit->tcp_snd_wnd_test时检查是否在发送窗口之内,
虽然发送窗口还可以发送100个字节,但是tcp_snd_wnd_test检查没有通过,这一包数据不能发送,只有等通告窗口变大之后才能接着发,这样是否不太合理


1. 这个设计这样来看的确是不合理。
2. 你这个场景是一个非常特殊的场景,如果修改算法解决这个场景,那么普通防止拥塞的场景可能会受影响。
3. 引用linus的一句话,解决这个问题而引入的问题,比解决这个问题更复杂。

BTW: 在家可以用中文输入法了
   

论坛徽章:
0
3 [报告]
发表于 2013-11-03 16:13 |只看该作者
回复 1# Huntsmen
问题1:
Linux实现是以“数据段”为单位设定窗口的,这本来就是它的设计规则,你说的情况,需要以字节为单位设计窗口改变算法,对现有的Linux内核改变太多。
问题2:
TCP只按seq是否连续来向应用层递交数据,不管怎样紧急,最终递交的数据必须保持seq连续。这是TCP基本规则之一,所以不会有乱序提交的可能性。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP