计算机网络:TCP三次握手

TCP是面向连接的协议,建立连接需要经过三个步骤(即三次握手)

1. 核心流程:三步走

在技术术语中,我们用标志位来描述:

第一次握手 (SYN)

客户端发送一个 SYN 包(SYN=1,seq=x)给服务器。

含义:客户端对服务器说:"你好,我想建立连接,我的初始序列号是x。"

状态:客户端进入 SYN_SENT 状态。

*此时客户端知道:对方能收到我的请求(如果对方回了的话)。*

第二次握手 (SYN + ACK)

服务器收到后,回复一个 SYN+ACK 包(SYN=1,ACK=1,seq=y,ack=x+1)。

含义:服务器对客户端说:"收到你的请求了,确认号为x+1(表示期待你下一个发x+1)。我也想建立连接,我的初始序列号是y。"

状态:服务器进入 SYN_RCVD 状态。

*此时服务器知道:客户端能收到我的回复。但服务器还不知道客户端是否收到了这个回复。*

第三次握手 (ACK)

客户端收到后,再发送一个 ACK 包(ACK=1,seq=x+1,ack=y+1)。

含义:客户端对服务器说:"收到你的确认了,连接建立成功,开始发数据吧。"

状态:双方都进入 ESTABLISHED 状态。

*此时客户端知道:连接通了。服务器收到后也知道:连接通了。*

2. 为什么要三次握手

这是理解这个知识点的关键。
核心原因:防止"失效的连接请求"突然传到服务端,造成资源浪费。

想象一个极端场景:

客户端发了一个连接请求A,但因为网络拥塞,这个包滞留了,没到服务器。

客户端超时重发了请求B,服务器收到了B,建立了连接,数据传输完后关闭了。

这时候,那个滞留的旧请求A突然到了服务器。

如果是两次握手:

服务器收到A,误以为客户端又要连,立刻建立连接,分配资源,一直傻等客户端发数据。但客户端压根不想连,不会理会。这样服务器就白白浪费了资源。

如果是三次握手:

服务器收到A,回复SYN+ACK。客户端收到后发现问题:"欸?我没发新请求啊?这是旧的。" 于是客户端发送一个RST(复位)包拒绝连接,或者不予理睬。服务器收不到第三次握手确认,就不会建立连接。

相关推荐
浮芷.30 分钟前
鸿蒙PC端 TTS 网络连接错误问题详解:在线/离线模式切换与网络状态管理
网络·华为·开源·harmonyos·鸿蒙·鸿蒙系统
雪度娃娃31 分钟前
ASIO异步通信——多线程模型
开发语言·网络·c++·php
luj_176837 分钟前
残熵算法:风险缓冲与效率优化的融合
c语言·开发语言·网络·经验分享·算法
Bobolink_1 小时前
多场次美区拍卖直播,网络资源调度与复用方案
网络·网络优化·网络调度·跨境直播·直播网络
时代文章1 小时前
UCX 官方文档和 InfiniBand 架构知识整理
网络·ai·性能优化
快乐肚皮1 小时前
【无标题】
服务器·网络·tcp/ip
zhangfeng11332 小时前
车载gpu 飞地 只保存密钥 不保存 权重 Orin确实有TEE安全飞地(TSEC/OP-TEE)
服务器·网络·人工智能·安全·transformer·芯片
飞Link3 小时前
【TCP\UDP与可靠传输】UDP 的“简单粗暴”和它真正适用的场景
网络·网络协议·tcp/ip·udp
weixin_520649873 小时前
通信与TCP核心知识
服务器·网络·tcp/ip
liulilittle3 小时前
我从 BBRv1 到 KCC 的思考
网络·c++·tcp/ip·计算机网络·tcp·bbr·通信