形象的理解TCP协议为什么要“三次握手”

       我们先来看看专业的解读是怎么简单描述“三次握手”的。以下图片来自百度百科:

       如果你看完一脸懵圈,不妨想想三次握手的目的?那就是确保客户端和服务器能够正常通讯。当然,本文只是从非专业的角度解释为何TCP建立连接的三次握手就能保证正常通讯,为何不是两次或者四次?至于其中的各种细节,请参考专业书籍(如计算机网络),这里只是对其原理进行更容易理解的阐述,方便不非专业人士了解三次握手的原理,从而进一步深入并专业地学习。接下来,我会用非常“不专业”的描述,让你明白这看似冗杂的“三次握手”。

       首先HTTP网络通信是双向的,也就是说客户端和服务器是双向通信的。我们可以简单的把客户端理解为你本人,服务器端理解为你的追求者(你的对象~)。而你俩要建立正常通讯,有两个前提。1. 你说的话对方能听到,而且你自己知道你说的话对方能听到; 2. 对方的话你也要能听到,而且对方知道Ta的话你听得到。一次模拟的“三次握手”开始了。

        你对你对象说:“我喜欢你!”等待着Ta的回答(这是第一次握手)。相当于客户端发送syn包(同步序列编号Synchronize Sequence Numbers)(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认。假设这条信息成功传达给对方了(这时第一次握手成功完成),Ta也愿意建立通信于是就回答:“听到了!”(第二次握手)。相当于服务器确认客户的SYN(ack=j+1),并向客户端发送(syn=k)。假设你对象回给你的话你也听到了,那么第二次握手就完成了。

        这时候你说的话你对象能听到,而且你确认了这一事实,你对象说话你也能听到。但是还没完,请看我上面说的两点,还差半点“对方并不知道她(他)自己的话你又是否听得到”,因为你没有回复Ta。于是第三次握手开始了,你对Ta说:“我知道你听到了!”,对方也能听到并确认了。(客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手!)。至此,通讯真的可以建立了。因为双方都确认了另一方能收到自己发出的信息。

        这就是理解三次握手的原理!至于Backlog参数,TCP头结构,标志控制,序列标识等内容,你理解上面的描述后也能更好地理解了。

                                                                       

展开阅读全文

没有更多推荐了,返回首页