当前位置: 首页 > article >正文

计算机网络(8)数据链路层之子层

上一篇已经讲到数据链路层可以分为两个子层,这次将重点讲解子层的作用和ppp协议

数据链路层的子层

数据链路层通常被分为两个子层:

  1. 逻辑链路控制子层(LLC,Logical Link Control):
    • LLC子层负责在数据链路层与网络层之间建立逻辑连接。它处理与网络层的交互,提供帧的封装和差错控制。LLC子层使得数据链路层能够支持多种网络协议。
  2. 介质访问控制子层(MAC,Medium Access Control):
    • MAC子层负责控制对物理介质的访问。它通过协议来决定如何在共享的通信媒介上调度数据的发送。MAC子层使用硬件地址(MAC地址)来进行数据帧的目标定位,并解决冲突。
    • 典型的MAC协议有:CSMA/CD(以太网)、CSMA/CA(Wi-Fi)等。

我们将主要讲解MAC子层

MAC子层(Media Access Control Sublayer)

MAC子层(介质访问控制子层)是数据链路层的一个重要组成部分,主要负责控制不同设备对共享通信介质(如以太网或无线电波)的访问。MAC子层位于数据链路层的较低部分,在逻辑链路控制(LLC)子层之下,具体负责帧的封装和传输。

MAC子层的主要功能

  1. 介质访问控制

    • MAC子层决定何时允许设备发送数据,以避免在共享介质上发生数据冲突。常见的访问控制机制包括CSMA/CD(载波侦听多路访问/碰撞检测,用于有线网络)和CSMA/CA(载波侦听多路访问/碰撞避免,用于无线网络)。
  2. 帧封装与解封装

    • MAC子层将来自LLC子层的数据进行帧封装(添加MAC地址、帧控制信息和校验码),并在接收到数据帧时解封装以传递给上层。
  3. 地址控制

    • MAC子层使用硬件地址(MAC地址)识别网络设备。每个设备的MAC地址是唯一的,MAC子层使用这些地址确保数据帧能够到达正确的目标设备。
  4. 错误检测

    • 在数据传输过程中,MAC子层通过帧尾的校验和(如CRC)来检测数据是否被损坏。虽然MAC子层不负责纠正错误,但它可以识别并丢弃损坏的帧,确保只有正确的数据传输给上层。
  5. 流量控制

    • MAC子层通过流量控制协议避免发送方过多发送数据,以防止接收方超出处理能力。通过流量控制,MAC子层可以有效地避免网络拥塞,确保数据流稳定。

MAC子层的典型协议

  • 以太网(Ethernet)
    • 使用CSMA/CD协议实现介质访问控制,适用于有线局域网。
  • 无线局域网(WLAN)
    • 使用CSMA/CA协议,通过“请求发送”(RTS)和“清除发送”(CTS)机制避免无线信道冲突,适用于Wi-Fi网络(如IEEE 802.11)。
  • 令牌环网(Token Ring)
    • 使用令牌传递机制,每个设备只能在拿到令牌时发送数据,适用于一些工业和大型企业网。

MAC子层的典型数据帧结构

在不同协议中,MAC帧结构可能有所不同,但通常包括以下几个部分:

  1. 帧头(Header):包含目标和源MAC地址、帧类型、帧控制信息等。
  2. 数据字段(Data Field):包含要传输的数据,即来自上层的报文。
  3. 帧尾(Trailer):通常包含校验和(如CRC),用于错误检测。

帧定界(Framing)

帧定界是一种在数据链路层中对数据进行划分的方法。它将从网络层接收到的报文分割成可在物理链路上传输的“帧”。帧定界不仅将数据分隔成可以管理的单元,还通过附加的信息(如头部和尾部)使接收端能识别每个帧的开始和结束。

帧定界的作用

帧定界的主要作用包括:

  1. 数据分隔:将连续的数据流分隔为一个个独立的帧。
  2. 错误检测:每个帧可以包含错误检测机制(如CRC校验),以便在数据传输中发现并处理错误。
  3. 同步通信:在传输过程中,帧定界帮助接收方知道每个帧的开始和结束,从而确保数据准确地分隔开来。
  4. 流量控制:通过帧定界,接收方可以对帧进行接收确认或请求重传,避免数据丢失或网络拥塞。

常见的帧定界方法

帧定界在数据链路层中常用两种方法:位导向方法字节导向方法。这两种方法各有特点,适用于不同的协议和传输需求。以下是它们的详细介绍:


1. 位导向方法(Bit-oriented Method)

位导向方法通过特定的位序列来标记帧的开始和结束,适用于不局限于字节边界的数据流。常用的位导向方法有比特填充

帧结构示例

在HDLC协议中,位导向方法的帧通常包含以下几个部分:

  • 比特填充
    • 在帧的开头和结尾使用一个特定的位序列标记帧边界。例如,HDLC(高级数据链路控制协议)使用 01111110 位序列作为帧的开始和结束标记。
    • 为了避免数据中的 01111110 被误识别为帧边界,当帧数据中出现五个连续的 1 时,自动填充一个 0 位,以确保不会出现六个连续的 1
    • 接收方在检测到五个 1 后会自动删除这个填充的 0,从而还原原始数据。
  • 标志位(Flag):每个帧以01111110开始和结束,指示帧的边界。
  • 地址字段(Address):用于标识目标节点的地址。
  • 控制字段(Control):包含用于控制流量的指令和帧类型信息。
  • 信息字段(Information):即帧的实际数据,长度可以是可变的。
  • 校验字段(FCS - Frame Check Sequence):用于检测帧中的错误,常采用CRC(循环冗余校验)技术。
  • 结束标志位(Flag):与开始标志位相同,为01111110
  • 也可以这样分:
  • 起始和结束序列,头部序列(header)包含地址字段和控制字段。主体(body),以及CRC.
  • 优点:位导向方法更加灵活,不局限于字节边界,可以支持不同类型的数据。
  • 应用:适用于 HDLC 和 PPP(点对点协议)等。

2. 字节导向方法(Character-oriented Method)

字节导向方法通过特定的字节序列来标记帧的开始和结束边界,适用于以字符为单位的数据传输。常见的字节导向方法有字符填充

  • 字符填充

    • 通过特殊字符(如STX表示帧开始,ETX表示帧结束)来标记帧的边界。
    • 如果数据中出现了这些特殊字符,则添加转义字符(如DLE),以避免误识别。
    • 例如,若帧中的内容含有STXETX,则在前面加一个DLE,接收方在遇到DLE时会跳过这个字符的特殊含义,从而正确解码数据。
  • 优点:字节导向方法实现简单,适用于以字节为单位的协议。

  • 应用:适用于传统的面向字符的数据链路层协议,如BSC(位同步通信)协议。


字节导向协议(Byte-Oriented Protocol)是一类基于字节的通信协议,通常用于字符数据的传输和通信。它们采用字节(或字符)为单位进行数据划分,并通过特定的控制字符或字节模式来标识消息边界和帧结构。

字节导向协议的主要特点

  • 基于字符:每一个数据单元(或帧)由多个字节组成,通过控制字符来定义边界。
  • 帧定界:通过在数据流中插入特殊控制字符来标识帧的开始和结束。
  • 字符填充:当数据中包含与控制字符相同的字节时,协议会在数据中插入额外的转义字符,以区分真实的控制字符和数据内容。

常见的字节导向协议

  1. BISYNC(Binary Synchronous Communication)协议

    • IBM开发的早期通信协议,用于在同步环境中进行字符通信。
    • 使用控制字符SYN(同步字符)、SOH(起始字符)、ETX(结束字符)来标识帧边界。
    • 数据中出现控制字符时使用转义字符DLE(Data Link Escape)来避免冲突。
      SYNSYNSOHHeaderSTXBodyETXCRC

  2. 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 字节帧校验序列,用于错误检测。

各字段详细说明

  1. 标志字段(Flag)

    • 该字段用于标识PPP帧的开始和结束,采用固定值0x7E01111110)。
    • PPP接收方通过该字段来区分帧的边界,并将每帧独立识别。
  2. 地址字段(Address)

    • 通常固定为0xFF,表示广播地址。
    • 在PPP协议中,点对点链路不需要具体的设备地址,因为只有两个通信方。
  3. 控制字段(Control)

    • 固定值为0x03,用于表示无编号的信息帧(Unnumbered Information Frame)。
    • 指定PPP不使用数据链路层编号和确认机制。
  4. 协议字段(Protocol)

    • 该字段指定封装的协议类型(如IP、IPv6、LCP等)。
    • 协议字段长度可以是1或2字节,其中常见协议类型包括:
      • 0x0021:IP协议。
      • 0xC021:链路控制协议(LCP)。
      • 0x8021:网络控制协议(NCP)。
  5. 信息字段(Information)

    • 包含实际的用户数据或控制数据。
    • PPP不对信息字段的长度做严格限制,但通常会受到最大传输单元(MTU)约束。
    • 若数据部分不足以填满最小帧长度,可以通过填充(padding)方式完成。
  6. FCS字段(Frame Check Sequence)

    • 用于错误检测,通过循环冗余校验(CRC)算法生成。
    • 默认情况下为2字节,也可以配置为4字节,以提供更强的错误检测能力。
FLAGADDRESSCONTROLPROTOCOLPAYLOADCHECKSUMFLAG

不要忘记flag用于标识帧的起始和结束

3.DNP3(Distributed Network Protocol)

  • 广泛应用于电力和水资源管理等工业自动化控制系统中。
  • DNP3使用0x0564作为帧的起始字符,标记帧结构并区分数据和控制信息


http://www.kler.cn/a/393467.html

相关文章:

  • LeetCode【0033】搜索旋转排序数组
  • TortoiseSVN提示服务器凭证检核错误:站点名称不符
  • SpringCloud学习笔记
  • linux设置主机名
  • ubuntu20.04安装FLIR灰点相机BFS-PGE-16S2C-CS的ROS驱动
  • 【算法】——二分查找合集
  • 沈阳乐晟睿浩科技有限公司引领新潮流
  • linux提权-RSYNC未授权访问覆盖
  • SQLite Where 子句
  • 【HAProxy08】企业级反向代理HAProxy高级功能之自定义日志格式与IP透传
  • 华为机试笔记
  • LeetCode【0038】外观数列
  • Go 语言已立足主流,编程语言排行榜24 年 11 月
  • 【基于轻量型架构的WEB开发】课程 作业3 Spring框架
  • 前端基础的讲解-JS(10)
  • Scala学习记录,case class,迭代器
  • 如何制作代购系统:从概念到实现
  • 微服务day06
  • 刷算法题(C++)
  • LeetCode【0025】K个一组翻转链表
  • 【工具插件类教学】在 Unity 中使用 iTextSharp 实现 PDF 文件生成与导出
  • Netty实现WebSocket Client三种典型方式
  • 【Springboot】黑马大事件笔记 day1
  • 【go从零单排】HTTP客户端和服务端
  • 群控系统服务端开发模式-应用开发-前端退出功能
  • 丹摩征文活动|FLUX.1 和 ComfyUI:从部署到上手,轻松驾驭!