忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 5296 | 回复: 2

[网络子系统] Linux 发生RTO的段 被ACK 后是会立刻进入Open状态吗? [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
发表于 2018-06-15 20:27 |显示全部楼层
本帖最后由 goingstudy 于 2018-06-15 20:40 编辑

假设不用SACK和Timestamp选项,在发生RTO后,Linux 是把重传队列全标记为丢失:
  1. tcp_retransmit_timer()
  2.     tcp_enter_loss()
  3.         tcp_timeout_mark_lost()
复制代码
如果随后的ACK 应答了RTO的段,是会把重传队列全部恢复吗(删除重传标记,进入Open状态),这个代码是在哪里做的?
这个我用packetdrill 确认了,但是有疑问,而且没找到代码在哪里做的
  1. +0.000 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
  2. +0.000 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
  3. +0.000 setsockopt(3, SOL_SOCKET, SO_SNDBUF, [131072], 4) = 0
  4. +0.000 bind(3, ..., ...) = 0
  5. +0.000 listen(3, 1) = 0

  6. +0.100 < S 0:0(0) win 40000 <mss 1000>
  7. +0.000 > S. 0:0(0) ack 1 <mss 1460>
  8. +0.100 < . 1:1(0) ack 1 win 40000
  9. +0.000 accept(3, ..., ...) = 4

  10. +0.100 write(4, ..., 10000) = 10000     ==> 发生10个段
  11. +0.100 < . 1:1(0) ack 4001 win 30000 ==> ACK 4个
  12. +0.500 %{                                         ==> 500ms,强制RTO
  13. print "ca_state:", tcpi_ca_state             ==> 4(Loss)
  14. print "reordering:", tcpi_reordering        ==> 3
  15. print "lost:", tcpi_lost                            ==> 6(重传队列全部被标记为 Loss)
  16. print "retrans:", tcpi_retrans                  ==> 1,4000-5000被重传
  17. }%
  18. +0.000 < . 1:1(0) ack 6001 win 30000   ==> Ack 6001, 这里还有个问题,为什么没有触发Reno的partial Ack后的重传?

  19. +0.100 %{
  20. print "ca_state:", tcpi_ca_state              ==> 0(立刻离开进入Open???)
  21. print "reordering:", tcpi_reordering        ==> 3
  22. print "lost:", tcpi_lost                            ==> 0(重传队列的Loss标记全部被清除,即使还有没被Ack的)
  23. print "retrans:", tcpi_retrans                  ==> 0
  24. }%


复制代码



论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
发表于 2018-06-15 20:44 |显示全部楼层
用上面的例子,当Ack6001来时,代码会
tcp_ack()
tcp_clean_rtx_queue() 会删除已经被ACK的段,但是不会全部(Loss标记应该还存在),
tcp_fastretrans_alert() 在这个函数也没有找到进入Open 状态的代码

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
发表于 2018-06-16 16:10 |显示全部楼层
明白了。
如果ACK6001,FRTO 会UNDO
如果ACK5001,那么会继续在CA_Loss。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP