从失败案例看三次握手的必要性
旧的延迟 SYN 被服务器当作新连接,建立了一个永远不会使用的虚假连接,浪费了服务器的资源(内存、端口、进程等)。
服务器不知道客户端是否成功收到了自己的初始序列号 y。如果网络丢包,客户端不知道服务器从 y 开始计数,导致后续数据传输错乱!
验证:服务器的接收能力
客户端说:"我想和你通信"(发送能力验证)
服务器知道:客户端能发送,我能接收
验证:客户端的接收能力 + 服务器的发送能力
服务器说:"我同意,而且你能收到我"(双向验证)
客户端知道:我能接收,服务器能发送
验证:客户端确认服务器愿意通信
客户端说:"我确认收到,咱俩开始吧"
双方确认:都知道对方准备好了
TCP 设计原则:用最少的次数完成可靠的连接建立
三次是最优解:既能保证可靠性,又不浪费资源