TCP/IP状态变迁
来源:互联网 发布:国际象棋在线对弈软件 编辑:程序博客网 时间:2024/05/29 09:13
看过《TCP/IP详解:卷1》的同学都会对下图印象深刻:
图1 TCP状态变迁图
咋一看这图,让人头大。下面会详细分析图中的所有状态,这些状态跟TCP三次握手与四次挥手有着非常密切的联系,关于这个可以参看前面拙文。
CLOSED:表示初始状态。对服务端和C客户端双方都一样。
LISTEN:表示监听状态。服务端调用了listen函数,可以开始accept连接了。
SYN_SENT:表示客户端已经发送了SYN报文。当客户端调用connect函数发起连接时,首先发SYN给服务端,然后自己进入SYN_SENT状态,并等待服务端发送ACK+SYN。
SYN_RCVD:表示服务端收到客户端发送SYN报文。服务端收到这个报文后,进入SYN_RCVD状态,然后发送ACK+SYN给客户端。
ESTABLISHED:表示连接已经建立成功了。服务端发送完ACK+SYN后进入该状态,客户端收到ACK后也进入该状态。
FIN_WAIT_1:表示主动关闭连接。无论哪方调用close函数发送FIN报文都会进入这个这个状态。
FIN_WAIT_2:表示被动关闭方同意关闭连接。主动关闭连接方收到被动关闭方返回的ACK后,会进入该状态。
TIME_WAIT:表示收到对方的FIN报文并发送了ACK报文,就等2MSL后即可回到CLOSED状态了。如果FIN_WAIT_1状态下,收到对方同时带FIN标志和ACK标志的报文时,可以直接进入TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING:表示双方同时关闭连接。如果双方几乎同时调用close函数,那么会出现双方同时发送FIN报文的情况,此时就会出现CLOSING状态,表示双方都在关闭连接。
CLOSE_WAIT:表示被动关闭方等待关闭。当收到对方调用close函数发送的FIN报文时,回应对方ACK报文,此时进入CLOSE_WAIT状态。
LAST_ACK:表示被动关闭方发送FIN报文后,等待对方的ACK报文状态,当收到ACK后进入CLOSED状态。
特别提示的是:为什么TIME_WAIT状态还需要等待2MSL才能回到CLOSED状态?或者为什么TCP要引入TIME_WAIT状态?
《TCP/IP详解》中如此解释:当TCP执行一个主动关闭,并发回最后一个ACK后,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL,这样可以让TCP再次发送最后的ACK以防止这个ACK丢失(另一端超时重发最后的FIN)。
附注:MSL(Maximum Segment Lifetime)即最大生存时间,RFC 793中指出MSL为2分钟,但是实现中的常用值为30秒、1分钟或者2分钟。
0 0
- tcp/ip状态变迁
- TCP/IP状态变迁
- TCP/IP状态变迁图
- TCP/IP链路状态变迁过程
- TCP/IP连接状态变迁图CLOSE_WAIT
- TCP/IP 11种状态变迁
- TCP/IP连接状态变迁图CLOSE_WAIT
- TCP-IP详解:TCP的状态变迁图
- TCP/IP 三次握手及状态变迁图
- TCP/IP详解--连接状态变迁图CLOSE_WAIT
- TCP/IP详解--连接状态变迁图CLOSE_WAIT
- 唯快不破:TCP/IP详解--连接状态变迁图CLOSE_WAIT
- T/TCP状态变迁
- TCP状态变迁
- TCP状态变迁图
- 重温TCP状态变迁
- TCP的状态变迁
- tcp状态变迁图
- iOS 去顶部导航栏下黑线
- R中生成多维正态分布的样本
- java(JDBC连接数据库)[完整版封装]
- 【随行笔记】与网络编程有关
- 高并发系统设计之开放平台API接口调用频率控制系统
- TCP/IP状态变迁
- linux使用vi编辑修改文件内容的基本方法
- template
- 3.决策树Decision Tree
- A - Accurately Say "CocaCola"! --- (first qualifying)
- [HDU 2191]悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
- 【数据库】查询语句
- Android实战之 万能的接口回调
- UVA 127 ``Accordian'' Patience