2、TCP的三次握手与四次挥手

一、TCP的报文格式:
在这里插入图片描述

序号		Seq序号,是发送端对发送数据包的标识
确认号		Ack序号,标识发送端希望接收到的下一个数据包的序号,一般Ack = Seq +1。
标志位		ACK,表示TCP数据包的确认号有效
			SYN,表示该TCP数据包用于发送一个连接请求
			FIN,表示该TCP数据包用于请求断开连接。

二、TCP的状态机:

LISTEN		是服务器端监听请求队列时的服务器的状态机
SYN_SENT	发送完一个连接请求后等待一个匹配的连接请求
SYN_RECEIVE	接收到连接请求并且发送了连接请求后,等待连接请求确认
ESTABLISHED	表示一个打开的连接
FIN_WAIT_1	等待远端TCP的连接终止请求,或等待之前发送的连接终止请求的确认
FIN_WAIT_2	等待远端TCP的连接终止请求
CLOSE_WAIT	等待本地用户的连接终止请求
CLOSING		等待远端TCP的连接终止请求的确认
TIME_WAIT	等待足够的时间以确保远端TCP接收到它的连接终止请求的确认

三、TCP三次握手过程与对应的状态

1、TCP三次握手的过程

第一次,建立连接时,客户端向服务器发送SYN包,并且包的序号为x。此时TCP数据包的标志位为SYN,表示发送
一个连接请求。

在这里插入图片描述

第二次,服务器接收到SYN包,并向服务器发送一个序号为y,确认序号为x+1的确认包。此时TCP数据包中的标志位
ACK和SYN被设置,表示服务器向客户端发送连接请求,同时希望收到客户端的应答包。

在这里插入图片描述

第三次,客户端收到了服务器的确认包(SYN+ACK)后,向服务器再次发送确认包ACK,序号为x+1,确认序号为
y+1。此时TCP数据包的标志位为ACK。

在这里插入图片描述

2、TCP三次握手中的状态机
在这里插入图片描述

分析:
1、建立连接之前,客户端和服务器的状态都为CLOSED
2、服务器创建socket之后开始监听,变为LISTEN
3、客户端向服务器发送连接请求发送SYN报文,客户端的状态为SYN_SENT
4、服务器接收到客户端的连接请求(SYN报文),并向客户端做出应答,发送ACK和SYN报文,此时服务器的状态
为SYN_RCVD
5、客户端收到ACK和SYN数据包,向服务器做出应答发送ACK数据包,客户机的状态变为ESTABLISHED
6、当服务器接收到客户端发送的ACK应答包之后,服务器的状态变为ESTABLISHED,到这里三次握手过程结束。

四、TCP的四次回收过程与状态机

1、TCP的四次挥手过程

第一次挥手,由客户端向服务器发送FIN报文,请求断开连接,序号为x。此时TCP数据包的标志位为FIN。

在这里插入图片描述

第二次,服务器向客户端发送ACK报文,表示收到了客户端发送的断开连接请求的数据包,序号为y,确认序号为x+1。
此时TCP数据包的标志位ACK被设置为1。

在这里插入图片描述

第三次,有服务器向客户端发送FIN包,表示服务器向客户端发送结束请求包,序号为y,确认序号为x+1。
(可以理解为现实生活中的男女朋友分手:当一方提出分手时,另一方也提出分手,表示我TM不能让你甩了我,是
我甩了你。哈哈哈,有利于理解)

在这里插入图片描述

第四次,由客户端向服务器发送ACK报文,表示收到服务器的结束请求包,到这里所有流程走完,服务器与客户端
正式断开连接,TCP数据包的序号为x+1,确认号为y+1.

在这里插入图片描述
2、TCP四次挥手状态机

由于TCP是面向连接的,全双工的,因此断开时会比连接时更加麻烦。
1、客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1
2、服务器收到FIN报文后向客户端发送ACK,服务器的状态变为CLOSE_WAIT1
3、客户端收到ACK后进入FIN_WAIT2,此时连接已经断开了一半。如果服务器还有数据发送给客户端,则会继续
发送;直到服务器向客户端发送完数据之后就会发送FIN报文,此时服务器进入LAST_ACK状态。
4、客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态。再经过一段时间之后进入
CLOSED状态。
5、服务器收到客户端的ACK进入CLOSE,到此TCP的四次挥手过程结束。

注意:
	CLOSING状态表示:客户端发送了FIN,但是没有收到服务器的ACK,却收到了服务器的FIN,这种情况发生在
服务器发送的ACK丢包的时候,因为网络传输过程中也会出现意外。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值