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

【计算机网络】第三章 数据链路层

3.1 数据链路层的基本概念数据链路层使用的两种信道类型点对点信道这种信道使用一对一的点对点通信方式。广播信道这种信道使用一对多的广播通信方式因此过程比较复杂。 广播信道上连接的主机很多 因此必须使用专用的共享信道协议来协调这些主机的数据发送。3.1.1 数据链路和帧链路(link)就是从一个节点到相邻节点的一段物理线路而中间没有任何其他的交换节点。一条链路只是一条通路的一个组成部分。数据链路(data link)除了物理线路还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上就构成了数据链路。现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层的功能。3.1.2 三个基本问题⑴封装成帧封装成帧(framing)就是在一段数据的前后分别添加首部和尾部然后就构成了一个帧。首部和尾部的一个重要作用就是进行帧定界。接收方必须正确识别每个帧的开始和结束。每一种链路层协议都规定了帧的数据部分长度的上限即最大传送单元MTU(Maximum Transfer Unit, MTU).⑵透明传输我们希望数据链路层提供的是一种“透明传输” 的服务即对上层交给的传输数据没有任何限制 就好像数据链路层不存在一样。字节填充法对于面向字符的物理链路使用字节填充(byte stuffing)或字符填充(character stuffing)方法。发送端的数据链路层在数据中出现的标记字符前面插入一个转义字符(例如也用一种特殊的控制字符“ESC)。在接收端的数据链路层对转义字符后面出现的标记字符不再被解释为帧定界符并且在将数据送往网络层之前删除这个插入的转义字符。如果转义字符也出现在数据当中那么解决方法仍然是在转义字符的前面插入一个转义字符。当接收端收到连续的两个转义字符时就删除前面的一个。零比特填充法当物理链路提供的是面向比特的传输服务时(物理链路传送连续的比特流) 帧定界标志可以使用某个特殊的比特组合例如后面将要介绍的PPP协议所使用的01111110”。由于帧的长度不再要求必须是整数个字节可以采用开销更小的比特填充(Bit Stuffing)来实现透明传输。在发送端只要发现有5个连续1则立即填入一个0。接收端对帧中的比特流进行扫描。每当发现5个连续1时就把这5个连续1后的一个O删除。⑶差错控制在传输过程中可能会产生比特差错:1可能会变成0而0也可能变成1。在一段时间内传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。误码率与信噪比有很大的关系。为了保证数据传输的可靠性在计算机网络传输数据时必须采用各种差错检测措施。差错检测不是100%可靠 可能漏掉某些差错但是非常少较长的EDC字段通常有更好的检测性能循环冗余校验CRC在数据链路层传送的帧中广泛使用循环冗余校验CRC的检错技术。设原始数据D为d位二进制数如果要产生r位CRC校验码R事先选定一个r1位二进制位模式G(称为生成多项式收发双方提前商定)G的最高和最低位为1将原始数据D乘以2ʳ(相当于在D后面添加r个0),产生dr位二进制位模式用G对该位模式做模2除法得到余数R(r位不足r位前面用0补齐)即为CRC校验码。在接收端把接收到的数据除以同样的除数生成式G(模2运算)然后检查得到的余数即进行CRC检验。若得出的余数R0,则判定这个帧没有差错就接受。若余数R≠0,则判定这个帧有差错就丢弃。只要经过严格的挑选并使用位数足够多的除数G那么出现检测不到的差错的概率就很小很小。在数据后面添加上的冗余码称为帧检验序列FCS(Frame Check Sequence)。循环冗余校验CRC和帧检验序列FCS并不等同。CRC是一种常用的检错方法而FCS是添加在数据后面的冗余码。FCS可以用CRC这种方法得出但CRC并非用来获得FCS的唯一方法。❶要发送的数据为1101011011。采用CRC的生成多项式P(X)X⁴X1。试求应添加在数据后面的余数。❷若要发送的数据在传输过程中最后一个1变成了0即变成了1101011010问接收端能否发现 ❸若要发送的数据在传输过程中最后两个1都变成了0即变成了1101011000问接收端能否发现 ❹采用CRC检验后数据链路层的传输是否就变成了可靠的传输4不是可靠传输。CRC仅能实现差错检测无法纠正错误同时CRC 无法检测出所有错误当错误位的组合恰好是生成多项式的倍数时无法检测概率极低此外 CRC不具备帧序号、确认重传等机制无法解决丢帧、重复帧的问题因此不能实现可靠传输。可靠传输需要结合差错纠正、确认重传、流量控制等机制共同实现。使用CRC这样的差错检测技术只能检测出帧在传输中出现了差错并不能纠正错误。虽然任何差错检测技术都无法做到检测出所有差错但通常我们认为:凡是接收端数据链路层通过差错检测并接受的帧我们都认为这些帧在传输过程中产生差错的概率几乎为零。要想纠正传输中的差错可以使用冗余信息更多的纠错码进行前向纠错。通过纠错码能检测数据中出现差错的具体位置从而纠正错误。这种方法开销非常大。通常采用接下来可靠传输的确认重传机制来纠正传输中的差错或者仅仅是丢弃检测到差错的帧由上层协议去解决数据丢失的问题。3.1.3 流量控制与可靠传输机制⑴停止等待协议普通流程(有差错检验)❶超时重传❷确认丢失❸确认迟到/提前超时比特交替协议发送方流程比特交替协议接收方流程停等协议的信道利用率可靠传输的机制⑵滑动窗口协议Go-back-N(回退N帧)协议选择重传协议3.2 点对点协议PPP在通信线路质量较差的年代能实现可靠传输的高级数据链路控制(High-level Data Link Control,HDLC)成为了当时比较流行的数据链路层协议。HDLC是一个比较复杂的协议实现了滑动窗口协议并可支持点对点和点对多点两种连接方式。对于现在误码率已非常低的点对点有线链路HDLC已很少使用了 而简单得多的点对点协议(Point-to-Point Protocol,PPP)则是目前使用最广泛的点对点数据链路层协议。3.2.1 PPP协议的特点3.2.2 PPP协议的帧格式⑴ 各字段意义PPP有一个2个字节的协议字段当协议字段为0×0021时PPP帧的信息字段就是IP数据报。若为0×C021,则信息字段是PPP链路控制协议(LCP)数据。若为0x8021,则表示这是网络控制协议(NCP)数据。⑵透明传输问题当PPP用在SDH等面向比特的同步传输链路时协议规定采用硬件来完成比特填充。当PPP用在面向字符的异步传输时使用一种特殊的字符填充法 其转义符定义为0×7D。3.2.3 PPP协议的工作状态3.3 使用广播信道的数据链路层广播信道可以进行一对多的通信能很方便且廉价地连接多个邻近的计算机因此曾经被广泛应用于局域网之中。由于用广播信道连接的计算机共享同一传输媒体因此使用广播信道的局域网被称为共享式局域网。虽然交换式局域网在有线领域已完全取代了共享式局域网但无线局域网仍然使用的是共享媒体技术。用广播信道连接多个站点(可以是主机或路由器) 一个站点可以方便地给任何其他站点发送数据但必须解决如果同时有两个以上的站点在发送数据时共享信道上信号冲突的问题。因此共享信道要着重考虑的一个问题就是如何协调多个发送站点对一个共享传输媒体的占用即媒体接入控制(Medium Access Control,MAC)或多址接入(Multiple Access)问题3.3.1 局域网的数据链路层网络为一个单位所拥有且地理范围和站点数目均有限。(局域网最主要特点)最初主要用来连接一个单位内部的计算机方便地共享所有连接在局域网上的各种硬件、软件和数据资源。现在局域网将各种企业、机构、校园中的大量用户接入到互联网中网络中大部分的信息资源都集中在这些局域网中。LLC子层可以为不同类型的网络层协议提供不同类型的数据传输服务例如无确认无连接服务、面向连接的可靠传输服务或带确认的无连接服务。由于以太网在有线局域网市场中已取得了垄断地位因此目前逻辑链路控制子层LLC(即802.2标准)在有线局域网中的作用并不大。很多厂商生产的适配器(网卡)上就仅装有MAC协议而没有LLC协议。适配器的一个重要功能就是要进行数据串行传输和并行传输的转换。在适配器中必须装有对数据进行缓存的存储芯片。在计算机的操作系统安装设备驱动程序。适配器实现局域网数据链路层和物理层的协议。适配器接收和发送各种帧时不使用计算机的CPU这时CPU可以处理其他任务。当适配器收到有差错的帧时就把这个帧丢弃而不必通知计算机。当适配器收到正确的帧时它就使用中断来通知该计算机并交付给协议栈中的网络层。发送IP数据报时由协议栈把IP数据报向下交给适配器组装成帧后发送到局域网。MAC地址当多个站点连接在同一个广播信道上要想实现两个站点的通信则每个站点都必须有一个唯一的标识即一个数据链路层地址。在每个发送的帧中必须携带标识接收站点和发送站点的地址。由于该地址用于媒体接入控制因此被称为MAC地址。MACMedia Access Control地址是网络设备的唯一硬件标识符通常由48位二进制数12位十六进制组成用于在局域网LAN中识别设备。它由IEEE分配固化在网卡或网络接口中分为前24位厂商代码和后24位设备序列号。802.3标准为局域网规定了一种48位的全球地址固化在适配器(网卡)的ROM中(因此又被称为硬件地址)。实际上这个地址仅仅是一个适配器的标识符它并不能告诉我们这个计算机所在的位置。MAC地址与IP地址的区别MAC是物理层标识IP是网络层逻辑地址MAC全局唯一IP可动态分配互联网中全球唯一。所有的适配器都至少应当能够识别单播和广播地址有的适配器可用编程方法识别组地址(多播地址)。当操作系统启动时它就把适配器初始化使适配器能够识别某些组地址(多播地址)。只有目的地址才能使用广播地址和组地址(多播地址)。3.3.2 共享式以太网以太网采用较为灵活的无连接的工作方式即不必先建立连接就可以直接发送数据。适配器对发送的数据帧不进行编号也不要求对方发回确认。这样做的理由是局域网信道的质量很好因通信质量不好产生差错的概率是很小的。当目的站收到有差错的数据帧时就把帧丢弃其他什么也不做。对有差错帧是否需要重传则由高层来决定。但以太网并不知道这是重传帧而是当作新的数据帧来发送。总线上只要有一个站点在发送数据总线的传输资源就被占用。因此在同一时间只能允许一个站点发送数据否则各站点之间就会互相干扰结果大家都无法正常发送数据。共享式以太网使用CSMA/CD媒体接入控制协议来协调总线上各站点的工作。3.3.3 CSMA/CD协议冲突(碰撞)检验退避重传3.3.4 以太网的信道利用率成功发送一个帧需要占用信道的时间是T₀τ,比这个帧的发送时间要多一个单程端到端时延τ。这是因为当一个站发送完最后一个比特时这个比特还要在以太网上传播。在最极端的情况下发送站在传输媒体的一端而比特在媒体上传输到另一端所需的时间就是τ。要提高以太网的信道利用率就必须减小τ与T₀之比。在以太网中定义了参数a它是以太网单程端到端时延τ与帧的发送时间T₀之比:aτ/T₀a越大表明争用期所占的比例增大每发生一次碰撞就浪费许多信道资源 使得信道利用率明显降低。参数a的值应当尽可能小些3.3.5 使用集线器的星形拓扑10BASE-T的通信距离稍短每个站到集线器的距离不超过100m。这种10Mb/s速率的无屏蔽双绞线星形网的出现既降低了成本又提高了可靠性。10BASE-T双绞线以太网的出现是局域网发展史上的一个非常重要的里程碑它为以太网在局域网中的统治地位奠定了牢固的基础。3.3.6 以太网的帧格式⑴以太网V2的MAC帧格式第四个字段是数据字段其长度在46~1500字节(46字节是这样得出的: 最小长度64字节减去18字节的首部和尾部就得出数据字段的最小长度)。当数据字段的长度小于46字节时MAC子层就会在数据字段的后面加入一个整数字节的填充字段以保证以太网的MAC帧长不小于64字节。⑵帧间最短字节帧间最小间隔为9.6 μs ,相当于96 bit 的发送时间。一个站在检测到总线开始空闲后还要等待9.6 μs 才能再次发送数据。以太网不需要使用帧结束定界符也不需要使用字节填充或比特填充技术来保证透明传输。帧间间隔用于接收方检测一个帧的结束同时也使得所有其它站点都能有机会平等竞争信道并发送数据。⑶IEEE 802.3标准规定的MAC帧格式3.4 扩展的以太网3.4.1 在物理层扩展以太网使用的是共享式集线器(工作在物理层)3.4.2 在数据链路层扩展以太网⑴网桥用网桥仍是n个碰撞域用集线器则变为一个⑵透明网桥⑶以太网交换机3.4.3 虚拟局域网VLAN3.5 以太网的演进

相关文章:

【计算机网络】第三章 数据链路层

3.1 数据链路层的基本概念数据链路层使用的两种信道类型:点对点信道 这种信道使用一对一的点对点通信方式。 广播信道 这种信道使用一对多的广播通信方式,因此过程比较复杂。 广播信道上连接的主机很多, 因此必须使用专用的共享信道协议来协…...

告别硬编码:动态定位与安全调用游戏发包函数的思路与避坑指南

动态游戏封包处理:从特征定位到安全调用的工程实践 在游戏辅助开发领域,直接硬编码函数地址就像在流沙上建房——每次游戏更新都可能让精心构建的代码轰然倒塌。我曾见过一个项目因为游戏小版本更新导致80%的功能失效,开发者不得不通宵达旦地…...

如何高效使用ComfyUI IPAdapter Plus:3个提升AI图像生成精度的秘诀

如何高效使用ComfyUI IPAdapter Plus:3个提升AI图像生成精度的秘诀 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus 想要让AI真正理解你的创意灵感,将参考图片的风格、构图和人物…...

3步快速上手DJI Cloud API Demo:构建专业级无人机云服务

3步快速上手DJI Cloud API Demo:构建专业级无人机云服务 【免费下载链接】DJI-Cloud-API-Demo 项目地址: https://gitcode.com/gh_mirrors/dj/DJI-Cloud-API-Demo 想要快速构建无人机云服务平台,却苦于复杂的设备通信和数据处理?DJI …...

AntiDupl.NET:终极图片去重工具完整使用指南

AntiDupl.NET:终极图片去重工具完整使用指南 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾因电脑中堆积如山的重复图片而烦恼?硬盘空…...

5个关键特性让Acode成为Android移动开发的终极选择

5个关键特性让Acode成为Android移动开发的终极选择 【免费下载链接】Acode Acode - powerful text/code editor for android 项目地址: https://gitcode.com/gh_mirrors/ac/Acode 在移动设备上进行代码编辑一直是开发者的痛点——屏幕空间有限、输入效率低下、缺乏专业工…...

别再只盯着BIOS了!手把手教你用ACPI Table看懂电脑的‘电源管理说明书’

别再只盯着BIOS了!手把手教你用ACPI Table看懂电脑的‘电源管理说明书’ 当你按下电源键,电脑从休眠中苏醒的瞬间,背后其实上演着一场精密的硬件交响乐。而指挥这场演出的乐谱,就藏在那些鲜为人知的ACPI表中。这些表格远比BIOS界面…...

如何用SketchUp STL插件快速解决3D打印格式转换:终极完整指南

如何用SketchUp STL插件快速解决3D打印格式转换:终极完整指南 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl Ske…...

告别繁琐配置!Android Studio 2023.9 + Chaquopy 14.0.2 保姆级Python环境搭建教程

Android Studio 2023.9 Chaquopy 14.0.2:零基础Python混合开发实战指南 第一次在Android项目中集成Python环境时,我盯着Gradle报错的红色提示整整两小时。直到发现Chaquopy这个神器,才发现原来只需要5分钟就能完成配置——前提是避开那些新…...

别把 Web Dynpro ABAP 授权做成一锅粥,真正该分清的是 S_START、S_DEVELOP、S_WDR_DEV 和 S_WDR_ADM

很多团队一碰到 Web Dynpro ABAP 授权,第一反应就是去 PFCG 里猛塞角色,应用起不来就补 S_START,调试工具打不开就补 S_DEVELOP,个性化和定制化混在一起时又把 S_WDR_ADM 一路放大。系统能跑起来不代表授权设计是对的,真正到了生产环境,问题往往不是 没有权限 这么简单,…...

py每日spider案例之某33搜帧之请求头参数X-Signature逆向 (难度中等 扣取代码到处关键加密函数即可)

加密入口: 模块儿加密函数导出即可: js 逆向代码: const g = globalThis; g.window = g; g.self = g; g.location = {...

从零到一:KoboldAI本地部署与创作引擎深度解析

从零到一:KoboldAI本地部署与创作引擎深度解析 【免费下载链接】KoboldAI-Client For GGUF support, see KoboldCPP: https://github.com/LostRuins/koboldcpp 项目地址: https://gitcode.com/gh_mirrors/ko/KoboldAI-Client 在AI创作工具日益普及的今天&…...

观察Taotoken控制台如何清晰展示各模型的用量与费用

观察Taotoken控制台如何清晰展示各模型的用量与费用 作为一名项目负责人,管理团队在大模型上的调用成本是一项日常工作。过去,当团队使用多个不同厂商的模型服务时,账单分散、统计口径不一,常常需要手动汇总,既耗时又…...

FPGA数字钟设计避坑指南:状态机、时序约束与按键处理那些事儿

FPGA数字钟设计避坑指南:状态机、时序约束与按键处理那些事儿 第一次在FPGA上实现数字钟时,我盯着屏幕上乱跳的数码管显示,意识到自己掉进了一个典型的"初学者陷阱"。当时钟显示从23:59:59直接跳到00:00:00时还算正常,但…...

iChatGPT:基于SwiftUI的苹果原生ChatGPT客户端开发与深度使用指南

1. 项目概述:一个为苹果生态打造的独立ChatGPT客户端 如果你和我一样,是苹果全家桶用户,同时又深度依赖ChatGPT进行编程、写作或者日常学习,那你肯定有过类似的烦恼:要么得在浏览器里开个标签页,每次想用都…...

观察不同模型在Taotoken上的响应速度与token消耗差异

观察不同模型在Taotoken上的响应速度与token消耗差异 在集成大模型能力到实际业务时,开发者除了关注模型的效果,也常常需要考量两个关键的工程指标:响应速度和token消耗。响应速度直接影响用户体验和系统吞吐量,而token消耗则直接…...

把传输目录当成生产防线来设计,谈谈 SAP 三层 landscape 里最容易被低估的一道门

很多团队做 CTS 管控时,注意力会放在 SE09、SE10、STMS、导入队列、审批流程这些界面层动作上,真正更接近底层、也更容易被忽视的,其实是 transport directory。开发请求释放以后,真正落地的是目录里的 data file、control file、log file,而不是屏幕上那条看起来很规整的…...

利用taotoken模型广场为ubuntu上的数据分析项目选型合适模型

利用 Taotoken 模型广场为 Ubuntu 上的数据分析项目选型合适模型 在 Ubuntu 环境下进行数据分析和文本处理的团队,常常需要调用大语言模型来完成信息提取、报告生成或代码辅助等任务。面对市场上众多的模型提供商和复杂的定价体系,如何为不同的处理任务…...

从零构建AI Agent框架:PicoClaw核心机制与模块化设计详解

1. 项目概述:从零构建一个AI Agent框架意味着什么?如果你对AI Agent(智能体)的概念感兴趣,尤其是看到LangChain、AutoGPT这些框架时,心里既兴奋又有点发怵——兴奋于它们展现的自动化潜力,发怵于…...

5分钟快速解锁Steam游戏:Onekey智能配置工具完全指南

5分钟快速解锁Steam游戏:Onekey智能配置工具完全指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为Steam游戏解锁的复杂配置而烦恼吗?想要轻松获取游戏DLC内容却…...

实测Taotoken多模型路由在高峰时段的响应稳定性表现

实测Taotoken多模型路由在高峰时段的响应稳定性表现 作为日常依赖大模型API进行开发的工程师,服务的稳定性是保障工作流顺畅的关键。尤其是在晚间流量高峰时段,单一模型供应商的接口可能出现波动,直接影响开发效率。近期,我在实际…...

【完整源码+数据集+部署教程】屋顶图像分割系统源码&数据集分享 [yolov8-seg-C2f-Parc&yolov8-seg-vanillanet等50+全套改进创新点发刊_一键训练教程_Web前

背景意义 随着城市化进程的加快,屋顶作为建筑的重要组成部分,其形态、材料及功能的多样性使得屋顶图像的分析与处理成为了计算机视觉领域的重要研究方向。屋顶图像分割不仅在建筑设计、城市规划中具有重要应用价值,同时也为环境监测、灾害评…...

Spring Boot 2 + MyBatis Plus 最佳实践:开源全功能小程序商城系统架构解析

引言在移动互联网时代,微信小程序凭借其"即用即走"的特性,已成为电商领域的重要流量入口。今天要给大家推荐一款基于Spring Boot 2重构的开源小程序商城系统——Open-Shop,它不仅完整实现了电商核心业务逻辑,更在技术架…...

7种粗细的思源宋体:如何免费获得专业级中文排版字体?

7种粗细的思源宋体:如何免费获得专业级中文排版字体? 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目寻找既美观又无版权风险的字体吗&#…...

Git工作树管理器:提升多分支并行开发效率的利器

1. 项目概述:为什么我们需要一个工作树管理器?如果你是一个长期与 Git 打交道,并且经常需要同时处理多个功能分支、修复多个 bug 或者并行跟进不同版本需求的开发者,那么你一定对git worktree这个命令不陌生。它允许你在同一个仓库…...

GodotJS实战:TypeScript集成与多引擎架构解析

1. 项目概述:当Godot引擎遇见TypeScript 如果你和我一样,既是游戏开发的爱好者,又对JavaScript/TypeScript生态有着深厚的感情,那么你肯定也经历过那种“甜蜜的烦恼”:Godot引擎的GDScript固然易学易用,但…...

别再只看收益率了!用Python实战计算你的策略最大回撤与夏普比率(附完整代码)

用Python实战量化策略评估:从净值曲线到风险收益全景分析 在量化交易的世界里,新手最容易犯的错误就是过度关注收益率而忽视风险。我见过太多策略在回测时展现出诱人的年化收益,却在实盘阶段因为无法承受市场波动而崩溃。真正专业的量化开发者…...

Nanobot WebGUI:生产就绪的AI代理可视化部署与管理指南

1. 项目概述:为Nanobot打造一个生产就绪的WebGUI如果你正在寻找一个开箱即用、能通过浏览器轻松管理和操作Nanobot智能体的方案,那么nanobot-webgui就是你需要的工具。这个项目不是一个独立的AI代理,而是一个专注于“生产就绪”的浏览器图形界…...

基于Electron的picox智能体桌面管理平台设计与实现

1. 项目概述:从命令行到桌面的智能体管理革命如果你和我一样,长期在后台运行着多个基于picox的智能体(Agent),比如用于自动化任务的clawdbot,或者对接openclaw、picoclaw这类服务的网关,那你一定…...

解决MeteoInfo中ARL数据格式转换问题的技术指南

解决MeteoInfo中ARL数据格式转换问题的技术指南 【免费下载链接】MeteoInfo MeteoInfo: GIS, scientific computation and visualization environment. 项目地址: https://gitcode.com/gh_mirrors/me/MeteoInfo 问题速览:为什么你的气象数据转换会失败&#…...