为什么要三次握手🤝???

563 阅读2分钟

三次握手是网络七层模型中传输层TCP协议中的一个概念。 TCP协议为了能够实现可靠的字节流服务(把数据准确可靠的发送给对方)采用了三次握手(three-way handshaking)策略。

三次握手图解

三次握手图解
图注:SYN(synchronize)同步 ACK(acknowledgement)确认

图片引用自《图解HTTP》 侵删


第一次握手: 发送方发送一个带有SYN标志的数据包给对方。(发出请求)

第二次握手: 接收方收到后,回复一个带有SYN/ACK标志的数据包。(确认收到,并发起请求)

第三次握手: 发送方收到后,再回复一个带有ACK标志的数据包。(确认收到)

以上为三次握手的概念,相信大家都已经或多或少了解或者很熟悉了。但是为什么需要三次,不是二次或者四次?

因为三次握手就能够让通信双方知道自己和对方的收取和发送没有问题。

解释

第一次握手:通过第一次握手接收方能够知道发送方的发送数据和自己的接收数据没有问题。

第二次握手:通过第二次握手发送方能够知道自己的发送数据和接收数据没有问题(因为收到了接收方的ACKh/SYN包)以及接收方的发送数据没有问题。

第三次握手:通过第三次握手接收方能够知道自己的发送数据和发送方的接收数据没有问题。至此,双方都知道自己和对方的发送和接收数据都没有问题了,就可以建立连接进行通信了。


两次握手

先说下两次握手的流程:

第一次:A向B发出请求,B收到请求。

第二次:B向A发出请求,不管A接没接到或者A是否挂了。就开始建立连接。开始向A发送数据了。

第一次A发出请求后,因为某些原因,B很久才收到,期间A由于超时又发出了很多次请求,直到最后挂了,B接收到A的请求后,认为A要和自己建立连接,就发出了确认(第二次)。这时新的连接建立了,B开始发送数据了,此时A是什么样的状况B完全不知道(不理睬B的确认或者已经挂了)。B就白白浪费了好多资源。所以两次握手肯定不行。

最后,既然三次握手就行了,干嘛浪费资源一直在相互确认是连接是否可以建立。所以,没必要进行四次甚至更多次握手。

这篇文章算是自己的读书笔记吧,理解有错误的话,还希望指出,会快速纠正!!!


参考:《图解HTTP》、《趣谈网络协议》