上一篇已经讲到数据链路层可以分为两个子层,这次将重点讲解子层的作用和ppp协议
数据链路层的子层
数据链路层通常被分为两个子层:
- 逻辑链路控制子层(LLC,Logical Link Control):
- LLC子层负责在数据链路层与网络层之间建立逻辑连接。它处理与网络层的交互,提供帧的封装和差错控制。LLC子层使得数据链路层能够支持多种网络协议。
- 介质访问控制子层(MAC,Medium Access Control):
- MAC子层负责控制对物理介质的访问。它通过协议来决定如何在共享的通信媒介上调度数据的发送。MAC子层使用硬件地址(MAC地址)来进行数据帧的目标定位,并解决冲突。
- 典型的MAC协议有:CSMA/CD(以太网)、CSMA/CA(Wi-Fi)等。
我们将主要讲解MAC子层
MAC子层(Media Access Control Sublayer)
MAC子层(介质访问控制子层)是数据链路层的一个重要组成部分,主要负责控制不同设备对共享通信介质(如以太网或无线电波)的访问。MAC子层位于数据链路层的较低部分,在逻辑链路控制(LLC)子层之下,具体负责帧的封装和传输。
MAC子层的主要功能
-
介质访问控制:
- MAC子层决定何时允许设备发送数据,以避免在共享介质上发生数据冲突。常见的访问控制机制包括CSMA/CD(载波侦听多路访问/碰撞检测,用于有线网络)和CSMA/CA(载波侦听多路访问/碰撞避免,用于无线网络)。
-
帧封装与解封装:
- MAC子层将来自LLC子层的数据进行帧封装(添加MAC地址、帧控制信息和校验码),并在接收到数据帧时解封装以传递给上层。
-
地址控制:
- MAC子层使用硬件地址(MAC地址)识别网络设备。每个设备的MAC地址是唯一的,MAC子层使用这些地址确保数据帧能够到达正确的目标设备。
-
错误检测:
- 在数据传输过程中,MAC子层通过帧尾的校验和(如CRC)来检测数据是否被损坏。虽然MAC子层不负责纠正错误,但它可以识别并丢弃损坏的帧,确保只有正确的数据传输给上层。
-
流量控制:
- MAC子层通过流量控制协议避免发送方过多发送数据,以防止接收方超出处理能力。通过流量控制,MAC子层可以有效地避免网络拥塞,确保数据流稳定。
MAC子层的典型协议
- 以太网(Ethernet):
- 使用CSMA/CD协议实现介质访问控制,适用于有线局域网。
- 无线局域网(WLAN):
- 使用CSMA/CA协议,通过“请求发送”(RTS)和“清除发送”(CTS)机制避免无线信道冲突,适用于Wi-Fi网络(如IEEE 802.11)。
- 令牌环网(Token Ring):
- 使用令牌传递机制,每个设备只能在拿到令牌时发送数据,适用于一些工业和大型企业网。
MAC子层的典型数据帧结构
在不同协议中,MAC帧结构可能有所不同,但通常包括以下几个部分:
- 帧头(Header):包含目标和源MAC地址、帧类型、帧控制信息等。
- 数据字段(Data Field):包含要传输的数据,即来自上层的报文。
- 帧尾(Trailer):通常包含校验和(如CRC),用于错误检测。
帧定界(Framing)
帧定界是一种在数据链路层中对数据进行划分的方法。它将从网络层接收到的报文分割成可在物理链路上传输的“帧”。帧定界不仅将数据分隔成可以管理的单元,还通过附加的信息(如头部和尾部)使接收端能识别每个帧的开始和结束。
帧定界的作用
帧定界的主要作用包括:
- 数据分隔:将连续的数据流分隔为一个个独立的帧。
- 错误检测:每个帧可以包含错误检测机制(如CRC校验),以便在数据传输中发现并处理错误。
- 同步通信:在传输过程中,帧定界帮助接收方知道每个帧的开始和结束,从而确保数据准确地分隔开来。
- 流量控制:通过帧定界,接收方可以对帧进行接收确认或请求重传,避免数据丢失或网络拥塞。
常见的帧定界方法
帧定界在数据链路层中常用两种方法:位导向方法和字节导向方法。这两种方法各有特点,适用于不同的协议和传输需求。以下是它们的详细介绍:
1. 位导向方法(Bit-oriented Method)
位导向方法通过特定的位序列来标记帧的开始和结束,适用于不局限于字节边界的数据流。常用的位导向方法有比特填充。
帧结构示例
在HDLC协议中,位导向方法的帧通常包含以下几个部分:
- 比特填充:
- 在帧的开头和结尾使用一个特定的位序列标记帧边界。例如,HDLC(高级数据链路控制协议)使用
01111110
位序列作为帧的开始和结束标记。 - 为了避免数据中的
01111110
被误识别为帧边界,当帧数据中出现五个连续的1
时,自动填充一个0
位,以确保不会出现六个连续的1
。 - 接收方在检测到五个
1
后会自动删除这个填充的0
,从而还原原始数据。
- 在帧的开头和结尾使用一个特定的位序列标记帧边界。例如,HDLC(高级数据链路控制协议)使用
- 标志位(Flag):每个帧以
01111110
开始和结束,指示帧的边界。 - 地址字段(Address):用于标识目标节点的地址。
- 控制字段(Control):包含用于控制流量的指令和帧类型信息。
- 信息字段(Information):即帧的实际数据,长度可以是可变的。
- 校验字段(FCS - Frame Check Sequence):用于检测帧中的错误,常采用CRC(循环冗余校验)技术。
- 结束标志位(Flag):与开始标志位相同,为
01111110
。 - 也可以这样分:
- 起始和结束序列,头部序列(header)包含地址字段和控制字段。主体(body),以及CRC.
- 优点:位导向方法更加灵活,不局限于字节边界,可以支持不同类型的数据。
- 应用:适用于 HDLC 和 PPP(点对点协议)等。
2. 字节导向方法(Character-oriented Method)
字节导向方法通过特定的字节序列来标记帧的开始和结束边界,适用于以字符为单位的数据传输。常见的字节导向方法有字符填充。
-
字符填充:
- 通过特殊字符(如
STX
表示帧开始,ETX
表示帧结束)来标记帧的边界。 - 如果数据中出现了这些特殊字符,则添加转义字符(如
DLE
),以避免误识别。 - 例如,若帧中的内容含有
STX
或ETX
,则在前面加一个DLE
,接收方在遇到DLE
时会跳过这个字符的特殊含义,从而正确解码数据。
- 通过特殊字符(如
-
优点:字节导向方法实现简单,适用于以字节为单位的协议。
-
应用:适用于传统的面向字符的数据链路层协议,如BSC(位同步通信)协议。
字节导向协议(Byte-Oriented Protocol)是一类基于字节的通信协议,通常用于字符数据的传输和通信。它们采用字节(或字符)为单位进行数据划分,并通过特定的控制字符或字节模式来标识消息边界和帧结构。
字节导向协议的主要特点
- 基于字符:每一个数据单元(或帧)由多个字节组成,通过控制字符来定义边界。
- 帧定界:通过在数据流中插入特殊控制字符来标识帧的开始和结束。
- 字符填充:当数据中包含与控制字符相同的字节时,协议会在数据中插入额外的转义字符,以区分真实的控制字符和数据内容。
常见的字节导向协议
-
BISYNC(Binary Synchronous Communication)协议
- IBM开发的早期通信协议,用于在同步环境中进行字符通信。
- 使用控制字符
SYN
(同步字符)、SOH
(起始字符)、ETX
(结束字符)来标识帧边界。 - 数据中出现控制字符时使用转义字符
DLE
(Data Link Escape)来避免冲突。SYN SYN SOH Header STX Body ETX CRC
-
PPP(Point-to-Point Protocol)这个很重要
- 主要用于互联网接入和广域网连接中的链路层协议。
- PPP将数据分为一系列帧,使用标志字段
01111110
(0x7E)来标识帧的开始和结束。 - 如果数据中出现
0x7E
,则使用字节填充(插入一个转义字符)避免干扰。
PPP(Point-to-Point Protocol,点对点协议)是一种链路层协议,通常用于在点对点的链路上建立直接连接,如通过电话线、光纤等实现的广域网(WAN)连接。PPP广泛应用于互联网接入,例如拨号网络、DSL、以及一些移动网络连接。其帧格式设计为简洁可靠,以便支持数据封装和错误检测。
PPP帧格式
PPP帧格式包括以下字段:
字段 | 长度 | 描述 |
---|---|---|
标志字段(Flag) | 1 字节 | 表示帧的开始和结束,值为0x7E 。 |
地址字段(Address) | 1 字节 | 固定为0xFF ,表示广播地址。 |
控制字段(Control) | 1 字节 | 固定为0x03 ,用于指定无编号信息帧。 |
协议字段(Protocol) | 1-2 字节 | 指示封装的数据类型,如IP、LCP等。 |
信息字段(Information) | 变长 | 封装的实际数据,不同于PPP控制信息。 |
FCS字段(Frame Check Sequence) | 2 或 4 字节 | 帧校验序列,用于错误检测。 |
各字段详细说明
-
标志字段(Flag)
- 该字段用于标识PPP帧的开始和结束,采用固定值
0x7E
(01111110
)。 - PPP接收方通过该字段来区分帧的边界,并将每帧独立识别。
- 该字段用于标识PPP帧的开始和结束,采用固定值
-
地址字段(Address)
- 通常固定为
0xFF
,表示广播地址。 - 在PPP协议中,点对点链路不需要具体的设备地址,因为只有两个通信方。
- 通常固定为
-
控制字段(Control)
- 固定值为
0x03
,用于表示无编号的信息帧(Unnumbered Information Frame)。 - 指定PPP不使用数据链路层编号和确认机制。
- 固定值为
-
协议字段(Protocol)
- 该字段指定封装的协议类型(如IP、IPv6、LCP等)。
- 协议字段长度可以是1或2字节,其中常见协议类型包括:
0x0021
:IP协议。0xC021
:链路控制协议(LCP)。0x8021
:网络控制协议(NCP)。
-
信息字段(Information)
- 包含实际的用户数据或控制数据。
- PPP不对信息字段的长度做严格限制,但通常会受到最大传输单元(MTU)约束。
- 若数据部分不足以填满最小帧长度,可以通过填充(padding)方式完成。
-
FCS字段(Frame Check Sequence)
- 用于错误检测,通过循环冗余校验(CRC)算法生成。
- 默认情况下为2字节,也可以配置为4字节,以提供更强的错误检测能力。
FLAG | ADDRESS | CONTROL | PROTOCOL | PAYLOAD | CHECKSUM | FLAG |
不要忘记flag用于标识帧的起始和结束
3.DNP3(Distributed Network Protocol)
- 广泛应用于电力和水资源管理等工业自动化控制系统中。
- DNP3使用
0x0564
作为帧的起始字符,标记帧结构并区分数据和控制信息