TCP三次握手

最近听见许许多多面试官反馈,许多来公司面试的小伙伴连TCP三次握手都不甚理解.为啥我们觉得很平常的东西,仍旧有许多小伙伴不甚理解呢,
觉得可能是技术相关文档太枯燥,导致大家只是记住了,而没有理解,今天我白话的阐述一下,为啥TCP需要三次握手.
我们都知道,TCP要保证可靠的传输,一定需要经过三次握手,那么为什么是三次呢?不是二次呢?或者更多次握手??
在这里我举个例子,应该很简单的就能帮助小伙伴去理解了~

  现实生活中有一个村子,有许许多多的村民,很少来往,有天村民A想去找一个他自己不认识的村民B, 
但是A不认识B人,只知道B的门牌号,于是A根据门牌号找到了B的住址, 这里就是计算器A想和计算B想要
建立连接的第一步,你得知道人家的IP地址.
1. 村名A找到B的地址之后,看见了村民B本人,于是发出了亲切的问候:"雷猴呀",这就相当于计算机A
发出的请求建立连接的请求信息syn=雷猴呀
2. B听见A跟自己打招呼,虽然很困惑,但是还是回复了:"雷猴呀, 你是?",这就相当于计算机B表示收
到了信息,SYN+ACK=(雷猴呀+ 你是)
3. A听见B给了自己回复,就继续说自己找A的原因:"xxxxooo.......",这就相当于计算机A表示收到了信息,ACK=(.....)

至此三次握手完成…
那么很多人疑惑,为啥要三次呢?这里打个比方:村民A和村民B之前并不认识, 不知道对方是不是聋哑人,二个人想要沟通,必须同时能听见和说话,有任何一方是聋哑人,那么沟通都无法进行,也是就是我们说没法进行可靠的沟通,[拒绝任何说打手语或者其他沟通途径]

在1处,村民A发出了亲切的问候,我们可以知道,村民A是有说话的能力的[计算器A发包没有任何问题].
村民B收到A的问候,发出反问候,说明了什么? 说明了村民B不是聋子,同时发出反问候,说明他也不是哑巴,
不然也没法发出反问候[计算机B是可以正常接收到数据包,也可以正常发出数据包],
在2处 对于村民A来说,A现在知道了:村民B可以正常听见我说话,也可以给我反馈, 说明对于村民A来说,
村民B是正常人,完全可以正常沟通.但是,在2处,村民B还不知道村民A能不能听见自己说的话,因为村民A
还没有给自己反馈,所以在这里,二次握手肯定是不可靠的.因为计算机B只是知道计算机A能发数据包,还
不知道计算机A能不能收数据包,这一起还要等到3处才能完成,这时候村民A霹雳巴拉说出自己找村民B的原因,
可以视为村民B知道了A是能说话的,这时候二人可以进行可靠的交流,这就是第三次的握手..

说到这里,小伙伴是不是知道TCP三次握手的原因呢?知其然知其所以然才能更加了解,不然死记硬背是很难长久记忆的