type
Post
status
Published
date
Oct 12, 2026
slug
tcp2
summary
tags
技术探索
category
手写
icon
password
TCP 三次握手的目的是:确认双方的收发能力、同步初始序列号(ISN),并建立可靠连接。
第一次(SYN):客户端发送 SYN 请求建立连接,并携带初始序列号 x。
第二次(SYN + ACK):服务端确认客户端请求,同时发送自己的 SYN 和初始序列号 y。
第三次(ACK):客户端确认收到服务端的 SYN,服务端收到 ACK 后连接正式建立。
为什么不用 2 次或 4 次?
不能两次,如果少了第三次服务端无法确认客户端是否收到了自己的 SYN,还可能因旧 SYN 报文造成无效连接。
不需要四次,因为服务端可以把 SYN 和 ACK 合并发送,三次已经能完成双方序列号的同步与确认,再增加一次没有必要。
旧 SYN 报文造成无效连接具体是什么情况?
1.客户端发送 SYN,请求建立连接。
2.这个 SYN 在网络中延迟了,客户端超时后又发起了一次新的连接请求,并成功建立连接。
3.之后,之前那个旧 SYN 突然到达服务端。
4.服务端以为客户端又要建立新连接,回复 SYN+ACK,并直接认为连接建立成功。
5.但客户端根本没有发起新的连接,因此服务端白白占用了连接资源。
什么是TCP粘包?
TCP 粘包是指字节流像水流一样没有边界,本质是 TCP 没有消息边界,导致多条消息可能一起收到,或者一条消息分多次收到。通常在应用层添加消息长度字段来解决。
分享
