计算机网络--TCP为什么是三次握手和四次挥手?

本文详细解析了TCP/IP协议中为什么建立连接需要三次握手,以及断开连接为何需要四次挥手的原因。三次握手确保了双方的发送与接收能力正常,防止历史连接请求的错误影响。四次挥手则是因为TCP的全双工特性,需要双方独立确认不再发送数据,确保通信无误地终止。
摘要由CSDN通过智能技术生成

1、为什么是三次握手,而不是两次或者四次?

(1)三次握手

三次握手的简单示意图如下:

第一次握手:客户端发送带有SYN标志的数据包给服务端

第二次握手:服务端发送带有SYN/ACK标志的数据包给客户端

第三次握手:客户端发送带有ACK标志的数据包给服务端

三次握手的目的是建立可靠的通信信道,其中通信简单来说就是数据的发送与接收,而三次握手最主要目的是双方确认自己与对方的发送与接收是正常的。

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

所以三次握手就能确认双发收发功能都正常,缺一不可。另外,ACK报文是用来应答的,SYN报文是用来同步的。接收端传回发送端所发送的SYN是为了告诉发送端,我接收到的信息确实就是你所发送的信号。传了SYN还要传ACK的目的是双方通信无误必须是两者互相发送信息都无误。传了SYN证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要ACK信号来进行验证。

(2)为什么不是两次或者四次?

三次握手的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

如果是两次握手连接,就不能判断当前连接是否是历史连接,三次握手则可以在客户端准备发送第三次报文时,客户端因有足够的上下文来判断当前连接是否是历史连接。

如果是四次握手连接,当然可以,但是没有必要,因此三次及三次以上都可以尽大概率保证,但是三次是尽最大可靠概率的最少次数。

2、为什么是四次挥手,而不是三次?

(1)四次挥手

断开一个TCP连接则需要四次挥手:

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

 (2)为什么要四次挥手

TCP是全双工通信,服务端和客户端都能发送和接收数据。所以TCP在断开连接时,需要服务端和客户端都确定对方不再发送数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

在客户端第1次挥手时,服务端可能还在发送数据,所以第2次挥手和第3次挥手不能合并。

举个例⼦: A B 打电话,通话即将结束后, A 我没啥要说的了 B 回答 我知道了 ,但是 B 可 能还会有要说的话,A 不能要求 B 跟着⾃⼰的节奏结束通话,于是 B 可能⼜巴拉巴拉说了⼀通,最后 B 说 我说完了 A 回答 知道了 ,这样通话才算结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值