首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >计算机网络-TCP3次握手

计算机网络-TCP3次握手

作者头像
运维小路
发布2026-04-02 13:20:15
发布2026-04-02 13:20:15
2060
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

目前几乎所有的应用都会跟网络打交道,所以我们了解和熟悉网络对我们后续的排错是很有必要的,我这里讲解的部分主要是我个人理解来进行讲解。

前面介绍各种协议:TCP,UDP,ICMP,这里最重要或者使用最广泛的协议就是TCP协议,所以我们会重点来介绍他:今天我们就来讲解3次握手。

TCP(传输控制协议)是一种面向连接、可靠、全双工的传输层协议,其连接建立必须通过三次握手(Three-way Handshake)完成。核心目的是确认客户端与服务端双方的发送、接收能力均正常,并同步双方初始序列号(ISN),为后续可靠数据传输奠定基础。类似于我们打电话,需要说喂,你好!,对方也会回应你,然后才开始通话内容。

以下图片来自于网络

image
image

一、前置基础:核心标志位与状态

1. 关键 TCP 标志位

SYN(Synchronize):同步标志位,值为 1 时表示请求建立连接,用于发起握手。

ACK(Acknowledgment):确认标志位,值为 1 时表示确认收到对方报文。

Seq(Sequence Number):序列号,随机生成的初始值,标记发送数据的字节序号,保证数据有序。

Ack(Acknowledgment Number):确认号,值为对方 Seq + 1,表示 “已收到对方数据,期望下一个字节序号”。

2. 初始状态

客户端、服务端初始均为 CLOSED(关闭) 状态,或者说没有建立链接也就是看不到对应的链接的状态。

服务端先创建套接字、绑定端口并监听,进入 LISTEN(监听) 状态,等待客户端连接。

如下图,必须正常监听以后,客户端才能链接进来。

二、三次握手完整流程(图文拆解)

以下图片来自于网络

image
image

第一次握手:客户端 → 服务端(SYN 报文)

报文内容:SYN=1,Seq=x(x 为客户端随机初始序列号,无应用数据)。

客户端动作:主动发送连接请求,状态从 CLOSED → SYN-SENT(同步已发送),等待服务端响应,正常这个状态很短暂,我们无法查看到,除非服务器无响应或者网络不可达。比如下图我向一个不可达的地址发送一个请求,也就是如果我们请求地址不能访问就可以这个方式来判断。

服务端动作:处于 LISTEN 状态,收到 SYN 报文后,确认客户端发送能力正常。

通俗理解:客户端说 “我想和你通信,我能发消息,你能收到吗?”

第二次握手:服务端 → 客户端(SYN+ACK 报文)

报文内容:SYN=1,ACK=1,Seq=y,Ack=x+1(y 为服务端随机初始序列号)。

服务端动作:回应连接请求,同时发起自己的同步请求,状态从 LISTEN → SYN-RCVD(同步已接收),时间很短无法通过命令看到。

客户端动作:收到报文后,确认服务端发送、接收能力均正常。

通俗理解:服务端说 “我收到你的请求了,我也能发消息,你能收到吗?”

第三次握手:客户端 → 服务端(ACK 报文)

报文内容:ACK=1,Seq=x+1,Ack=y+1(无应用数据,可携带数据)。

客户端动作:发送最终确认,状态从 SYN-SENT → ESTABLISHED(连接已建立)。

服务端动作:收到 ACK 报文后,确认客户端接收能力正常,状态从 SYN-RCVD → ESTABLISHED。

通俗理解:客户端说 “我收到你的回应了,我们正式开始通信!”

客户端截图,这里就包含网络通信的5元组。

服务端截图,这里一样有5元组。

当然如果链接中断或者关闭这个状态也会改变,比如上图出现了TIME_WAIT,后续还会讲解他。

三、状态转换总览

阶段

客户端状态

服务端状态

初始

CLOSED

CLOSED → LISTEN

第一次握手后

SYN-SENT

LISTEN

第二次握手后

SYN-SENT

SYN-RCVD

第三次握手后

ESTABLISHED

ESTABLISHED

四、为什么必须是三次?(核心原理)

确保双向通信能力

1 次:仅能确认客户端能发,无法验证接收与服务端能力。

2 次:服务端确认客户端能发,但无法确认客户端能收,可能建立无效连接。

3 次:双方发送、接收能力均被双向验证,满足全双工要求。

防止历史连接干扰

网络延迟可能导致 “旧 SYN 报文” 重复到达。若 2 次握手,服务端收到旧 SYN 就建立连接,会造成资源浪费与错误。

3 次握手中,客户端收到服务端 SYN-ACK 后会校验序列号,拒绝历史连接,保证连接有效性。

同步初始序列号(ISN)

双方随机生成 Seq(x、y),避免数据乱序、重复。通过 Ack 确认,让双方知晓对方起始序号,为数据有序传输做准备。

五、总结

TCP 三次握手是可靠连接建立的核心机制,通过 “请求 - 应答 - 确认” 三步,完成双向能力验证与序列号同步。只有完成三次握手,双方进入 ESTABLISHED 状态,才能开始稳定、有序、可靠地传输 HTTP、FTP 等应用层数据。它是 TCP 可靠性的基础,也是计算机网络与面试中的核心考点。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档