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
流量控制
│
├── 防止接收方处理不过来
├── 使用滑动窗口
└── 调整发送速度
拥塞控制
│
├── 防止网络堵塞
├── 慢开始
└── 拥塞避免