TCP三次握手·解释
缘由:最近面试被恶心到了,老是问三次握手。对方连具体的握手未必理解,就瞎几把问。
1. 目的
三次握手的原因是双方确认相互通信正常的过程,确认双方的**“听”“说”**能力。比如我微信打语音给我爸,我要确认他能不能听到我的话,才能继续说,要不都白说了。
2. 方式
三次通话确认,第一次我叫他一声“爸”,第二次“嗯,我听到”,第三次我说“好”。
3. 详解
从双方的角度来看这三次对话,第一次说完,我还不知道我爸能不能听到,所以他要回复我;第二次说完,我爸还不知道我能听到,所以我要最后一次回复我爸。
第一次说话(我说)
- 我:我说话了。(说明我的说话能力正常,有点废话)
- 我爸:听到了我叫他。(我爸知道我能说话了,他要回答我听到了,我才知道他听到了)
第二次(我爸说)
- 我爸:确认他听到了。(说明我爸的说话能力正常,他也可以是没听到,那就没必要继续了)
- 我:听到我爸说话了。(1、我知道我爸能听到,2、我能听到我爸说话此时,我爸还不知道我能听到他说话)
第三次(我说)
- 我爸:知道了我能听到。
4. 标识
双方在确认对方的对话包中,会使用确认码。比如我说SEQ(15),我爸回复ASK(15+1),加一个1对方就知道了。具体机制请参考包头,每个字节位置都有对应含义。