最近在学习网络方面的知识,突然想到了这个经典的问题。同时这也是个面试网络相关岗位的热门面试问题,从这个问题就可以知道你对网络协议的理解程度咋样。优快云上有很多大佬都对这个问题做出了深刻的理解,我从一个小白出发,帮助大伙稍微理解一下这个问题。
首先我们先来回顾一下TCP是哪三次握手,下面放一张图最简单的示意图给大伙看看。
ok,我相信上过《计算机网络》这门课的同胞们都对这个协议有比较完备的理解,老师肯定也问过:”大家想一想TCP为啥是三次握手而不是两次或者是四次?”反正对我而言我们老师当时解释过的原理因为太”官方“,太难理解,我早就忘得一干二净了。后来的时候我在学H3C的时候又遇到这个问题,第二次遇到这个问题,我有了自己更简单的理解。
给大伙讲个段子:
ok!这是一个完美的结局,我们的TCP连接就像这次的爱情一样的完美!但是各位想想如果是两次握手会发生什么情况?
各位看懂没有。如果小明是个只会玩弄别人感情的渣男,如果只有两次握手的话,小美就永远不会知道小明的本性!
扯回到我们要聊的三次握手上面来,各位对这个”三“应该有了更清新脱俗的理解了吧!要是没有第三次握手,小美就不知道小明收到消息没,一直会追问小明,不知道小明是否收到了消息。所以两次握手是不具备可靠性的,他只能确认客户端的发送能力,并不能知道接受能力是否是好的。
总结
所以我觉得为什么是三次,主要是有两个最主要的原理!
- 确认客户端和服务端的发送和接收能力正常
- 避免资源浪费
- 至于为什么不是4次,因为三次是能建立可靠连接的最少握手次数,你当然可以说4次,你也可以说的更多,100次,10000次…没有意义。因为我们追求的是最少次数就可以建立最稳定的连接。
突发奇想写的一些东西,感觉内容不是很完善,其中也有不准确和要补充的地方,欢迎各位大佬补充和指正。0v0