思维导图:
前言:
**第3章 数据链路层笔记**
---
**概述**:
- 数据链路层在计算机网络中是较低的层级。
- 主要有两种信道:点对点信道与广播信道。
- 局域网(LAN)位于数据链路层。
---
**1. 信道种类**:
*1.1 点对点信道*:
- 点对点通信方式,即一对一。
*1.2 广播信道*:
- 采用一对多的广播通信。
- 主机数量多,需使用专用共享信道协议。
---
**2. 局域网**:
- 局域网自身是一个网络,但在讨论中不将其置于网络层。
- 网络层关注不同网络间的互连,例如通过路由器从一个网络转发到另一个网络。
- 而本章关注局域网内,如何从一台主机发送到另一台主机,无需通过路由器。
---
**3. 本章内容概览**:
- *3.1* 点对点与广播信道的特点及其协议(PPP和CSMA/CD)。
- *3.2* 数据链路层面对的三大问题:封装成帧、透明传输、差错检测。
- *3.3* 以太网MAC层的硬件地址。
- *3.4* 适配器、转发器、集线器、网桥、以太网交换机的功能及使用情境。
---
**4. 数据链路层的位置**:
- 数据链路层在两台主机间通信中的位置如图3-1所示。
- 通常,当一台主机(例如H₁)要向另一台主机(例如H₂)发送数据时,它必须经过多个路由器。
- 从层面上看,数据流动如图3-1(b)。
- 但当专门研究数据链路层时,我们更关心的是协议栈中的水平方向。
---
**5. 路由器的作用**:
- 路由器在转发数据包时,只使用协议栈的底三层,即物理层、链路层和网络层。
- 数据链路层看起来像是一个水平的流动,如图3-2所示。
- 例如,当H₁向H₂发送数据,它经过R₁, R₂, R₃和H₂,这四段链路可能使用不同的数据链路层协议。
---
**小结**:
数据链路层在网络中起到基础而重要的作用,处理主机到主机的通信以及网络中的错误和流量控制。Understanding其基本组件和功能是深入理解网络操作的关键。
3.1.1 数据链路和帧
**3.1 使用点对点信道的数据链路层**笔记:
**核心概念**:
- **数据链路与链路的区别**:
- **链路(link)**:从一个结点到另一个相邻结点的物理线路(可以是有线或无线)。
- **数据链路(data link)**:不仅仅是物理链路,还包括实现通信协议的硬件和软件。常见的实现方式是使用网络适配器。
- **帧(Frame)**:数据链路层封装网络层数据的协议数据单元。数据链路层的任务是将帧发送到链路并从接收的帧中取出数据。
**3.1.1 数据链路和帧**:
1. **链路与数据链路**:
- 物理链路:实际的物理连接。
- 逻辑链路:物理链路加上通信协议。
2. **早期的数据通信协议**曾称为通信规程,所以在数据链路层,规程和协议是等价的。
3. **帧的作用**:
- 数据链路层将网络层的数据(如IP数据报)封装成帧发送。
- 从接收到的帧中取出数据并交给网络层。
4. **简化模型**:在讨论点对点信道的数据链路层时,可以将模型简化为三层模型(网络层、数据链路层、物理层),并视为结点与结点间的通信。
5. **点对点信道通信主要步骤**:
- 结点A的数据链路层接收来自网络层的IP数据报并将其封装成帧。
- 结点A发送封装好的帧给结点B。
- 结点B检查帧是否有差错:
- 无差错:提取出IP数据报交给网络层。
- 有差错:丢弃该帧。
6. 数据链路层不需要关心物理层的细节。可以简化地理解为数据链路层直接将帧发送给对方。
**结论**:使用点对点信道的数据链路层的核心任务是确保数据帧在两个结点之间正确、有效地传输,这涉及到帧的封装、发送、接收和解封装过程。
3.1.2 三个基本问题
**笔记:3.1.2 三个基本问题**
---
**1. 封装成帧 (Framing)**
- **定义**:是指在数据段的前后分别添加首部和尾部,构成帧。
- **目的**:
- 接收端能根据首部和尾部标记,识别帧的开始与结束。
- 帧定界(确定帧的界限)。
- 首部和尾部也包含必要的控制信息。
- **注意**:
- 所有在互联网中传送的数据都以分组 (IP数据报) 为传送单位。
- 数据链路层的帧长 = 帧的数据部分长度 + 帧首部和帧尾部的长度。
- 每种链路层协议都有其帧数据部分的长度上限——最大传送单元 (MTU)。
**图3-4简析**:表示帧的首部、尾部位置,及数据部分与MTU的关系。
---
**2. 透明传输**
- *未在所给文段中提及,但通常涉及如何确保数据在传输中的完整性,并确保接收方能正确解析数据,即使数据包含与控制字符相同的序列。*
---
**3. 差错检测**
- **目的**:确保数据在传输过程中的完整性和正确性。
- **帧定界符作用**:当发送端出现问题未能发送完整的帧,使用帧定界符能帮助接收端识别并丢弃不完整的帧。
- **例子**:当使用ASCII码进行数据传输时,可以使用特殊的帧定界符如SOH和EOT作为帧的开始和结束标志。
---
我的理解:
### 封装成帧 (Framing)
当我们说到“封装成帧”,其实我们正在讨论的是如何在一串数据中添加开始和结束的标识,以形成一个独立和可识别的数据单元,这个单元我们称之为“帧”。
1. **为什么需要封装成帧?**
在实际的数据通信中,数据通常是以连续的比特流的形式发送的。为了让接收端知道哪些比特属于一个独立的消息单元,我们需要对数据进行分帧。
2. **帧的组成:**
- **首部**:标识帧的开始,通常包含控制信息。
- **数据部分**:这是帧的主要内容,通常包含从网络层传来的数据,例如IP数据报。
- **尾部**:标识帧的结束,有时也包含额外的控制或校验信息。
3. **帧的大小**:
帧的总长是由首部、数据部分和尾部的总和决定的。但要注意,数据部分的大小通常有一个上限,称为MTU (最大传送单元)。超过MTU的数据需要在链路层进行分段。
4. **帧定界**:
通过首部和尾部,接收端可以确定一个帧的开始和结束。这对于准确地提取出帧的数据部分至关重要。
5. **实际应用中的示例**:
在文中提到的使用ASCII的控制字符(例如SOH和EOT)来定界帧,就是一个实际应用中的方法。这些特殊字符标识帧的开始和结束,使得接收端能够轻松地从连续的比特流中区分和提取完整的帧。
简而言之,封装成帧是数据链路层中的一种机制,用于将数据分割成有意义、可识别的单元,以便在通信链路上进行传输和处理。这个机制确保了接收端能够从接收到的连续比特流中准确无误地识别和提取帧。
形象的解释:
想象一下你正在向一个朋友发送一系列的明信片。每张明信片上都写着一条信息。为了确保你的朋友知道每张明信片的开始和结束,你决定在每张明信片的顶部和底部都贴一个彩色的贴纸。
在这个比喻中:
- **明信片**就是**数据**。
- **彩色的贴纸**就是**帧的首部和尾部**。
- 把贴纸放在明信片上的整个过程,就是**封装成帧**。
当你的朋友收到这些明信片时,他可以通过彩色的贴纸清楚地知道每条信息的开始和结束。这样,即使中间的某张明信片遗失或混乱,你的朋友仍然可以识别和阅读其他的明信片,因为每张明信片都有清晰的开始和结束标记。
同样,在数据通信中,为了确保接收端可以准确地识别每一段数据的开始和结束,我们需要将它们“封装”到一个帧中,并使用特殊的标记(如首部和尾部)来标识它们。
2. 透明传输(Transparent Transmission)
- **定义**:透明传输指的是数据链路层能够毫无误差地传送各种比特组合的数据。即数据在传输过程中,“看不见”数据链路层的任何障碍。
- **问题**:由于使用特定的控制字符标记帧的开始和结束(如SOH和EOT),当数据中的8比特组合恰好与这些控制字符相同时,接收端可能误解这些数据为帧的界定,导致传输错误。
- **形象比喻**:透明传输就像一块100%透明的玻璃。虽然它实际存在,但你看不见它,好像它不存在一样。
- **字节填充法(Byte Stuffing)**:为了解决透明传输的问题,当数据中出现与控制字符相同的比特组合时,发送端会在前面插入一个转义字符ESC。接收端在获取数据时则移除这个转义字符,保证数据的正确性。若数据中也存在转义字符,解决办法是再次在其前面插入一个转义字符。
**例子**:
- 原始数据:SOH EOT
- 字节填充后:SOH ESC EOT ESC
---
我的理解:
透明传输 (Transparent Transmission) 的核心概念是允许数据在链路层上“透明地”传输,意味着链路层不会因为数据中出现特定的控制字符而产生问题或误解。我们可以通过以下几个点来更形象地理解这个概念:
1. **无干扰的玻璃窗**:
- 想象一个玻璃窗,如果它是100%透明的,你看向窗外的景色时就仿佛玻璃不存在。这就像透明传输,数据看起来就像直接从发送方传到接收方,中间的数据链路层并不产生任何干扰。
2. **控制字符的挑战**:
- 在数据链路层,特定的字符组合被用作帧的界定符,例如SOH和EOT。问题是,如果所传输的原始数据中恰好包含这些字符,那么接收端可能误解这些字符是帧的开始或结束,导致数据传输错误。
3. **字节填充法的解决方案**:
- 想象你正在写一封信,但某些词语(比如"结束")会被误解为信的结尾。为了避免混淆,每次你写"结束"这个词时,你在前面加上一个特殊的标记,比如"非",变为"非结束"。这样,读信的人就知道这不是真正的结尾。当他读到没有"非"的"结束"时,他就知道信真的结束了。这个例子中的“非”就像转义字符ESC,而“结束”就像控制字符SOH或EOT。这种方式就是字节填充。
4. **透明性的重要性**:
- 在网络传输中,保持透明性至关重要,因为我们不希望数据链路层对原始数据产生任何干扰。原始数据应该保持原样传输到接收端,不受链路层控制字符的影响。
简而言之,透明传输就是让数据安全、准确、不受干扰地从发送方传到接收方,确保数据链路层不因特定字符而产生误解或干扰。
**3. 差错检测**
- **定义与背景**:
- 由于通信链路非理想,比特在传输过程中可能出现差错,例如1可能变成0或0可能变成1,称为比特差错。
- 误码率BER (Bit Error Rate) 表示一段时间内传输错误的比特占总比特的比率。例如,误码率为10^-10 时,平均每传送10^10 个比特会有一个差错。
- 误码率与信噪比关系密切。提高信噪比可以降低误码率。
- 为确保数据传输可靠性,采用各种差错检测措施。
- **循环冗余检验(CRC)原理**:
- 数据划分为k个比特的组。
- 在数据M后加n位冗余码,构成一个帧,总共发送(k+n)位。
- 通过模2运算与预定除数P得到的余数作为冗余码。
- 添加的冗余码称为帧检验序列FCS (Frame Check Sequence)。
- CRC是检错方法,FCS是冗余码。
- **接收端处理**:
- 每一个帧与除数P进行模2除法运算,检查余数。
- 若余数R=0, 表示帧无误;若R≠0, 表示帧有误并丢弃。
- 循环冗余检验和帧检验并不等同。CRC检测方法,FCS是冗余码。
- **多项式表示方法**:
- 用多项式表示循环冗余检验,例如生成多项式P(X)=X³+X²+1对应于除数P=1101。
- 广泛使用的生成多项式:CRC-16, CRC-CCITT, CRC-32。
- **数据链路层处理**:
- 发送端FCS生成和接收端CRC检验通常用硬件完成,不会延误数据传输。
- 数据链路层使用帧进行差错检验,每帧加上冗余码,逐帧传输和检验。
- 数据链路层仅用CRC检测技术,只能确保帧的无差错接受,但不能保证可靠传输。
- 传输差错包括:帧丢失、帧重复、帧失序。
- **实践与现状**:
- 早期OSI模型要求数据链路层提供可靠传输,因此加入了帧编号、确认和重传机制。
- 现代通信线路质量提高,误码率减少。有线链路上,数据链路层不提供可靠传输,由上层协议处理差错。无线链路上,数据链路层使用确认和重传机制,提供可靠传输。
我的理解:
这一节的内容主要介绍了数据通信中的误差检测机制,特别是强调了循环冗余检验 (CRC) 的概念和计算方法。理解这一节的关键点和计算多项式的步骤如下:
## 关键点概念:
1. **比特差错**:在传输过程中,比特可能会发生改变,例如1可能变为0,或者0可能变为1。
2. **误码率 (BER)**:在一段时间内,传输错误的比特占所传输比特总数的比率。
3. **循环冗余检验 (CRC)**:这是一种差错检测技术,用于检测数据是否在传输过程中被更改。
4. **生成多项式 (P(X))**:用于CRC检验的多项式。它与待发送的数据一同参与模2除法,从而得到冗余码。
## 循环冗余检验 (CRC) 计算步骤:
1. **选择一个生成多项式**:例如P(X) = X³ + X² + 1 对应于二进制的1101。
2. **为数据添加冗余位**:如果生成多项式是n+1位长,则在待传输数据的后面加n个0。例如,如果数据M=101001(k=6),生成多项式是1101(n=3),那么你应该用101001000作为你的待除数。
3. **模2除法**:使用生成多项式P对上面的数进行模2除法。
- 模2加法类似于常规加法,但不进位。例如,1111 + 1010 = 0101。
- 当你在除法中减去一个数时,你实际上是在做模2加法。
4. **取余数作为冗余码**:所得余数是n位的,这就是CRC。将这个冗余码添加到原始数据的后面,并发送整个帧。
5. **接收端的检查**:接收端收到数据后,再次用相同的生成多项式进行模2除法。如果余数为0,则数据没有错误;否则,数据可能被更改。
## 技巧:
1. **理解模2运算**:模2加法和减法的关键是不进位。所以,1+1=0,1+0=1,0+0=0。
2. **使用表格**:当执行模2除法时,使用表格方式会更加直观。
3. **多做练习**:CRC的计算是一个技术过程,多做练习可以帮助加深理解。
总之,CRC是一种非常有效的差错检测方法,它基于生成多项式和模2运算。理解其基本概念和步骤,加上一些实践,可以帮助你掌握这种技术。
总结:
数据链路层在点对点信道中扮演着重要的角色。以下是关于点对点信道的数据链路层的重点、难点、易错点和做题技巧的总结:
## 重点:
1. **框架**:数据链路层的主要任务是将原始比特流划分为具有明确边界的帧。
2. **差错检测和纠正**:数据链路层使用技术,如CRC、奇偶校验等,来检测并有时纠正帧中的错误。
3. **流量控制**:确保发送方不会淹没接收方,导致接收方来不及处理接收到的帧。
4. **点对点协议 (PPP)**:这是数据链路层上经常使用的一个协议,用于直接连接两个网络节点。
## 难点:
1. **差错检测与纠正的机制**:理解如CRC、海明码等算法的细节和运作方式可能会有些困难。
2. **滑动窗口协议**:这是一个复杂的流量控制和可靠数据传输协议,需要时间去深入理解。
## 易错点:
1. **计算中的错误**:在手工计算CRC或其他编码时,容易出错。
2. **理解帧边界**:如何确定帧的开始和结束,特别是在发生传输错误时,可能会引起混淆。
3. **滑动窗口的大小设置**:不恰当地设置滑动窗口的大小可能导致效率低下或数据流控制失败。
## 做题技巧:
1. **绘制图表和示意图**:对于滑动窗口、流量控制等概念,图表可以帮助你更好地理解和记忆。
2. **反复练习**:特别是对于计算类问题,如CRC,通过反复练习和检查你的答案,确保你已经完全掌握了它。
3. **注意细节**:数据链路层的许多概念都涉及到细节,如窗口大小、超时等。在做题时,确保你考虑了所有相关的细节。
4. **归纳总结**:定期回顾并总结你所学的内容,以确保你对所有概念都有深入的理解。
总的来说,理解数据链路层的关键概念和原理是至关重要的,但也需要大量的实践和反复练习来巩固知识和技能。