【计网】数据链路层笔记

news2024/11/14 16:03:39

【计网】数据链路层

数据链路层概述

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

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.coloradmin.cn/o/2237967.html

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

相关文章

docker 拉取MySQL8.0镜像以及安装

目录 一、docker安装MySQL镜像 搜索images 拉取MySQL镜像 二、数据挂载 在/root/mysql/conf中创建 *.cnf 文件 创建容器,将数据,日志,配置文件映射到本机 检查MySQL是否启动成功: 三、DBeaver数据库连接 问题一、Public Key Retrieval is not allowed 问题…

【c++篇】:栈、队列、优先队列:容器世界里的秩序魔法 - stack,queue与priority_queue探秘

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:c篇–CSDN博客 文章目录 前言一.容器stack1.介绍2.成员函数3.模拟实现4.注意事项 二.容器qu…

实现uniapp-微信小程序 搜索框+上拉加载+下拉刷新

pages.json 中的配置 { "path": "pages/message", "style": { "navigationBarTitleText": "消息", "enablePullDownRefresh": true, "onReachBottomDistance": 50 } }, <template><view class…

无人机培训机型有哪些?CAAC考证选3类还是4类

无人机培训是一个涵盖多个方面的综合性过程&#xff0c;旨在培养具备无人机操作技能和相关知识的人才。 无人机培训机型 无人机培训通常涵盖多种机型&#xff0c;以满足不同领域和应用场景的需求。常见的无人机培训机型包括&#xff1a; 1. 多旋翼无人机&#xff1a;也称为多…

95.【C语言】数据结构之双向链表的头插,头删,查找,中间插入,中间删除和销毁函数

目录 1.双向链表的头插 方法一 方法二 2.双向链表的头删 3.双向链表的销毁 4.双向链表的某个节点的数据查找 5.双向链表的中间插入 5.双向链表的中间删除 6.对比顺序表和链表 承接94.【C语言】数据结构之双向链表的初始化,尾插,打印和尾删文章 1.双向链表的头插 方法…

[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1 审题 猜测备份在www.zip中&#xff0c;输入下载文件。 知识点 反序列化 解题 查看代码 看到index.php中包含了class.php,直接看class.php中的代码 查看条件 当usernameadmin&#xff0c;password100时输出flag 构造反序列化 输入select中&#…

C++面试基础知识:排序算法 C++实现

上周实习面试&#xff0c;手撕代码快排没写出来&#xff0c;非常丢人&#xff0c;把面试官都给逗笑了。 基础不牢&#xff0c;地动山摇&#xff0c;基础的算法还是要牢记于心的。 插入排序 分为有序区和无序区&#xff0c;每次从无序区中选出一个&#xff0c;放到有序区域中。…

yarn报错`warning ..\..\package.json: No license field`:已解决

出现这个报错有两个原因 1、项目中没有配置许可证 在项目根目录package.json添加 {"name": "next-starter","version": "1.0.0",# 添加这一行"license": "MIT", }或者配置私有防止发布到外部仓库 {"priv…

批量缓存模版

批量缓存模版 缓存通常有两种使用方式&#xff0c;一种是Cache-Aside&#xff0c;一种是cache-through。也就是旁路缓存和缓存即数据源。 一般一种用于读&#xff0c;另一种用于读写。参考后台服务架构高性能设计之道。 最典型的Cache-Aside的样例&#xff1a; //读操作 da…

亚信安全并购亚信科技交易正式完成

亚信安全与亚信科技联合宣布&#xff0c;亚信安全正式完成对亚信科技的控股权收购&#xff0c;由此&#xff0c;规模近百亿的中国最大的软件企业之一诞生&#xff01;双方将全面实现公司发展战略&#xff0c;以及优势能力与资源的深度融合&#xff0c;形成业界独有的“懂网、懂…

MybatisPlus入门(十)MybatisPlus-逻辑删除和多记录操作

一、Mybatis-Plus 多记录操作 按照主键删除多条记录 List<Long> ids Arrays.asList(new Long[]{2,3}) userDao.deleteBatchIds(ids); 示例代码如下: Testvoid testDelete(){//删除指定多条数据List<Long> list new ArrayList<>();list.add(14025513424818…

【css】overflow: hidden效果

1. 不添加overflow: hidden 1.1 效果 上面无圆角 1.2 代码 <template><view class"parent"><view class"child1">child1</view><view class"child2">child2</view></view></template><…

「QT」几何数据类 之 QPolygonF 浮点型多边形类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

架构篇(04理解架构的演进)

目录 学习前言 一、架构演进 1. 初始阶段的网站架构 2. 应用服务和数据服务分离 3. 使用缓存改善网站性能 4. 使用应用服务器集群改善网站的并发处理能力 5. 数据库读写分离 6. 使用反向代理和CDN加上网站相应 7. 使用分布式文件系统和分布式数据库系统 8. 使用NoSQL和…

OpenCV基础05_GUI和PyMsql

目录 一、PySimpleGUI 1、布局和窗口 2、文本框组件 3、视频处理 4、图片处理 二、pymsql 1、数据库操作 2、数据采集 3、人脸识别 一、PySimpleGUI PySimpleGUI 是一个用于简化 GUI 编程的 Python 包&#xff0c;它封装了多种底层 GUI 框架&#xff08;如 tkinter、…

ModuleNotFoundError: No module named ‘_ssl‘ centos7中的Python报错

报错 ModuleNotFoundError: No module named ‘_ssl’ 解决步骤&#xff1a; 1.下载openssl wget https://www.openssl.org/source/openssl-3.0.7.tar.gz tar -zxvf openssl-3.0.7.tar.gz cd openssl-3.0.72.编译安装 ./config --prefix/usr/local/openssl make make install3…

外呼系统只需这 3 种功能,电销效率快速提升

在当今竞争激烈的商业环境中&#xff0c;电销团队面临着诸多挑战。如何提高电销效率&#xff0c;成为了企业关注的焦点。今天&#xff0c;小编就给大家介绍&#xff0c;沃创云三种外呼系统功能&#xff0c;让你的电销效率快速提升。 一、智能拨号功能 传统的电销方式中&#x…

18. Mouse 鼠标、KeyBoard 键盘和 Action 消息事件处理

在本节的例子中&#xff0c;会自定义很多UI控件实现不同的事件响应&#xff0c;如下图所示&#xff1a; IOKit 事件框架 事件流程 OS X的事件依赖 IOKit 框架&#xff0c;事件发生后首先会传递到IOKit框架中处理&#xff0c;然后通知Window Server服务层处理&#xff0c;由…

C# 实现对指定句柄的窗口进行键盘输入的实现

在C#中实现对指定句柄的窗口进行键盘操作&#xff0c;可以通过多种方式来实现。以下是一篇详细的指南&#xff0c;介绍如何在C#中实现这一功能。 1. 使用Windows API函数 在C#中&#xff0c;我们可以通过P/Invoke调用Windows API来实现对指定窗口的键盘操作。以下是一些关键的…

Spring Plugin与策略模式:打造动态可扩展的应用

目录 一、策略模式 二、Spring Plugin 2.1 Spring Plugin 实现策略模式开发 2.2 策略模式优缺点 三、Spring Plugin 原理 一、策略模式 策略模式是一种设计模式&#xff0c;它允许程序在运行中动态的选择不同的行为方式进行动态执行。策略模式的核心思想是将行为封装在一个个…