您现在的位置: 爱51代码网 >> 范文 >> 文章正文
TIME_WAIT状态下对接收到的数据包如何处理
T定时器后丢掉接收到的ACK包。
  接下来是对SYN包的处理。前面提到了,如果在TIME_WAIT状态下接收到序列号比上一个连接的结束序列号大的SYN包,可以接受,并建立新的连接,下面这段代码就是来处理这样的情况:

[cpp] view plaincopyprint?
01.if (th->syn && !th->rst && !th->ack && !paws_reject && 
02.    (after(TCP_SKB_CB(skb)->seq, tcptw->tw_rcv_nxt) || 
03.     (tmp_opt.saw_tstamp && 
04.      (s32)(tcptw->tw_ts_recent - tmp_opt.rcv_tsval) < 0))) { 
05.    u32 isn = tcptw->tw_snd_nxt + 65535 + 2; 
06.    if (isn == 0) 
07.        isn++; 
08.    TCP_SKB_CB(skb)->when = isn; 
09.    return TCP_TW_SYN; 
10.} 
    if (th->syn && !th->rst && !th->ack && !paws_reject &&
        (after(TCP_SKB_CB(skb)->seq, tcptw->tw_rcv_nxt) ||
         (tmp_opt.saw_tstamp &&
          (s32)(tcptw->tw_ts_recent - tmp_opt.rcv_tsval) < 0))) {
        u32 isn = tcptw->tw_snd_nxt + 65535 + 2;
        if (isn == 0)
            isn++;
        TCP_SKB_CB(skb)->when = isn;
        return TCP_TW_SYN;
    }  当返回TCP_TW_SYN时,在tcp_v4_rcv()中会立即释放time_wait控制块,并且开始进行正常的连接建立过程。
  如果数据包不是上述几种类型的包,可能的情况有:
  1、不是有效的SYN包。不考虑时间戳的话,就是序列号在上一次连接的结束序列号之前
  2、ACK包,起始序列号不是下一个要接收的序列号
  3、RST包,起始序列号不是下一个要接收的序列号
  4、带数据的SKB包
  这几种情况由以下代码处理:

[cpp] view plaincopyprint?
01.if (!th->rst) { 
02.      /* In this case we must reset the TIMEWAIT timer.
03.       *
04.       * If it is ACKless SYN it may be both old duplicate
05.       * and new good SYN with random sequence number <rcv_nxt.
06.       * Do not reschedule in the last case.
07.       */ 
08.      if (paws_reject || th->ack) 
09.          inet_twsk_schedule(tw, &tcp_death_row, TCP_TIMEWAIT_LEN, 
10.                     TCP_TIMEWAIT_LEN); 
11. 
12. 
13.      /* Send ACK. Note, we do not put the bucket,
14.       * it will be released by caller.
15.       */ 
16.  &nbs

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    sharepoint 2010 获取用户信息Us
    设计包含max函数的队列
    随机从数组中取出指定的不重复的
    mysql主从同步延迟方案解决的学习
    青岛科学六年级下册教材分析
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    mysql主从同步延迟方案解决的学习
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    保险受益人制度相关问题的探讨
    初中生地理读图能力培养的研究
    搞笑生日祝福
    The layout of PID & PORT i
    hadoop核心逻辑shuffle代码分
    The layout of PID & PORT i
    The layout of PID & PORT i
    The layout of PID & PORT i
    MapReduce错误任务失败处理 
    Oracle恢复内部原理(介质恢
    在 Oracle 中如何确定远程 s
    为什么RHEL 6上没有ASMLIB?
    sharepoint 2010 获取用户信
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |