Tcp三次握手和四次挥手(乞丐版)

三次握手

  • 为了准确无误地将数据送达目标处,TCP 协议采用了三次握手(three-way handshaking)策略。用 TCP 协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。

  • 握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和ACK(acknowledgement)。发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。

  • 若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。
    在这里插入图片描述

简易过程:

客户端—》发送标有SYN数据包—》一次握手—》服务端
服务端—》发送标有SYN/ACK数据包—》二次握手—》客户端
客户端—》发送标有ACK数据包—》三次握手—》服务端

目的:

三次握手是为了保证双方数据的可靠传输(即客户端和服务器接收与发送都正常)

  • 第一次握手:Client什么也不能确认;Server确认对方发送正常,自己接收正常
  • 第二次握手:Client确认自己发送、接收正常,对方发送、接收正常;Server确认对方发送正常,自己接收正常
  • 第三次握手:Client确认自己发送、接收正常,对方发送、接收正常;Server确认对方发送、接收正常,自己发送、接收正常

四次挥手

图解:

简易过程

  • 客户端—发送一个 FIN,用来关闭客户端到服务器的数据传送
  • 服务器—收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加1。和 SYN 一样,一个 FIN 将占用一个序号
  • 服务器—关闭与客户端的连接,发送一个 FIN 给客户端
  • 客户端—发回 ACK 报文确认,并将确认序号设置为收到序号加1

目的

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

  1. 客户端发送连接释放报文,停止发送数据,进入FIN-WAIT-1(终止等待状态);
  2. 服务器收到连接释放报文,发送确认报文并进入CLOSE-WAIT(关闭等待)状态(此时若服务器发送数据,客户端依旧需要接收)
  3. 客户端收到确认报文后,进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文
  4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,当服务器不再发送数据后,就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  5. 客户端收到服务器的连接释放报文后,必须发出确认报文。此时,客户端就进入了TIME-WAIT(时间等待)状态。
  6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。结束了这次的TCP连接。

引用:https://snailclimb.gitee.io/javaguide/#/network/计算机网络?id=_24k
引用:https://blog.csdn.net/qzcsu/article/details/72861891

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值