tcp中的close_wait和time_wait描述
来源:互联网 发布:细说PHP答案 编辑:程序博客网 时间:2024/06/02 22:05
连接进程是通过一系列状态表示的,这些状态有:LISTEN,SYN-SENT,SYN-RECEIVED,ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT和CLOSED。CLOSED表示没有连接,
各个状态的意义如下: LISTEN - 侦听来自远方TCP端口的连接请求; SYN-SENT -在发送连接请求后等待匹配的连接请求; SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认; ESTABLISHED- 代表一个打开的连接,数据可以传送给用户; FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求; CLOSE-WAIT - 等待从本地用户发来的连接中断请求; CLOSING -等待远程TCP对连接中断的确认; LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认; TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认; CLOSED - 没有任何连接状态;TCP连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS;传送过来的数据段,特别那些包括以下标记的数据段SYN,ACK,RST和FIN;还有超时,上面所说的都会时TCP状态发生变化。
以下为tcp建立连接的三次握手过程和关闭连接的四次握手过程:
1、建立连接协议(三次握手)
(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。
(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
(3) 客户必须再次回应服务段一个ACK报文,这是报文段3。
2、连接终止协议(四次握手)
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个
(1)
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
(4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
CLOSED:
LISTEN:
SYN_RCVD:
SYN_SENT:
ESTABLISHED:这个容易理解了,表示连接已经建立了。
FIN_WAIT_1:
FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
TIME_WAIT:
CLOSING:
CLOSE_WAIT:
LAST_ACK:
备注:
1、
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
2、
这是因为:虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文,并保证于此。
其次允许老的重复分节在网络中消逝,等过了2msl(大约1~4分钟)后TIME_WAIT就会消失。
即:
- tcp中的close_wait和time_wait描述
- TCP/IP中的CLOSE_WAIT和TIME_WAIT
- TCP/IP TIME_WAIT和CLOSE_WAIT
- 简析TCP中的TIME_WAIT与CLOSE_WAIT状态
- TCP 情况下,TIME_WAIT 和 CLOSE_WAIT 状态
- TCP连接状态:CLOSE_WAIT和TIME_WAIT
- TCP的CLOSE_WAIT和TIME_WAIT状态
- TCP连接TIME_WAIT和CLOSE_WAIT状态
- TCP close_wait 与 time_wait
- CLOSE_WAIT和TIME_WAIT
- CLOSE_WAIT和TIME_WAIT
- CLOSE_WAIT和TIME_WAIT处理
- time_wait和close_wait
- TIME_WAIT和CLOSE_WAIT(转)
- time_wait和close_wait
- time_wait和close_wait状态
- 服务器 TIME_WAIT和CLOSE_WAIT
- TIME_WAIT和CLOSE_WAIT
- Windows套接字系列六:带存档的套接字工作原理
- vc中自定义编译时的输出消息
- CCS3.3
- tomcat不能启动
- 完美测试:软件测试系列最佳实践
- tcp中的close_wait和time_wait描述
- 您的设备不支持add-on属性 ——的解决办法
- java的HashCode方法
- 查找某个程序占用的端口
- nginx后的tomcat获取真实用户ip
- php
- Berkeley DB Java Edition
- 惠普面试回来的几句抱怨
- 线程