Chinaunix首页 | 论坛 | 博客
  • 博客访问: 298471
  • 博文数量: 63
  • 博客积分: 814
  • 博客等级: 军士长
  • 技术积分: 700
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-09 15:46
文章分类

全部博文(63)

文章存档

2017年(1)

2016年(4)

2015年(13)

2014年(9)

2012年(3)

2011年(33)

分类: LINUX

2011-04-11 15:06:05



看Tcp IP 卷一状态时一直就有迷惑(且很久),网上相关信息一直没看到相关说明,今天和同事聊下,还算弄清楚些。主要是画红色的部分。几个方面要注意。


1:书上说了,此状态图是一个子集。--说明不能代表全部情况。

2:下面的二条线的说明。其实图中是有三种类型的线,实线有二种,粗一点,细一点。再加上虚线。

我给他重注一次: 粗线代表:客户端正常状态变迁

                 虚线代表:服务端正常状态变迁

                 细线代表:客户端,服务端异常状态变迁


一:先看看三次握手的图


  二:模拟场景,客户端发送syn,由closed-->syn_sent进入了syn_sent状态,服务器端收到syn,由listen-->syn_recv 进入了syn_recv状态。

   客户端下一步正常是收到syn +ack ,然后进入established,图中有那条线(我没标记), 再看最大的红圈那条线,客户端从syn_sent-->syn_recv,为什么会这样,是因为只收到syn 没收到ack,所以重发syn 进入了syn_recv,同时发送了syn+ack。

   再往后有点复杂:

情况一:此时的服务端收到ack,且发送对客户端重发的syn的应答ack, 然后进入estabblished状态(虚线)。[客syn_recv 服:established]

    此时再分case:

        case 1: 客户端收到ACK,也进入到established. 

        case 2: 客户端没收到ack , 客户端会不断发送syn ,直到超时发送 RST 后进入closed,服务器端连接复位。

        case 3: 客户端没收到ack , 关闭发送FIN,服务端收到FIN 被动关闭。

        case 4: 客户端没收到ack, 服务端关闭发FIN,但不会收到ack,不断重发FIN,2分钟后,发送RST,二端复位。

情况二:此时的服务端没有收到ack,还处于syn_recv。  [客syn_recv 服:syn_recv]

    此时再分case:

        case 1: 客户端超时发送 RST 后进入closed,服务器端收到RST 后到Listen 态。[复原]

        case 2: 客户端发送FIN,但不会收到ack 超时关闭,不断重发FIN,2分钟后,发送RST,服务端收到RST 也复位。

        case 3: 服务端发送FIN,但不会收到ack 超时关闭,不断重发FIN,2分钟后,发送RST,客户端收到RST也复位。



无论何时一个报文段发往基准的连接出现错误,tcp 都会发出一个复位报文段(RST)。收到RST的一方将终止连接,并通知应用层连接复位(recv =0)。












阅读(5586) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:tcp 超时与重传

给主人留下些什么吧!~~