TCP连接为什么要三次握手?最简单明了例子说明

我们直到,TCP是面向连接的,这个连接的过程需要三次握手。这三次握手过程如下:

(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。


(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即 SYN+ACK包,此时服务器B进入SYN_RECV状态。

(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。


那么为什么需要三次握手而不是一次或两次呢?下面举一个简单易懂的例子说明:

小明(浏览器)打算向小红表白(服务端)。他能否成功和小红走到一起呢(浏览器与服务器成功建立连接)?

(1)第一次握手:小明写了表白信发给小红,然后等待小红回复。


(2)第二次握手:小红收到了表白信,接受了,于是她给小明也写了一封表白信。(这个时候小明和小红就成了吗?显然没有,因为小红无法确认小明是否以经收到了自己的信明白自己的心意)。

(3)第三次握手:小明在收到小红的信后再给小红写封信确认自己明白了小红的心意。小红收到这封信后他们才算成了。

  

可以看出,两次握手的不足在于:服务器无法确认浏览器已经知道了自己是可以和浏览器建立连接的。


猜你喜欢

转载自blog.csdn.net/xlantian/article/details/81021711