计网学习笔记三 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 ...
随机推荐
- Nebula Exchange与集群guava版本不一致问题
1.集群版本 Hadoop 3.1.1.3.1.4.0-315 Hive (version 3.1.0.3.1.4.0-315) Spark 2.3.2.3.1.4.0-315 Scala versi ...
- *args、**kwargs参数组
'''def test(*args): # *agrs接收的是N个位置参数,不能接受关键字参数,转化成元祖 print(args)test(1,2,3,4,5,6)test(*[1,2,4,5,5]) ...
- 网页制作02--banner制作
样本: 第一步:先做一个超大的通栏banner盒子. 第二步:在通栏盒子里面做一个版心的盒子 第三部:版心盒子里面在分左边盒子和右边盒子 1号盒子是通栏的大盒子banner,不给宽度,给高度.给一个蓝 ...
- 浏览器F12,Network中各按钮的作用
Network下 preserve log:勾选,页面发生跳转,接口不丢失:(比如登录成功跳转到首页,登录的接口就没了,勾选Perserve log,会记录跳转前的接口): Disable cache ...
- SQL 之 SQL server 中 遇到字段的值为null 遇到的坑
SQL server 中,如果查询或筛选的条件中,某字段的值为NULL,如何处理?又有哪些坑需要避免呢? 直接上坑 : NULL 与其他任何类型进行逻辑判断: [解释]: NULL表示值未知,和空字符 ...
- 【pytest】@pytest.fixture与@pytest.mark.parametrize结合实现参数化
背景:测试数据既要在fixture方法中使用,同时也在测试用例中使用 使用方法:在使用parametrize的时候添加"indirect=True"参数.pytest可以实现将参数 ...
- ES6 函数的扩展 rest参数
function add(...values) { let sum = 0; for (var val of values) { sum += val; } return sum; } add(2, ...
- 新手IC617安装NCSU pdk
新手IC617安装NCSU cdk 以CMOSedu网站为参考:https://cmosedu.com/videos/cadence/tutorial1/cadence_tutorial_1.htm ...
- JavaScript数据类型以及转换
一.数据类型 分类 基本(值)类型: String Number Boolean undefined unll 对象(引用)类型: Object:任意对象 Array:一种特别的对象 Function ...
- 2019 CSP J/S第2轮 视频与题解
CSP入门组和提高组第二轮题解 转自网络