tcp中的三次握手与四次挥手

本文详细介绍了TCP协议中的三次握手和四次挥手过程。三次握手确保双方都能正常发送和接收数据,从而建立连接。四次挥手则用于断开连接,确保双方都能接收到对方不再发送数据的确认,最终达到完全关闭连接的状态。
摘要由CSDN通过智能技术生成

三次握手

三次握手是建立连接的过程

图示
请添加图片描述

在建立连接之前: 服务器处于 LISTEN 状态,客户端处于 CLOSED 状态。

第一次握手: 客户端给服务器发送一个同步报文段 SYN,并指定客户端的初始序列号 ISN,此时客户端处于 SYN_SENT 状态。

首部的同步位 SYN=1(SYN只是一个标志位,0表示不是SYN,1表示是SYN),初始序列号 seq=x 。SYN=1 的报文段不能携带任何的数据,但要指定序号。

第二次握手: 服务器接收到来自客户端的同步报文段 SYN 后,会以自己的 SYN 报文作为应答,并且也指定了自己的初始序列号 ISN,同时会把客户端的 seq+1 作为确认序列号 ack 的值,表示自己已经收到了客户端的同步报文段 SYN,此时服务器处于 SYN_RCVD 的状态。

确认报文段中 SYN=1ACK=1(ACK也只是一个标志位,0表示不是ACK,1表示是ACK),初始序列号 seq=y ,确认序列号 ack=x+1

第三次握手: 客户端收到来自服务器的同步报文段 SYN 之后,会发送一个确认报文段 ACK,以服务器的 seq+1 作为 ack 的值 ,表明自己已经收到来自服务器的同步报文段 SYN。客户端进入 ESTABLISHED 状态,服务器确认报文段 ACK 之后,也会进入 ESTABLISHED 状态。

确认报文段中 ACK=1,序列号 seq=x+1,确认序列号 ack=y+1

至此,双方已经建立起连接,可以正常的发送数据。

三次握手为什么是三次?

请添加图片描述

三次握手才能确认双方都准备好了

第一次握手:客户端什么都不能确认,服务器确认了:对方发送正常,自己接收正常

第二次握手:客户端确认了:自己发送正常接收正常,对方发送正常接收正常;服务器确认了:对方发送正常,自己接收正常

第三次握手:客户端确认了:自己发送正常接收正常,对方发送正常接收正常;服务器确认了:对方发送正常接收正常,自己发送正常接收正常。

四次挥手

四次挥手是断开连接的过程

图示
请添加图片描述

客户端和服务器都可以主动关闭连接,只有率先请求关闭的一方才会进入TIME_WAIT状态

在断开连接之前: 客户端和服务器都处于 ESTABLISHED 状态,双方都可以主动断开连接,以客户端主动断开连接为优。

第一次挥手:客户端打算断开连接,向服务器发送 FIN 报文,FIN 报文中会指定一个序列号,之后客户端进入 FIN_WAIT_1 状态。

也就是客户端发出连接释放报文段 FIN=1,指定序列号 seq=u,主动关闭TCP连接,等待服务器的确认。

第二次挥手: 服务器收到 FIN 报文后,就向客户端发送 ACK 应答报文,以客户端的 FIN 报文的序列号 seq+1 作为 ACK 应答报文段的确认序列号 ack=u+1,指定序列号 seq=v

接着服务器进入 CLOSE_WAIT 状态,此时的TCP处于半关闭状态,客户端到服务器的连接释放。客户端收到来自服务器的 ACK 应答报文段后,进入 FIN_WAIT_2 状态。

第三次挥手: 服务器也打算断开连接,向客户端发送 FIN 报文,之后服务器进入 LAST_ACK 状态,等待客户端的确认。

服务器的连接释放报文段中 FIN=1ACK=1,序列号 seq=w,确认序列号 ack=u+1

第四次挥手: 客户端收到来自服务器的 FIN 报文段后,会向服务器发送一个 ACK 应答报文段,以 FIN 报文段的确认序号 ack 作为 ACK 应答报文段的序列号 seq,以FIN报文段的序列号 seq+1作为确认序号ack。

之后客户端进入 TIME_WAIT 状态,服务器收到 ACK 应答报文段后,服务器就进入 CLOSED 状态,至此,服务器的连接已经完成关闭。

客户端处于 TIME_WAIT 状态时,此时的 TCP 还未释放掉,需要等待 2MSL 后,客户端才进入 CLOSED 状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值