【计网】数据链路层笔记

【计网】数据链路层

数据链路层概述

数据链路层在网络体系结构中所处的地位

image-20241106175203525

链路、数据链路和帧

链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。

数据链路(Data Link)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能。

帧(Frame)是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU

数据链路层三个重要问题

封装成帧和透明传输

封装成帧

封装成帧是指数据链路层给上层交付下来的协议数据单元PDU,添加一个首部和一个尾部,使之成为帧。

image-20241106222038992

为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度。

考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(MaximumTransferUnit,MTU)。例如,以太网的MTU为1500个字节。

透明传输

透明传输是指数据链路层对上层交付下来的协议数据单元PDU没有任何限制,就好像数据链路层不存在一样。

对于面向字节的物理链路使用字节填充的方法实现透明传输。

例如在帧定界符填充转义字符

image-20241107101944134

对于面向比特的物理链路,使用比特填充的方法实现透明传输。

差错检测

误码相关概念

实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(称为比特差错)

比特1可能变成比特0

比特0可能变成比特1

在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(BitError Rate,BER)

提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零。

使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要
问题之一。

奇偶校验

奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数。

偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数。

image-20241107103649531

循环冗余校验

数据链路层广泛使用漏检率极低的循环冗余校验(Cyclic Redundancy Check,CRC)检错技术。

循环冗余校验CRC的基本思想:

收发双方约定好一个生成多项式G(X)。

发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码)

将冗余码添加到待发送数据的后面一起传输。

接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。

接收方CRC

image-20241107104418279

奇偶校验、循环冗余校验等差错检测技术,只能检测出传输过程中出现了差错,但并不能定位错误因此无法纠正错误。

要想纠正传输中的差错,可以使用冗余信息更多的纠错码(例如海明码)进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。

在计算机网络中,通常采用我们后续课程中将要介绍的检错重传方式来纠正传输中的差错,或者仅仅丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。

循环冗余校验CRC具有很好的检错能力(漏检率极低)虽然计算比较复杂,但非常易于用硬件实现因此被广泛应用于数据链路层。

可靠传输

可靠传输的相关基本概念

使用差错检测技术(例如循环冗余校验CRC)接收方的数据链路层就可检测出帧在传输过程中是否
产生了误码(比特差错)。

数据链路层向其上层提供的服务类型

不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做。

可靠传输服务:通过某种机制实现发送方发送什么,接收方最终就能收到什么。

可靠传输服务并不局限于数据链路层,,其他各层均可选择实现可靠传输。

可靠传输的实现比较复杂,开销比较大,是否使用可靠传输取决于应用需求。
image-20241107121741498

选择重传协议

image-20241108105422923

点对点协议PPP

点对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议。

点对点协议PPP是因特网工程任务(interetEngineeringTaskForce,IETF)于1992年制定的。经过多次修订,目前PPP已成为因特网的正式标准IRFC1661,RFC16621。

从网络体系结构角度看点对点协议PPP的组成。

PPP帧格式

image-20241108105744977

标志(Flag)字段:PPP帧的定界符,取值为0x7E。

地址(Address)字段:取值为0xFF,预留(目前没有什么作用)

控制(Control)字段:取值为0x03,预留(目前没有什么作用)

协议(Protocol)字段:其值用来指明帧的数据载荷应向上交付给哪个协议处理

image-20241108105812235

PPP帧的透明传输

image-20241108105935685

发送方的处理:

(1)将数据载荷中出现的每一个0x7E减去0x20(相当于异或0x20),然后在其前面插入转义字符0x7D

若数据载荷中原来就含有0x7D,则把每一个0x7D减去0x20,然后在其前面插入转义字符0x7D.

(2)将数据载荷中出现的每一个ASCII码控制字符(即数值小于0x20的字符)

(3)加上0x20(相当于异或0x20,将其转换成非控制字符),然后在其前面插入转义字符0x7D

接收方的处理:

进行与发送方相反的变换,就可以正确地恢复出未经过字节填充的原始数据载荷。

image-20241108110025355

PPP帧的差错检测

image-20241108110053314

PPP的工作状态

以用户主机拨号接入因特网服务提供者ISP的拨号服务器的过程为例

image-20241108110203072

共享式以太网

网络适配器

要将计算机连接到以太网,需要使用相应的网络适配器(Adapter),网络适配器一般简称为“网卡”。

在计算机内部,网卡与CPU之间的通信,一般是通过计算机主板上的I10总线以并行传输方式进行。

网卡与外部以太网(局域网)之间的通信,一般是通过传输媒体(同轴电缆、双绞线电缆、光纤)以串行方式进行的。

image-20241109000652321

网卡除要实现物理层和数据链路层功能,其另外一个重要功能就是要进行并行传输和串行传输的转换。由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于缓存数据的存储器。

在确保网卡硬件正确的情况下,为了使网卡正常工作,还必须要在计算机的操作系统中为网卡安装相应的设备驱动程序。驱动程序负责驱动网卡发送和接收帧。

MAC地址

当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯
的标识,即一个数据链路层地址。

在每个主机发送的帧的首部中,都携带有发送主机(源主机)和接收主机(目的主机)的数据链路层地址。由于这类地址是用于媒体接入控制(MediumAccessControl,MAC)的,因此被称为MAC地址。

image-20241109001011475

MAC地址一般被固化在网卡的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址

MAC地址有时也被称为物理地址,

image-20241109001328595

IEEE 802局域网的MAC地址格式

image-20241109001433982

image-20241109001813451

网卡从网络上每收到一个无误码的帧,就检查帧首部中的目的MAC地址,按以下情况处理:

(1)如果目的MAC地址是广播地址(FF-FF-FF-FF-FF-FF),则接受该帧。

(2)如果目的MAC地址与网卡上固化的全球单播MAC地址相同,则接受该帧。

(3)如果目的MAC地址是网卡支持的多播地址,则接受该帧。

(4)除上述(1)、(2)和(3)情况外,丢弃该帧。

网卡还可被设置为一种特殊的工作方式:

混杂方式(Promiscuous Mode)。,工作在混杂方式的网卡。而不管帧的目的MAC地址是什么。只要收到共享媒体上传来的帧就会收下,对于网络维护和管理人员,这种方式可以监视和分析局域网上的流量,以便找出提高网络性能的具体措施。

嗅探器(Snifer)就是一种工作在混杂方式的网卡,再配合相应的工具软件(WireShark),就可以作为一种非常有用的网络工具来学习和分析网络。

CSMA/CD协议的基本原理

在以太网的发展初期,人们普遍认为“无源的电缆线比有源器件可靠”,因此将多个站点连接在一条
总线上来构建共享总线以太网。

共享总线以太网具有天然的广播特性,即使总线上某个站点给另一个站点发送单播帧,表示帧的信号
也会沿着总线传播到总线上的其他各站点。

当某个站点在总线上发送帧时总线资源会被该站点独占。此时,如果总线上的其他站点也要在总线
上发送帧,就会产生信号碰撞。

当两个或多个站点同时使用总线发送帧时,就会产生信号碰撞。

为了解决各站点争用总线的问题,共享总线以太网使用了一种专用协议CSMAICD,它是载波监听多址接入/碰撞检测(Carrier Sense Multiple Access Colision Detection)的英文缩写词。

image-20241109002504148

共享式以太网的争用期、最小帧长和最大帧长

懒得学

共享式以太网:退避算法、信道利用率

在使用CSMA/CD协议的共享总线以太网中,正在发送帧的站点一边发送帧一边检测碰撞,当检测到碰撞
时就立即停止发送,退避一段随机时间后再重新发送。共享总线以太网中的各站点采用截断二进制指数退避(Truncated Binary Exponential Backoff)算法来选择退避的随机时间。

懒得学

使用集线器的共享式以太网

早期的传统以太网是使用粗同轴电缆的共享总线以太网,后来发展到使用价格相对便宜的细同轴电缆.。
当初认为这种连接方法既简单又可靠,因为在那个时代普遍认为有源器件不可靠,而无源的电缆线才是
最可靠的。

然而实践证明这种使用无源电缆线和大量机械接口的总线型以太网并不像人们想象的那么可靠。

在使用细同轴电缆的共享总线以太网之后,以太网发展出来了一种使用大规模集成电路来替代总线、并
且可靠性非常高的设备,叫作集线器(Hub)

站点连接到集线器的传输媒体也转而使用更便宜、更灵活的双绞线电缆。

集线器特点:

image-20241109003258516

IEEE于1990年制定了10BASE-T星型以太网的标准802.3i,这种以太网是局域网发展史上的一座非常重要的
里程碑,它为以太网在局域网中的统治地位奠定了牢固的基础。

10BASE-T以太网的通信距离较短,每个站点到集线器的距离不能超过100m。

IEEE 802.3以太网还可使用光纤作为传输媒体,相应的标准为10BASE-F,“F”表示光纤。光纤主要用作
集线器之间的远程连接。

物理层扩展以太网

共享总线以太网中两站点之间的距离不能太远,否则它们之间所传输的信号就会衰减到使CSMAVCD协议
无法正常工作。

在早期广泛使用粗同轴电缆或细同轴电缆共享总线以太网时,为了提高网络的地理覆盖范围,常用的是
工作在物理层的转发器。

IEEE 802.3标准规定,两个网段可用一个转发器连接起来任意两个站点之间最多可以经过三个网段。

image-20241109011532611

image-20241109011539378

数据链路层扩展以太网
使用网桥在数据链路层扩展以太网。

网桥(bridge)工作在数据链路层(包含其下的物理层),因此网桥具备属于数据链路层范畴的相关能力网桥可以识别帧的结构、网桥可以根据帧首部中的目的MAC地址和网桥自身的帧转发表来转发或丢弃所收到的帧。

网桥的主要结构和基本工作原理

image-20241109011830628

交换式以太网

仅仅使用交换机而不使用集线器的以太网就是交换式以太网。

以太网交换机(以下简称交换机)本质上就是一个多接口的网桥:

交换机自学习和转发帧的流程与网桥是相同的。

另外,交换机也使用生成树协议STP,来产生能够连通全网但不产生环路的通信路径。

交换机的每个接口可以连接计算机,也可以连接集线器或另一个交换机。

当交换机的接口与计算机或交换机连接时,可以工作在全双工方式并能在自身内部同时连通多对接口,使每一对相互通信的计算机都能像独占传输媒体那样,无碰撞地传输数据。这样就不需要使用CSMAICD协议了

当交换机的接口连接的是集线器时,该接口就只能使用CSMAICD协议并只能工作在半双工方式

现在的交换机和计算机中的网卡都能自动识别上述两种情况,并自动切换到相应的工作方式。

交换机一般都具有多种速率的接口,例如10Mb/s、100Mb/s、1Gb/s甚至10Gb/s的接口,大部分接口支持多速率自适应。

一般的交换机都采用“存储转发”方式,为了减小交换机的转发时延,某些交换机采用了直通(Cut.Through)交换方式。

采用直通交换方式的交换机,在接收帧的同时就立即按帧的目的MAC地址决定该帧的转发接口,然后通过其内部基于硬件的交叉矩阵进行转发,而不必把整个帧先缓存后再进行处理。

直通交换的时延非常小。

直通交换不检查差错就直接将帧转发出去,有可能会将一些无效帧转发给其他主机。

共享式以太网与交换式以太网对比

image-20241109142447868

以太网的MAC帧格式

image-20241109142913792

虚拟局域网VLAN

VLAN诞生背景

将多个站点通过一个或多个以太网交换机连接起来就构建出了交换式以太网。

交换式以太网中的所有站点都属于同一个广播域。

随着交换式以太网规模的扩大,广播域也相应扩大。巨大的广播域会带来一系列问题。

广播风暴:广播风暴会浪费网络资源和各主机的CPU资源

难以管理和维护,带来潜在的安全问题。

image-20241109143555977

image-20241109143606683

虚拟局域网(Virtual Local Area Network,VLAN)是一种将局域网内的站点划分成与物理位置无关的逻辑
组的技术,一个逻辑组就是一个VLAN,VLAN中的各站点具有某些共同的应用需求

属于同一VLAN的站点之间可以直接进行通信,而不同VLAN中的站点之间不能直接通信网络管理员可对局域网中的各交换机进行配置来建立多个逻辑上独立的VLAN。

连接在同一交换机上的多个站点可以属于不同的VLAN,而属于同一VLAN的多个站点可以连接在不同的交换机上。虚拟局域网VLAN并不是一种新型网络,它只是局域网能够提供给用户的一种服务。

虚拟局域网VLAN的实现机制 — IEEE 802.1Q帧

IEEE 802.1Q帧也称为Dot One Q帧,它对以太网V2的MAC帧格式进行了扩展:在源地址字段和类型字段之间插入了4字节的VLAN标签(tag)字段。

image-20241109153832479

image-20241109155633093

以太网的发展

可以连接在不同的交换机上。虚拟局域网VLAN并不是一种新型网络,它只是局域网能够提供给用户的一种服务。

虚拟局域网VLAN的实现机制 — IEEE 802.1Q帧

IEEE 802.1Q帧也称为Dot One Q帧,它对以太网V2的MAC帧格式进行了扩展:在源地址字段和类型字段之间插入了4字节的VLAN标签(tag)字段。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重学SpringBoot3-整合 Elasticsearch 8.x (二)使用Repository

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 整合 Elasticsearch 8.x (二)使用Repository 1. 环境准备1.1 项目依赖1.2 Elasticsearch 配置 2. 使用Repository的基本步骤2.1 创建实体类2.2 创…

计算机课程管理:Spring Boot与工程认证的协同创新

3系统分析 3.1可行性分析 通过对本基于工程教育认证的计算机课程管理平台实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于工程教育认证的计算机课程管理平…

<项目代码>YOLOv8 苹果腐烂识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

游戏引擎学习第四天

视频参考:https://www.bilibili.com/video/BV1aDmqYnEnc/ BitBlt 是 Windows GDI(图形设备接口)中的一个函数,用于在设备上下文(device context, DC)之间复制位图数据。BitBlt 的主要用途是将一个图像区域从一个地方复…

SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记

这是一篇港科大学生在google research 实习期间发在ECCV2024的语义引导生成式修复的文章,港科大陈启峰也挂了名字。从首页图看效果确实很惊艳,尤其是第三行能用文本调控修复结果牌上的字。不过看起来更倾向于生成,对原图内容并不是很复原&…

如何平滑切换Containerd数据目录

如何平滑切换Containerd数据目录 大家好,我是秋意零。 这是工作中遇到的一个问题。搭建的服务平台,在使用的过程中频繁出现镜像本地拉取不到问题(在项目群聊中老是被人出来😅)原因是由于/目录空间不足导致&#xff0…

Sharding运行模式、元数据、持久化详解

运行模式 单机模式 能够将数据源和规则等元数据信息持久化,但无法将元数据同步至多个Sharding实例,无法在集群环境中相互感知。 通过某一实例更新元数据之后,会导致其他实例由于获取不到最新的元数据而产生不一致的错误。 适用于工程师在本…

基于springboot+小程序的鲜花管理系统(鲜花1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本网上花店微信小程序分为管理员还有用户两个权限,管理员可以管理用户的基本信息内容,可以管理公告信息以及鲜花信息,能够与用户进行相互交流等操作&am…

金融学期末速成笔记

【拯救者】金融学速成(基础习题) 重点: 市场经济是发达的商品经济。在市场经济条件下,市场机制作为资源配置方式,发挥基础性作用。 除具有商品经济的一般特征外,与商品经济相比,市场经济还具有一些新的特征…

后悔没早点知道,Coze 插件 + Cursor 原来可以这样赚钱

最近智能体定制化赛道异常火爆。 打开闲鱼搜索"Coze 定制",密密麻麻的服务报价直接刷屏,即使表明看起来几十块的商家,一细聊,都是几百到上千不等的报价。 有趣的是,这些智能体定制化服务背后,最核心的不只是工作流设计,还有一个被很多人忽视的重要角色 —— …

嵌入式采集网关(golang版本)

为了一次编写到处运行,使用纯GO编写,排除CGO,解决在嵌入式中交叉编译难问题 硬件设备:移远EC200A-CN LTE Cat 4 无线通信模块,搭载openwrt操作系统,90M内存

基于Multisim数字电子秒表0-60S电路(含仿真和报告)

【全套资料.zip】数字电子秒表电路Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.秒表最大计时值为60秒; 2. 2位数码管显示,分辨率为1秒; 3.具有清零…

昇思大模型平台打卡体验活动:项目2基于MindSpore通过GPT实现情感分类

昇思大模型平台打卡体验活动:项目2基于MindSpore通过GPT实现情感分类 1. 载入与处理数据集 在情感分类任务中,我们使用了IMDB数据集,首先需要对数据进行加载和处理。由于原数据集没有验证集,我们将训练集重新划分为训练集和验证…

Mac如何实现最简单的随时监测实时运行状态的方法

Mac book有着不同于Windows的设计逻辑与交互设计,使得Mac book有着非常棒的使用体验,但是在Mac电脑的使用时间过长时,电脑也会出现响应速度变慢或应用程序崩溃的情况,当发生的时候却不知道什么原因导致的,想要查询电脑…

有趣的Midjourney作品赏析(附提示词)

中文提示词:国风少年 C4D软件,高分辨率,超细节,超现实主义, 英文提示词:National Style Youth Cinema4D,high resolution,hyper detailed,surrealism, --niji 6 --ar 1:1 中文提示词:粘土模型,男性穿着中世纪欧洲蓝色盔甲&#x…

时序预测 | gamma伽马模型锂电池寿命预测 EM算法粒子滤波算法结合参数估计

时序预测 | gamma伽马模型锂电池寿命预测 EM算法粒子滤波算法结合参数估计 目录 时序预测 | gamma伽马模型锂电池寿命预测 EM算法粒子滤波算法结合参数估计预测效果基本介绍参考资料 预测效果 基本介绍 gamma伽马模型锂电池寿命预测 EM算法粒子滤波算法结合参数估计 伽马模型、…

男同事36岁,听说被裁拿了12万。今天看到他退了群,但下午领导就反悔了,让他回来,还要把12万补偿退回来

亲爱的读者们,今天咱们来聊聊职场那些事儿。你听说过吗?有位男同事,36岁,被裁了,拿了12万补偿金,然后退了群。你以为这就是结局?不,故事才刚刚开始! 想象一下&#xff0…

李佳琦回到巅峰背后,双11成直播电商分水岭

时间倏忽而过,又一年的双11即将宣告结束。 从双11正式开始前的《新所有女生的offer》,到被作为“比价”标杆被其他平台直播间蹭、被与其他渠道品牌比较,再到直播间运营一时手快多发了红包……整个双11周期下来,李佳琦直播间在刷新…

Golang | Leetcode Golang题解之第546题移除盒子

题目: 题解: func removeBoxes(boxes []int) int {dp : [100][100][100]int{}var calculatePoints func(boxes []int, l, r, k int) intcalculatePoints func(boxes []int, l, r, k int) int {if l > r {return 0}if dp[l][r][k] 0 {r1, k1 : r, k…

Python | Leetcode Python题解之第553题最优除法

题目; 题解: class Solution:def optimalDivision(self, nums: List[int]) -> str:if len(nums) 1:return str(nums[0])if len(nums) 2:return str(nums[0]) "/" str(nums[1])return str(nums[0]) "/(" "/".joi…