先说结论:TCP 连接的三次握手,就是「请求-应答-确认」三轮消息的接力,也是代理IP连接建立前要过的第一关。三个名字——SYN、SYN-ACK、ACK——分别代表这三轮,每一轮都有自己不可替代的作用。
这篇把三步的职责逐个拆开,看懂它们,抓包里的代理IP链路握手过程就不再是乱码。
第一步 SYN:发起方说我要连
发起方发出的第一份报文叫 SYN,意思是同步请求。它带着发起方随机选的序列号起点,告诉对方:我想建立连接,我的编号从这儿开始,请回应我。
这份报文只表达意图,不携带任何业务数据。它像敲门声——先让人知道有人来了,具体来干什么,等门开了再说。
第二步 SYN-ACK:接收方说可以连
接收方收到 SYN 后,如果愿意接受连接,就回一份 SYN-ACK。这份报文做了两件事:确认收到对方的请求,同时带上自己的序列号起点,反向提出自己的同步请求。
一步完成两个动作是 TCP 的巧妙之处:接收方既当应答者又当发起者,把两轮信息合并进一份报文,省了一轮往返。
第三步 ACK:发起方说确认收到
发起方收到 SYN-ACK 后,再回一份 ACK,表示确认了对方的序列号起点。到这里,双方的起点都已被对方知道,连接正式建立,可以开始传数据了。
注意第三步之后,双方都不再需要额外确认——握手的成果是「互相知道对方准备好了」,从这个时点起,连接进入传输阶段。
抓包时会看到这三步的报文来来回回正好三次,对应关系一目了然。走代理IP时,这三次会在两段连接上各发生一遍,等于六次动作,但每一段内部依然是标准的三步。
如果把三步压缩成一句话:第一次问「你在吗」,第二次答「我在,你也在吗」,第三次答「我也在」。三轮之后两端都对彼此的状态心里有数,才敢把真正的数据交给网络。
三个名字,一轮问答
记法其实很简单:SYN 是发起方先开口,SYN-ACK 是对方连声应答,ACK 是发起方最后落锤。三个名字连起来就是一轮完整的问答。抓包时第三步 ACK 之后常紧跟第一条业务数据——能发数据说明早已确认完毕,代理IP链路两段皆是如此。
把三次握手和三段报文对照着记,代理IP连接建立的全过程就串起来了:本机发出 SYN 试探转发层,转发层回 SYN-ACK,本机再回 ACK,第一段通;随后转发层如法炮制向目标站走同样的三步。看懂这套动作,链路日志里成对的握手记录就不再难读。
对使用者来说,把握手三步记住还有一个好处:抓包排查时能一眼看出连接卡在哪。只看到 SYN 没有回应,是第一步就断了;看到 SYN-ACK 却没有最后的 ACK,多半是收尾丢了。按代理IP链路的每段三步对照,定位往往就在几秒之间。
三步分别解决三个问题:SYN 问「你在吗」,SYN-ACK 答「我在,你也在吗」,ACK 答「我也在」。三轮问答结束,两端都确认彼此在线且准备就绪。
三步各司其职、缺一不可:少一步,就有一方没确认到对方的状态,连接建立在猜疑上,后面随时可能出问题。
