第三章 Lesson 19 数据链路层的作用(★★★★★)
考试重要程度:
⭐⭐⭐⭐⭐
- 选择题:★★★★★
- 填空题:★★★★☆
- 简答题:★★★★★
第一部分:为什么还要有数据链路层?
很多同学学到这里都会问:
第二章不是已经能传数据了吗?
答案:
不能。
第二章只能做到:
markdown
电脑A
│
电信号
│
电脑B
也就是说:
物理层只负责把 0 和 1 送出去。
它根本不知道:
- 数据是谁发的?
- 发给谁?
- 有没有出错?
- 一次发送多少?
这些事情:
物理层完全不管。
举个现实例子
假设:
你想寄快递。
如果只有物理层。
就相当于:
markdown
把快递扔到高速公路上。
能不能到?
不知道。
因为:
没有:
- 地址
- 包装
- 收件人
是不是很危险?
所以:
必须:
先包装。
写地址。
再发。
网络:
也是一样。
第二部分:数据链路层到底干什么?
一句话:
负责相邻两个节点之间的数据可靠传输。
★★★★★
这是教材原话。
一定要背。
例如:
markdown
电脑A
│
交换机
│
电脑B
注意。
这里:
数据链路层:
只负责一跳。
例如:
markdown
电脑A
↓
交换机
或者:
markdown
交换机
↓
电脑B
它:
不负责整个互联网。
这一点以后学习网络层时非常重要。
第三部分:什么叫"一跳"?
这是第三章最重要的概念。
例如:
北京快递:
寄到广州。
路线:
markdown
北京
↓
天津
↓
济南
↓
南京
↓
广州
是不是:
经过很多站?
数据:
也是一样。
例如:
markdown
电脑A
↓
交换机①
↓
交换机②
↓
路由器
↓
服务器
数据链路层:
每次:
只负责:
一段。
例如:
markdown
电脑A
↓
交换机①
完成后。
下一段:
重新开始。
所以:
一句口诀:
数据链路层负责一跳,网络层负责全程。
★★★★★★★★★★
这是第三章和第四章最容易混淆的地方。
第四部分:数据链路层主要完成哪些工作?
教材一般总结为三个核心任务。
markdown
数据链路层
├── 封装成帧
├── 差错检测
└── 流量控制
这三个,就是第三章的主线。
我们后面每节课都围绕它展开。
① 封装成帧
例如:
应用层给你:
markdown
Hello
不能直接发。
必须:
包装。
变成:
markdown
┌────┬────────┬────┐
│头部│ 数据 │尾部│
└────┴────────┴────┘
这个:
就叫:
帧(Frame)
下一课专门讲。
② 差错检测
第二章:
学过:
CRC。
第三章:
继续:
放到帧里面。
例如:
markdown
头
数据
CRC
发送。
接收端:
检查。
有没有错误。
③ 流量控制
什么意思?
举例。
假设:
你:
一分钟:
能读:
100字。
老师:
一分钟:
讲:
10000字。
怎么办?
是不是:
根本来不及?
网络:
也是一样。
发送方:
太快。
接收方:
处理不了。
于是:
需要:
流量控制。
后面:
滑动窗口。
就是:
解决这个问题。
第五部分:为什么叫"链路层"?
很多学生:
觉得:
名字奇怪。
其实:
很好理解。
例如:
markdown
电脑A ======= 交换机
这一段:
就是:
一条:
链路(Link)
数据链路层:
就是:
管理:
这一条链路。
所以:
叫:
数据链路层。
第六部分:数据链路层和物理层有什么区别?
这是考试超级高频。
| 物理层 | 数据链路层 |
|---|---|
| 传输比特流 | 传输帧 |
| 不关心地址 | 有地址(MAC) |
| 不关心错误 | 检测错误 |
| 不关心控制 | 流量控制 |
★★★★★
一定会比较。
第七部分:本章你将学什么?
整个第三章,其实就是围绕一张图展开。
markdown
数据
↓
封装成帧
↓
加入MAC地址
↓
加入CRC
↓
发送
↓
交换机转发
↓
接收
↓
CRC检查
↓
拆帧
看到没有?
后面的每一节课,其实都是这张图中的一个步骤。
本课总结
一定记住下面这棵知识树:
markdown
数据链路层
│
├── 作用
│ └── 相邻节点可靠传输
│
├── 核心任务
│ ├── 封装成帧
│ ├── 差错检测
│ └── 流量控制
│
└── 服务对象
└── 一跳(Hop)
第三章 Lesson 20 封装成帧(★★★★★)
考试重要程度:
⭐⭐⭐⭐⭐
第一部分:什么是帧(Frame)?
先不要看定义。
我们先举一个生活中的例子。
假设:
你要寄一本书。
如果直接这样寄:
markdown
计算机网络教程
快递员知道:
不知道。
所以必须包装。
例如:
markdown
寄件人:张三
收件人:李四
内容:计算机网络教程
是不是信息完整了?
网络中的数据也是一样。
应用层交给数据链路层的只是:
markdown
Hello
不能直接发送。
必须包装。
于是变成:
markdown
┌────┬────────┬────┐
│头部│ 数据 │尾部│
└────┴────────┴────┘
这个整体:
就叫:
帧(Frame)
第二部分:什么叫封装成帧?
一句话:
给数据加上头部和尾部。
教材定义:
数据链路层在数据前后分别添加控制信息,形成帧。
★★★★★
这是考试喜欢考的定义。
来看变化过程。
应用层:
markdown
Hello
↓
数据链路层:
markdown
头部 + Hello + 尾部
↓
形成:
markdown
Frame
是不是很简单?
第三部分:为什么要加头和尾?
很多同学都会问:
为什么不能直接发送数据?
原因有三个。
原因一:告诉别人发给谁
例如:
快递:
必须有地址。
网络:
也是。
头部:
以后会放:
markdown
MAC地址
例如:
markdown
发送方:
00-11-22
接收方:
AA-BB-CC
交换机:
就是:
看这个地址。
决定:
往哪转发。
原因二:判断哪里开始哪里结束
假设:
连续发送:
markdown
HelloWorldPythonJava
接收端:
怎么看?
不知道。
于是:
加:
开始。
结束。
例如:
markdown
<Hello>
<World>
<Python>
<Java>
是不是:
立刻:
分开了?
这就是:
帧边界。
原因三:检查有没有出错
尾部:
以后会放:
markdown
CRC
例如:
markdown
┌────┬────────┬────┐
│头部│ 数据 │ CRC│
└────┴────────┴────┘
收到后:
计算CRC。
一致。
说明:
没错。
第四部分:帧的一般格式(★★★★★)
考试经常画图。
记住:
markdown
┌────────┬────────────┬────────┐
│ 首部 │ 数据(Data) │ 尾部 │
└────────┴────────────┴────────┘
以后:
不同协议:
首部内容:
不同。
尾部内容:
不同。
但是:
都有头部和数据。
很多协议还会有尾部。
第五部分:帧定界(★★★★★)
这是考试重点。
什么叫:
帧定界?
一句话:
告诉接收方,一帧从哪里开始,到哪里结束。
例如:
火车。
每节车厢:
都有:
连接处。
网络:
也是。
例如:
markdown
FLAG
数据
FLAG
FLAG:
就是:
标志。
例如:
markdown
01111110
★★★★★
PPP协议:
就是:
这个。
下一课:
详细讲。
第六部分:透明传输(★★★★★)
这是第三章最容易考的名词。
也是很多学生第一次看不懂的。
我们慢慢来。
假设:
FLAG:
规定:
markdown
01111110
但是:
你的数据:
刚好也是:
markdown
01111110
怎么办?
接收端:
会不会误认为:
数据结束了?
当然会。
例如:
markdown
FLAG
111
01111110
222
FLAG
接收端:
看到:
中间那个:
01111110
就会误认为:
结束了。
是不是:
出错了?
怎么办?
答案:
字节填充(字符填充)或比特填充。
也叫:
透明传输。
一句话:
让数据中出现的特殊标志不会被误认为帧边界。
第七部分:比特填充(★★★★★)
这是教材重点。
规则:
连续出现5个1,就自动插入一个0。
★★★★★
一定要记。
例如:
原始数据:
markdown
01111110
发送前:
变成:
markdown
011111010
注意:
连续5个1后:
插入:
一个:
0。
接收端:
看到:
5个1后面的0。
就知道:
这是:
填进去的。
于是:
删掉。
恢复:
原数据。
口诀:
五个1,插个0。
★★★★★
第八部分:为什么叫"透明"?
因为:
对于用户来说:
数据:
没有改变。
用户:
发送:
markdown
Hello
收到:
还是:
markdown
Hello
至于:
中间:
插没插0。
用户:
不知道。
所以:
叫:
透明。
第九部分:本课知识串起来
整个过程:
markdown
应用层数据
↓
Hello
↓
数据链路层
↓
加首部
↓
加尾部
↓
形成帧
↓
比特填充
↓
发送
↓
接收
↓
是不是整个流程已经很清楚了?
第十部分:本课总结
markdown
封装成帧
│
├── 首部
│
├── 数据
│
└── 尾部
│
└── CRC
封装成帧的作用:
- 标识一帧的开始和结束;
- 携带控制信息(如地址);
- 便于进行差错检测。
第十二部分:与后续课程的联系
从今天开始,你要把后面的知识都放进这个框架里理解:
markdown
┌────────────────────────────────────┐
│ 首部 │ 数据 │ CRC │
└────────────────────────────────────┘
后面我们学的内容其实都是在回答这些问题:
- Lesson 21(CRC) :CRC 放在哪里?怎么检查?
- Lesson 22(PPP) :PPP 帧长什么样?
- Lesson 24(MAC 地址) :MAC 地址放在首部哪里?
- Lesson 25(以太网) :以太网帧格式是什么?
- Lesson 27(交换机) :交换机为什么只看帧首部就能转发?
所以, 帧就是第三章的主角 。
第三章 Lesson 21 CRC(数据链路层中的应用)
第一部分:回顾一下CRC
上一章我们学过:
CRC:
循环冗余校验(Cyclic Redundancy Check)
它的作用:
检测数据有没有发生错误。
注意:
CRC只能检错。
不能:
自动纠错。
★★★★★
考试:
经常考。
第二部分:CRC为什么属于数据链路层?
很多同学:
第一次都会疑惑。
上一章:
CRC不是:
物理层吗?
其实:
不是。
准确来说:
CRC:
是一种检错技术。
物理层介绍了:
它是什么。
数据链路层:
真正:
使用它。
例如:
发送:
markdown
Hello
数据链路层:
先:
封装成帧。
markdown
┌──────┬────────┬──────┐
│ 首部 │ Hello │ CRC │
└──────┴────────┴──────┘
注意。
CRC:
放在:
尾部。
这里:
有一个专门名字。
叫:
FCS(Frame Check Sequence,帧校验序列)
★★★★★
考试:
很喜欢考。
第三部分:什么是FCS?
一句话。
FCS就是帧尾部保存的CRC校验值。
很多教材:
直接画:
markdown
┌────────┬──────────┬────────┐
│ 首部 │ 数据 │ FCS │
└────────┴──────────┴────────┘
注意。
以后:
看到:
FCS。
马上想到:
CRC校验码。
★★★★★
第四部分:发送端如何工作?
这是考试最喜欢画流程图。
一步一步来看。
第一步:
应用层:
给数据。
markdown
Hello
第二步:
数据链路层:
计算CRC。
例如:
算出来:
markdown
1011
(这里是假设。)
第三步:
放到帧尾。
变成:
markdown
┌──────┬────────┬──────┐
│ 首部 │ Hello │1011 │
└──────┴────────┴──────┘
然后:
发送。
一句话:
发送端负责计算CRC,并把结果放到FCS。
★★★★★
第五部分:接收端如何工作?
收到:
markdown
┌──────┬────────┬──────┐
│ 首部 │ Hello │1011 │
└──────┴────────┴──────┘
第一步。
重新:
计算CRC。
假设:
也是:
markdown
1011
第二步。
比较。
markdown
收到:
1011
计算:
1011
一致。
说明:
没有错误。
交给:
上层。
如果:
计算出来:
markdown
1000
而收到:
markdown
1011
不同。
说明:
出错。
直接:
丢弃。
★★★★★
注意。
很多教材:
都是:
直接丢弃。
不是:
修改。
不是:
自动恢复。
第六部分:为什么CRC不能纠错?
举例。
老师:
批改试卷。
看到:
第五题:
错。
知道:
错了。
但是:
不知道:
正确答案。
CRC:
也是。
它:
只能说:
有错。
不能说:
错在哪里。
更不能:
改回来。
所以:
需要:
重发。
第七部分:为什么把CRC放尾部?
很多学生:
都会问。
为什么:
不是:
放前面?
其实:
很好理解。
CRC:
必须:
根据:
整个数据:
计算。
例如:
数据:
markdown
10110010
CRC:
是:
根据:
这一串:
算出来。
所以:
必须:
最后:
才能放进去。
是不是:
很合理?
第八部分:整个发送过程(★★★★★)
一定会画。
markdown
应用层数据
↓
数据链路层
↓
封装成帧
↓
计算CRC
↓
加入FCS
↓
发送
接收:
markdown
收到帧
↓
重新计算CRC
↓
比较FCS
↓
正确?
↓
是
↓
交给网络层
↓
否
↓
丢弃
★★★★★
这张流程图:
考试:
经常画。
第九部分:CRC和ARQ的关系
上一章:
我们:
学过:
ARQ。
自动重传请求。
现在:
终于:
联系起来。
例如:
CRC:
发现:
错误。
数据链路层:
丢弃。
然后:
由上层协议(如PPP、TCP等)决定是否请求重传。
所以:
很多教材:
写:
markdown
CRC
↓
发现错误
↓
重传
不要理解成:
CRC:
自己:
重传。
CRC:
只是:
发现。
★★★★★
第十部分:本课总结(★★★★★)
markdown
CRC(循环冗余校验)
│
▼
发送端计算CRC
│
▼
放入FCS(帧尾)
│
▼
发送帧
│
▼
接收端重新计算
│
▼
与FCS比较
│
┌────┴────┐
│ │
一致 不一致
│ │
接收 丢弃
第十二部分:考试必背
一定记住这四句话:
✅ CRC 是 检错技术 。
✅ FCS 位于 帧尾部 。
✅ 接收端会 重新计算 CRC 并与 FCS 比较 。
✅ CRC 不能纠错 ,发现错误后通常 丢弃该帧 ,后续是否重传由相应协议决定。
第三章 Lesson 22 PPP协议(★★★★★)
第一部分:为什么需要 PPP?
先举个生活中的例子。
假设:
只有两台电脑。
markdown
电脑A ───────── 电脑B
它们之间:
只有一根线。
是不是:
特别简单?
那:
需要交换机吗?
不用。
需要路由器吗?
不用。
只需要:
让这两台电脑:
正常通信。
于是:
就有了:
PPP(Point-to-Point Protocol)
中文:
点对点协议。
★★★★★
考试:
经常考全称。
第二部分:什么叫点对点?
就是:
一条链路:
只有:
两个节点。
例如:
markdown
电脑A ─────── 电脑B
或者:
markdown
路由器A ─────── 路由器B
注意。
没有:
第三个人。
所以:
PPP:
只适用于:
点对点通信。
PPP 不适用于什么?
例如:
局域网。
markdown
A
│
B ──交换机── C
│
D
这里:
很多设备。
不是:
点对点。
PPP:
不能用。
以后:
会用:
以太网协议。
第三部分:PPP 的特点(★★★★★)
教材总结四个特点。
我们一个一个理解。
① 简单
PPP:
没有:
复杂的寻址。
因为:
只有:
两台设备。
例如:
打电话。
只有:
你。
和:
对方。
不需要:
问:
"你是谁?"
线路:
已经固定。
② 提供差错检测
PPP:
使用:
什么?
答案:
CRC。
★★★★★
是不是:
和上一课:
连起来了?
PPP:
发送:
markdown
帧
↓
CRC
↓
FCS
↓
发送
③ 不提供纠错
注意。
PPP:
发现:
错误。
怎么办?
答案:
直接:
丢弃。
不负责:
重发。
★★★★★
考试:
特别喜欢。
④ 支持多种网络层协议
什么意思?
PPP:
不仅:
可以传:
IP。
还可以:
传:
其他协议。
所以:
兼容性:
很好。
了解即可。
第四部分:PPP 帧格式(★★★★★)
终于来了。
教材:
就是:
这一张图。
先别怕。
我们慢慢拆。
markdown
+------+------+----------+------+------+
|Flag |地址 | 控制 | 数据 | FCS | Flag |
+------+------+----------+------+------+
是不是:
很多东西?
其实:
考试:
重点:
只有几个。
第一部分:Flag
也叫:
标志字段。
值:
固定:
markdown
01111110
★★★★★
这是:
考试:
必考。
作用:
告诉:
接收端:
markdown
这里开始
这里结束
例如:
markdown
01111110
数据
01111110
是不是:
边界:
非常清楚?
第二部分:Address(地址)
很多学生:
会问。
PPP:
不是:
只有:
两台机器?
为什么:
还有地址?
其实:
PPP:
地址字段:
固定:
markdown
11111111
★★★★★
不用记二进制含义,只要记住:
PPP 地址字段固定值。
教材考试一般考:
PPP 地址字段是否真正用于寻址?
答案:
不是。
因为:
只有两台设备。
第三部分:Control(控制)
控制字段:
固定:
markdown
00000011
也是:
固定值。
考试:
知道:
存在即可。
第四部分:Data(数据)
这里:
才是真正的数据。
例如:
markdown
Hello
或者:
IP数据包。
第五部分:FCS
是不是:
上一课:
学过?
这里:
就是:
CRC校验值。
放在:
尾部。
第五部分:PPP 帧完整结构(★★★★★)
一定会画。
markdown
┌────┬────┬────┬────────┬────┬────┐
│Flag│Addr│Ctrl│ Data │FCS │Flag│
└────┴────┴────┴────────┴────┴────┘
考试:
可能:
让你:
填空。
第六部分:为什么 Flag 会冲突?
假设:
规定:
Flag:
markdown
01111110
但是:
数据:
刚好:
也是:
markdown
01111110
例如:
markdown
Flag
数据
Flag
01111110
01111110
01111110
接收端:
还能分清吗?
不能。
怎么办?
答案:
比特填充。
是不是:
上一课:
学过?
终于:
串起来了。
第七部分:PPP 比特填充(★★★★★)
规则:
★★★★★
连续出现5个1,就自动插入1个0。
例如:
数据:
markdown
01111110
发送:
变成:
markdown
011111010
接收:
删除:
那个:
0。
恢复。
原数据。
口诀:
五个1,插个0。
第八部分:PPP 工作流程
来看整个过程。
markdown
应用层数据
↓
网络层数据包(IP数据报)
↓
PPP封装
↓
加入Flag
↓
加入FCS
↓
比特填充
↓
发送
↓
接收
↓
去填充
↓
是不是:
整个过程:
已经非常完整?
第九部分:PPP 为什么应用广?
以前:
家庭宽带:
拨号上网。
ADSL。
很多:
都是:
PPP。
后来:
又出现:
PPPoE。
(PPP over Ethernet)
就是:
PPP:
跑在:
以太网上。
考试:
了解即可。
第十部分:PPP 总结(★★★★★)
markdown
PPP协议
│
├── 点对点协议
│
├── Flag = 01111110
│
├── CRC(FCS)
│
├── 比特填充
│ └── 五个1插个0
│
└── 差错检测,不负责纠错
加粗样式
第三章 Lesson 23 滑动窗口协议(★★★★★)
考试重要程度:
⭐⭐⭐⭐⭐
第一部分:为什么需要滑动窗口?
先举个例子。
假设:
老师发试卷。
有100张。
老师有两种发法。
第一种:一张一张发
markdown
老师 → 第1张
学生:
收到。
↓
老师:
发第2张。
↓
学生:
收到。
↓
老师:
发第3张......
有没有问题?
当然有。
效率太低。
因为:
老师一直在等。
网络也是一样。
假设:
电脑A发送数据。
markdown
A
↓
发送1
↓
等待
↓
收到确认
↓
发送2
↓
等待......
这样:
线路大部分时间都在等待。
速度非常慢。
所以:
科学家想出了一个办法。
一次发送很多个数据。
例如:
markdown
1
2
3
4
一起发。
是不是快很多?
这就是:
滑动窗口。
第二部分:什么是滑动窗口?
一句话:
允许发送方连续发送多个数据,而不用每发送一个就等待确认。
★★★★★
这是考试最喜欢考的定义。
例如:
窗口大小:
4。
那么:
发送方:
可以:
markdown
①
②
③
④
连续发送。
不用等。
第三部分:窗口是什么?
很多学生:
第一次听:
窗口。
其实:
它不是:
电脑里的窗口。
而是:
一个:
允许发送的数据范围。
例如:
窗口大小:
4。
可以发送:
markdown
1
2
3
4
不能发送:
markdown
5
因为:
5:
还没进入窗口。
可以画成:
markdown
序号:
1 2 3 4 5 6 7 8
窗口:
[1 2 3 4]
★★★★★
第四部分:什么叫"滑动"?
这是最重要的地方。
假设:
发送:
markdown
1
2
3
4
接收方:
确认:
markdown
ACK1
说明:
1:
已经收到。
于是:
窗口:
向前移动。
变成:
markdown
2 3 4 5
是不是:
像滑过去一样?
所以:
叫:
滑动窗口。
动画理解:
开始:
markdown
[1 2 3 4] 5 6 7 8
收到1确认:
markdown
1 [2 3 4 5] 6 7 8
收到2确认:
markdown
1 2 [3 4 5 6] 7 8
★★★★★
这张图:
考试:
经常画。
第五部分:ACK(确认)
什么叫:
ACK?
英文:
Acknowledgement(确认)
意思:
我收到了。
例如:
电脑A:
发送:
markdown
数据1
电脑B:
收到。
回复:
markdown
ACK1
意思:
第1个数据已经收到。
第六部分:为什么效率提高?
我们比较一下。
停止等待协议
markdown
发送
↓
等待
↓
确认
↓
发送
↓
等待
效率:
低。
滑动窗口
markdown
1234
一起发
↓
收到确认
↓
5678
继续发
是不是:
一直:
都有数据:
在线路上?
所以:
效率:
高很多。
第七部分:窗口大小(★★★★★)
考试:
喜欢问。
例如:
窗口:
大小:
4。
表示:
什么?
答案:
最多可以连续发送4个未确认的数据。
★★★★★
注意:
这里说的是:
未确认。
不是:
发送总数。
例如:
窗口:
4。
发送:
markdown
1
2
3
4
还没收到确认。
不能发送:
markdown
5
必须:
等:
至少一个ACK。
第八部分:举一个完整例子
窗口:
4。
开始:
markdown
窗口:
[1 2 3 4]
发送:
markdown
1
2
3
4
收到:
ACK1。
窗口:
变:
markdown
[2 3 4 5]
发送:
markdown
5
收到:
ACK2。
窗口:
变:
markdown
[3 4 5 6]
发送:
markdown
6
整个过程:
一直:
滑动。
第九部分:累计确认(★★★★★)
这一点:
很多学校:
会考。
例如:
收到:
markdown
1
2
3
接收方:
回复:
markdown
ACK4
什么意思?
不是:
收到4。
而是:
1、2、3都已经收到,下一次请发送4。
★★★★★
一定不要理解错。
第十部分:滑动窗口的作用
总结:
三个。
markdown
提高线路利用率
提高发送效率
实现流量控制
★★★★★
全部:
考试:
高频。
第十一部分:停止等待 VS 滑动窗口
| 停止等待 | 滑动窗口 |
|---|---|
| 一次发1个 | 一次发多个 |
| 效率低 | 效率高 |
| 简单 | 稍复杂 |
第十二部分:本课总结(★★★★★)
markdown
滑动窗口
│
├── 连续发送多个数据
│
├── ACK确认
│
├── 窗口不断前移
│
├── 提高效率
│
└── 实现流量控制