【计算机网络】TCP协议(三次握手、可靠传输、流量控制)

考点频率 :★★★★★(计算机网络必考,选择题每年至少1-2题)

难度 :⭐⭐⭐

建议:重点掌握TCP三次握手的过程与状态变化、可靠传输的机制(序号/确认/重传)、滑动窗口流量控制原理

1️⃣ TCP协议概述

TCP(Transmission Control Protocol,传输控制协议) 是TCP/IP协议族中传输层 的核心协议,提供面向连接、可靠、基于字节流的传输服务。

特点 说明
面向连接 通信前必须先建立连接(三次握手)
可靠传输 通过序号、确认、重传机制保证数据不丢、不重、不乱序
字节流 把应用层数据看作无结构的字节流,不保留消息边界
全双工 双方可以同时发送和接收数据
流量控制 通过滑动窗口防止发送方压垮接收方

打个比方 :TCP就像打电话------先拨号建立连接(三次握手),双方确认能听见,然后你一句我一句地聊,每句话对方都"嗯"一声表示收到(确认),如果对方没听清你可以重说(超时重传),聊完了说"再见"挂断(四次挥手)。

2️⃣ TCP三次握手(核心考点)

2.1 为什么需要三次握手?

三次握手的目的是:同步双方的初始序号(ISN),并确认双方都有发送和接收能力

  • 第一次:客户端告诉服务器"我想连接,我的初始序号是x"
  • 第二次:服务器告诉客户端"我收到了,我的初始序号是y,我同意连接"
  • 第三次:客户端告诉服务器"我收到你的同意了,连接建立"

为什么不是两次? 防止已失效的连接请求突然又传到服务器,导致服务器错误地建立连接、浪费资源。三次握手能确保双方都确认了对方的收发能力。

2.2 三次握手详细过程

步骤 方向 标志位 序号 说明
第1次 客户端 → 服务器 SYN=1 seq=x 客户端请求建立连接,发送自己的初始序号x
第2次 服务器 → 客户端 SYN=1, ACK=1 seq=y, ack=x+1 服务器同意连接,发送自己的初始序号y,并确认收到客户端的x
第3次 客户端 → 服务器 ACK=1 seq=x+1, ack=y+1 客户端确认收到服务器的y,连接正式建立

状态变化

  • 客户端:CLOSED → SYN_SENT → ESTABLISHED
  • 服务器:LISTEN → SYN_RCVD → ESTABLISHED

2.3 三次握手图示

复制代码
客户端                          服务器
  |                               |
  |  SYN=1, seq=x                 |
  |------------------------------>|  (第1次握手)
  |                               |
  |  SYN=1, ACK=1, seq=y, ack=x+1 |
  |<------------------------------|  (第2次握手)
  |                               |
  |  ACK=1, seq=x+1, ack=y+1      |
  |------------------------------>|  (第3次握手)
  |                               |
  |       连接建立完成             |

3️⃣ TCP可靠传输机制

TCP通过以下机制保证数据可靠传输:

3.1 序号与确认

  • 序号(seq):TCP给每个字节都编一个序号,保证数据按序到达
  • 确认号(ack):接收方告诉发送方"我已经收到了序号为ack之前的所有字节",期望下次收到ack开始的数据

例如:接收方收到seq=1,长度=100的数据,则回复ack=101,表示"1~100我都收到了,请发101开始的数据"。

3.2 超时重传

发送方每发送一个报文段就启动一个定时器 。如果在超时时间内没有收到确认,就重传该报文段。

超时时间:通常根据往返时间(RTT)动态调整。

3.3 快速重传

如果发送方连续收到3个重复的ACK(说明某个报文段丢失了),就立即重传丢失的报文段,不必等待超时。

3.4 滑动窗口(可靠传输与流量控制的结合)

发送方维护一个发送窗口 ,窗口内的数据可以连续发送而不必等待确认。接收方通过接收窗口告诉发送方自己还能接收多少数据。

滑动窗口既实现了可靠传输(连续发送、累积确认),又实现了流量控制(根据接收方能力调整发送速度)。

4️⃣ TCP流量控制(滑动窗口机制)

4.1 为什么需要流量控制?

如果发送方发送速度太快,接收方来不及处理,就会导致数据丢失。流量控制就是让发送方根据接收方的处理能力来调整发送速度。

4.2 滑动窗口工作原理

  • 接收方在每次确认时,通过窗口字段(rwnd) 告诉发送方:"我还能接收rwnd字节的数据"
  • 发送方根据rwnd调整自己的发送窗口大小
  • 如果rwnd=0,发送方停止发送,直到接收方发送新的窗口更新

示例

  • 接收方告诉发送方"rwnd=1000",发送方最多发送1000字节未确认数据
  • 发送方发了500字节,收到确认后,窗口右移,可以继续发送
  • 如果接收方缓冲区满了,发送rwnd=0,发送方暂停

4.3 零窗口与坚持定时器

当接收方通告rwnd=0后,发送方停止发送。但为了防止接收方窗口更新丢失导致双方永久等待,发送方启动坚持定时器,定期发送探测报文,询问接收方窗口是否已更新。

5️⃣ TCP拥塞控制(简要)

流量控制是"接收方"对"发送方"的限制,而拥塞控制是"网络"对"发送方"的限制。TCP通过四个算法进行拥塞控制:

算法 作用
慢开始 连接建立初期,拥塞窗口cwnd从1开始指数增长
拥塞避免 cwnd达到慢开始门限ssthresh后,改为线性增长
快重传 收到3个重复ACK立即重传丢失报文
快恢复 快重传后,cwnd减半并进入拥塞避免,而不是回到1

软考中常考:慢开始阶段cwnd按指数增长,拥塞避免阶段按线性增长。

6️⃣ 经典例题

例题1:TCP建立连接时,第二次握手报文的标志位是( )。

A. SYN=1, ACK=0

B. SYN=1, ACK=1

C. SYN=0, ACK=1

D. SYN=0, ACK=0

解析 :第二次握手服务器同时发送SYN和ACK,表示"我同意连接并确认收到你的请求"。选 B


例题2:TCP协议中,接收方通过( )字段告诉发送方自己还能接收多少数据。

A. 序号

B. 确认号

C. 窗口

D. 紧急指针

解析 :TCP头部中的窗口字段 用于流量控制,告诉发送方接收窗口大小。选 C


例题3(判断):TCP三次握手的目的是同步双方的初始序号并确认双方收发能力。( )

解析:正确。三次握手确保双方都确认了对方的发送和接收能力,并交换了初始序号。

7️⃣ 记忆口诀

三次握手:SYN、SYN+ACK、ACK。

可靠传输:序号确认加重传,滑动窗口控流量。

流量控制看rwnd,拥塞控制看cwnd。

慢开始指数涨,拥塞避免线性增。

8️⃣ 小测验(评论区对答案)

TCP客户端发送的第一个报文段中,标志位SYN=1,序号seq=100。服务器回复的报文段中,SYN=1,ACK=1,seq=300,ack=101。则客户端第三次握手发送的报文段中,seq和ack分别是( )。

A. seq=101, ack=301

B. seq=100, ack=300

C. seq=101, ack=300

D. seq=100, ack=301

🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #TCP #三次握手 #可靠传输 #流量控制 #计算机网络 #软考备考

相关推荐
AIGC大时代1 小时前
OpenAI Agents SDK 工程笔记:tool 调用循环、max_turns 与生产禁区
服务器·数据库·笔记·tool·max_turns·functiontool·生产禁区
河北之花1 小时前
计算机三级:路由协议与OSPF
计算机网络
`流年づ1 小时前
人工智能学习笔记 - 自动微分
人工智能·笔记·学习
电梯界知识分子1 小时前
江西抚州临川九尊府五层别墅:受限楼梯间里,全黑铝合金观光井道配曳引龙门架的落地记录
大数据·前端·网络·算法·家用电梯
xiaoye-duck1 小时前
《Linux 网络编程》深入理解 TCP 协议(五):滑动窗口、丢包重传与流量控制详解
linux·网络·tcp
那年窗外下的雪.1 小时前
AIDC 学习日志|第 24 天|设备输出反推与 MAC Flapping 定位
网络协议·学习·tcp/ip·http·macos·tcpdump
Fcy6482 小时前
Linux下 网络计算器小程序(socket封装、协议自定义、业务逻辑解耦)
linux·网络·自定义协议
༄久梦༒长醉༻2 小时前
技术笔记——Git Worktree工作树
笔记·git
雨田言炎2 小时前
STM32之自定义协议帧格式
网络·笔记·stm32·单片机