以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析

本文主要是介绍以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭
~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:计算机网络

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

目录

CSMA/CD 协议

以太网采用广播方式发送

以太网采取了两种重要的措施

(1) 采用较为灵活的无连接的工作方式

以太网提供的服务

(2) 以太网发送的数据都使用曼彻斯特 (Manchester) 编码

CSMA/CD协议

碰撞检测

检测到碰撞后

为什么要进行碰撞检测?

信号传播时延对载波监听的影响

CSMA/CD 重要特性

争用期

二进制指数类型退避算法 (truncated binary exponential type)

争用期的长度

最短有效帧长

强化碰撞

人为干扰信号

CSMA/CD协议的要点


CSMA/CD 协议

最初的以太网是将许多计算机都连接到一根总线上。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。

以太网采用广播方式发送

  • 总线上的每一个工作的计算机都能检测到 B 发送的数据信号。
  • 由于只有计算机 D 的地址与数据帧首部写入的地址一致,因此只有 D 才接收这个数据帧。
  • 其他所有的计算机(A, C 和 E)都检测到不是发送给它们的数据帧,因此就丢弃这个数据帧而不能够收下来。
  • 在具有广播特性的总线上实现了一对一的通信。  

以太网采取了两种重要的措施

为了通信的简便,以太网采取了两种重要的措施:

(1) 采用较为灵活的无连接的工作方式

  • 不必先建立连接就可以直接发送数据。
  • 对发送的数据帧不进行编号,也不要求对方发回确认。
  • 这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的。

以太网提供的服务

以太网提供的服务是不可靠的交付,即尽最大努力的交付。

当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。差错的纠正由高层来决定。

如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。  

(2) 以太网发送的数据都使用曼彻斯特 (Manchester) 编码

CSMA/CD协议

CSMA/CD 含义:载波监听多点接入 / 碰撞检测

 (Carrier Sense Multiple Access with Collision Detection) 。

多点接入”表示许多计算机以多点接入的方式连接在一根总线上。

载波监听”是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。

总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。

碰撞检测

“碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。

当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。

当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。

所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”。

检测到碰撞后

在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。

每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。

为什么要进行碰撞检测?

由于电磁波在总线上的传播速率是有限的,当某个站监听到总线是空闲时,也可能总线并非真正是空闲的。

A 向 B 发出的信息,要经过一定的时间后才能传送到 B。

B 若在 A 发送的信息到达 B 之前发送自己的帧 (因为这时 B 的载波监听检测不到 A 所发送的信息),则必然要在某个时间和 A 发送的帧发生碰撞。

碰撞的结果是两个帧都变得无用。

所以需要在发送期间进行碰撞检测,以检测冲突。  

信号传播时延对载波监听的影响

CSMA/CD 重要特性

使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。

每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。

这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。  

争用期

最先发送数据帧的站,在发送数据帧后至多经过时间 2\tau (两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。

以太网的端到端往返时延 2\tau  称为争用期,或碰撞窗口。

经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。

二进制指数类型退避算法 (truncated binary exponential type)

发生碰撞的站在停止发送数据后,要推迟(退避)一个随机时间才能再发送数据。

基本退避时间取为争用期 2\tau 。

从整数集合 [0, 1, … , (2^{k}-1)] 中随机地取出一个数,记为 r。

重传所需的时延就是 r 倍的基本退避时间。

参数 k 按下面的公式计算:              

                   k = Min[重传次数, 10]

当 k \tau  10 时,参数 k 等于重传次数。

当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告。

争用期的长度

10 Mbit/s 以太网取 51.2 s 为争用期的长度。 对于 10 Mbit/s 以太网,在争用期内可发送 512 bit,即 64 字节。

这意味着: 以太网在发送数据时,若前 64 字节没有发生冲突,则后续的数据就不会发生冲突。

最短有效帧长

如果发生冲突,就一定是在发送的前 64 字节之内。

由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节。

以太网规定了最短有效帧长为 64 字节,凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧。

强化碰撞

当发送数据的站一旦发现发生了碰撞时:

(1) 立即停止发送数据;

(2) 再继续发送若干比特的人为干扰信号  (jamming signal),以便让所有用户都知道现在已经发生了碰撞。  

人为干扰信号

CSMA/CD协议的要点

(1) 准备发送。但在发送之前,必须先检测信道。

(2) 检测信道。若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在 96 比特时间内信道保持空闲(保证了帧间最小间隔),就发送这个帧。

(3) 检查碰撞。在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。

这里只有两种可能性:

①发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。发送完毕后,其他什么也不做。然后回到 (1)。

②发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待 r 倍 512 比特时间后,返回到步骤 (2),继续检测信道。但若重传达 16 次仍不能成功,则停止重传而向上报错。

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

这篇关于以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/890799

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、