lesson43-44深入理解 TCP 可靠传输与流量控制:从机制到实战

Lesson 43 TCP 可靠传输机制(★★★★★)

⭐⭐⭐⭐⭐⭐⭐(全书最重点)

考试重要程度:


第一部分:什么叫可靠传输?

举个例子。

假设:

老师发成绩。

应该收到:

markdown 复制代码
A
B
C
D
E

结果:

你收到:

markdown 复制代码
A
B
D
E

少了:

C。

这是不是:

不可靠。

TCP:

绝不允许。

TCP 要保证:

markdown 复制代码
A
B
C
D
E

一个字节:

都不能少。


第二部分:TCP 为什么可靠?

TCP 靠下面几个机制:

markdown 复制代码
TCP可靠传输
│
├── 序号(Sequence Number)
├── 确认应答(ACK)
├── 超时重传
├── 累计确认
└── 校验(了解)

今天:

重点学前四个。


第三部分:序号(Sequence Number)(★★★★★)

这是最重要的概念。

TCP:

发送数据时。

不是:

直接发送:

markdown 复制代码
ABCDE

而是:

给每一段数据:

编号。

例如:

markdown 复制代码
1:A

2:B

3:C

4:D

5:E

这就是:

序号(Sequence Number,简称 Seq)

作用:

标识数据的位置,保证按顺序接收。

⭐⭐⭐⭐⭐


第四部分:确认应答 ACK(★★★★★)

TCP:

每收到一段数据。

都会回复:

markdown 复制代码
ACK

意思:

我收到了。

例如:

发送:

markdown 复制代码
Seq=1

接收方:

回复:

markdown 复制代码
ACK=2

很多同学第一次看到:

为什么:

收到 1。

却回复:

2?

原因:

ACK 表示:

"我下一步希望收到的序号。"

例如:

收到:

markdown 复制代码
1

说明:

1 已经收到。

下一步:

希望收到:

2。

所以:

回复:

markdown 复制代码
ACK=2

⭐⭐⭐⭐⭐

这是考试最喜欢考的地方。


第五部分:举一个完整例子(★★★★★)

发送方:

发送:

markdown 复制代码
Seq=1

接收方:

收到。

回复:

markdown 复制代码
ACK=2

然后:

发送方:

继续:

markdown 复制代码
Seq=2

接收方:

回复:

markdown 复制代码
ACK=3

整个过程:

markdown 复制代码
发送方                  接收方

Seq=1 ------------------>

          <------------- ACK=2

Seq=2 ------------------>

          <------------- ACK=3

是不是:

每收到一个。

ACK 都向后移动一位。


第六部分:如果数据丢了怎么办?(★★★★★)

假设:

发送:

markdown 复制代码
1

2

3

4

结果:

2:

丢了。

接收方:

收到:

markdown 复制代码
1

3

4

TCP:

不会认为:

没关系。

它会发现:

2 没来。

于是:

一直回复:

markdown 复制代码
ACK=2

意思:

我一直在等 2。

发送方:

发现:

一直都是:

ACK=2。

说明:

2:

没有成功到达。

于是:

重新发送:

markdown 复制代码
Seq=2

这就是:

重传。


第七部分:超时重传(★★★★★)

另一种情况。

发送:

markdown 复制代码
Seq=5

结果:

ACK:

一直没有回来。

怎么办?

TCP:

不会:

无限等待。

它会:

等待一段时间。

如果:

超时。

自动:

重新发送。

这就是:

超时重传(Timeout Retransmission)

一句口诀:

等不到 ACK,就重传。

⭐⭐⭐⭐⭐


第八部分:累计确认(★★★★★)

这是考试非常喜欢考的。

例如:

发送:

markdown 复制代码
1

2

3

4

5

接收方:

全部收到。

不一定:

回复:

markdown 复制代码
ACK=2

ACK=3

ACK=4

ACK=5

ACK=6

TCP:

可以:

直接回复:

markdown 复制代码
ACK=6

什么意思?

表示:

markdown 复制代码
1

2

3

4

5

我全部收到了。

下一步:

请发:

6。

这就是:

累计确认。

⭐⭐⭐⭐⭐

考试:

特别喜欢。


第九部分:为什么 TCP 不会乱序?

因为:

有:

Seq。

例如:

收到:

markdown 复制代码
1

3

2

TCP:

知道:

正确顺序:

应该:

markdown 复制代码
1

2

3

于是:

重新排列。

交给:

应用程序。

所以:

用户:

看到:

永远:

正确。


第十部分:TCP 为什么不会重复?

假设:

网络:

重发:

markdown 复制代码
Seq=2

接收方:

发现:

2:

已经收到。

直接:

丢弃。

不会:

交给:

应用程序。

因为:

Seq:

唯一。


第十一部分:本课总结(★★★★★)

markdown 复制代码
TCP可靠传输
│
├── Seq
│      数据编号
│
├── ACK
│      确认收到
│
├── 超时重传
│      ACK不到→重传
│
├── 累计确认
│      ACK一次确认多个
│
└── 保证顺序

第十二部分:可靠传输完整流程(★★★★★)

markdown 复制代码
发送Seq=1

↓

收到ACK=2

↓

发送Seq=2

↓

ACK丢失?

↓

等待超时

↓

重新发送

↓

收到ACK

↓

继续发送

这就是:

TCP:

可靠性的核心。

Lesson 44 流量控制与拥塞控制(★★★★★)

⭐⭐⭐⭐⭐(TCP 收官之战)

考试重要程度:


第一部分:为什么需要流量控制?

先举个例子。

假设:

你(发送方)一分钟能说 1000 个字

你的朋友(接收方)一分钟只能记 200 个字

如果你一直不停地说,会发生什么?

答案:

朋友记不过来,会漏掉内容。

网络中也是一样。

发送方发送得太快,接收方来不及处理,就会导致缓存溢出、丢包。

所以需要:

流量控制(Flow Control)

一句话:

流量控制是为了防止发送方发送过快,使接收方来得及接收。

⭐⭐⭐⭐⭐


第二部分:TCP 如何实现流量控制?

答案:

滑动窗口(Sliding Window)

你在第三章其实已经学过滑动窗口。

现在我们来看 TCP 是怎么使用它的。

假设:

接收方告诉发送方:

markdown 复制代码
我的接收窗口 = 4

意思就是:

你一次最多只能连续发送 4 个数据。

例如:

markdown 复制代码
发送方:

①②③④

发送完以后。

必须等待:

markdown 复制代码
ACK

收到确认。

窗口:

向前滑动。

继续发送:

markdown 复制代码
⑤⑥⑦⑧

这就是:

滑动窗口。


第三部分:什么叫窗口?(★★★★★)

窗口可以理解成:

一次允许发送的数据数量。

例如:

窗口大小:

markdown 复制代码
4

表示:

markdown 复制代码
可以连续发送:

1

2

3

4

收到确认后:

窗口滑动:

markdown 复制代码
5

6

7

8

图示:

markdown 复制代码
初始窗口:

[1][2][3][4] 5 6 7 8

↓

收到 ACK

↓

1 2 3 4 [5][6][7][8]

⭐⭐⭐⭐⭐


第四部分:窗口为什么可以提高速度?

假设:

没有窗口。

发送方式:

markdown 复制代码
发送1

↓

等ACK

↓

发送2

↓

等ACK

↓

发送3

效率非常低。

有窗口以后:

markdown 复制代码
发送1

发送2

发送3

发送4

↓

一起等 ACK

是不是:

快得多?

所以:

滑动窗口既能控制速度,又能提高效率。


第五部分:什么是拥塞?

现在来看另一个问题。

假设:

接收方很快。

但是:

网络中间堵车了。

例如:

markdown 复制代码
电脑A

↓

路由器①(正常)

↓

路由器②(堵了)

↓

服务器

即使服务器处理能力很强。

中间网络堵了。

数据还是会丢失。

这就是:

网络拥塞(Congestion)


第六部分:拥塞控制(★★★★★)

一句话:

拥塞控制是为了防止整个网络过载。

注意:

这里控制的对象不是接收方。

而是:

整个网络。

⭐⭐⭐⭐⭐


第七部分:流量控制 VS 拥塞控制(★★★★★)

这是考试最喜欢出的比较题。

流量控制 拥塞控制
保护接收方 保护整个网络
防止接收方来不及处理 防止网络堵塞
根据接收窗口调整发送速度 根据网络状况调整发送速度

⭐⭐⭐⭐⭐

一句话区分:

  • 流量控制:怕接收方忙不过来。
  • 拥塞控制:怕网络堵车。

这是考试必背!


第八部分:慢开始(了解)

教材通常要求了解。

TCP 建立连接后。

并不会一开始就发送很多数据。

而是:

先发送一点。

例如:

markdown 复制代码
1 个

如果没有问题。

再增加:

markdown 复制代码
2 个

↓

4 个

↓

8 个

逐渐增加。

这叫:

慢开始(Slow Start)

目的:

避免刚开始就把网络压垮。


第九部分:拥塞避免(了解)

如果发送速度越来越快。

TCP 会逐渐放慢增长速度。

避免网络突然拥塞。

这叫:

拥塞避免(Congestion Avoidance)

考试一般知道名称和作用即可。


第十部分:TCP 五大可靠机制总结(★★★★★)

到这里。

TCP 全部可靠机制已经学完。

markdown 复制代码
TCP
│
├── 三次握手
├── 四次挥手
├── 确认应答
├── 超时重传
├── 序号
├── 滑动窗口(流量控制)
└── 拥塞控制

⭐⭐⭐⭐⭐

这张图建议直接背。


第十一部分:第五章整体思维导图(★★★★★)

markdown 复制代码
传输层
                  │
       ┌──────────┴──────────┐
       │                     │
     UDP                    TCP
       │                     │
无连接、不可靠          面向连接、可靠
       │                     │
     首部8B              首部≥20B
                             │
     ┌──────────────┬──────────────┐
     │              │              │
  三次握手       四次挥手      可靠传输
                                     │
                       ┌─────────────┴─────────────┐
                       │                           │
                  流量控制                    拥塞控制
                  (滑动窗口)            (慢开始、拥塞避免)

第十二部分:本课总结(★★★★★)

markdown 复制代码
流量控制
│
├── 防止接收方处理不过来
├── 使用滑动窗口
└── 调整发送速度

拥塞控制
│
├── 防止网络堵塞
├── 慢开始
└── 拥塞避免
相关推荐
ai产品老杨1 小时前
视频分析网络穿透项目实战记录:内网摄像头远程调试与跨网接入手册
网络·音视频
河北之花2 小时前
计算机三级:路由器选型
网络·计算机网络·智能路由器
不可求~2 小时前
调用 GPT、Claude、Gemini API 报错怎么办:一套通用排查清单
网络·chrome·gpt
XR1234567882 小时前
高校AI智算中心网络:RoCE优化与一体化交付怎么选
网络·人工智能
gwf2162 小时前
RDMA迈向400G/800G:超宽带网络的技术挑战与突破 —— 从芯片架构到RTL实现的深度解析
网络·rdma·dpu·高性能网络·800g·智能网卡·rtl验证
2601_965798473 小时前
Evently Theme Setup Guide: Fast Conference, Meetup & Summit Architecture
服务器·网络·数据库
草莓熊Lotso3 小时前
【Redis 初阶】Hash 类型深度解析:结构化数据存储的最优解
linux·网络·数据库·redis·tcp/ip·缓存·哈希算法
caimouse3 小时前
ReactOS 窗口系统分析(31):TextOutW 文本输出全链路 — 从用户函数到显示缓冲区的旅程
网络·人工智能·计算机视觉
无忧.芙桃4 小时前
Linux系统之网络基础概念
网络