计算机网络——数据链路层(1)

一、概述

        在计算机网络中,数据链路层承担着点对点通信的任务,用于跨物理层在网段节点之间参数数据。它在网络分层中处于物理层之上,网路层之下。

        在链路层的讨论中,我们将看到两种截然不同类型的链路层信道。第一种类型是广播信道,这种信道用于连接有线局域网、卫星网和混合光纤同轴电缆(Hybrid Fiber Coaxial cable,HFC)接入网中的多台主机。因为许多主机与相同的广播信道连接,需要所谓的媒体访问协议来协调帧传输。在某些场合中,可以使用中心控制器来协调传输。第二种类型的链路层信道是点对点通信链路,这在诸如长距离链路连接的两台路由器之间,或用户办公室计算机与它们所连接的邻近以太网交换机之间等场合经常能够发现。协调对点对点链路的访问较为简单。

二、链路层提供的服务

        尽管任一链路层的基本服务都是将数据报通过单一通信链路从一个节点移动到相邻节点,但所提供的服务细节能够随着链路层协议的不同而变化。链路层协议能够提供的可能服务包括:

2.1 成帧(framing)

        在每个网络层数据报经链路传送之前,几乎所有的链路层协议都要将其用链路层帧封装起来。一个帧由一个数据字段和若干首部字段组成,其中络层数据报就插在数据字段中。帧的结构由链路层协议规定。

2.2 链路接入

        媒体访问控制(Medium Access Control,MAC)协议规定了帧在链路上传输的规则。对于在链路的一端仅有一个发送方、链路的另一端仅有一个接收方的点对点链路,MAC协议比较简单(或者不存在),即无论何时链路空闲,发送方都能够发送帧。更有趣的情况是当多个节点共享单个广播链路时,即所谓多路访问问题。这里,MAC协议用于协调多个节点的帧传输。

2.3 可靠交付

        当链路层协议提供可靠交付服务时,它保证无差错地经链路层移动每个网络层数据报。前面讲过,某些运输层协议(例如 TCP)也提供可靠交付服务。与运输层可靠交付服务类似,链路层的可靠交付服务通常是通过确认和重传取得的。链路层可靠交付服务通常用于易于产生高差错率的链路,例如无线链路,其目的是本地(也就是在差错发生的链路上)纠正一个差错,而不是通过运输层或应用层协议迫使进行端到端的数据重传。然而,对于低比特差错的链路,包括光纤、同轴电缆和许多双绞铜线链路,链路层可靠交付可能会被认为是一种不必要的开销。由于这个原因,许多有线的链路层协议不提供可靠交付服务。

2.4 差错检测和纠正

        当帧中的一个比特作为1传输时,接收方节点中的链路层硬件可能不正确地将其判断为0,反之亦然。这种比特差错是由信号衰减和电磁噪声导致的。因为没有必要转发一个有差错的数据报,所以许多链路层协议提供一种机制来检测这样的比特差错。通过让发送节点在帧中包括差错检测比特,让接收节点进行差错检查,以此来完成这项工作。第3章和第4章讲过,因特网的运输层和网络层也提供了有限形式的差错检测,即因特网检验和。链路层的差错检测通常更复杂,并且用硬件实现。差错纠正类似于差错检测,区别在于接收方不仅能检测帧中出现的比特差错,而且能够准确地确定帧中的差错出现的位置(并因此纠正这些差错)。

三、MAC子层和LLC子层

        在局域网内,链路层又可以分成MAC(Media Access Control)子层和LLC(Logical Link Control)子层。这是因为802.3(局域网)是共享介质的,而广域网是专用的(通常是点对点的)不存在介质冲突的问题。在Windows 2000网络体系结构中,LLC子层是由传输驱动程序实现的,而MAC子层是由网络接口卡(NIC:网卡)来实现。

3.1 MAC子层

3.1.1 概述

        MAC子层是数据链路层的一个子层,它负责控制物理介质的访问,并决定哪个设备有权利发送数据。MAC子层的主要任务是解决多个设备共享同一物理介质时可能出现的冲突和竞争问题。不管是在传统的有线局域网(LAN)中还是在目前流行的无线局域网(WLAN)中,MAC协议都被广泛地应用。在传统局域网中,各种传输介质(铜缆、光线等)的物理层对应到相应的MAC层,目前普遍使用的网络采用的是IEEE 802.3的MAC层标准,采用CSMA/CD访问控制方式;而在无线局域网中,MAC所对应的标准为IEEE 802.11,其工作方式采用DCF(分布控制)和PCF(中心控制)。

3.1.2 MAC子层的功能

  • 媒体访问控制。MAC子层通过一定的协议来控制设备对物理介质的访问。常见的MAC协议包括CSMA/CD(Carrier Sense Multiple Access with Collision Detection)和CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)等。
  • 帧的封装与解封装。MAC子层将上层数据封装成数据帧,以便在物理介质上传输。同时,它还负责从接收的数据帧中解封装出上层数据。
  • 地址识别。每个网络设备都有一个唯一的MAC地址,MAC子层通过MAC地址来识别设备并确定数据帧的目的地。
  • 错误检测与纠正。MAC子层可以检测并有时纠正数据传输中的错误,以确保数据的可靠性。

3.2 LLC子层

3.2.1 概述

        LLC子层是数据链路层的另一个子层,它位于MAC子层之上。LLC子层的主要作用是提供一个逻辑链接控制层,使不同类型的网络协议能够在同一物理介质上进行通信。它主要用于数据传输,充当网络层和数据链路层中的媒体访问控制(MAC)子层之间的接口。LLC负责识别网络层协议,然后对它们进行封装。LLC报头告诉数据链路层一旦帧被接收到时,应当对数据包做何处理。它的工作原理是这样的:主机接收到帧并查看其LLC报头,以找到数据包的目的地,比如说,在网际层的IP协议。LLC子层也可以提供流量控制并控制比特流的排序。

3.2.2 LLC子层的功能

  • 协议多路复用。LLC子层可以将不同的网络协议数据封装到同一个数据链路帧中,从而实现多个协议的复用。
  • 协议多路。分解在接收端,LLC子层可以根据数据链路帧中的信息将数据分解给相应的协议处理模块。
  • 流控制。LLC子层可以实现流控制机制,确保数据的可靠传输,避免数据丢失和重传。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/330828.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字身份所有权:Web3时代用户数据的掌控权

随着Web3时代的来临,数字身份的概念正焕发出崭新的光芒。在这个数字化的时代,用户的个人数据变得愈加珍贵,而Web3则为用户带来了数字身份所有权的概念,重新定义了用户与个人数据之间的关系。本文将深入探讨Web3时代用户数据的掌控…

【竞技宝】DOTA2:世一C遇到瓶颈? yatoro直言一号位上分太难了

北京时间2024年1月18日,spirit在去年再次拿到了TI国际邀请赛的冠军,成为了OG之后第二支两次在世界赛夺冠的战队,在夺冠之后,spirit直接给选手们放了假。此前AR夺冠的ESL吉隆坡站的比赛,spirit战队就并未参加&#xff0…

视频转码实例:把MP4转为MKV视频,一键批量转换的操作方法

在数字媒体时代,视频格式的多样性是不可避免的。经常把MP4格式的视频转换为MKV格式。MKV格式有较高的音频和视频质量,能在其他设备或软件上播放视频。以下是云炫AI智剪如何把MP4视频转为MKV格式的一键批量转换操作方法。 已转码的mkv视频效果缩略图展示…

kubernetes pod 高级

一、pod资源限制 1、什么是pod的资源限制 在Kubernetes集群中,为了使系统能够稳定的运行,通常会对Pod的资源使用量进行限制。 在Kubernetes集群中,如果有一个程序出现异常,并占用大量的系统资源。如果未对该Pod进行资源限制的话…

Git学习笔记(第4章):Git分支

目录 4.1 分支的概述 4.1.1 什么是分支 4.1.2 分支的好处 4.2 查看分支(查) 4.3 创建分支(增) 4.4 切换分支 4.5 修改分支(改) 4.6 合并分支(正常合并) 4.7 合并分支&#…

CGAL最小生成树、可视化

CGAL 5.4.5 - Surface Mesh: User Manual 1、Kruskal计算最小生成树 #include <CGAL/Simple_cartesian.h> #include <CGAL/Surface_mesh.h> #include <boost/graph/kruskal_min_spanning_tree.hpp> #include <iostream> #include <fstream> #inc…

贝塞尔曲线(Bezier Curve)原理、公式推导及matlab代码实现

目录 参考链接 定义 直观理解 公式推导 一次贝塞尔曲线&#xff08;线性公式&#xff09; 二次贝塞尔曲线&#xff08;二次方公式&#xff09; 三次贝塞尔曲线&#xff08;三次方公式&#xff09; n次贝塞尔曲线&#xff08;一般参数公式&#xff09; 代码实现 参考链接…

群晖NAS搭建WebDav结合内网穿透实现公网访问本地影视资源

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

2024华数杯国际数学建模B题思路+代码+模型+论文

2024华数杯国际数学建模B题思路代码模型论文&#xff1a;1.17上午第一时间更新&#xff0c;详细内容见文末名片 问题B&#xff1a;光伏电 背景 中国的电力构成包括传统的能源发电&#xff08;如煤炭、石油和天然气&#xff09;、可再生能源发电 &#xff08;如水力发电、风能…

OpenGL:关于纹理映射时任意四边形中的插值问题(二)

OpenGL&#xff1a;关于纹理映射时任意四边形中的插值问题-CSDN博客 上次是使用逆双线性插值的方法解决四边形纹理映射时产生的折痕问题。 其实也有点问题&#xff0c;就是双线性插值会使得纹理产生一点扭曲。 不是投影的效果。 想达到纹理投影的效果&#xff0c;可以使用透…

AndroidStudio下载安装教程

下载链接&#xff1a;官方下载 https://developer.android.google.cn/studio?hlzh-cn点击后弹出条款及条件页面&#xff0c;往下滑&#xff0c;勾选同意&#xff0c;然后就点击下载&#xff0c;等待下载完成 下载完成后双击打开&#xff0c;Next 继续Next 选择安装路径&am…

行列转化【附加面试题】

在MySQL中&#xff0c;行列转换是一种常见的操作。它包括行转列和列转行两种情况。 行转列&#xff1a;行转列是将表中的某些行转换成列&#xff0c;以提供更为清晰、易读的数据视图。例如&#xff0c;假设我们有一个包含科目和分数的表&#xff0c;我们可以使用SUM和CASE语句…

C++(13)——string

上篇文章中介绍了中部分函数的用法&#xff0c;本篇文章将继续对其他的函数进行介绍&#xff1a; 1. substr: string substr (size_t pos 0, size_t len npos) const; 函数的两个参数如上述代码所示&#xff0c;此函数的主要作用是根据一个已有的的对象的起始坐标开始&a…

基于python集成学习算法XGBoost农业数据可视化分析预测系统

文章目录 基于python集成学习算法XGBoost农业数据可视化分析预测系统一、项目简介二、开发环境三、项目技术四、功能结构五、功能实现模型构建封装类用于网格调参训练模型系统可视化数据请求接口模型评分 0.5*mse 六、系统实现七、总结 基于python集成学习算法XGBoost农业数据可…

我终于学会的前端技能——代码调试、打断点

在技术的世界里&#xff0c;要用魔法来打败魔法 说来惭愧我做前端已近三年了竟然还没有学会如何调试代码&#xff0c;也就是给自己的代码打上断点一步步看它的运行状态以达到理清代码运行逻辑、排查问题提升开发效率的目的。直到最近我才学会了这一技能&#xff0c;在这之前我…

JSP简单学习

jsp是在html中嵌入java代码 jsp也是在j2ee服务端中的java组件 第一次运行 在第一次运行jsp代码时会经历以下步骤&#xff0c;将jsp转为java代码&#xff0c;将java代码转为class文件。 所以通常会比较慢&#xff0c;编译后就好多了。 四大作用域 requestsessionpageapplica…

CUDA Toolkit 下载,安装,验证

CUDA Toolkit 下载 进cuda官网下载 CUDA Toolkit链接&#xff1a; https://developer.nvidia.com/cuda-downloads 官网默认显示当前的最新版本&#xff0c;这里以安装CUDA Toolkit 12.2 为示例 下载CUDA Toolkit 完成 CUDA Toolkit 安装 开始安装&#xff1a; 点同意&#…

Linux第30步_通过USB OTG将固件烧写到eMMC中

学习目的&#xff1a;在Win11中&#xff0c;使用STM32CubeProgrammer工具&#xff0c;通过USB OTG将固件烧写到eMMC中。 安装软件检查&#xff1a; 1、是否安装了JAVA; 2、是否安装了STM32CubeProgrammer工具; 3、是否安装 了DFU驱动程序; 4、是否安装了“Notepad”软件; …

关于SpringBoot项目整合Log4j2实现自定义日志打印失效原因

主要的原因是因为&#xff0c;SpringBoot的logback包的存在&#xff0c;会导致Spring Boot项目优先实现logback的日志设置&#xff0c;所以导致我们用Log4j2实现自定义日志失效。 先找l哪个包引用了logback包 进入之后查询logback 然后双击包 发现是spring-boot-starter-loggin…

python - 等值线(contour)数值添加白色背景边框

python - 等值线(contour)数值添加白色背景边框 如下图所示&#xff0c;图为NCL官网实力的等值线绘图。可以观察到&#xff0c;图中每条等值线都带有一个白色的矩形边框&#xff0c;使其在黑色的等值线更加清晰明了&#xff0c;更具有可读性。但是&#xff0c;目前我还是用pyt…