计网学习笔记三 MAC与LAN
在上一讲中,我们学习了链路层可以提供的服务:framing,link access,reliable delivery,error detection&correction。这一讲我们从link access中的broadcast接入方式深入,学习这种接入方式下的协议,以及衍生出的MAC地址,最后会学习一下主要的局域网种类。
课件地址:https://cs.nju.edu.cn/lwz/networks/CH2-Direct Link Networks-3.pdf
多路访问协议(MAC协议)
在上一讲我们提到了在link access
中有point-to-point
和broadcast
两种链路接入方式。
在broadcast
中,多路复用问题需要使用一系列的MAC协议来解决,它负责”当多个节点处于活跃状态时,为了确保广播信道执行有用的工作,以某种方式协调活跃节点的传输“。
设计这些协议前,在broadcast
信道的传输速率为R bps
的前提下,我们设定了协议需要实现的一系列的理想状态:
- 单一活跃节点传输时,能达到
R
的传输速率 - 当
M
个节点共用信道时,每个节点传输平均速率达到R/M
- 完全分散(
fully decentralized
),没有所谓的主节点- 不需要特殊节点来协调传输
- 尽量时钟、时隙不同步
- 尽可能简单,使实现不昂贵
我们尽量按这些理想状态设计了一些协议,这些协议可以划分为三类:
信道划分协议
Channel partitioning
主要思想是把信道划分为小片,然后把这些小片分下去给各个节点单独使用。划分标准可以为时隙(time slot
)、频段(frequency
)、编码(code
)有以下几种:
TDMA
:时分多址。和前文的时分复用TDM一样,在时间帧内按照时隙来划分信道;FDMA
:频分多址。和前文的频分复用FDM一样,按照划分的频段来划分信道;CDMA
:码分多址。给用户分配不同的正交的chipping sequece
,对用户要发送的数据进行编码,使得多个用户的数据可以进行叠加后变成“一个数据”在信道上传输,然后再由接收方分别根据chipping sequece
来解码消除噪音拿到数据。流程如下图:
随机接入协议
random access
协议可以让单个活跃节点传输达到R
的速率,而且传输前不用对各个节点进行协调,但这就很容易产生collision
。如何探测并解决这些collision
,是我们在随机接入协议中主要考虑解决的问题。主要有以下几种协议:
ALOHA
ALOHA的主要解决 collision 的方法是:一旦有帧准备好了就立刻发送,发生 collision 就根据p
的概率进行重传(1-p
的概率等一段时间,等待的时间是随机的),进行重传后还是没有收到ACK信息就把当前帧直接丢弃。
Slotted ALOHA
相比于纯ALOHA,时隙ALOHA做的一个改变就是把所有帧定义为相同大小,并且根据帧的大小来划分时隙( T == Size/R
)。这样子的操作使得节点在时间上的传输和等待都是同步的,都得向时隙对齐。
它的具体操作是一旦有帧准备好了就在下一个时隙中进行发送,发生 collision 就根据p
的概率进行重传(1-p
的概率等一段时间,等待的时间是随机的),直到重传成功为止。它的效率刚好是纯ALOHA的两倍,为1/e
。
CSMA
载波监听多路访问。在两种ALOHA中节点进行帧发送时是完全不够别的节点的死活的,想传就传,这放到生活中是非常不礼貌不道德的行为。这会导致collision
的数量大大地增加,CSMA协议对此进行了优化。
在CSMA中,每个节点必须“ listen before transmit”, 先听一下有没有人在讲话,也就是观测信道上有无能量波动(帧的传输),这种观测行为会一直进行直到当前信道从 busy 变为 idle 为止。在观测的过程中,如果信道是 busy 的,那么就推迟发送。
CSMA对 busy 的推迟操作因算法而不同。有三种busy推迟处理算法:
Non persistent CSMA
:如果busy就先躺平一会(躺一个 random time,这减少了 collision 的概率)再回来听,也就是它不是全天候保持观测的;但是这种算法虽然减少了碰撞概率,但是如果信道在节点躺平还没结束时变为了idle,那么信道就会存在被浪费的情况;1-persistent CSMA
:为了避免non persistent
中的信道浪费情况,我们节点不再开摆,全天候工作一直从 busy 听到 idle 为止 ,信道 idle 了就把帧传输出去;但这种算法就会导致节点们太自私,如果有多个节点同时等待监听,信道变为 idle 时就一定会发生碰撞;p-Persistent CSMA
:折中方案,既能像第二种那样减少idle时间,又能减少碰撞概率;信道 idle 时以p
的概率进行传输,以1-p
的概率等待一个时间单位(大小为最大传播时延)p的值取等待发送的节点数N的倒数即1/N
。
但我们进行了这么多的工作,还是会因为传播延迟的问题出现碰撞的情况……所以我们搞出了CSMA/CD!
CSMA/CD
根据CSMA协议进行帧发送,按理说都万事俱备了,怎么还会发生collision呢?
原来是在帧发送过程中,因为在链路上传播速率的问题,帧会产生因端对端传播时延产生的碰撞。CSMA没有进行碰撞的检测,即使碰撞了还是会继续传输这些帧。而在CSMA/CD中,当某节点进行碰撞检测时,一旦它检测到了碰撞就会立刻停止帧的传输。
CSMA/CD的帧发送步骤为:
- If medium idle, transmit; otherwise, step 2
- If busy, listen for idle, then transmit immediately (采用的1-persistent算法)
- If collision detected, send jam signal then abort
- After jam, wait random time then start from step 1
在这个协议的工作环境下,我们可以解释Minimum Frame Size的由来:
在当下,size
作为协议的接口是不能变的,物理传播速率v
也是不变的,所以变的就只有链路长度L
和带宽B
;
所以,早期以太网能连几百米,到了现在带宽越来越快,链路长度就只有十几米喽
IEEE 802.3协议用的是CSMA/CD加上1-persistence算法,同时为了解决因 1-persistent 出现的频繁collision问题,打上了一个叫“二进制指数后退”(binary exponential backoff
)的补丁。在自顶向下中对这个算法的描述如下:
轮流协议
taking-turns
类型的协议可以让M
个节点共用信道时,每个节点传输平均速率达到R/M
。我们来看两种比较重要的协议:
Polling
轮询协议。协议会指定链路上的多个节点之一为主节点,主节点能够通过观察在信道上是否缺乏信号,来决定一个节点何时完成帧的发送,它以循环的方式poll
每个节点,告诉节点可以传输的最大帧数量,传输了某些帧后继续下一个节点的poll
。
polling
协议有几个缺点:
- 产生了轮询时延;
- 单一活跃节点传输因轮询而速率小于
R
; - 主节点故障是很糟糕的,会导致整个信道的崩溃
我们使用的蓝牙就是采用了这种MAC协议。
Token passing
令牌传递协议。该协议没有主节点,一个被称为令牌(token
)的小帧在节点之间以某种固定顺序交换传递。令牌意味着帧发送的许可证。当一个节点需要进行帧的发送时它才能持有令牌,否则立刻释放令牌转发给下一个节点。
token passing
有几个缺点:
- 要不停地传令牌,产生时延;
- 单个节点的故障同样会导致整个信道的崩溃,如节点忘记释放令牌;
- 公平性问题:虽然拿到 token 的节点想发多大就发多大,但这耗时很长,其他节点得等好久。
具体的实现有IBM的 TOKEN ring
,FDDI
,我们会在后面的LAN中看到TOKEN ring
的具体情况。
协议性能分析结论
这里放的是分析后得出的结论,分析过程见ppt嗷 XD
一个协议性能的好坏可以用帧的传输时间比来衡量。
设传播时延为a,传输时延为1,则代表各个协议效率的 U 如下:
point2point
:无论 a 大于1还是小于1,U的结果都是1/(1+a)
.ring
:当环中存在N个节点时,有- 令牌环释放前提是帧头部被接收到&帧完成传输;
- a大于1时,U为
1/(a + a/N)
- a小于1时,U为
1/(1 + a/N)
slotted ALOHA
:- N 个节点全部成功发送的概率为
A = N*p*(1-p)^(N-1)
- p 等于
1/N
时, A 达到最大为1/e
- 成功发送的用时为
1/(1+2a)
- 所以
U = 1/(1+2a) * A
-->1/e
- N 个节点全部成功发送的概率为
pure ALOHA
:- N 个节点全部成功发送的概率为
A = N*p*(1-p)^(2N-1)
- p 等于
1/2N
时, A 达到最大为1/2e
- 成功发送的用时为
1/(1+2a)
- 所以
U = 1/(1+2a) * A
-->1/2e
- N 个节点全部成功发送的概率为
CSMA/CD + p-persistence
: U 经过种种分析后最终为1/(1 + (2e-1)*a)
MAC
MAC地址
什么是MAC地址?
MAC地址的全称为 Medium Access Control (MAC) Address,它是一个与网络适配器相关联的数字地址。链路层地址有许多种称呼:LAN地址,物理地址或MAC地址,MAC地址是目前最广泛的链路层地址称呼。
有啥特点?
- MAC地址具有扁平结构,而IP是层次结构,两者相当于身份证号和邮政地址的区别(后者会因搬家而变动),网卡是出生厂家,mac就是它给你配的身份证号,独一无二,永久存在(但现在的技术可以靠软件来改)。
- MAC分配给网络适配器的方式是:IEEE把前三个字节分配给(卖给)厂家,然后后三个字节的内容由厂家决定写啥。
- 交换机没有MAC地址。
- 特殊广播地址 FF-FF-FF-FF-FF-FF,用于让信道上所有
adaptor
接收处理该帧。
从MAC地址出发
我们现在知道,一个主机“诞生”时只知道自己的 MAC 地址,它想要和远处的主机通信,就像寄信,是需要确切的地址的,怎么办?
- 我的IP地址是啥?
- 对面的IP地址是啥?
- 如果在同一个LAN中,对面的MAC地址是啥?
- 如果不在,那我要找的第一跳的路由器地址是啥?
- ………………
解决了这些问题,我们才能成功达成通信。我们需要ARP和DHCP协议。
ARP
地址解析协议.Address Resolution Protocol(RFC 826)
ARP的功能就是将子网内的任意IP地址解析为MAC地址。ARP仅仅在LAN下才能工作!!它不能跨越子网而去解析别的主机!!
ARP的具体工作原理是:
- 首先,每个主机或路由器的内存中都放着一个动态的ARP表,动态表示它所有的表项都不是永久的,表项具有一个寿命值(TTL),是会过期的。(在cmd中输入
arp -a
可以看到这个表)
- 好,我们要开始通信了!发送端主机首先通过拿到的对方的IP地址来查找自己的ARP表,如果存在映射,就直接获取MAC;
- 如果在ARP表中找不到表项,那么就会经历以下过程:
- 发送端构造一个特殊的ARP packet;这里有ARP报文格式详解!
- 发送端把一个这样的查询packet传递到适配器中,适配器在链路层中封装它,使用广播MAC地址来作为帧的目的地址,并将帧传输到子网中;
- 子网上的其它适配器接收到该帧并向上传递给ARP模块,由模块检查目的IP是否与自己匹配;
- 匹配的主机给查询主机返回一个响应packet;
- 查询主机拿到目的MAC,将其封装在IP数据报后发送。
要注意的是,查询ARP报文是在广播帧中发送,而响应报文是在标准帧中;ARP"即插即用",不用自己配置;ARP并不划分到具体的链路层或网络层,它可以看成跨这两层之间的协议。
当主机想要向外网通信时,需要用寻找的MAC是第一跳路由器的MAC。(用子网掩码来识别通信的主机在外网)
DHCP
动态主机配置协议.Dynamic Host Configuration Protocol(RFC 2131)
一个主机用DHCP协议来配置自己的IP地址、子网掩码、DNS服务器的IP地址、第一跳路由器的IP地址。
DHCP执行的过程为:
- 客户端在其子网上广播一条DHCP-DISCOVER消息;
- 每台服务器都可以使用一条DHCP-Offer消息进行响应;
- 客户端选择一个服务器,广播包含服务器IP的DHCP请求消息;
- 选定的服务器提交绑定,并使用一条DHCP-ACK消息进行响应;
- 客户端在DHCP-ACK内设置其配置参数;
- 客户端通过DHCP-Release消息放弃绑定;
- 如果客户端之前没有续订(重新绑定)绑定,则绑定将到期。
网络层地址和链路层地址共存原因
IP-to-IP communication is really just a series of MAC-to-MAC communication taking place at each router hop.
自顶向下对现象的解释:
LAN
TOKEN Ring
令牌环是一个局域网的协议,可以说是轮流协议中token passing
类协议的一个实例,它由IEEE 802.5所规定。
每个节点有三种状态:监听状态,传输状态和通行状态。
Listen State
: 节点会监听流经自身的比特流,它会将传输过来的帧抓住copy一份后再释放转发,如果这个帧发给自己的,那么节点欢欢喜喜收下copy的一份后,对原始帧进行一个ACK的修改;Transmit State
:发送方节点在发送帧后所处的状态,它会等待自己发出去的帧转回来然后进行回收;在此过程,它有一个buffer用来暂存其它节点发出来的帧(不让它们跑,只让自己发的帧跑)Bypass State
:啥也不干,只是单纯地连接;
节点发出去的帧是肯定能到达目的地的,除非中途有节点故障(因为环形的结构)。这个协议在大的负载量传输下需要多次轮询,在小负载量下效率也不会很高。
具体图示如下:
具体的标准有:
Ethernet
以太网是一类计算机局域网技术。它以便宜的实现价格占领了有线局域网市场,取代了其他局域网标准如TOKEN ring、FDDI和ARCNET。
IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。
以太网在逻辑上使用总线型拓扑(以前是bus结构,当前快速以太网使用了交换机,拓扑结构变成了star)和CSMA/CD的总线技术。
在当下交换机的使用下,就没必要用CSMA/CD的broadcast链路接入了,详细可以看看这个问答:
以太网的特点有俩:unreliable
、connectionless
。
unreliable
:在NIC之间发送接收帧时,不用进行握手;connectionless
:接收方不会返回ACK信息给发送方;data in dropped frames recovered only if initial sender uses higher layer rdt (e.g., TCP), otherwise dropped data lost.
仅当初始发送者使用更高层的RDT(例如,TCP)时,丢弃的帧中的数据才能恢复,否则丢弃的数据会丢失。
以太网的演化非常快。啥都变了就只有帧的格式没有变化,作为一个接口,以太网帧的实现是非常成功的。(以太网规定了最小帧长应满足:帧的传输时延等于最远两个站点间信号的往返传播时延。)我们来看看帧的结构:
Preamble
: 前同步码字段,8个字节;7个字节用以唤醒接收适配器并进行时钟同步,每个字节的值都是0xAA;后一个字节用以确认帧的起始位。(为了确定起始位我们使用了一个哨兵位机制,对数据进行每5个1填充1个0)Addresses
: 地址字段,两个地址字段都是6个字节,地址是MAC地址。Type
: 类型字段,2个字节,说明了上层的协议是啥(可以记录2^16种)Data payload
: 最大1500字节,最小46字节;CRC
: 循环冗余检测字段,4个字节;
以太网具体的标准有:
使用的802.3协议(CSMA/CD+1-persistent+beb)的算法逻辑图如下:
octet是什么?
octet 表示的是8个bit ,当我们在谈论网络上的问题时,更喜欢使用这个词而不是Byte。
一些小的点
NOTE:物理上看到的节点星型组网形状并不一定是broadcast的接入方式,很可能是多个point-to-point!这种逻辑上的组网拓扑的link access 因中心设备不同而不同:中心设备是switch的话其实是多个point-to-point,今天的以太局域网基本就是这样,这就不用MAC协议了;而中心是hub的话对应的就是broadcast,hub相当于一个总线。
一个IEE802图示:
一些看到的比较好的文章:
计网学习笔记三 MAC与LAN的更多相关文章
- Typescript 学习笔记三:函数
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- angular学习笔记(三十一)-$location(2)
之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
- NumPy学习笔记 三 股票价格
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
随机推荐
- 【批处理】启动 VMware 服务的简单批处理脚本
早些时候编写的一个启动VMware服务的简单批处理脚本. 主要是记录一下自动提升运行权限的命令,不用再右键"以管理员身份运行". @echo off mode con cols=9 ...
- tomcat的安装以及环境配置
1.Tomcat的下载地址:http://tomcat.apache.org/ Tomcat是开放源代码的WEB服务器,安装时,只需解压压缩包即可 2.环境变量的配置 1>新建系统变量CATAL ...
- API 细节及二级联动
图片上传 T是占位符 where是条件,T是泛型,class是类,类是引用类型,就是给T设置了一个约束 一个表一个dal文件(在工作的时候就是这样) [RoutePrefix(&q ...
- 2020-2021第一学期2024"DCDD"小组第十一周讨论
2020-2021第一学期"DCDD"第十一周讨论 小组名称:DCDD 小组成员:20202403孟凡斌.20202411陈书桓.20202416刘铭睿.20202420黄椿淇 照 ...
- 笔记:vue.nextTick()方法的使用详解
vue.nextTick定义: 在下次DOM更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的DOM. 简单理解:数据更新了,在dom渲染后立即执行该函数 举例 注意:Vue实 ...
- 07 如果再使用animateCC2018或者苹果系统使用animate时出现Uncaught ReferenceError: lib is not defined的错误
我刚开始还以为是模板造成的,换了个没有问题的模板就没有问题了,原来问题是这样. 点我预览,请看该文章
- python字符串拼接方式
一 .join(iterator),后面必须是可迭代对象,例如:字符串,列表,元组 testList = ["1","2"] print(",&quo ...
- c++学习1 基础关键词
一 "const" 修饰变量 只能被初始化和读取,不能被赋值更改,且必需初始化,不初始化的话会因为读取到随机数而报错. example: const int date=100; c ...
- What is the Best Python IDE for Data Science?
Created by Guido van Rossum, Python was first released back in 1991. The interpreted high-level prog ...
- uniapp 微信小程序 使用 echarts 避坑
echarts.min.js的版本 5.3.2 第一步 : https://blog.csdn.net/qq_45164516/article/details/125298373 第二步: 重中之重修 ...