热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

CSMA/CD总线以太网和交换式以太网

在规划一群计算机如何使用网络介质传输数据包而不是一群人如何使用电话线实时通话的时候,不得不换一种思路。为什么以太网最初没有采用TDM或者FDM或者随便别的什么xxDM,而是采用随机

在规划一群计算机如何使用网络介质传输数据包而不是一群人如何使用电话线实时通话的时候,不得不换一种思路。

为什么以太网最初没有采用TDM或者FDM或者随便别的什么xxDM,而是采用随机统计分时复用的CSMA/CD呢?

  • 以太网流量是突发的
  • 以太网流量不要求实时
  • 以太网无连接

其实,甚至 冲突检测 都是次要的,它只是优化,而并非核心。有冲突就要有退避,所以,紧随着冲突,以太网采用的二进制指数退避,也并非核心!如果把所有的冲突检测以及退避机制都交给上层,那么保留一个核心的简洁以太网模型来分析是必要的。

只需要假定以太网流量符合泊松分布就足够了。在基于这个假设的结论进行分析之前,必须先来看一下 为什么冲突并非核心。 不然就不敢随意抛弃它。

如果一个站点已经检测到信道空闲,那为什么还会有冲突呢?因为数据帧的传输是有传播时延的,数据帧传输速度有上限,即光速 c c c,也就是说对于每一个站点的冲突检测机制来讲,它有一个所谓的 视界 视界外面的东西,站点是检测不到的。

  • 站点只能检测到数据帧到达目的地之前 L c \dfrac{L}{c} cL( L L L为线缆长度)时间的冲突!

所以说,冲突是由光速极限引起的,这种物理世界的局限,或者你说缺陷也行,冲突并非由算法导致,所以冲突并非核心。

然而,日常物理世界诺大的光速到了纳秒,微秒,毫秒计时的计算机网络世界,却是一个非常日常的参数。所以,虽然它不是算法的核心,但是引发的冲突导致的重传将会极大影响以太网的效率。

按照假设,以太网的流量符合泊松分布,忽略复杂的二进制指数退避,再假设重传概率是常数,那么信号的效率 E E E可以表示为:

E = 1 1 + 2 B L e c l E=\dfrac{1}{1+\dfrac{2 B Le}{cl}} E=1+cl2BLe1

其中, B B B为带宽, L L L为线缆长度, l l l为帧长度, e , c e,c ec为常数。

由此, L L L越长, B B B越大,CSMA/CD的效率就越低,反之,帧长 l l l越长,效率就越高!所谓的以太网最小帧长度64B,普通帧长度1500B,理论上都是可以从这公式里算出来的,之所以我们现在都接受1500B是以太网卡的普遍MTU,其实是因为这样在泊松分布的假设下效率最高。

所以说,随着对带宽需求的提高,对距离的需求提高,CSMA/CD逐渐变得不再适用,也因此,后来的千兆,万兆以太网,干脆不再支持CSMA/CD了。当然,CSMA/CD时代的1500B这个默认MTU值,作为以太网的标志依然被兼容性地保留了下来。

由于CSMA/CD的冲突是光速固有极限带来的,所以在时间域上我们没有办法消除。

要想消除冲突,必须将时间域上的统计分时复用转换到空间域上的统计缓存复用。

在时间域的CSMA/CD时代,统计分时复用机制是分布在每一个站点上被实现的,这就是 介质访问子层 的作用,如果转换到了空间域的缓存统计复用,那么介质访问子层便不再需要,有帧就直接发,所有的分布式介质访问子层的功能将统一集中于交换节点的队列管理系统。

这就是交换式以太网,在纯交换式以太网中,已经不再需要CSMA/CD,交换机取代了介质访问子层的作用。当然,在工程上,兼容是必须的,所以,支持CSMA/CD并不意味着一定就采用了它。

说回冲突。

在时间域上,同一个时间槽,只能有一个帧在传输,如果别的帧也传输了,就会造成冲突,两者皆退避。

在空间域上,发生着完全相同的事情。

同一个缓存位置,只能有一个帧占据,如果同时来了两个帧,针对该位置,那就是冲突了。然而队列机制可以将这次冲突暂时 积累 下来,使用 下一个位置 ,和时间域不同,时间只能纵向延展,而空间域则可以横向扩展。

最终,当空间域用尽了整个缓存后,需要将积累的冲突进行一次性惩罚,即积累式退避,这就是AIMD中MD的意义,其实就是空间域的积累式指数退避。积累式退避也是空间域的,即可发送字节数的MD,而不是等待时间MD。

介质访问子层功能在交换式以太网时代已经被架空了,事实上它也控制不了 什么时候发送 ,它只需要知道能发多少就是了。

这就是总线式以太网向交换式以太网进化过程中背后的故事。

值得一提的是,不要纠结于为什么以太网流量符合泊松分布,事实上,以太网流量根本就不符合泊松分布,之所以采用这个泊松分布假设,是因为在数学上比较容易处理,其背后的假设也是合理的:

  • 数据帧的发送是独立的随机事件。

浙江温州皮鞋湿,下雨进水不会胖。


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 深入理解一致性哈希算法及其应用
    本文详细介绍了分布式系统中的一致性哈希算法,探讨其原理、优势及应用场景,帮助读者全面掌握这一关键技术。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
author-avatar
姚若薇_453
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有