这样理解,你也能在 30 秒内讲明白 TCP 三次握手

7,585 阅读4分钟

前言

某四年经验的同事,去一家包括老板在内总人数只有 13 人的创业团队,面试一份 移动端技术经理 的职位。开始聊得还挺好的,涉及的不外乎何时何地项目上解决了哪些用户痛点、开发过程中遇到过哪些问题、怎么看待和诊断遇到过的问题、有没有业余的开源项目等等。

毕竟四年老手,面试前也有些准备,轻松地就答复了前面这些疑问,只是没想到,面试官最后抛出这样一个问题,把同事给难住了:如何用 30 秒给新手讲明白 TCP 三次握手?

技术经理的职责是解决认知困扰

技术经理不同于刚毕业一两年的工程师,也不能和“主程”同日而语。技术经理的职责是,“为团队成员指明正确的方向、用最小的代价帮助团队快速成长”。

这句话看似难理解,其实归根结底是指,技术经理的首要工作是解决团队成员的认知困扰,包括在遇到研发问题时,能结合 背景知识 轻松定位到问题的实质,以及面对新技术和陌生领域时,能够结合背景知识迅速归类和深入浅出地给新手讲明技术的来由。

你的遭遇,也是共同普遍的遭遇

换言之,如果交待任务时,上司只会“给个眼神你自己体会”,

或是遇到问题时,一言不合就发车、手把手带你怎么做、留下一旁观看的你一脸懵逼,而不是首先使用简练的语言将事情的缘由讲明白、然后引导你、鼓励你自己去完成,那这样的相处势必会让你感到自己很笨很囧。

然而,事情变成这样,并不全是你的错,你每天都要顶着压力、忙着完成搬砖的任务,深度思考的时间自然就少。与此同时,上司若是没能够履行自己的职责,而只是经验上十分娴熟,那他是无法真正帮你拨开迷雾、带你快速成长的。

下面回到最初的那个问题:

如何用 30 秒给新手讲明白 TCP 三次握手?

首先,绝不可能引用某些书籍或某百科的说辞。本来新手就已经足够迷惑了,结果这些“权威”反倒乐此不疲地介绍表象、介绍怎么做,一言不合就 ACK=j+1、SYN+ACK,而绝口不提事情的本质、现象产生的缘由。

总之听不懂都怪新手自己,他们的世界观是完美而母庸质疑的。如果新手因为被蛊惑而被迫盲从,那正是他们想看到的。比起用技术改善生活,他们更热衷于拔高门槛或建立个人宗教。

好在这位同事除了经验娴熟,业余时间还有复盘的习惯,能够抛开“怎么做”的表象,去审视一件事它之所以存在,到底“是什么”、“为什么”。因此,借此机会我们和这位同事一起来审视一下,三次握手的本质到底是什么?引发它这么做的背景又是什么?

三次握手的背景是通信双方“人在家中坐”

如你所知,通信设备之所以存在,是因为有“远距离通信”的需要,否则你就站在我面前,我何须对着你讲电话呢?既然我与通信的另一方有一定的物理距离,并且既然我选择使用通信设施,那我就不可能 亲自护送信息到对方面前,我和对方都需要 原地不动地交由第三方送信使者来帮助我们来回传递信息

因此,在相互寄送真正的信物之前,我们需要首先确认双方收发信件的能力是否正常,否则我寄出信物,路上遭遇车祸,或对方已搬家,那么我们便无法实现彼此的通信。并且前面也说了,“人在家中坐,不可亲自来”,我和对方各自坐在家里,怎么才能知道彼此之间能够正常收发信件呢

正是基于上述的背景,我们的前辈发明了三次握手 —— 用于“确认通信双方收发数据能力”的解决方案。

三次握手的本质是确认通信双方收发数据的能力

首先,我让信使运输一份信件给对方,对方收到了,那么他就知道了我的发件能力和他的收件能力是可以的

于是他给我回信,我若收到了,我便知我的发件能力和他的收件能力是可以的,并且他的发件能力和我的收件能力是可以

然而此时他还不知道他的发件能力和我的收件能力到底可不可以,于是我最后回馈一次,他若收到了,他便清楚了他的发件能力和我的收件能力是可以的

这,就是三次握手。

全文完