免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Godbach
打印 上一主题 下一主题

TCP/IP实现刨根究底大讨论【活动结束】 [复制链接]

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
81 [报告]
发表于 2011-03-25 12:38 |只看该作者
但是进入拥塞避免阶段以后,他是随着窗口的变化而变化的,并且的确认网络拥塞的时候给他赋值,如果网络情况很好,cwnd增长到很高的值,这个时候网络拥塞,赋给ssthresh就是一个很大的值。

拥塞避免阶段会增长ssthresh吗???
我的实际测试结果是ssthresh降下来后就很难再涨上去了,尤其是在模拟丢包环境里

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


    丢包产生的原因之一是网络拥挤,但好像也有网络并不拥挤也会丢包的情况,不知各位嘉宾和观众对链路丢包方面有什么经验,能否分享一下。
   主要是丢包的原因到底有哪些,哪些是可以通过链路解决的,哪些是可以通过控制发送端 TCP 流量解决的。
   这个问题看起来跟讨论的主题 “TCP/IP实现”无关,但 TCP/IP 要解决的问题之一就是丢包的判断及确认丢包后的处理。了解了丢包的情况
   对理解 TCP 实现是有帮助的。



这个和我前边说的一样,就是区分不出是链路丢包还是真的拥塞了。如果是前一种情况,就完全没有必要降低窗口和门阀值

论坛徽章:
0
83 [报告]
发表于 2011-03-25 12:44 |只看该作者
本帖最后由 aaaaa5aa 于 2011-03-25 12:45 编辑
TCP/IP是网络中使用的基本的通信协议,是Internet国际互联网络的基础。TCP/IP协议的一个开源实现就是在GNU/ ...
Godbach 发表于 2011-03-20 23:49



   
TCP发包有个轮片机制(具体名字我记不太清楚了),就是发包的时候不是以一个包一个包发,而是以多个为一组同时发出去,
当然这是为了提高发包速度,当其中哪个序号的包丢失,就重新传输这一组包。大虾们能不能详细讲一下这个机制的实现方式

(《VC++网络高级编程》里讲诉,但讲得不详细)

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
84 [报告]
发表于 2011-03-25 13:30 |只看该作者
回复 81# goter


    如果网络情况很好,cwnd增长到很高的值,这个时候网络拥塞,赋给ssthresh就是一个很大的值。

这里的很大不是说拥塞时还会增加ssthresh.

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
85 [报告]
发表于 2011-03-25 13:34 |只看该作者
...当其中哪个序号的包丢失,就重新传输这一组包。。。
aaaaa5aa 发表于 2011-03-25 12:44



    这样会造成过多重传吧

论坛徽章:
0
86 [报告]
发表于 2011-03-25 16:34 |只看该作者
无非是哈希表、红黑树、trie树而已,有啥好讨论的捏...

对了,Linux的IPv4报式socket默认能够接受广播分组,是不是BUG啊??

论坛徽章:
0
87 [报告]
发表于 2011-03-25 16:54 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
quazar 该用户已被删除
88 [报告]
发表于 2011-03-25 18:42 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
89 [报告]
发表于 2011-03-25 19:02 |只看该作者
回复 88# quazar

  1. tcp_input.c:
  2. 2178 static void tcp_ack_packets_out(struct sock *sk, struct tcp_sock *tp)
  3. 2179 {
  4. 2180     if (!tp->packets_out) {
  5. 2181         inet_csk_clear_xmit_timer(sk, ICSK_TIME_RETRANS);
  6. 2182     } else {
  7. 2183         inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, inet_csk(sk)->icsk_rto, TCP_RTO_MAX);
  8. 2184     }
  9. 2185 }
  10. ...
  11. 2252 static int tcp_clean_rtx_queue(struct sock *sk, __s32 *seq_rtt_p)
  12. ...
  13. 2334     if (acked&FLAG_ACKED) {
  14. 2335         tcp_ack_update_rtt(sk, acked, seq_rtt);
  15. 2336         tcp_ack_packets_out(sk, tp);
  16. 2337         if (rtt_sample && !(acked & FLAG_RETRANS_DATA_ACKED))
  17. 2338             (*rtt_sample)(sk, tcp_usrtt(&tv));
  18. 2339
  19. 2340         if (icsk->icsk_ca_ops->pkts_acked)
  20. 2341             icsk->icsk_ca_ops->pkts_acked(sk, pkts_acked);
  21. 2342     }
  22. ...
  23. 2490 /* This routine deals with incoming acks, but not outgoing ones. */
  24. 2491 static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag)
  25. ....
  26. 2559     /* See if we can take anything off of the retransmit queue. */
  27. 2560     flag |= tcp_clean_rtx_queue(sk, &seq_rtt);

复制代码
tcp_ack() -> tcp_clean_rtx_queue() : 检查是否收到非重传数据的 ACK -> 是则更新 RTT,RTO,然后处理重传定时器

评分

参与人数 1可用积分 +8 收起 理由
Godbach + 8 感谢分享

查看全部评分

quazar 该用户已被删除
90 [报告]
发表于 2011-03-25 19:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP