【业务知识】TCP连接状态图解析

【读书,基础回顾】TCP连接状态图解析

By rickie

以下是一点笔记


 

  表示客户端在正常情况下的流程

  表示服务端在正常情况下的流程

 注意,这里还有小实线,  它表示在非正常情况下的状态流程.

 

(一), 以client active open 和client active close为例,在正常情况下状态图解读:

首先,服务器调用listen 函数,通过0进入LISTEN状态, 等待客户端接入.

1, 客户端通过connect函数向server发送SYN, 然后进入SYN_SENT状态

2, 这时server收到SYN, 并向client发送ACK, 确认SYN已收到, 并发送SYN给client. Server进入SYN_RCVD状态

3, client收到server发过来的SYN, ACK, 再次确认并向server发送ACK,

4, server收到client的ACK.

通过上面步骤, client, server就完成了TCP连接的3次握手.双方进入ESTABLISHED状态,并开始传送相关数据, 3次握手在client的connect和server的accept函数中完成.

由client发出的数据交换完成后,TCP连接进入下面的阶段

5, client 调用close函数, 这时向server发送FIN, client进入FIN_WAIT_1状态

6, server收到FIN, 并向client发送ACK, 然后进入CLOSE_WAIT状态, 并调用close准备关闭此socket.

 

7. client 收到ACK后,不再发送任何数据,直接进入FIN_WAIT_2状态.( client已不再发送数据,等待server完成数据传输等相关操作, 关于关闭状态请参考shutdown函数).

8, server调用close关闭此次会话的socket,并发送FIN,进入LAST_ACK状态.

9, client收到FIN, 并向server发送ACK确认消息,进入TIME_WAIT状态.

10, server 收到ACK,然后完成此次socket通讯完成.

 

关于TIME_WAIT 2MSL(Max Segment Lifetime, 一般为2 minutes ),在这个期间,client的这个端口不会再被其它的socket所使用.

它表示一个报文在网络中的最大存活时间. TIME_WAIT存在有两个原因:

1) 在第10步server可能丢失ACK,那么server就可能重新发送FIN, 这时client才能再发送ACK以确保最终关闭.保存TCP全双工的稳定性.

2) 因为路由等故障,某个包可能还没有丢失,如果两台机使用同一IP和PORT再一次建立连接的时候,没有丢失的包可能再次被发送到新的连接链路. 为了避免这种情况TIME_WAIT可以保证, 上一个连接的PORT不能被新的连接所用.也就是保存可能延时的包在网络中过期消失.

 

由此可见TCP的连接与关闭至少有8个操作之多,所以长连接或者在网络允许的情况下UDP是多么的重要.

 

11, 表示client同时收到FIN, ACK直接进入TIME_WAIT状态.

 

(二), 小实线 “” 非正常情况下的状态流程解读:

1, 12, 13, 14 表示Simultaneous connection, 即同时建立连接,同时关闭.s

同时连接发生在两个熟知端口的active open连接操作. 详情请参考网址:

http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentProcessTheThreeWayHandsh-4.htm

 

 

由上图看出,同时连接在时序上,只经过了两次握手, 然后就进入ESTABLISHED状态.

同理可以分析simultaneous close.

15, 16, 17, 18 当client or server发生连接超时,或者数据连接接收错误时,就会返回错误并关闭连接.

 

关于RST的理解:

当建立连接时,没有收到ACK或者,接收到错误数据时发送RST,并关闭连接,对方如果有recv将返回-1.

详情请参考下面网址:

http://cs.baylor.edu/~donahoo/practical/CSockets/TCPRST.pdf

http://pages.cpsc.ucalgary.ca/~carey/papers/2005/TCP-Resets.pdf

 

相关分析工具, tcpdump(TCP通讯各种细节), netstat(查看各个连接状态), strace(系统调用) 

估计有不准确的地方,请指出~


本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.csdn.net/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值