TCP三次握手浅谈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chunqiuwei/article/details/88804987

算是个总结笔记,以备不时之需(面试时候能扯上几句)。

客户端:早上好,你吃了吗?
服务端:我吃过了,你呢?
客户端:我也吃了
服务端:那咱们可以一起去打球了(开始发送数据)
于是客户端和服务端开开心心的去打球了(通信ing)
在这里插入图片描述
上面其实就是简单的三次握手环节!

为什么需要三次握手呢?其实这是客户端和服务端相互确认双方发送消息和接收消息的能力是否正常的过程。是的,客户端和服务端都具有两种能力:发数据的能力和接收数据的能力,任何一端的这两种能力跪了一个就不能保证两端的良好通信。

第一次握手: 客户端:早上好,你吃了吗?
此时服务器收到了这条消息,然后服务器就可以确认:客户端的发送数据能力和服务端自己接收数据的能力是正常的
第二次握手: 服务端:我吃过了,你呢?
此时客户端接收到了这条消息,然后客户端就可以确认: 服务端发送数据、接收数据的能力和客户端自己接收数据的能力是正常的
来总结下前两次握手: 从客户端来看:我接收到了服务器发来了“我吃过了,你呢?”这条消息,就可以确认如下论点: 我刚才发的第一条消息服务端已经接收到了,同时给了我一个反馈(“我吃过了,你呢?”)我也收到了,,说明在客户端看来 我自己发送和接收数据能力是正常的,同时服务端的发送和接收数据的能力也是正常的。

但是从服务端来看: 我只接受到了客户端发来的消息,只能确认自己接收数据的能力是正常的,我发送的“我吃过了,你呢”,这条消息是否被客户端接收到了呢?换句话说,服务端并不知道客户端的接收数据的能力以及自己发送数据的能力是否正常

所以,第三次握手: 客户端: 我也吃过了
当服务器收到客户端发的这条确认包之后就可以确认了: 我发送的消息,客户端收到了,我也收到了客户端的确认,即:自己发送数据和接收数据的能力,以及客户端发送数据和接收数据的能力是正常的。

于是乎两端都认为自己和对方的收发数据的能力都正常,就可以愉快的通信了。
然后就可以愉快的通信了,可以用下图来丰富一下:
在这里插入图片描述
其实可以从发送数据的一方考虑,发送数据的一方其实很懵逼,它会想我发送的数据有没有成功发送出去?对方有没有接收到我发的数据呢?无论是客户端和服务器对待发送的数据都有这两方面的考虑,即数据是否发送,对方是否接收到。而三次握手正好能满足这两个问题 。

其实也可以用下列对话为例,说一下三次握手的必要性:
客户端:喂喂,能听到我说话吗?
服务器:喂,我能听到你说话,你能听到我说话吗?
客户端:能,我也能听到你的声音!
然后二者愉快的聊天。。。

这只是简单举例,后面会更进一步说明三次握手的原理,加深下印象
下班走人,未完待续

猜你喜欢

转载自blog.csdn.net/chunqiuwei/article/details/88804987