当前位置: 首页 > news >正文

全双工和半双工在以太网报文收发过程中的核心区别

MCU A (集成MAC) -> PHY A -> 网线 -> PHY B -> MCU B (集成MAC) ,这种点对点直连的场景(不使用交换机或集线器),详细说明全双工和半双工在以太网报文收发过程中的核心区别。
核心区别根源:
• 物理通道:
o 全双工: 网线内部使用两对独立的差分线(例如百兆以太网中的线对1-2和3-6)。一对(如1-2)专门用于A -> B的发送(TX A -> RX B),另一对(如3-6)专门用于B -> A的发送(TX B -> RX A)。发送和接收物理通道完全分离。
o 半双工: 网线内部通常只使用一对共享的差分线(例如百兆以太网中的线对1-2)。所有通信(A->B 和 B->A)都挤在这一对线上轮流进行。发送和接收共享同一个物理通道。
报文收发过程详解:

场景1:节点A 向 节点B 发送数据 (节点B 此时不主动发送)

  1. MCU A (MAC):
    o 构造以太网帧(源MAC=A, 目的MAC=B, 数据, FCS)。
    o 通过MII/RMII接口将帧数据发送给PHY A。
  2. PHY A:
    o 全双工:
     接收到MAC A的数据。
     立即、无条件地 将数字信号调制,并通过 TX A (线对1-2) 发送出去。完全不关心 RX A (线对3-6) 上是否有信号。
    o 半双工:
     接收到MAC A的数据。
     先侦听共享线路(CS - Carrier Sense):
     如果检测到线路上没有载波信号(空闲),则切换到发送模式(关闭接收电路)。
     将数字信号调制,并通过共享线对 (线对1-2) 发送出去。
     在发送过程中,持续监听自己发送的信号(CD - Collision Detection)。
     (本例假设B未发送,线路空闲,无冲突)
     如果检测到线路忙(有载波),则推迟发送,等待线路空闲。
  3. 网线:
    o 全双工: 信号在线对1-2 (TX A -> RX B) 上传输。线对3-6 (RX A <- TX B) 此时空闲。
    o 半双工: 信号在共享线对 (线对1-2) 上传输。
  4. PHY B:
    o 全双工:
     通过RX B (线对1-2) 接收到信号。
     同时,PHY B 的 TX B (线对3-6) 可以自由地发送数据(如果MCU B有数据要发),完全不受RX接收的影响。
     将接收到的信号解调、恢复时钟,转换成数字信号。
     通过MII/RMII接口将数字信号发送给MAC B。
    o 半双工:
     通过共享线对 (线对1-2) 接收到信号。
     PHY B 必须处于接收模式(发送电路关闭),因为它检测到了载波信号。
     将接收到的信号解调、恢复时钟,转换成数字信号。
     通过MII/RMII接口将数字信号发送给MAC B。
  5. MCU B (MAC):
    o 接收PHY B送来的数据,解析帧,校验,若目的MAC匹配则交给上层。
    场景1小结 (A->B, B空闲):
    • 全双工: A发送给B的过程丝毫不影响B同时发送数据给A的可能性(如果B有数据要发)。PHY A 的 TX 和 RX 电路、PHY B 的 TX 和 RX 电路都独立并行工作。双向通信可同时进行。
    • 半双工: A发送时,B只能接收,不能发送。整个物理通道被A独占。PHY A 和 PHY B 都必须将共享线路用于A->B的传输。双向通信不能同时进行。

场景2:节点A 和 节点B 同时尝试发送数据给对方

  1. MCU A & MCU B:
    o A 和 B 的应用层几乎同时需要发送数据给对方。
    o MAC A 和 MAC B 各自构建帧(源A->B, 源B->A),传给各自的PHY。
  2. PHY A & PHY B:
    o 全双工:
     PHY A: 接收到数据,立即、无条件地通过 TX A (线对1-2) 发送给B。
     PHY B: 接收到数据,立即、无条件地通过 TX B (线对3-6) 发送给A。
     两者同时发送,互不干扰! 因为使用的物理线对不同。
    o 半双工:
     假设两者几乎同时开始侦听:
     PHY A 侦听共享线路,初始空闲 -> 准备发送。
     PHY B 侦听共享线路,初始空闲 -> 准备发送。
     两者几乎同时开始发送:
     PHY A 切换到发送模式,开始通过共享线对 (线对1-2) 发送信号。
     PHY B 切换到发送模式,开始通过共享线对 (线对1-2) 发送信号。
     冲突发生:
     信号在共享线对上叠加、畸变。
     冲突检测:
     PHY A 在发送过程中监听线路,发现接收到的信号与自己发送的预期信号不符 -> 检测到冲突!
     PHY B 同样检测到冲突!
     冲突处理:
     PHY A 和 PHY B 立即停止发送当前帧。
     各自向自己的MAC报告冲突发生。
     各自发送一个阻塞信号 (Jam Signal) 到共享线对上(确保对方也感知到冲突)。
     退避:
     MAC A 和 MAC B 收到冲突报告,启动二进制指数退避 (Backoff) 算法。
     各自随机等待一段时间后,重新尝试发送(回到CSMA/CD流程)。
  3. 网线:
    o 全双工:
     线对1-2 (TX A -> RX B) 承载着A发给B的帧。
     线对3-6 (TX B -> RX A) 承载着B发给A的帧。
     信号清晰,无干扰。
    o 半双工:
     共享线对 (线对1-2) 上承载着叠加畸变的冲突信号,随后是Jam信号。
  4. PHY A & PHY B (接收端):
    o 全双工:
     PHY B:通过RX B (线对1-2) 正常接收到A发来的清晰帧,解调后送给MAC B。
     PHY A:通过RX A (线对3-6) 正常接收到B发来的清晰帧,解调后送给MAC A。
     双方都成功、同时收到了对方发来的帧。
    o 半双工:
     PHY A 和 PHY B 在冲突期间都处于发送模式(试图发送),接收电路效果差。
     检测到线路上是冲突/Jam信号,知道不是有效帧,丢弃接收到的信号。
     不会向各自的MAC传递任何有效数据。发送失败。
    场景2小结 (A和B同时互发):
    • 全双工: A->B 和 B->A 的帧同时、独立地在不同的线对上传输,双方都能成功接收对方的数据。吞吐量达到理论最大值(例如100Mbps Full-Duplex 意味着 A->B 100Mbps 同时 B->A 100Mbps)。
    • 半双工: 必然发生冲突! A和B的发送尝试都失败,需要退避重试。整个通信通道被浪费,造成延迟。 理论最大吞吐量减半(50%用于发送,50%用于接收,还受冲突影响实际更低),且同一时刻只能有一个方向通信。

结论:
在 MCU A (MAC) - PHY A - 网线 - PHY B - MCU B (MAC) 的点对点直连中:
• 全双工 依靠独立的物理发送和接收通道(网线中的不同线对),实现了真正的、无冲突的、同时的双向通信。节点A发送数据给B的同时,节点B可以毫无阻碍地发送数据给A。PHY的发送和接收电路始终并行工作,带宽利用率达到理论最大值(双向各100%)。这是现代以太网的标准和期望模式。
• 半双工 受限于单一的共享物理通道,迫使通信双方轮流使用线路。它依赖CSMA/CD机制(载波侦听、冲突检测、退避重试)来协调共享介质的访问。这导致:
o 同一时刻只能进行一个方向的通信(A->B 或 B->A)。
o A和B同时尝试发送必然导致冲突,造成通信失败和延迟。
o 带宽利用率低下(理论最大值不超过50%,实际更低)。
o PHY需要在发送和接收状态之间切换。
因此,在设计和配置这种点对点连接时,必须确保两端协商或强制设置为全双工模式,以获得最佳性能和可靠性。半双工模式会严重限制性能并引入不必要的冲突风险。

http://www.dtcms.com/a/266108.html

相关文章:

  • AMD-R9-9950X 和 微星B850M-MORTAR-WIFI主板 简单开箱测评
  • [自然语言处理]汉语文本分词
  • Odoo 中国特色高级工作流审批模块研发
  • 页面登录数据的加密(前端+后端)
  • 使用pdf box去水印
  • 搜索选择DFS还是BFS
  • NumPy-核心函数transpose()深度解析
  • 【HarmonyOS】HAR和HSP循环依赖和依赖传递问题详解
  • 二叉树展开为链表C++
  • 20.数据同步Mysql-ES解决方案
  • 网络编程学习路线图
  • 如何配置core dump生成
  • Android App冷启动流程详解
  • webrtc-streamer视频流播放(rstp协议h264笔记)
  • 新人如何入门学习 STM32?
  • Stata如何做机器学习?——SHAP解释框架下的足球运动员价值驱动因素识别:基于H2O集成学习模型
  • Selenium 自动化测试中跳过机器人验证的完整指南:能用
  • 1688 Agent Russia 丨俄罗斯淘宝代购1688代采集运系统搭建指南介绍
  • 8分钟讲完 Tomcat架构及工作原理
  • Vue如何处理数据、v-HTML的使用及总结
  • 使用Python Watchdog库实现文件系统监控
  • Linux基本命令篇 —— tar命令
  • 修改阿里云vps为自定义用户登录
  • 使用Feapder中的Dedup过滤数据
  • 【python】json.loads()函数处理字符串时不需要指定编码
  • Windows系统编程(Win32 API)
  • pytorch、torchvision与python版本对应关系
  • 什么是软中断
  • 使用Visual Studio 2022创建CUDA编程项目
  • Python爬虫 XPath 三方库lxml