计算机网络:数据链路层 - CSMA/CD协议

news2024/12/29 0:01:22

计算机网络:数据链路层 - CSMA/CD协议

    • 媒体接入控制
    • CSMA/CD协议
      • 截断二进制指数退避算法
      • 帧长与帧间间隔
      • 信道利用率


媒体接入控制

如图所示,这是一根同轴电缆,有多台主机连接到这根同轴电缆上,他们共享这根传输媒体,形成了一个总线型的局域网。各主机竞争使用总线随机的在信道上发送数据。

在这里插入图片描述

如果恰巧有两个或更多的站点在同一时刻发送数据,那么信号在共享媒体上就要产生碰撞,即发生了冲突,使得这些站点的发送都失败。

共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,也就是媒体接入控制

媒体接入控制技术主要分为两类,静态划分信道动态接入控制

静态划分信道:

静态划分信道主要有频分多址时分多址波分多址码分多址

静态划分信道,也就是预先固定分配好信道。这类方法非常不灵活,对于突发性数据传输,信道利用率会很低。通常在无线网络的物理层中使用,而不是在数据链路层中使用。该方面知识我已在物理层讲解:[计算机网络:物理层 - 信道复用]

动态接入控制:

动态接入控制又可以分为两类,一类是受控接入,另一类是随机接入

受控接入

用户要遵循一定的规则发送数据,而不能随意的发送数据

随机接入:

所有站点通过竞争随机的在信道上发送数据

随机接入存在一个问题,因为站点发送信息是随机的,如果恰巧有两个或更多的站点在同一时刻发送数据,那么信号在共享媒体上就要产生碰撞,使得这些站点的发送都失败。因此,随机接入这类协议要解决的关键问题是如何尽量避免冲突,以及在发生冲突后如何尽快恢复通信

著名的共享式以太网采用的就是随机接入。需要注意的是,随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有限领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术。


CSMA/CD协议

如图所示,多个主机连接到一根总线上,各主机随机发送帧:

在这里插入图片描述

当两个或多个主机同时发送帧时,代表帧的信号就会产生碰撞或成为冲突。又或者当某个主机正在使用总线发送帧的过程中,另一台主机也要发送帧,这同样也会产生碰撞。

很显然,如何协调总线上各主机的工作,尽量避免产生碰撞是一个必须要解决的重要问题。早期的共享式以太网采用载波监听多点接入碰撞检测,也就是CSMA/CD协议来解决该问题。

多点接入MA:多个主机连接在一条总线上,竞争使用总线
载波监听CS:每一个站点在发送帧之前,先要检测一下总线上是否有其他站点在发送帧
碰撞检测CD:每一个正在发送帧的同时,一边发送帧一边检测。一旦发现总线上出现碰撞,则立即停止发送,退避一段随机时间后再次重新发送

这三个特性都还比较好理解,多点接入也就是一条线上有多个主机,它们随机发送信息就有可能产生碰撞;载波监听就是再发送数据前,要先检测一下现在有没有其他主机在发送,如果有就先不发送;碰撞检测就是在发送数据的时候,要确保数据发送的时候没有发生碰撞。

而三者的英文缩写分别是MACSCD,因此该协议称为CSMA/CD协议。

第一个问题就是,主机明明在发送数据之前,就已经检测了信道上有没有主机在发送数据,为什么还有可能会发生碰撞?

我们看到以下情况:

在这里插入图片描述
现在整个信道上都没有信号传输,A检测到信道空闲,发送数据。

在这里插入图片描述

A发送信号不久后,此时信号还没有传送到D,D也想发送信号,D检测到信道空闲,也发送了信号。于是两个信号就会发生碰撞:

在这里插入图片描述

也就是说,电磁波在信道上传播的速率是有限的,当计算机监听到信道空闲而发送数据时,有可能已经有其它计算机在发送数据了

现在规定,一条信道中,最远的两台主机之间发送信号所需的时延为 τ \tau τ τ \tau τ音同“涛”。以上例子中,A和D就是该信道里面最远的两台主机,假设A发送数据的时间节点为0,那么该数据到达D的时间节点就是 τ \tau τ,而D在 τ − δ \tau - \delta τδ时刻发送了数据:

在这里插入图片描述

那么有以下重要时间点:

发生碰撞的时间为 τ − δ 2 {\color{red}\tau - \frac{\delta}{2}} τ2δ
D检测到碰撞的时间为 τ {\color{red}\tau} τ
A检测到碰撞的时间为 2 τ − δ {\color{red}2\tau - \delta} 2τδ

δ \delta δ可以视为是在即将接收到A信号前的 δ \delta δ时间,D发送了数据。当 δ \delta δ趋近于0,那么A检测到碰撞的时间就越接近 2 τ {\color{red}2\tau} 2τ。因为此时A和D已经是信道中最远的两台主机了,因此可以理解为一台主机发送一个信号,最多经过 2 τ {\color{red}2\tau} 2τ的时间,就可以确定自己是否发生了碰撞。因为只有在 2 τ {\color{red}2\tau} 2τ时间内,才有可能有其他主机发送数据产生碰撞,一旦过了 2 τ {\color{red}2\tau} 2τ的时间,所有主机一旦想发送数据,就会先进性载波监听,发现信道已经被占用了,就不会再发送数据了。

其中 2 τ {\color{red}2\tau} 2τ被称为争用期或者碰撞窗口,以太网中争用期被规定为 51.2 μ s 51.2\mu s 51.2μs。主机发送数据的同时,只需要进行 2 τ 2\tau 2τ时间的载波监听,就可以不再进行监听了,因为后续传送的数据一定不会发生碰撞。

显然,在以太网中主机越多,端到端的往返时延越大,发生碰撞的概率就越大。因此共享式以太网不能连接太多主机,使用的总线也不能太长

10Mb/s的以太网把争用期定为512比特发送时间,即 51.2 μ s 51.2\mu s 51.2μs,因此其总线长度不能超过5120m,但是由于一些其它因素,比如信号衰减等,以太网规定总线长度不能超过2500m。

现在我们讲解完了什么情况下会碰撞,以及如何检测出碰撞。那么两个信号发生碰撞后,要怎么办呢?


截断二进制指数退避算法

当两个主机发送的数据发生碰撞后,都要进行一个退避操作,简单来说就是过一会再发送一次,那么过一会是多久呢?如果说退避时长差不多,那么两主机过一段时间后同时发送,又会发生碰撞,因此这个退避时间必须是随机的。在CSMA/CD协议中,采用了截断二进制指数退避算法来进行退避操作,以产生随机的数值进行退避,确保主机碰撞后退避的时间不同。

算法如下:

  1. 规定基本退避时间为 2 τ 2\tau 2τ
  2. 定义参数 k = min(重传次数, 10)
  3. 从整数区间[0, 2 k − 1 2^{k} - 1 2k1]随机选一个数字r,最后的退避时间为 r × 2 τ {\color{Red} r \times 2\tau } r×2τ
  4. 如果重传16次依然不成功,丢弃该帧并向高层汇报

接下来我再详细讲解以上算法的执行过程。

首先要设置一个基本的退避时间,该时间被设置为 2 τ 2\tau 2τ。而最后的总退避时间,就等于一个随机数r乘以这个基本退避时间 2 τ 2\tau 2τ,也就是 r × 2 τ {\color{Red} r \times 2\tau } r×2τ

那么现在的问题就是,要如何生成这个随机数r。该随机数r取自一个区间[0, 2 k − 1 2^{k} - 1 2k1],而这个k不是一个固定的数值,其与重传次数相关。

  • 如果重传次数小于10,那么 k 就是重传次数
  • 如果重传此处大于10,那么 k = 10

比如说当前是第2次重传,那么k = 2,r的取值范围就是[0, 2 2 − 1 2^{2} - 1 221],也就是[0, 3]。最后r在这个区间内随机取一个值,最终的退避时间就是 r × 2 τ r \times 2\tau r×2τ

再比如当前是第14次重传,由于重传次数超过10,那么k = 10,r的取值范围就是[0, 2 10 − 1 2^{10} - 1 2101],也就是[0, 1023]。最后r在这个区间内随机取一个值,最终的退避时间就是 r × 2 τ r \times 2\tau r×2τ

随机数 r 是从离散的整数集合[0, 2 k − 1 2^{k} - 1 2k1]中随机选出的一个数,这也是该算法名称截断二进制指数称谓的由来。


帧长与帧间间隔

最短帧长

假设主机 A 正在给主机 D 发送一个很短的帧,边发送边检测碰撞,主机 A 很快就将该帧发送完毕了,之后就不再对该帧检测碰撞:

在这里插入图片描述

在该帧的传输过程中,主机 C 也要发送帧,主机 C 检测到总线空闲后就立即发送帧。

在这里插入图片描述

这必然会产生碰撞,主机 D 最终会收到主机 A 发送的并遭遇碰撞的帧。主机 D 会将该帧丢弃,但对于主机 A 而言,他并不知道自己已发送完毕的该帧在总线上传输的过程中遭遇了碰撞,因此不会重发该帧。很显然,使用CSMA/CD协议的以太网的帧长不能太短。

以太网规定最小帧长为 64 字节,即 512 个比特,而发送 512 个比特的时间即为争用期。如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于 64 字节以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧在发送过程中是否遭遇了碰撞

最大帧长

假设主机 A 正在给主机 D 发送一个很长的帧:
在这里插入图片描述

这会使得主机 A 长时间占用总线,而总线上的其他主机迟迟拿不到总线的使用权。另外,由于帧很长,还可能导致主机 D 的接收缓冲区无法装下该帧而产生溢出,因此以太网的帧长应该有其上限。

例如这是以太网版本 2 的MAC帧格式:
在这里插入图片描述

  • 最大帧长:其数据载荷的最大长度为 1500 字节,加上首部和尾部共 18 字节,帧的最大长度为 1518 字节

  • 最短帧长:数据载荷的最小长度不能小于 46 字节,这样加上首部和尾部共 18 字节,正好满足帧的最小长度为 64 字节

帧间间隔

另外,以太网还规定帧间最小间隔为 9.6 μ s 9.6\mu s 9.6μs在没有发生碰撞的情况下,一台计算机即使检测到信道空闲,也要等 9.6 μ s 9.6\mu s 9.6μs才能再次发送数据

这是为例使刚刚收到数据帧的计算机的缓存来得及清理,为接收下一帧做好准备。


信道利用率

接下来我们来讨论一下使用 CSMA/CD 协议的共享式以太网的信道利用率。如图所示,横坐标为时间:

在这里插入图片描述

总线上的某个主机可能发生多次碰撞,进行多次退避后成功发送了一个帧,最后帧经过发送时延 T 0 T_{0} T0把数据发送了出去。

在最极端的情况下,两台主机处于总线两端,因此还要经过一个单程端到端的传播时延后,总线才能完全进入空闲状态。因此发送一帧所需的平均时间为多个争用期 2 τ 2\tau 2τ 加上一个帧的发送时延 T 0 T_{0} T0,再加上一个单程端到端的传播时延 τ \tau τ

发送一帧的时间 = n × 2 τ + T 0 + τ 发送一帧的时间 = n \times 2\tau + T_{0} +\tau 发送一帧的时间=n×2τ+T0+τ

考虑以下这种理想情况,各主机发送帧都不会产生碰撞,总线一旦空闲,就有某个主机立即发送帧。发送一帧所占用总线的时间为 T 0 T_{0} T0,加上传播时延 τ \tau τ。这样就可得出极限信道利用率的表达式:

S max ⁡ = T 0 T 0 + τ S_{\max }=\frac{T_{0}}{T_{0}+\tau} Smax=T0+τT0

在以太网中,我们把参数a定为 τ \tau τ T 0 T_{0} T0之比:

a = τ T 0 a=\frac{\tau}{T_{0}} a=T0τ

因此极限信道利用率可以写为:
S max ⁡ = T 0 T 0 + τ = 1 1 + a S_{\max }=\frac{T_{0}}{T_{0}+\tau}=\frac{1}{1+a} Smax=T0+τT0=1+a1

为了提高信道利用率,参数 a 的值应尽量小,要是参数 a 的值尽量小, τ \tau τ的值应该尽量小。这意味着端到端的距离应受到限制,不应太长,而 T 0 T_{0} T0 的值应当尽量大。这意味着以太网的帧长应尽量大一些


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

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

相关文章

又整新活,新版 IntelliJ IDEA 2024.1 有点东西!

就在上周,Jetbrains 又迎来了一波大版本更新,这也是 JetBrains 2024首个大动作! JetBrains 为其多款 IDE 发布了 2024 年度首个大版本更新 (2024.1)。 作为旗下重要的产品之一,IntelliJ IDEA当然也不例外。这不,现如今…

使用 Meltano 将数据从 Snowflake 导入到 Elasticsearch:开发者之旅

作者:来自 Elastic Dmitrii Burlutskii 在 Elastic 的搜索团队中,我们一直在探索不同的 ETL 工具以及如何利用它们将数据传输到 Elasticsearch,并在传输的数据上实现 AI 助力搜索。今天,我想与大家分享我们与 Meltano 生态系统以及…

矩阵链乘法问题

描述 输入 输入共n1行 第一行输入矩阵的总个数n[2,1000] 后n行分别输入矩阵的维数[1,100] 输出 最后一行输出少乘法次数 输入样例 1 6 30 35 35 15 15 5 5 10 10 20 20 25 输出样例1 15125 代码实现 #include<iostream> #include<vector> #include<…

设计模式之观察者模式讲解

概念&#xff1a;定义对象间一种一对多的依赖关系&#xff0c;使得当每一个对象改变状态&#xff0c;则所有依赖于它的对象都会得到通知并被自动更新。 抽象主题&#xff1a;或者叫被观察者&#xff0c;可以持有、增加、删除观察者对象。具体主题&#xff1a;实现抽象主题定义的…

yolov5旋转目标检测遥感图像检测-无人机旋转目标检测(代码和原理)

YOLOv5&#xff08;You Only Look Once version 5&#xff09;是一个流行且高效的实时目标检测深度学习模型&#xff0c;最初设计用于处理图像中的水平矩形边界框目标。然而&#xff0c;对于旋转目标检测&#xff0c;通常需要对原始YOLOv5架构进行扩展或修改&#xff0c;以便能…

【经典算法】LCR187:破冰游戏(约瑟夫问题,Java/C/Python3/JavaScript实现含注释说明,Easy)

目录 题目思路及实现方式一&#xff1a;迭代模拟&#xff08;用链表模拟这个游戏&#xff09;思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式二&#xff1a;数学迭代思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式三&#xff1a;递归思路代码实现Java版…

数字化智慧养老:引领老年人融入科技时代新生活

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 人类社会已经步入了一个全新的数字时代。在这个时代&#xff0c;互联网、大数据、人工智…

学习操作系统之单道批处理系统

较之前操作的改进&#xff1a; 在原先的工作基础上&#xff0c;扩大存储&#xff0c;一次放入多个作业再进行处理。 单道&#xff1a;内存中始终只有一道作业 批处理&#xff1a;磁带上有多道作业&#xff0c;安装一次磁带&#xff0c;可以处理一批作业 1953年诞生了第一代…

【C语言】指针篇(指针数组,数组指针,函数指针,一级、二级指针)

文章目录 一、指针基础1.什么是指针2.指针的定义和初始化3.指针的解引用4.野指针和空指针5.指针的类型6.指针的大小7.指针的运算8.指针和数组9.指针和字符串10.二级指针 二、指针数组和数组指针1.指针数组2.数组指针3.练习 三、数组传参和指针传参1.一维数组传参2.二维数组传参…

开源区块链系统/技术 总结(欢迎补充,最新)

1. FISCO BCOS FISCO BCOS 2.0 技术文档 — FISCO BCOS 2.0 v2.9.0 文档https://fisco-bcos-documentation.readthedocs.io/ 2. ChainMaker&#xff08;长安链&#xff09; 文档导航 — chainmaker-docs v2.3.2 documentationhttps://docs.chainmaker.org.cn/v2.3.2/html/in…

你们是如何保证消息不丢失的?

1、什么是死信 在 RabbitMQ 中充当主角的就是消息&#xff0c;在不同场景下&#xff0c;消息会有不同地表现。 死信就是消息在特定场景下的一种表现形式&#xff0c;这些场景包括&#xff1a; 1. 消息被拒绝访问&#xff0c;即 RabbitMQ返回 basicNack 的信号时 或者拒绝basi…

CKA 基础操作教程(五)

Kubernetes Ingress 理论学习 Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。 Ingress 资源示例&#xff1a; apiVersion: networking.k8s.io/v1 # 指定 Kubernetes 中使用的 API 版本 kind: Ingress # 指定对象…

【日常记录】【JS】填充数组的三种方案

文章目录 1、for 循环填充2、new Array、fill、map 三者配合填充3、Array.from 填充数组参考链接 一般在开发中需要生成一个数组&#xff0c;用于测试等其他情况&#xff0c;以下介绍三种常见方案 1、for 循环填充 如果需要对这个数组的内容做一些特殊处理&#xff0c;写起来就…

Mysql底层原理七:InnoDB 行记录

1.行格式 1.1 Compact行格式 1.1.1 示意图 1.1.2 准备一下 1&#xff09;建表 mysql> CREATE TABLE record_format_demo (-> c1 VARCHAR(10),-> c2 VARCHAR(10) NOT NULL,-> c3 CHAR(10),-> c4 VARCHAR(10)-> ) CHARSETascii ROW_FORMATCOM…

企业网络安全运营能力的多维度评价及优化策略

网络安全是企业面临的一个日益重要的问题&#xff0c;安全运营能力的强弱直接关系到企业的健康可持续发展和综合竞争力的提升。为推动企业网络安全工作的标准化建设&#xff0c;提升企业的网络安全运营能力&#xff0c;本文从安全建设、安全应对和安全效果三个角度出发&#xf…

【迅为iTOP-4412-linux 系统制作(4)】ADB 或者 TF 卡烧写测试

准备工作 编译生成的内核镜像uImage 和设备树 dtb 文件“exynos4412-itop-elite.dtb”已经可以使用了。 把编译生成的uimage和dtb文件。拷贝fastboot工具。官方的u-boot-iTOP-4412.bin 也拷贝到 platform-tools 文件夹目录内。system.img 也拷贝到 platform-tools 文件夹目录…

阿里通义千问开源 320 亿参数模型;文字和音频自动翻译成手语Hand Talk拉近人与人的距离

✨ 1: Qwen1.5-32B Qwen1.5-32B是Qwen1.5系列中性能与效率兼顾的最新语言模型&#xff0c;内存占用低&#xff0c;运行速度快。 Qwen1.5-32B是Qwen1.5语言模型系列的最新成员&#xff0c;这个模型是基于先进的技术研发的&#xff0c;旨在提供一种既高效又经济的AI语言理解和生…

JS--demo2录入学生信息

实现学生信息录取。 效果图: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta http-equiv"X-U…

景联文科技:为AI大模型提供高质海量训练数据

在全球AI浪潮的推动下&#xff0c;大量训练数据已成为AI算法模型发展和演进中的关键一环。 艾瑞咨询数据显示&#xff0c;包括数据采集、数据处理&#xff08;标注&#xff09;、数据存储、数据挖掘等模块在内的AI基础数据服务市场&#xff0c;将在未来数年内持续增长。 预计到…

【LeetCode题解】2009. 使数组连续的最少操作数

文章目录 [2009. 使数组连续的最少操作数](https://leetcode.cn/problems/minimum-number-of-operations-to-make-array-continuous/)思路&#xff1a;一、排序去重滑动窗口代码&#xff1a; 2009. 使数组连续的最少操作数 思路&#xff1a;一、排序去重滑动窗口 1.对数组进行…