把Ethernet(以太网)基本工作原理说清楚

2023-11-09

“以太”来源于19世纪物理学家解释光在空间中传播的介质:“以太”

以太网采用的介质控制方法是:CSMA/CD(带有冲突检测的载波侦听多路访问)



Ethernet 数据发送流程

CMSA/CD的发送流程可以简单概况为4步:先听后发、边听边发、冲突停止、延迟重发



(1)载波侦听过程
  • 每个主机在发送数据帧之前,首先要侦听总线的【忙/闲】状态。

  • Ethernet网卡的收发器一直在接收总线上的信号,如果总线上有其他主机发送的信号,那么曼彻斯特解码器的解码时钟一直有输出;如果总线上没有信号发送,那么曼彻斯特(Manchester)解码器的时钟输出为0。

    Manchester解码器是网卡上的一个组件,解码时钟会根据线路上的信号以曼彻斯特编码解码。

    曼彻斯特编码:

    因此,Manchester解码器的时钟信号可以反映出总线的【忙/闲】状态。



(2)冲突检测方法
  • 载波侦听并不能完全消除冲突。

    电磁波在同轴电缆中传播速度约为 2×108 m/s,如果局域网中两个【相隔最远】主机A和B相距 1000m,那主机A向主机B发送一帧数据要经过
    t = 1000 2 × 1 0 8 = 5 × 1 0 − 6 s = 5 μ s t = \frac{1000}{2×10^8} = 5×10^{-6} s = 5 μs t=2×1081000=5×106s=5μs
    主机A发送数据后,要经过t后,主机B才接收到这个数据帧。在这5μs的时间内,主机B不知道主机A已经发送数据,它就有可能也向主机A发送数据。出现这种情况,主机A和主机B的这次发送就发生【冲突】。

  • 比较极端的冲突是:主机A向主机B发送数据,当数据信号快要到达主机B时,主机B也发送了数据。等到冲突信号传送回主机A时,已经经过了两倍的传播延迟2τ(τ=D/V,D为总线传输介质的最大长度,V是电磁波在介质中的传播速度)。冲突冲突的数据帧可以传遍整个缆段,缆段上的主机都可以检测到冲突。缆段被称为【冲突域】,如果超过2τ的时间没有检测出冲突,则该主机已取得【总线访问权】,因此将 2τ定义为【冲突窗口】。

  • 冲突窗口是连接在一个缆段上所有主机能检测到冲突发生的最短时间。由于Ethernet物理层协议规定了总线最大长度,电磁波在介质中的传播速度是确定的,因此冲突窗口的大小也是确定的。

  • 最小帧长度与总线长度、发送速率之间的关系

    为了保证主机在发送一帧的过程可以检测到冲突,就要求发送一个最短帧的时间要超过冲突窗口的时间。

    因为帧发送并不是一瞬间全部发送完成,发送延迟 t = 帧长度/发送速率,发送速率一般不会改变,因此要在发送的过程中能检测到冲突需要规定一个最小帧长度

    最短帧长度为Lmin,主机发送速率为S,发送短帧所需的时间为Lmin/S,冲突窗口的值为2D/V
    L m i n S ≥ 2 D V \frac{L_{min}}{S} ≥ \frac{2D}{V} SLminV2D
    所以可以根据总线长度、发送速率和电磁波传播速度估计最小帧长度。

  • 冲突是指总线上同时出现两个或两个以上的发送信号,它们叠加后的信号波形不等于任何一个主机输出的信号波形。

  • 冲突检测有两种方法:比较法编码违例判决法

    比较法:主机在发送帧的同时,将其发送信号波形与总线上接收到的信号波形进行比较(信号在总线上是双向传播的,比如主机A、B、C,B发送信号A与C都能接收到)。如果两个信号波形不一致,说明冲突发生。

    编码违例判决法:检查从总线上接收的信号波形是否符合曼彻斯特编码规律,不符合则说明发生冲突。

  • 64B是Ethernet的最小帧长度:如果一个主机发送一个最小帧,或者一个帧的前64个字节没有检测到冲突,说明该主机已经取得总线发送权,冲突窗口期又称为争用期



发现冲突、停止发送
  • 如果主机在发送过程中检测到冲突,主机要进入停止发送,随机延迟后重发的流程。
  • 随机延迟重发的第一步是:发送冲突加强干扰序列,保证有足够的冲突持续时间,使局域网中的所有主机都能检测出冲突存在,并立即丢弃冲突帧,减少由于冲突浪费的时间,提高信道利用率。
  • 冲突加强干扰序列信号长度为32bit


随机延迟重发
  • Ethernet规定一个帧的最大重发次数为16。

  • 后退延迟算法是:截止二进制指数后退延迟

    算法可表示为:
    τ = 2 k ⋅ R ⋅ a τ = 2^k·R·a τ=2kRa
    τ:重新发送所需的后退延迟时间。

    a:冲突窗口的值。

    R:随机数,以主机地址为初始值生成随机数R。

    k:k=min(n,10),如果重发次数n小于10,则k=n,n≥10,则k=10.

    后退延迟时间τ到达后,节点将查询判断总线忙、闲状态,重新发送,如果再次遇到冲突,则重发次数+1,如果重发次数超过16时,表示发送失败,放弃发送该帧。

  • CSMA/CD方法被定义为一种随机争用型介质控制访问方法。



Ethernet帧结构

Ethernet V2.0标准 和 IEEE 802.3标准的Ethernet帧结构的区别

Ethernet V2.0是在DEC、Intel(英特尔)、Xeror公司合作研究的,所以也称Ethernet V2.0帧结构为DIX帧结构(公司首字母)

IEEE802.3标准对Ethernet帧结构也做出了规定,通常称之为 802.3帧

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hY8GTZ6v-1637301172841)(../../Figure/image-20211119131600704.png)]



前导码
  • DIX帧的前8B是前导码,每个字节都是10101010。接收电路通过提取曼彻斯特编码的自含时钟,实现收发双方的比特同步。

    说人话就是:编码时故意搞个特别的码在前面,通过长度告知解码器后面有货送来,注意接收。
    通过前导码就可判断信号是有用信号还是干扰信号,否则忽略不解码。

  • 802.3帧的前导码,每个字节都是10101010。但是有一个10101011的帧前定界符。前56位(7B×8)前导码是为了保证在接收【目的地址】时,已经进入【稳定接收状态(识别出这个是有用信号)】在62位1010…1010比特序列后出现两个11,两个11后就是Ethernet帧的目的地址字段。

  • 前导码只是为了实现收发双方的比特同步与帧同步,在接收后不需要保留,也不计入帧头长度



类型字段和长度字段
  • DIX帧的类型字段表示网络层使用的协议类型。

    例如:类型字段=0x0800表示网络层使用IPv4协议、类型字段=0x86DD表示网络层使用IPv6协议。

  • Ethernet帧最小长度为64B,除去帧头(目的地址+源地址+源地址),数据字段最短为46B。数据字段最长为1500B,因此数据字段长度在46~1500B之间。

  • DIX帧没有长度字段,所以接收端等待物理线路上没有电平的跳变(帧发送结束),除去4B的校验字段,就能取出数据字段。



Ethernet帧结构分析

前导码、类型、数据字段分析过了,不再赘述。


目的地址和源地址字段
  • 目的地址和源地址表示帧的接收节点和发送节点的硬件地址。

  • 硬件地址也叫物理地址、MAC地址、Ethernet地址。

  • 源地址必须是6B的MAC地址。

  • 目的地址可以是单播地址(发送给单一主机)、多播地址(发送给一部分主机)、广播地址(发送给所有主机)。


帧校验字段
  • 帧校验字段FCS( Frame Check Sequence)采用32位的CRC校验。

  • CRC校验的范围是:目的地址、源地址、长度、LLC(Logical Link Control:逻辑链路控制)数据等字段。



Ethernet接收流程分析

  • 主机主要不发送数据帧就处于接收状态。

  • 帧目的地址检查:

    1. 目的地址是单一主机的物理地址,并且是本主机地址—>接收。
    2. 目的地址是组地址,并且本主机属于该组—>接收。
    3. 目的地址是广播地址—>接收。
    4. 如果以上3种目的地址都与本主机地址不匹配,丢弃该接收帧。
  • 帧接收:

    1. CRC校验正确。
    2. 帧长度正确。
    3. 如果1、2都正确,将帧中的数据发送到网络层,否则报告”接收失败“进入帧结束状态。
  • 帧校验:

    1. CRC校验正确,但是帧长度不对,则报告“帧长度错”。
    2. 如果校验出错,判断接收帧是不是8bit的整数倍(字段长度的单位是字节,1B=8bit,接收帧长度正常的话肯定是8bit的整数倍)
      • 如果不是8bit的整数倍,则报告“帧比特出错”。
      • 如果没有发现比特丢失或者比特位对位错,则报告“帧校验错”。
    3. 进入结束状态。
  • 帧间最小间隔

    • 为了保证网卡能正确、连续的处理接收帧,要规定一个帧间最小间隔(网卡处理接收帧要时间、虽然很短)。
    • 规定Ethernet帧的最小间隔为9.6μs

Ethernet网卡

  • 网卡由三部分组成:网卡与传输介质的接口(RJ45)、Ethernet数据链路控制器、网卡与主机的接口(主板的I/O扩展槽)。

  • Ethernet数据链路控制器的功能:实现发送数据编码、接收数据解码、CRC产生与校验、曼彻斯特编码与解码、CSMA/CD介质访问控制。

  • 网卡的物理地址写入网卡的只读存储器中,不会与世界上任何一台其他的计算机重复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

把Ethernet(以太网)基本工作原理说清楚 的相关文章

随机推荐

  • LeetCode 1143. 最长公共子序列(C++)

    题目地址 力扣 题目难度 Medium 涉及知识点 动态规划 字符串匹配 分析 由于子序列不同于子串 子串必须要连续 而子序列可以不连续 假设最长子序列长度为k 那么我们如果要通过遍历的方法来暴力求解 其时间复杂度至少为O 这肯定是无法接受
  • 【华为OD机试 2023】最左侧冗余覆盖子串(C++ Java JavaScript Python)

    华为od机试题库 华为OD机试2022 2023 C Java JS Py https blog csdn net banxia frontend category 12225173 html 华为OD机试2023最新题库 更新中 C Ja
  • (fastjson)java 如何将String(字符串)与JSON互转

    一 导入依赖
  • Apple的示例SpeakHere不能运行解决

    From your error message Application windows are expected to have a root view controller at the end of application launch
  • 论文写作记录

    论文画图 在MATLAB中导出600dpi图像 导出设置dpi后 导出tif格式的图片 直接重命名为jpg格式
  • 从分层架构到微服务架构(五)之服务化架构

    从分层架构到微服务架构 是一系列介绍 Fundamentals of Software Architecture 中提到的8种架构模式的文章 这里不会事无巨细地介绍所有的细节 而是会挑选其中关键内容 更多详情请阅读原书 往期精彩 从分层架构
  • 静态的main方法为啥可以访问非静态成员

    首先第一点 静态方法中可以创建动态变量和方法 第二点 对象属于动态的 第三点 动态的可以调用调用静态的 综上 所以要在静态方法里面调用动态参数和动态的方法就可以通过创建对象来实现调用动态参数和动态的方法 https www bilibili
  • SpringBoot如何使用JDBC操作数据库呢?

    转自 SpringBoot如何使用JDBC操作数据库呢 下文笔者讲述SpringBoot中使用jdbc操作数据库的方法分享 如下所示 实现思路 1 引入相应的jar包 2 在application yml配置相应的数据库连接信息及其它属性
  • Qt 平台在windows下配置CGAL

    首先我用的平台和库的版本是 Qt Creator 2 5 0 Qt 4 8 2 CGAL 4 1 Boost1 15 CMake2 8 8 一 名词解释 1 CGAL Computational Geometry Algorithm Lib
  • 转】PPT带备注演示(只有讲解者看到备注)[转载]

    带备注演示 讲解者可以看到备注 观众看不到 想实现PPT带备注的演示吗 这种方式只有讲解者自己能够看到备注内容 而观 看PPT演示的人看不见 如下 图所示 要实现这种放映方式只需要简单的两步 1 第一步设置多显示器 在Windows XP中
  • 利用RMI实现在多台服务器之间的资源共享

    RMI Remote Method Invocation RMI是分布式对象软件包 它简化了在多台计算机上的JAVA应用之间的通信 JDK1 2以上都支持这个功能 有了RMI就可以实现不同服务器之间的通信 也就是多个JVM Java Vir
  • Lumerical学习之代码实现材料颜色与透明度的改变

    为了在仿真设计的时候让器件显得更有层次感 方便判断器件结构的各个部位 需要给材料设置合理的颜色和透明度 虽然可以在菜单栏的Material中直接调整材料颜色 但若是代码实现的话一方面可以重复利用 避免换个工程就在菜单栏重新设置 一方面也是给
  • 算法,CS学习,嵌入式学习,算法刷图,推荐资料,直接下载

    目录 附 算法代码库 附 CS 综合学习类 附 嵌入式 综合学习类 附 算法刷题总结 数据结构与算法简述和CS综述整理 本文非基础的教程 本文会列出大量学习和参考网站 老惯例 一个文章是一个集大成 本文借助了语音输入 PC 版 讯飞输入法
  • Spring Boot(二)配置一个阿里云的镜像

    1 新建项目 从中央仓库下载 太慢了 配置一个阿里云的镜像 1 从maven官网中下载apache maven 3 6 3 2 配置环境变量 添加path 3 验证 4 配置localRepository 新建文件夹 repo 用来存放从中
  • jQuery empty() VS remove()

    empty 和 remove的区别 empty remove empty empty 是移除被选元素的所有子节点 不包括自身 例子
  • c++派生类构造顺序

    1 整体构造顺序 前面我们提到过 一个类在构造的时候 先会构造其成员变量 在调用自身的构造函数 对于派生类来说 除了可能有成员变量 还可能有多个基类 在初始化派生类对象时 其构造函数要负责基类与基类成员对象的构造 还要负责自己成员对象的构造
  • 二叉树基本操作

    定义结构体 typedef int BTDatatype typedef struct BinaryTreeNode struct BinaryTreeNode left struct BinaryTreeNode right BTData
  • 分布式协议与算法——Raft算法

    目录 Raft算法 领导者选举 有哪些成员身份 领导者选举流程 选举细节 节点之间如何通信 什么是任期 选举有哪写规则 随机超时时间是什么 小结 日志复制 如何理解日志 如何复制日志 如何实现日志的一致 小结 节点成员变更 成员变更的问题
  • QCefView(1)—— CMAKE项目、库文件生成和项目测试

    目录 下载资源 说明文档 Quick Start with Qt Cef https tishion github io QCefView CMAKE生成 sln项目文件 库文件编译和测试项目编译运行 测试QCefView自带的项目QCef
  • 把Ethernet(以太网)基本工作原理说清楚

    文章目录 Ethernet 数据发送流程 1 载波侦听过程 2 冲突检测方法 发现冲突 停止发送 随机延迟重发 Ethernet帧结构 Ethernet V2 0标准 和 IEEE 802 3标准的Ethernet帧结构的区别 前导码 类型