计算机网络(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.xdnf.cn/news/14667.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【操作系统】输入/输出(I/O)管理

王道笔记 一、I/O管理描述 1.1 I/O设备的概念和分类 1.1.1 什么是I/O设备 “I/O”就是“输入/输出”(Input/Output) I/O设备机会可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。下图就…

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III309.买卖股票的最佳时机含冷冻期

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III&&309.买卖股票的最佳时机含冷冻期 动态规划应该如何学习?-CSDN博客 本次题解参考自灵神的做法,大家也多多支持灵神的题解 买卖股票的最佳时机【…

Koa进阶:掌握中间件和参数校验的艺术

目录 一、首先下载依赖 二、在index.js中引入koa-parameter,一般挂载这个中间件时会放在注册请求体的后面 三、使用实例 四、如果跟我们所需求的参数不同,返回结果直接会返回422 koa-parameter一般是用来校验请求传过来的参数是否是自己所需要的的 G…

opencv(c++)----图像的读取以及显示

opencv(c)----图像的读取以及显示 imread: 作用:读取图像文件并将其加载到 Mat 对象中。参数: 第一个参数是文件路径,可以是相对路径或绝对路径。第二个参数是读取标志,比如 IMREAD_COLOR 表示以彩色模式读取图像。 返回值&#x…

git config是做什么的?

git config是做什么的? git config作用配置级别三种配置级别的介绍及使用,配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级? 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…

【计算机网络】【传输层】【习题】

计算机网络-传输层-习题 文章目录 10. 图 5-29 给出了 TCP 连接建立的三次握手与连接释放的四次握手过程。根据 TCP 协议的工作原理,请填写图 5-29 中 ①~⑧ 位置的序号值。答案技巧 注:本文基于《计算机网络》(第5版)吴功宜、吴英…

【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路

文章目录 计算布尔二叉树的值求根节点到叶节点的数字之和二叉树剪枝验证二叉搜索树二叉搜索树中第K小的元素二叉树的所有路径 计算布尔二叉树的值 解题思路: 这是一个二叉树的布尔评估问题。树的每个节点包含一个值,其中叶子节点值为 0 或 1&#xff0…

2023年MathorCup数学建模A题量子计算机在信用评分卡组合优化中的应用解题全过程文档加程序

2023年第十三届MathorCup高校数学建模挑战赛 A题 量子计算机在信用评分卡组合优化中的应用 原题再现: 在银行信用卡或相关的贷款等业务中,对客户授信之前,需要先通过各种审核规则对客户的信用等级进行评定,通过评定后的客户才能…

嵌入式开发套件(golang版本)

1. watchdog(软件看门狗:守护升级) 2. gate(主程序) 3. web(api版本 升级包) OTA 升级流程 watchdog启动后检查守护进程gate是否正在运行,如果没有,api对比版本号&am…

解压专家 2.4.12| 多功能解压缩工具,支持密码共享、音乐播放和歌词匹配。

解压专家是一款功能强大的解压缩软件,提供了类似于WIFI万能钥匙的密码分享功能,帮助用户快速获取共享的解压密码。作为专业的解压缩工具,它支持多种常见和不常见的压缩包格式,如ZIP、RAR、7z、TAR.GZ和ISO等,并且还支持…

并发编程(10)——内存模型和原子操作

文章目录 十、day101. 内存模型基础1.1 对象和内存区域1.2 改动序列 2. 原子操作及其类型2.1 原子操作2.2 原子类型2.3 内存次序2.4 std::atomic_flag2.4.1 自旋锁 2.5 std::atomic&#xff1c;bool&#xff1e;2.6 std::atomic<T*>2.7 标准整数原子类型2.8 std::atomic&…

【Flink】-- flink新版本发布:v2.0-preview1

目录 1、简介 2、非兼容变更 2.1、API 2.2、连接器适配计划 2.3、配置 2.4、其它 3、重要新特性 3.1、存算分离状态管理 3.2、物化表 3.3、批作业的自适应执行 3.4、流式湖仓 4、附加 4.1、非兼容性的 api 程序变更 4.1.2、Removed Classes # 4.1.3、Modified Cl…

ffmpeg+D3D实现的MFC音视频播放器,支持录像、截图、音视频播放、码流信息显示等功能

一、简介 本播放器是在vs2019下开发&#xff0c;通过ffmpeg实现拉流解码功能&#xff0c;通过D3D实现视频的渲染功能。截图功能采用libjpeg实现&#xff0c;可以截取jpg图片&#xff0c;图片的默认保存路径是在C:\MYRecPath中。录像功能采用封装好的类Mp4Record实现&#xff0c…

webpack指南

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;webpack篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来webpack篇专栏内容:webpack-指南 概念 中文&#xff1a; webpack | webpack中文文档 | webpack中文网 英文&…

把越南语翻译成中文一般用什么翻译工具?《越南语翻译通》App或许能满足你的技术痛点需求!

在多语言交流日益频繁的今天&#xff0c;掌握越南语对于商务、旅游或学术交流都是一项重要技能。《越南语翻译通》App应运而生&#xff0c;旨在通过技术手段简化越南语学习和翻译过程&#xff0c;满足用户在不同场景下的需求。 核心技术 《越南语翻译通》App采用了先进的自然语…

Android Framework AMS(16)进程管理

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读AMS 进程方面的知识。关注思维导图中左上侧部分即可。 我们本章节主要是对Android进程管理相关知识有一个基本的了解。先来了解下L…

Rust Struct 属性初始化

结构体是用户定义的数据类型&#xff0c;其中包含定义特定实例的字段。结构有助于实现更容易理解的抽象概念。本文介绍几种初始化结构体对象的方法&#xff0c;包括常规方法、Default特征、第三方包实现以及构建器模式。 Struct声明与初始化 struct Employee {id: i32,name: …

Vue全栈开发旅游网项目(10)-用户管理后端接口开发

1.异步用户登录\登出接口开发 1.设计公共响应数据类型 文件地址&#xff1a;utils/response404.py from django.http import JsonResponseclass BadRequestJsonResponse(JsonResponse):status_code 400def __init__(self, err_list, *args, **kwargs):data {"error_c…

数据结构:队列

目录 概念与结构底层结构的选择队列的实现队列头文件&#xff08;queue.h&#xff09;队列初始化队列的销毁入队列检查队列是否为空出队列查询队列第一个数据查询队列末尾数据查询队列有效数据个数代码试运行 概念与结构 概念&#xff1a;只允许在⼀端进行插⼊数据操作&#x…

Clickhouse集群新建用户、授权以及remote权限问题

新建用户 create user if not exists user on cluster 集群名称 IDENTIFIED WITH plaintext_password BY 密码;给用户授查询、建表、删表的权限 GRANT create table,select,drop table ON 数据库实例.* TO user on cluster 集群名称 ;再其他节点下用户建本地表成功&#…