Tcp的状态转移

状态转移略解

本文是在学习网络编程中对Tcp连接状态的知识点总结,并不全面,关于Tcp的三次握手和四次挥手在其他文章也有说明

下图是Tcp的状态转移图

在这里插入图片描述

下面是自己在学习过程中对状态转移的理解

三次握手状态转移

LISTEN代表服务器端的某个套接字处于监听状态
**CLOSED:**客户端和服务器的假定起始状态,在连接关闭或者连接超时进入此状态

**SYN_SENT:**客户端在主动调用connect函数发起三次挥手,客户端在发送SYN之后进入SYN_SENT状态,如果连接超时(没有接收到服务器的SYN和ACK会进入CLOSED状态)三次握手第一次

**SYN_RECV:**服务器在被动进行连接,接收到客户端第一次的SYN之后向客户端发送SYN和ACK进入SYN_RECV状态 三次握手第二次

**ESTABLISH:**建立连接状态分别从客户端和服务器的SYN_SENT和SYN_RECV状态来说

SYN_SENT客户端在接收到服务器的回复的SYN和ACK之后,向服务器发送ACK并且进入ESTABLISH状态 三次握手第三次

SYN_RECV服务器在向客户端发送完SYN和ACK之后,接收到客户端的ACK之后进入ESTABLISH状态

在客户端和服务器同时进入ESTABLISH状态之后,代表Tcp连接建立成功完成了三次握手 成功建立连接

四次挥手状态转移

在断开Tcp连接之后客户端和服务器都可以作为主动断开连接的一方

下面以客户端作为主动关闭的一方进行示例

**FIN_WAIT 1:**客户端在发送完毕FIN之后进入FIN_WAIT1状态 四次挥手第一次

**CLOSE_WAIT:**客户端在接收到第一次挥手的FIN之后发送回复报文之后进入CLOSE_WAIT状态

四次挥手第二次

此时被动断开的一方发送的报文有两种种状态

报文报文含义
ACK服务器作为被动关闭的一方首先回复的应该是确认码ACK,可能因为还有数据没有传输完毕所以先回复ACK等待应用程序关闭回复FIN
ACK+FIN此时服务器作为被动的一方处于闲置并且开启了延时确认机制可以同时回复ACK+FIN

**FIN_WAIT 2:**客户端在收到ACK确认码之后进入FIN_WAIT 2状态 四次挥手第二次,客户端处于FIN_WAIT 2状态接着在收到服务器关闭信息FIN 四次挥手第三次 之后回复ACK确认码进入TIME_WAIT状态 四次挥手第四次

**CLOSING:**客户端在收到FIN报头 四次挥手第二次之后回复ACK确认码 四次挥手第三次 进入CLOSING状态,在客户端收到服务器发送的ACK确认码之后进入TIME_WAIT状态 四次挥手第四次

FIN_WAIT 1—>TIME_WAIT:客户端还处在FIN_WAIT 1状态时,收到的报文里面同时含有FIN和ACK之后回复ACK直接进入TIME_WAIT状态 四次挥手第三次此时就产生了三次挥手也可以关闭连接的情况

以服务器第一次回复ACK第二次回复FIN示例

**LAST_ACK:**服务器在回复ACK确认码之后 四次挥手第二次 进入CLOSE_WAIT状态,服务器剩余信息处理完毕时服务器在CLOSE_WAIT状态发送FIN关闭信息之后 四次挥手第三次 进入LAST_ACK状态 ,服务器处于LAST_ACK状态在接收到客户端发送的ACK确认码之后关闭连接 四次挥手第四次

TIME_WAIT状态的作用
TIMEWAIT状态 (主动关闭的一方会存在TIMEWAIT状态)
1.可靠的终止tcp连接
2.保证迟来的tcp报文段有足够的时间被识别并丢弃

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值