免费注册 查看新帖 |

Chinaunix

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

[网络子系统] tcp loss 状态 [复制链接]

论坛徽章:
4
丑牛
日期:2014-01-11 15:11:12亥猪
日期:2014-12-15 22:19:092015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-03-13 19:45:11
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-12 10:26 |只看该作者 |倒序浏览
最近看到了tcp拥塞方面的知识。
  1. void tcp_enter_loss(struct sock *sk, int how)
  2. {
  3.         const struct inet_connection_sock *icsk = inet_csk(sk);
  4.         struct tcp_sock *tp = tcp_sk(sk);
  5.         struct sk_buff *skb;
  6.         int cnt = 0;

  7.         /* Reduce ssthresh if it has not yet been made inside this window. */
  8.         if (icsk->icsk_ca_state <= TCP_CA_Disorder || tp->snd_una == tp->high_seq ||
  9.             (icsk->icsk_ca_state == TCP_CA_Loss && !icsk->icsk_retransmits)) {
  10.                 tp->prior_ssthresh = tcp_current_ssthresh(sk);
  11.                 tp->snd_ssthresh = icsk->icsk_ca_ops->ssthresh(sk);
  12.                 tcp_ca_event(sk, CA_EVENT_LOSS);
  13.         }
  14.         tp->snd_cwnd           = 1;
  15.         tp->snd_cwnd_cnt   = 0;
  16.         tp->snd_cwnd_stamp = tcp_time_stamp;

  17.         tp->bytes_acked = 0;
  18.         tcp_clear_retrans(tp);

  19.         /* Push undo marker, if it was plain RTO and nothing
  20.          * was retransmitted. */
  21.         if (!how)
  22.                 tp->undo_marker = tp->snd_una;

  23.         sk_stream_for_retrans_queue(skb, sk) {
  24.                 cnt += tcp_skb_pcount(skb);
  25.                 if (TCP_SKB_CB(skb)->sacked&TCPCB_RETRANS)
  26.                         tp->undo_marker = 0;
  27.                 TCP_SKB_CB(skb)->sacked &= (~TCPCB_TAGBITS)|TCPCB_SACKED_ACKED;
  28.                 if (!(TCP_SKB_CB(skb)->sacked&TCPCB_SACKED_ACKED) || how) {
  29.                         TCP_SKB_CB(skb)->sacked &= ~TCPCB_SACKED_ACKED;
  30.                         TCP_SKB_CB(skb)->sacked |= TCPCB_LOST;
  31.                         tp->lost_out += tcp_skb_pcount(skb);
  32.                 } else {
  33.                         tp->sacked_out += tcp_skb_pcount(skb);
  34.                         tp->fackets_out = cnt;
  35.                 }
  36.         }
  37.         tcp_sync_left_out(tp);

  38.         tp->reordering = min_t(unsigned int, tp->reordering,
  39.                                              sysctl_tcp_reordering);
  40.         tcp_set_ca_state(sk, TCP_CA_Loss);
  41.         tp->high_seq = tp->snd_nxt;
  42.         TCP_ECN_queue_cwr(tp);

  43.         clear_all_retrans_hints(tp);
  44. }
复制代码
上面代码中经常要设置一些标志位,我对什么时候,为什么要设置这些标志位搞不清楚,总觉得上面的这些代码是tcp拥塞中某些算法的实现,但是以前学习的网络知识没有讲的这么细,恳请大家指点下,应该看哪方面的资料?困惑中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP