CSMA/CD协议
协议目的:
避免同一信道信号碰撞
协议规则:
(1)准备发送: 适配器从网络层获得一个分组, 加上以太网的
首部和尾部组成以太网帧, 放入适配器的缓存中。
(2)检测信道: 若检测到信道忙, 则应不停地检测, 一直等待
信道转为空闲。 若检测到信道空闲, 并在96比特时间内信道
保持空闲, 就发送这个帧。
3)在发送过程中仍不停地检测信道, 即网络适配器要边发送
边监听。 这里只有两种可能性:
一是发送成功: 在争用期内一直未检测到碰撞。 这个帧肯
定能够发送成功。 发送完毕后, 其他什么也不做。 然后回
到(1)。
二是发送失败: 在争用期内检测到碰撞。 这时立即停止发
送数据, 并按规定发送人为干扰信号。 适配器接着就执行
指数退避算法, 等待r倍512比特时间后, 返回到步骤(2),
继续检测信道。 但若重传达16次仍不能成功, 则停止重传
而向上报错。
多点接入MA:又称为动态媒体接入,分为两类。那么如何限制呢??????
随机接入:所有用户可以随机地发送信息。必须有解决碰撞地网络协议。
受控接入:用户不能随机发送信息要满足一定地控制。如分散控制的令牌环局域网和集中控制的多点线路探询,或称为“轮询”。
载波监听CS:用电子技术检测总线上有没有其他计算机发送的数据信号。
碰撞检测CD:就是计算机边发送数据边检测信道上的信号电压大小。
当多个站同时发送数据时,总线上电压摆动值增大。
当电压摆动超过一定门限值时,就认为至少有两个站在同时发送数据,表面产生了碰撞。
发送数据的站一旦发现发生了碰撞:
立即停止发送数据
再继续发送若干比特的人为干扰信号(jamming signal),
以便让所有用户都知道现在已经发生了碰撞
发生碰撞的站在停止发送数据后, 要推迟(退避) 一个随机时
间才能再发送数据。
二进制指数类型退避算法:
确定基本退避时间, 一般是取争用期 2时间。
定义参数 k , k 小于等于10, 即
k = Min[ 重传次数, 10]
从整数集合[0,1,…, (2k -1)]中随机地取出一个数, 记为 r。
重传所需的时延就是 r 倍的基本退避时间, 即
退避时延=r× 2tao
(对10Mb/s以太网, 2tao= 512比特发送时间= 51.2 微秒)
当重传达 16 次仍不能成功时即丢弃该帧, 并向高层报告。
特性:
双向交替通信(半双工通信)
每个站在发送数据
争用期的长度
以太网取 51.2 微秒为争用期的长度。
对于 10 Mb/s 以太网, 在争用期内可发送512 bit,
即 64 字节。
也可以说, 争用期是512比特发送时间
以太网在发送数据时, 若前 64 字节没有发生冲突, 则后
续的数据就不会发生冲突。
最短有效帧长
如果发生冲突, 就一定是在发送的前 64 字节之内。
由于一检测到冲突就立即中止发送, 这时已经发送出去的
数据一定小于 64 字节。
以太网规定了最短有效帧长为 64 字节, 凡长度小于 64
字节的帧都是由于冲突而异常中止的无效帧。
帧间最小间隔
帧间最小间隔为 9.6 微秒, 相当于 96 bit 的发送时间。
一个站在检测到总线开始空闲后, 还要等待 9.6 s 才能
再次发送数据。
这样做是为了使刚刚收到数据帧的站的接收缓存来得及清
理, 做好接收下一帧的准备。
协议限制方法:
对于随机接入只能人人自我监督
对于受控接入有受控手段
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现