免费注册 查看新帖 |

Chinaunix

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

linux tcp 重传时间疑问 [复制链接]

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-07 23:18 |只看该作者 |倒序浏览
tcp_ack中调用tcp_rearm_rto来重新设置重传时间

  1. static void tcp_rearm_rto(struct sock *sk)
  2. {
  3.         struct tcp_sock *tp = tcp_sk(sk);

  4.         if (!tp->packets_out) {
  5.                 inet_csk_clear_xmit_timer(sk, ICSK_TIME_RETRANS);
  6.         } else {
  7.                 inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
  8.                                           inet_csk(sk)->icsk_rto, TCP_RTO_MAX);
  9.         }
  10. }
复制代码
如果tp->packets_out不为空,说明现在还有包没有确认,调用inet_csk_reset_xmit_timer重新设置超时时间。

假设发送端连续发送了A B C D四个包。
A的ack到达发送端,更新超时时间,然后在超时之前B的ack又到了,再次更新,然后在超时之前C的ack又到了。
这样D数据包如果丢掉了的话,就需要差不多3个rto的时间才能重传。
不知道我这样理解对不对?

论坛徽章:
0
2 [报告]
发表于 2011-01-08 15:07 |只看该作者
本帖最后由 hritian 于 2011-01-08 15:30 编辑

你的理解应该不对,如果D丢掉的话,超时时间是 不会大于RTT+RTO

优化很多时候是要根据应用和网络状态的,实际上我们现在改完以后很少能看到超时定时器触发了。

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
3 [报告]
发表于 2011-01-08 20:05 |只看该作者
不对啊,D包是最后一个发的,接收端又不知道发送端发送了D,也没有乱序,发送端不会收到重发的ack,也就不会快速重传啊。只能等超时了,及时D的重传时间没有3rto,也肯定会大于正常的rto的。
不知道tcp还会在什么情况下发送数据包

论坛徽章:
0
4 [报告]
发表于 2011-01-09 11:33 |只看该作者
恩,基本是这样的。

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
5 [报告]
发表于 2011-01-10 00:13 |只看该作者
回复 4# hritian


    谢谢hritian大侠的回复,大侠的博客很有启发性
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP