【计算机网络】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 #三次握手 #可靠传输 #流量控制 #计算机网络 #软考备考

相关推荐
hz5678911 小时前
企业视频会议系统方案:总部与分支机构高效协同如何落地?
运维·服务器·网络·安全·实时音视频·信息与通信
深圳老胡11 小时前
STM32CubeMX 2 与 STM32CubeMX 的主要区别
笔记·stm32·单片机·代码规范
三垣网安11 小时前
漏洞实战|高校虚拟实验平台报错型 SQL 注入漏洞复现
网络·经验分享·sql·安全·web安全·网络安全·水平越权
dog25012 小时前
从 Kelly-NUM 到时延感知 AIMD 拥塞控制算法
网络
网络小江12 小时前
组网第27课:ARP 的能与不能——免费 ARP、代理 ARP 与 ARP 欺骗
服务器·网络·网络安全·负载均衡·免费arp
FY@-@12 小时前
VMware ESXi 7.0 实验全记录:嵌套安装 → 网络配置 → 存储 → Windows 10 虚拟机部署
运维·网络·windows·云计算
叼烟扛炮12 小时前
Linux 学习笔记(十三):高效排错利器——GDB 调试器入门
linux·笔记·学习
ynchyong12 小时前
IPv4 时代的地址冲突检测
网络·ipv4·冲突检测·免费arp·无敌apr·announcemnet
ONLYOFFICE12 小时前
ONLYOFFICE 10.0:深入了解最新的 40 项安全修复
网络·安全
上海云盾-高防顾问13 小时前
边缘验签是什么
运维·服务器·网络