第 15 篇:三次握手:为什么不是两次或四次
上一篇我们讲了端口:IP找主机,端口找进程。今天继续深入TCP,讲一个面试常客、抓包常客、排障也常见的经典问题:三次握手。
一、开场:为什么TCP连接非要握三次?
几乎所有学网络的人,都背过一句话:
TCP建立连接需要三次握手。
然后很快遇到灵魂追问:
为什么不是两次?为什么不是四次?
很多回答会说:
为了保证双方收发能力正常。
这句话对,但只背这句话还是容易糊。到底谁确认了谁的什么能力?SYN和ACK到底在干什么?
先给结论:
三次握手的核心,是让双方确认彼此的发送能力、接收能力,以及初始序列号。
通俗比喻:
三次握手不像两个人见面说“在吗?在”,更像两个人准备合作搬箱子:
- 第一次:“我能说话,你听得到吗?”
- 第二次:“我听得到,你也听得到我吗?”
- 第三次:“听得到,那开始搬。”
TCP很认真——认真到让很多面试题活了几十年。
