Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1398282
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: LINUX

2015-05-09 10:03:22

     1、tcp滑动窗口的变化规律
     2、tcp处理高并发连接时的参数调整
     3、tcp异常状态的产生
          (1)tcp的状态机中状态是SYN_RCVD和SYN_SENT,不是SYN_ENT
          (2)由于TCP协议情况下syn与ack可能同时发送也可能分开发送,
              所以也就会出现 SYN_RCVD到ESTABLISHED 
                                      SYN_SEND->SYN_RCVD->ESTABLISHED
          (3)在SYN_RCVD与SYN_SENT没有收到syn,ack的时候,就会超时返回CLOSED
          (4)同样由于fin,ack也可能是同时发送(一个包),也可能是分开在两个包发送,而且达到的顺序
              可能有先后的区别,如果是先收到对方的fin,也就会从FIN_WAIT_1到CLOSING状态
               如果先收到自己fin的ack的话,就会从FIN_WAIT_1到FIN_WAIT_2
               最后再收到自己fin的ack或者对方的fin,然后分别从FIN_WAIT_2->TIME_WAIT,
               CLOSING->TIME_WAIT,最后再发出ack,或者2MSL超时后回到CLOSED
          (5)被动关闭的一方,一般是服务器,服务器大多数情况下不会主动断开连接,
               ESTABLISHED收到fin后就到CLOSE_WAIT同时发送ack,然后等待应用层调用close
               调用之后,就会进入LAST_ACK同时发出fin,等待最后一个ack,进入CLOSED
               由此可见TCP的状态机是在内核维护和管理,但是内核提供了系统调用和事件机制
               可以让应用层得知状态变化
          (6)RST包是在CLOSED状态下发出的
          (7)TCP扩展状态:针对半连接
              连接建立:
                  SYN_SENT*,进入这个状态发送SYN,FIN
                  SYN_RCVD*,进入这个状态发送SYN,FIN,ACK
                  ESTABLISHED* ,进入这个状态发送SYN,ACK      
                  与不带星号的区别,就是要发FIN 
              关闭连接: 
                  CLOSE_WAIT*,发送SYN,ACK
                  FIN_WAIT_1*,发送SYN,FIN,ACK
                  CLOSING*,发送SYN,FIN,ACK
                  LAST_ACK*,发送SYN,FIN,ACK
                  与不带星号的区别,就是要发送SYN
              之所以有这种状态,因为客户端发的包可能是SYN+Data+FIN的组合,只不过
              其他的状态都跳过去了,但是否带星的状态会向不带星的状态转变?
         
阅读(1490) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~