【计算机网络】MAC层(三)经典以太网的MAC子层协议

简介: 前言 本文将会围绕下图来展开描述: 背景 上图为经典以太网的MAC子层协议的前后两个版本。 为什么要有这样一个协议? ————因为直接通过线路发送二进制编码,站点无法将0与空闲线路区分开。
本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

前言

本文将会围绕下图来展开描述:

image.png

背景

上图为经典以太网的MAC子层协议的前后两个版本。
为什么要有这样一个协议?
————因为直接通过线路发送二进制编码,站点无法将0与空闲线路区分开。

两个版本的差异

由于IEEE 802.3要完全兼容DIX,

故除了前缀多了个SOF标志位、中间有个字段可表示type或length外,其他都是一样的。

如何保证type与length字段兼容(为什么要有最大长度限制)?

之前type所占用的字段都是在1500以上(十进制)。

于是有如下规定:

  • 在1536(十六进制表示为0x600)以上的,说明该字段为type;
  • 小于等于1536的,说明该字段为length(即length最大为1536)

以1536为分界线

为什么要有最小长度限制?

  • 保证数据发送时间应大于等于往返传播时延,即t>=2τ,使得发生冲突时,站点能监听到冲突,并重发信息。(最重要)

image.png

  • 当收发器监测到冲突时,它需要截断当前帧。为了能更容易识别有效帧,因此规定如上图的一组信息中除去前缀(preamble)的部分至少要达到64个字节,如果不够,上图所示的填充字段(pad)就发挥作用了。

对其他字段的补充解释

Preamble

该字段有8个byte,由于1byte=8bit,所以从bit的视角看是这样的:

image.png
注意最后两位是11,最后1byte也称为802.3的定界符开头。

前缀用到了曼彻斯特编码来同步发送方和接收方的时钟,最后两bit的作用为告诉接收方接下来会有帧被发送。

(我认为这个10101010不是固定的,原文指的应该是以这样跳变的形式出现(符合曼彻斯特编码),不同形式应该是不同的,比如组播和广播,具体的等我看到实际的报文再回来勘误)

source address

该字段是唯一的,没有两个相同的站点会拥有相同的地址

check sum

用到的是之前也提到的CRC校验码之类

CSMA/CD with Binary Exponential Backoff(二进制指数回退算法)

回顾上两篇文章中提到的小明坐公交问题:

【计算机网络】媒介访问控制子层(MAC)(一)概念理解

如果他和小军同时想坐座位,又同时等待并等待相同时间的话,下一次他们还是会冲突。
该算法就用于解决这个问题。

假设以一个slot的间隔为时间单位。第一次他们各自等待0或1$(2^1-1)$,要是发现还冲突,就等待0/1/2/3$(2^2-1)$......第i次还冲突就等待$(2^i-1)$,这样就能尽可能错开时间。

需要注意的是,由于这是指数级增长,所以如果完全取决于i的话是不现实的。所以有如下规定:当i>10后,即范围最大值边界超过1023后,这个范围就不再变动,之后再有冲突,也是在0~1023之间取随机时间间隔。

参考书籍

  • 《Computer Networks (the fifth edition) 》

看英文原书、理解、码字整理都不容易,希望各位多多包涵哈~如有错误,恳请各位大神指出!

相关文章
|
11天前
|
域名解析 存储 网络协议
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
本文详细介绍了IP协议报头结构及其各字段的功能,包括版本、首部长度、服务类型、总长度、标识、片偏移、标志、生存时间(TTL)、协议、首部检验和等内容。此外,还探讨了IP地址的网段划分、特殊IP地址的应用场景,以及路由选择的大致流程。最后,文章简要介绍了DNS协议的作用及其发展历史,解释了域名解析系统的工作原理。
48 5
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
|
14天前
|
缓存 算法 物联网
基于AODV和leach协议的自组网络平台matlab仿真,对比吞吐量,负荷,丢包率,剩余节点个数,节点消耗能量
本系统基于MATLAB 2017b,对AODV与LEACH自组网进行了升级仿真,新增运动节点路由测试,修正丢包率统计。AODV是一种按需路由协议,结合DSDV和DSR,支持动态路由。程序包含参数设置、消息收发等功能模块,通过GUI界面配置节点数量、仿真时间和路由协议等参数,并计算网络性能指标。 该代码实现了节点能量管理、簇头选举、路由发现等功能,并统计了网络性能指标。
133 73
|
11天前
|
监控 网络协议 网络性能优化
如何办理支持UDP协议的网络
在当今网络环境中,UDP(用户数据报协议)因传输速度快、延迟低而广泛应用于在线游戏、视频流媒体、VoIP等实时服务。本文详细介绍了办理支持UDP协议网络的方法,包括了解UDP应用场景、选择合适的ISP及网络套餐、购买支持UDP的设备并进行优化设置,以及解决常见问题的策略,帮助用户确保网络稳定性和速度满足实际需求。
|
8天前
|
缓存 网络协议 网络架构
网络抓包分析【IP,ICMP,ARP】以及 IP数据报,MAC帧,ICMP报和ARP报的数据报格式
本文详细介绍了如何使用网络抓包工具Wireshark进行网络抓包分析,包括以太网v2 MAC帧、IP数据报、ICMP报文和ARP报文的格式,以及不同网络通信的过程。文章通过抓包分析展示了IP数据报、ICMP数据报和ARP数据报的具体信息,包括MAC地址、IP地址、ICMP类型和代码、以及ARP的硬件类型、协议类型、操作类型等。通过这些分析,可以更好地理解网络协议的工作机制和数据传输过程。
网络抓包分析【IP,ICMP,ARP】以及 IP数据报,MAC帧,ICMP报和ARP报的数据报格式
|
11天前
|
网络协议 网络安全 网络架构
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
|
14天前
|
数据采集 JSON API
🎓Python网络请求新手指南:requests库带你轻松玩转HTTP协议
本文介绍Python网络编程中不可或缺的HTTP协议基础,并以requests库为例,详细讲解如何执行GET与POST请求、处理响应及自定义请求头等操作。通过简洁易懂的代码示例,帮助初学者快速掌握网络爬虫与API开发所需的关键技能。无论是安装配置还是会话管理,requests库均提供了强大而直观的接口,助力读者轻松应对各类网络编程任务。
56 3
|
15天前
|
机器学习/深度学习 JSON API
HTTP协议实战演练场:Python requests库助你成为网络数据抓取大师
在数据驱动的时代,网络数据抓取对于数据分析、机器学习等至关重要。HTTP协议作为互联网通信的基石,其重要性不言而喻。Python的`requests`库凭借简洁的API和强大的功能,成为网络数据抓取的利器。本文将通过实战演练展示如何使用`requests`库进行数据抓取,包括发送GET/POST请求、处理JSON响应及添加自定义请求头等。首先,请确保已安装`requests`库,可通过`pip install requests`进行安装。接下来,我们将逐一介绍如何利用`requests`库探索网络世界,助你成为数据抓取大师。在实践过程中,务必遵守相关法律法规和网站使用条款,做到技术与道德并重。
30 2
|
17天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
48 3
|
11天前
|
安全 算法 网络安全
无线网络中的WEP协议及其安全性问题
无线网络中的WEP协议及其安全性问题
29 0

热门文章

最新文章

下一篇
无影云桌面