TCP三次握手四次挥手

TCP连接通过三次握手建立,首先客户端发送SYN报文请求连接,服务端确认并发送SYN+ACK报文,客户端再次确认建立连接。断开连接时,需要四次挥手,客户端发送FIN报文,服务端确认并可能发送剩余数据,然后发送FIN报文,客户端最后确认关闭连接。TIME_WAIT状态等待2MSL是为了确保最后的ACK被接收,防止重复建立连接。
摘要由CSDN通过智能技术生成

TCP三次握手:

 第一次握手:

客户端将TCP报文标志位SYN置为1,随机生成序列号seq为J,发送给服务端,客户端进入SYN _SENT状态,等待服务端确认.

第二次握手:

服务端收到数据后,由SYN=1,知道这是建立连接的请求,服务端将TCP报文的标志位SYN,ACK都置为1,ack=J+1,随机生成序列号seq为K,发送报文给客户端确认连接请求,服务端进入SYN_RECV状态。

第三次握手:

客户端接收数据后,确认ACK是否为1,ack是否为J+1,确认完成将ACK置为1,ack置为K+1,服务端检查ACK是否为1,ack是否为K+1。如果正确则建立连接成功,双方都进入ESTABLISHDE状态,可以传输数据了。

TCP四次挥手

 第一次挥手:

客户端将TCP报文标志位FIN置为1,序列号seq为M(M为前面传输的最后一个字节的序号加1),发送给服务端,客户端进入FIN_WAIT_1状态,此时表示客户端没有数据要发送了.

第二次挥手:

服务端收到数据后,由FIN=1,知道这是断开连接的请求,服务端将TCP报文的标志位ACK都置为1,ack=M+1,服务端处于CLOSE_WAIT状态。这个时候处于半关闭状态即客户端无数据发送,但是服务端有数据发送,客户端依然要接收。客户端收到服务端的确认请求后,处于FIN_WAIT_2状态,等待服务器发送断开连接报文.

第三次挥手:

服务端将TCP报文标志位FIN置为1,ack=M+1,序列号seq为K

,发送给客户端进行关闭连接,服务端进入LAST_ACK状态。

第四次挥手:

客户端收到TCP报文标志FIN=1时,向服务端发送TCP标志位ACK=1的确认报文,此时客户端进入TIME_WAIT状态,服务端收到客户端ACK确认消息之后立即进入CLOSED状态,而客户端此时TCP连接还未释放,需要等到2MSL后还未收到服务端消息则说明服务端已关闭,此时客户端才进入CLOSED状态.

术语说明:

SYN:连接建立时用于同步序号

FIN:用来释放一个连接

ACK:仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效

seq:序列号,占4个字节,用来标记数据段的顺序

ack:确认号,占4个字节,期待收到对方下一个报文段的第一个数据字节的序号

MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间

常见问题:

1.为什么连接的时候是3次握手,断开的时候是4次挥手?

服务端收到关闭之后,可能还需要发送数据到客户端,所有先只能回复客户端的关闭确认,当服务端无数据传输的时候,再发送关闭报文到客户端,所以断开的时候比建立连接时多了一层交互.

2.为什么TIME_WAIT状态之后需要等待2MSL之后才转为CLOSED状态?

因为无法确认最后一个ACK是否丢失,TIME_WAIT状态用来重发丢失的ACK,为什么是等待2MSL,MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,客户端都没有再次收到服务端的重发,那么客户端推断ACK已经被成功接收,则结束TCP连接.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值