1. 概述
物理层发出去的信号需要通过数据链路层才知道是否到达目的地;才知道比特流的分界线
- 链路(Link):从一个结点到相邻结点的一段物理线路,中间没有任何其他交换结点
- 数据链路(Data Link):把实现通信协议的硬件和软件加到链路上,就构成了数据链路
- 数据链路层以帧为单位传输和处理数据
封装成帧
数据链路层为数据加上帧首和帧尾使之成为帧的过程
- 帧头和帧尾中含有重要的控制信息
- 帧头帧尾的作用之一就是帧定界**(变成比特传输后据此区分每个帧的起始和结束)**
- 为了提高帧的传输效率,应当使帧的数据部分长度尽可能大
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(
Maximum Transfer Unit
)
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样(即保证接收方接到的数据是完整的数据)
-
面向字节的物理链路使用字节填充(或称字符填充)的方法实现**透明传输**
帧头帧尾有标志位用来划分一个个帧,如果帧内部恰好也出现了标志位,则在第一次扫描时在标志位前面加一个转义字符帮助区分哪个是真正的帧头。考虑到转义字符也可能在帧内部出现,因此在转义字符前也加转义字符。接收方接到消息后但凡看到转义字符开头就会去掉转义字符并且对其后一个字符不做特殊处理
-
面向比特的物理链路使用比特填充的方法实现透明传输
零比特填充:在发送前,对帧的数据部分进行扫描,每
5
个连续的比特1
后就插入1
个比特0
,防止其与首部尾部的标志位混淆。接收方接收时将每5
个连续的比特1
后面的0
剔除即可
差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:
1
可能变成0
,0
可能变成1
。这叫比特差错在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(
Big Error Rate
)使用差错检测码(如
Mac
帧尾的FCS
)来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
奇偶校验
在待发送的数据后面添加
1
位奇偶校验位,使整个数据(包括所添加的校验位在内)中"1
"的个数为奇数(奇校验)或为偶数(偶校验)
比如发送数据001
- 若是奇校验,则在数据后添加
0
,使其成为0001
,1
的个数为奇数。如果传输过程中发生了1
位误码,则1
的个数会变成偶数,据此判断是否发生误码;但是若发生了2
个误码,1
的个数依然为奇数,因此检查不出来 - 若为偶校验,则在数据后添加
1
,使其成为1001
,1
的个数为偶数,其他情况与奇校验类似
如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
循环冗余校验CRC
-
收发双方约定好一个生成多项式
G(x)
-
发送方基于待发送的数据和生成多项式计算出差错检测码**(冗余码)**,将其添加到待传输数据的后面一起传输
-
接收方通过生成多项式来计算收到的数据是否产生了误码
除法内的相减实际是做异或运算,因此没有小的减不了大的这个说法
- 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
- 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用
- CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
- 在计算机网络中通常采用检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务
可靠传输
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
可靠传输:想办法实现发送端发送什么,接收端就收到什么
- 一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
- 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
- 比特差错只是传输差错中的一种,从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复
- 分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层
- 可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输
- 可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求
①停止-等待协议SW
发送方发送数据
DATA
,接收方接收时进行差错检测
①如果没有出现误码,则接收信息并返回**ACK
确认分组给发送方,发送方收到ACK
后,一次通信结束
②如果出现误码,则丢弃信息并返回NAK
**拒绝分组给发送方,发送方收到NAK
后,重传DATA
,直至出现步骤①
的情况
如果DATA
传送过程中丢失了,即接收端一直等DATA
,发送端一直等ACK
,造成死锁,如何解决呢?
可以引入超时重传机制。可以在发送端设置一计时器
(大约发送接收的平均时间)
,当发送端在这个时间内没有收到ACK或NAK
时,就会判断DATA
丢失,从而再次发送DATA
,打破死锁
如果ACK
发送中丢失了,即接收方收不到ACK
就将数据重新发送,而数据实际上接收方已经有了,因此重复接收,并返回ACK
,造成错误,怎么办?
可以对每次发的
DATA
都加上序号,这样接收端就可以判断当前的数据是否有接收过,从而决定其去留
如果发送端发送DATA 0
,如果ACK
由于某些原因使其到达接收端的时间变长了,那么根据超时重传,DATA 0
会再次发送,而此时ACK
到达,则发送方会认为这是后一次DATA 0
的确认分组,于是马上发送DATA 1
。而第二次发送的DATA 0
此时返回ACK
,发送方误以为是DATA 1
的ACK
,因此又会发送DATA2
,而实际上DATA 1
的是否误码等情况还不知道,因此出现了错误,这种情况怎么办?
可以为
ACK
加上编号。则每个ACK
的相互作用就不会互串了。【对于数据链路层点对点信道,往返时间比较固定,不会出现确认迟到的情况,因此可以不给确认分组编号】
②回退N帧协议GBN
相对停止-等待协议多个窗口的概念
接收窗口尺寸只能等于1
,因此接收方只能按序接收正确到达的数据分组
- 接收端返回
ACK n
表示发送过来的分组x<=n的都收到了
③选择重传协议SR
与回退
N
帧相比,接收窗口允许多个,且发送窗口最大情况有所变化
- 发送窗口接收到
ACK
帧的部分不会超时重传
2. PPP协议
数据链路层协议,用于规定帧格式
透明传输
①字节填充法
面向字节的异步链路采用插入转义字符的字节填充法
- 如
PPP
帧的标志字段取值为7E(16进制)
,如果数据中出现7E
则需要在数据前插入转义字符7D(16
进制),并将原来的7E减20(16
进制),所以7E
在数据中最终会变成7D5E
- **如果数据中有转义字符7D怎么办呢?**可以在转义字符
7D
前再加一个转义字符7D
,并将数据的7D
减20(16进制)
,于是转义字符7D
在数据中最终会变成7D5D
- 数据中出现的每一个
ASCII
码控制字符【数值小于20(16进制)的字符】,则在该字符前插入一个7D,同时将该字符的编码加上20(16进制) - 接收方只需要反变换即可恢复出原来的帧的数据部分
②比特填充法
面向比特的同步链路采用插入比特0的比特填充法
- 发送方:对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立即填充1个比特0
- 接收方:对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,就把其后的1个比特0删除
PPP的差错检测
接收方每收到一个
PPP
帧,就进行CRC
检验(多项式)。若CRC
检验正确,就收下这个帧;反之就丢弃这个帧(不可靠传输服务)。检验由尾部的FCS实现用于检验的多项式为 X 16 + X 12 + X 5 + 1 X^{16}+X^{12}+X^5+1 X16+X12+X5+1
3. 媒体接入层
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(
Medium Access Control
)
复用(Multiplexing)就是通过一条物理线路同时传输多路用户的信号。
当网络中传输媒体的传输容量大于多条单一信道的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽
静态划分信道
①频分复用FDM
将传输线路的频带资源划分成多个子频带,形成多个子信道。各子信道之间留出隔离频带,以免造成子信道间干扰。当多个信号输入一个多路复用器时,这个复用器将每一个信号调制到不同频率的载波上,接收端由相应的分用器通过滤波将各路信号分隔开,将合成的复用信号恢复成原始的多路信号
②时分复用TDM
将时间划分为一个个时隙,将带宽资源按照时隙轮流分配给不同的用户,每对用户只在所分配时隙里使用线路传输数据。
时分复用技术将时间划分为一段段等长的时分复用帧,每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙。每个用户所占的时隙是周期性出现的,其周期就是时分复用帧的长度
③波分复用WDM
波分复用其实就是光的频分复用。经过光调制,分别将光载波变换到不同波长。这些光波经过光复用器就可以在一根光纤中传输。到达终点后用光分用器将不同波长的光进行还原得到信息
光信号传输一段距离后会衰减,对衰减的光信号必须进行放大才能继续传输
④码分复用CDM
码分复用
CDM
(最初用于军事通信)是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA
CDM
的每一个用户可以在同样的时间使用同样的频带进行通信,由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰
在CDMA
中,每一个比特时间再划分为m
个短的间隔,称为码片。通常m
的值是64
或128
使用CDMA
的每一个站被指派一个唯一的m bit
码片序列
- 一个站如果要发送比特
1
,则发送它自己的m bit
码片序列 - 一个站如果要发送比特0,则发送它自己的
m bit
码片序列二进制反码
码片序列挑选原则:
-
分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列
-
分配给每个站的码片序列必须相互正交(规格化内积为
0
)令向量
S
表示站S
的码片序列,令向量T
表示其他任何站的码片序列。 S ⋅ T ( 计算方式为码片序列 S 和 T 对应项相乘相加再除以长度 ) 等于 0 S·T(计算方式为码片序列S和T对应项相乘相加再除以长度)等于0 S⋅T(计算方式为码片序列S和T对应项相乘相加再除以长度)等于0 即规格化内积等于0,此时会有以下四个特征↓。S ⋅ T 恒等于 0 ; S ⋅ T ‾ 恒等于 0 ; S ⋅ S 恒等于 1 ; S ⋅ S ‾ 恒等于 − 1 S·T恒等于0;S·\overline T恒等于0;S·S恒等于1;S·\overline S恒等于-1 S⋅T恒等于0;S⋅T恒等于0;S⋅S恒等于1;S⋅S恒等于−1
习题2
的B、C、D
的情况同理↑
复用与多址的区别
复用是将单一媒体的频带资源划分成很多子信道,这些子信道之间相互独立,互不干扰。从媒体的整体频带资源上看,每个子信道只占用该媒体频带资源的一部分
多址(更确切地应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久地分配给用户的应用中,多址是不需要的(对于无线广播或电视广播站就是这样)
频分复用FDM
和时分复用TDM
可用于多点接入,相应名词是频分多址FDMA和时分多址TDMA。从某种程度上,FDMA、TDMA、CDMA可以分别看作是FDM、TDM、CDM的应用
动态接入控制
随机接入
多个主机连接到一根总线上,当信息同一时间传送相遇时就会发生碰撞。
如何协调各主机的工作,使信息避免碰撞是很重要的
载波监听多址接入/碰撞检测(CSMA/CD)【不用于无线网络】
96
比特时间是指发送96
比特所需要的时间,也称为帧间最小间隔。其作用是是接收方可以检测出一个帧的结束,同时也使得其他站点都能有机会平等竞争信道并发送帧
争用期(碰撞窗口)
①为什么 τ − δ 2 \tau - \frac{\delta}{2} τ−2δ时刻发送碰撞?
当
D
开始发送的时,A
已经走了 τ − δ \tau - \delta τ−δ时间,所以剩下路程所需要的时间是 δ \delta δ。
又因为A
和D
发送速度是相同的,因此对于 δ 时间 \delta时间 δ时间的路程,每人只需要走 δ 2 时间 \dfrac{\delta}{2}时间 2δ时间就会相遇,即碰撞
碰撞时刻 = τ − δ + δ 2 = τ − δ 2 碰撞时刻=\tau - \delta +\dfrac{\delta}{2}=\tau -\dfrac{\delta}{2} 碰撞时刻=τ−δ+2δ=τ−2δ
②为什么 t = τ t=\tau t=τ时,D检测到碰撞?
根据上边推论,发现
D
走了 δ 2 的时间 \dfrac{\delta}{2}的时间 2δ的时间路程后就发送了碰撞,此时它开始返回,经过同样的时间可以回到D
检测到碰撞时间 = δ 2 + δ 2 = δ 检测到碰撞时间=\dfrac{\delta}{2}+\dfrac{\delta}{2}=\delta 检测到碰撞时间=2δ+2δ=δ
③为什么 2 τ − δ 2\tau - \delta 2τ−δ时,A检测到碰撞?
与
D
检测到碰撞同理,A
走了 τ − δ 2 时间 \tau -\dfrac{\delta}{2}时间 τ−2δ时间,因此往回走也是这么多时间
A 检测到碰撞时间 = τ − δ 2 + τ − δ 2 = 2 τ − δ A检测到碰撞时间=\tau -\dfrac{\delta}{2}+\tau -\dfrac{\delta}{2}=2\tau - \delta A检测到碰撞时间=τ−2δ+τ−2δ=2τ−δ
- 主机最多经过 2 τ ( 即 δ → 0 ) 2\tau(即\delta→0) 2τ(即δ→0)的时长就可以检测到本次发送是否遭受了碰撞
- 因此,以太网的端到端往返传播时延 2 τ 2\tau 2τ称为争用期或碰撞窗口期
- 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
- 每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间
- 显然,在以太网中发生帧的主机越多,端到端往返传播时延越大,发生碰撞的可能性就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长
- 10 M b / s 10Mb/s 10Mb/s以太网把争用期定为 512 b i t 512bit 512bit发送时间,即 51.2 μ s 51.2\mu s 51.2μs,因此其总线长度不能超过 5120 m 5120m 5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过 2500 m 2500m 2500m
最小帧长
为什么需要规定最小帧长?
假设
A
向D
发送帧,如果帧很短的话,在 2 τ 2\tau 2τ内就会将帧发送完毕,帧发送完毕后不会进行碰撞检测,而此时依然有发生碰撞的可能。所以必须保证在 2 τ 2\tau 2τ时间内帧不会被发送完,在这段时间里能够保持碰撞检测
- 以太网规定最小帧长为64字节,即
512
比特(512
比特即争用期)- 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于
64
字节
- 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于
- 以太网的最小帧长保证了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞
- 如果在争用期没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞
- 如果在争用期检测到碰撞就立即中止发送,这时已经发送出去的数据一定小于
64
字节,因此凡长度小于64
字节的帧都是由于碰撞检测而异常中止的无效帧
最大帧长
当帧过长时,其他线路会迟迟得不到资源,同时也可能导致接收方缓冲区溢出,因此帧的最大长度也有规定。
退避算法
当帧发送碰撞后会停止发送,隔一段时间后再次发送,而具体隔多少时间再发送需要根据退避算法得出
极限信道利用率
-
各主机发送帧都不会产生碰撞
-
总线一旦空闲就有某个主机立即发送帧
-
每帧的发送时延为 T 0 T_0 T0,传播时延为 τ \tau τ,占用信道的时间为 T 0 + τ T_0+\tau T0+τ
极限信道利用率 S m a x = T 0 T 0 + τ = 1 1 + τ T 0 为了令 S m a x 尽量大,所以应该让 τ T 0 尽量小 即 τ 尽量小 ( 以太网端到端距离收到限制 ) 或 T 0 尽量大 ( 以太网帧尽量长 ) 极限信道利用率S_{max}=\dfrac{T_0}{T_0+\tau}=\dfrac{1}{1+\dfrac{\tau}{T_0}}\\ 为了令S_{max}尽量大,所以应该让\dfrac{\tau}{T_0}尽量小\\ 即\tau尽量小(以太网端到端距离收到限制)或T_0尽量大(以太网帧尽量长) 极限信道利用率Smax=T0+τT0=1+T0τ1为了令Smax尽量大,所以应该让T0τ尽量小即τ尽量小(以太网端到端距离收到限制)或T0尽量大(以太网帧尽量长)
载波监听多点接入/碰撞避免(CSMA/CA)【用于无线网络】
802.11
无线局域网使用CSMA/CA
协议,在CSMA
的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能由于不可能避免所有的碰撞,并且无线信道误码率较高,
802.11
标准还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收
-
在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以避免碰撞
-
在无线局域网中,不能使用碰撞检测CD,原因如下:
-
由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能差百万倍)。如果要在无线网卡上实现碰撞检测
CD
,对硬件的要求特别高。 -
即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站的问题),进行碰撞检测的意义也不大(如下)。而有线网络中信号会随着总线到达各个地方,不会出现隐蔽站
-
-
802.11
的MAC
层标准定义了两种不同的媒体接入控制方式- 分布式协调功能DCF。在
DCF
方式下,没有中心控制站点,每个站点使用CSMA/CA
协议通过争用信道来获取发送权,这是802.11
定义的默认方式 - 点协调功能PCF。
PCF
方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11
定义的可选方式,在实际中较少使用
- 分布式协调功能DCF。在
帧间间隔IFS
802.11
标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS
帧间间隔的长短取决于该站点要发送的帧的类型
- 高优先级帧需要等待的时间较短,因此可优先获得发送权
- 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发送碰撞的机会。
常用的两种帧间间隔如下
- 短帧间间隔SIFS(
28
μ
m
28\mu m
28μm)。这是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用
SIFS
的帧类型由ACK
帧、CTS
帧、由过长的MAC
帧分片后的数据帧、以及所有回答AP
探询的帧和在PCF
方式中接入点AP
发送出的任何帧 - DCF帧间间隔DIFS(
128
μ
s
128\mu s
128μs)。它比短帧间间隔
SIFS
要长得多,在DCF
方式中用来发送数据帧和管理帧
工作原理
①为什么源站检测到信道空闲后,还需要等待DIFS时间才将帧发送呢?
因为其他站此时可能有优先级更高的帧需要发送,因此有
DIFS
时间进行缓冲,若这个时间内没有高优先级的帧要发送,则说明信道是真正的空闲
②为什么目的站接收到帧后还需要等到SIFS时间才返回ACK确认帧呢?
SIFS
是最短的帧间间隔,用来分割一次对话的各帧,在这个时间里由接收状态转变为发送状态
③当其他站要发送数据,但是发现此时信道正忙时就会退避一段时间,等信道不忙后再进行操作,接着等待DIFS时间(与①同理),但为什么等待了DIFS时间后还要退避一段随机时间呢?
因为可能有多个站点在信道忙时都想发送帧,因此它们都会被搁置直至信道不忙,在
DIFS
时间后他们会同时发送,而实际上多个站点同时发送数据会碰撞。因此需要一个随机时间将他们进行错峰发送。
退避算法
多个站点发送冲突时,各个站点需要退避一段随机时间再进行操作
以下情况必须使用退避算法
- 在发送数据帧之前检测到信道处于忙状态时
- 在每一次重传一个数据帧时
- 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用通道)
过程
- 在执行退避算法时,站点为退避计时器设置一个随机的退避时间
- 当退避计时器的时间减小到
0
,就开始发送数据 - 当退避计时器的时间还未减小到
0
时信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过DIFS
后,继续启动退避计时器
- 当退避计时器的时间减小到
- 在进行第
i
次退避时,退避时间在时隙编号 { 0 , 1 , . . , 2 i + 1 − 1 } \{0,1,..,2^{i+1}-1\} {0,1,..,2i+1−1}中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做时为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255
时(对应第6
次退避)就不再增加了
信道预约
为了尽可能减少碰撞的概率和降低碰撞的影响,
802.11
标准允许要发送数据的站点对信道进行预约
- 源站在发送数据帧之前先发送一个短的控制帧,称为请求发生RTS,它包括源地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间
- 若目的站正确收到源站发来的
RTS
帧,且媒体空闲,就发送一个响应控制帧,称为允许发送CTS,它也包括这次通信所需的持续时间从RTS帧中将此持续时间复制到CTS帧中
。 - 源站收到
CTS
帧后,再等待一段时间SIFS
后,就可发送其数据帧- 如果RTS帧发送碰撞,源站就收不到CTS帧,需执行退避算法重传RTS帧
- 由于RTS帧和CTS帧很短,发生碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发就会浪费很多时间,因此用很小的代价对信道进行预约往往是值得的。
802.11
标准规定了3
种情况供用户选择- 使用
RTS
帧和CTS
帧 - 不使用
RTS
帧和CTS
帧 - 只有当数据帧的长度超过某一数值时才使用
RTS
帧和CTS
帧
- 使用
- 若目的站正确收到了源站发来的数据帧,在等待时间
SIFS
后,就向源站发送确认帧ACK
- 除源站和目的站以外的其他各站,在收到CTS帧(或数据帧)后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会收到其他站的干扰。
虚拟载波监听
除
RTS
帧和CTS
帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为802.11
的虚拟载波监听机制
- 由于利用虚拟载波监听机制,站点只要监听到RTS帧、CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题
- 如下图,
A
与C
虽然互相覆盖不到,但是C可收到B发出的关于A的CTS帧,从而得知A需要占用信道的时间。在这段时间里,C
不发送数据,从而解决隐蔽站带来的碰撞问题
4. MAC地址、IP地址和ARP协议
MAC地址
MAC
地址是以太网的MAC
子层所使用的的地址
- 只有一条路径的信道不需要地址,因为没得选
- 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址
- 在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为
MAC地址
- MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器
EEPROM
中,因此MAC
地址也被称为硬件地址 MAC
地址有时也被称为物理地址。但是MAC
地址不属于物理层而是属于数据链路层
- MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器
- 一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的
MAC
地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC
地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
MAC地址格式
单播地址、广播地址与多播地址
- 单播MAC地址即明确的目的MAC地址。将此地址填入帧的目的地址栏中,接收到该帧的主机将此地址与自身
MAC
地址进行匹配,若相同则接收,不同则丢弃 - 广播MAC地址为
FF-FF-FF-FF-FF-FF
,将此地址填入帧的目的地址栏中,接收到该帧的主机检索该地址发现是广播地址,因此接收该帧 - MAC地址中第一字节后4比特为(1,3,5,7,9,B,D,F)时,MAC地址是多播地址。将此地址填入帧的目的地址栏中,接收到该帧的主机将此多播地址与自己多播组列表中的地址进行逐一配对,如果有匹配的项,则接收,否则丢弃
IP地址
IP
地址是TCP/IP
体系结构的网际层所使用的的地址
IP
地址是Internet
上的主机和路由器所使用的的地址,由两部分信息构成
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器各接口)
MAC地址不具备区分不同网络的功能,而IP地址可以通过网络号做到
如果只是一个单独网络,不接入因特网,则使用MAC地址就足够了(这不是一般用户的应用方式)
如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用
数据包转发过程中IP地址与MAC地址变换情况
- 数据报转发过程中源IP地址和目的IP地址保持不变
- 数据包转发过程中源MAC地址和目的MAC地址(由ARP协议获得)逐个链路改变
- 路由器上有路由表,记录了要到目的IP地址,先要走哪些路(即下一跳位置)。所以
H1
起初只带有目的IP
地址,查询路由表后路由器指路,从而知道下一步该往哪里走,从而不断转发直至到达目的地。
ARP协议
地址解析协议
ARP
属于TCP/IP
体系结构的网际层,其作用是已知设备所分配到的IP
地址,使用ARP
协议可以通过该IP地址获取到设备的MAC
地址
- 数据的发送需要经过链路,仅仅知道IP地址是无法在数据链路层实现传输的,因此我们需要得到
IP
地址与MAC
地址的对应关系,即地址解析。 - 每台主机都会有一个ARP高速缓存表,记录有IP地址与MAC地址的对应关系
- 初始
ARP
高速缓存表为空,假设此时B
知道C
的IP
地址,准备发送信息,但是由于不知道C
的MAC
地址,因此无法封装数据帧,所以此时会广播一个**ARP请求报文(封装在MAC帧中,目的地址为广播地址FF-FF-FF-FF-FF-FF
)**,内容如下:- 我的
IP
地址是:xxx
;我的MAC
地址是:XXX
;我想知道C
主机的MAC
地址是多少?这个广播帧会被该广播域的所有主机收到 A
主机收到后交由上层处理,发现B
问的不是他,所以不予理会C
收到后交由上层处理,发现这个IP
地址正是自己,因此首先将B的MAC地址和IP地址的对应关系记录到自己的高速缓存表中,接着返回给==ARP响应报文(封装在MAC帧中,目的地址为B的MAC地址)==,其中包含自己的MAC
地址
- 我的
- ARP高速缓存条目有静态与动态两种类型
- 动态代表是通过广播自动获取的条目,生命周期默认为两分钟
- 静态是手工设置的条目,不同操作系统下的生命周期不同。
- ARP协议只能在一段链路或一个网络上使用
5. 集线器与交换机
集线器
集线器
HUB
的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。
- 使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是
CSMA/CD
协议 - 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站网卡检测)
- 集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作
- 集线器是半双工模式,收发不能同时进行,收到帧后会广播到除本身接口外的各个接口。
交换机
交换机是一种负责转发信号的网络设备,可以为接入交换机的任意两个网络节点提供独享的电信号通路
-
以太网交换机通常由多个接口,每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式
-
以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用
CSMA/CD
协议) -
以太网交换机一般都具有多种速率的接口
-
以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧
-
以太网交换机是一种即插即用的设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的
-
帧的两种转发方式
- 存储转发
- 直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查是否有差错)
-
交换机每个接口是一个独立的碰撞域
-
-
此时交换机未进行任何操作,
pc1 ping pc4
是可以通的,说明整个交换机连接的范围是一个广播域。且ping
通后,LSW3
交换机的MAC表
将PC1
的MAC
地址与接口的对应关系以及PC4
的MAC
地址与接口的对应关系都记录到MAC
地址表中==【ping
的消息发送出去时记录下PC1地址接口相关情况,ping
成功的消息响应返回给PC1时记录下PC4地址接口的情况】==
-
交换机自学习和转发帧流程
-
初始交换机
1
和2
的MAC
地址表都为空 -
此时有以下任务:①
A-->B
②B-->A
-
A
发送给B
的数据通过端口1
进入交换机,因此交换机先将MAC地址A 接口1
==(表示如果要去MAC地址A,可以走接口1)==记录到MAC
表中,同时扫描MAC
表查看是否有MAC地址B
对应的接口,发现没有。因此将这个帧从除来源外的所有端口发送出去【泛洪】。- 交换机
1
的端口2
发送此帧到主机C
,主机C
对比MAC
地址后发现不是给自己的帧,因此丢弃 - 交换机
1
的3
端口发送此帧到主机B
,主机B
对比MAC
地址后发现是给自己的帧,因此收下该帧,交付给高层【注意:此时交换机MAC
地址表并没有学习新的条目】 - 交换机
1
的4
端口发送此帧到交换机2
的端口2
,交换机2
首先将MAC地址A 接口2
记录到MAC
地址表中,接着扫描MAC
表,发现没有找到MAC地址B
对应的接口,因此将这个帧从除来源外的所有端口发送出去【泛洪】。 - 同理,接口
1
,3
,4
发送出去给主机后经过比对发现不是自己的帧,因此丢弃
- 交换机
-
B-->A
时,交换机1
的MAC
地址表已经有了MAC地址A 接口1
这个条目B
发送给A
的帧从接口3
进入交换机,交换机首先将MAC地址B 接口3
记录到MAC
地址表中,接着查询MAC
地址表是否有MAC地址A
对应的接口,发现接口1
对应的就是MAC
地址A
,因此从接口1
转发出去- 帧通过接口
1
到达主机A
,主机A
经过比对后发现这是自己的帧,因此将其接收交付给高层
-
此时若有一个与
A
连接在同一总线上的主机G
向A
发送帧,过程如何?G
向A
发送帧时,由于A
与G
处在同一总线上,因此G
发送的帧会直接传送到A
处,A
进行比对发现这是发送给自己的数据,因此将数据接收- 同时数据会跑向交换机
1
的端口1
,所以交换机1
会将MAC地址G 接口1
记录到MAC
表中,同时扫描MAC
地址表看看是否有MAC地址A
对应的接口,发现接口1
就是。但是刚刚学习到的MAC地址G
也是来自接口1
,因此交换机知道接口1
是来源,没有必要将数据再从这个接口转发出去。
-
MAC地址表中的每条记录都有自己的有效时间,到期自动删除。这是因为MAC地址与交换机接口的对应关系并不是永久性的
STP生成树协议
STP
可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题
**当交换机之间链路较少时,某一条链路发送故障,会导致其中有些主机无法通信,即链路不可靠。
**如下图,A
与B
之间的链路发送故障后,H1
便无法与H2
和H3
进行通信
很容易想到的一个方法是在B与C之间多拉一条链路,这样即使A与B之间的链路发送故障,H1
、H2
、H3
之间还是能够相互通信,但是这会带来一些问题。如下,当H1
发送一个广播帧时,我们针对交换机B
进行过程分析
- 首先
H1
发送的帧进入交换机,交换机将MAC地址H1 接口1
记录到MAC
表中,接着检索MAC
表,发现没有MAC地址H2
的接口条目,因此进行泛洪,交换机A
和C
都接收到此帧 - 交换机
A/C
首先将MAC地址H1 接口1
记录到自身的MAC
表中,接着检索MAC
表,发现没有广播帧的接口条目,因此进行泛洪。A
泛洪的帧会被H3
、交换机B
、C
收到;C
泛洪的帧会被H2
、交换机A
、B
收到。H2
与H3
接收帧后发现是一个广播帧,于是接收并交上层处理 - 我们针对交换机
B
进行分析- 此刻它收到了来自交换机
C
的泛洪,帧内信息依然是MAC地址H1
【源MAC地址】,首先它会将此条目添加进MAC
表中,发现原先有MAC地址H1 接口1
的记录,此时它会认为这条记录已经出现错误,因此更新为MAC地址H1 接口2
。由于该条目的来源就是接口2
,所以交换机不会再从接口2
转发出去,而是在接口1
、3
处进行泛洪…… - 同时
B
也收到来自交换机A
的泛洪,情况与交换机C
泛洪类似,于是又将MAC地址H1 接口2
更新为MAC地址H1 接口3
……
- 此刻它收到了来自交换机
- 因此帧会在交换机中不停转发,究其原因是因为网络形成了环路,网络环路会带来以下问题
- 广播风暴
- 大量消耗网络资源,使得网络无法正常转发其他数据帧
- 主机收到重复的广播帧
- 大量消耗主机资源
- 交换机的帧交换表震荡(内容不断更新)
- 广播风暴
生成树原理
- 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路)
- 最终生成树的逻辑拓扑要确保连通整个网络
- 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树重新计算
VLAN虚拟局域网
一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求,每个
VLAN
就是一个独立的广播域
为什么需要VLAN?
随着交换式以太网规模的扩大,广播域相应扩大,而巨大的广播域会带来很多弊端
- 广播风暴
如数台交换机连接了数台主机,当主机
A
要向主机B
发送数据帧,此时各交换机的MAC
表均为空,因此帧每到一个交换机就会进行泛洪,由于网络巨大,因此泛洪的范围也巨大
- 难以管理和维护
- 潜在的安全风险
交换机端口类型
缺省VLAN ID
华为交换机上叫
PVID
,每个端口有且只有一个PVID。默认情况下端口的PVID
都为1
(即端口属于VLAN 1
)
端口上接收时总希望能够打上标签,发送出去时候总希望能去除标签
①Access端口
-
Access
端口一般用于终端设备与交换机之间注意:交换机与路由器连接的接口也需要使用
access
接口。这是因为路由器中的消息也不带VLAN
标签,就像终端一样,保证路由器的数据能够进入交换机领域,数据由路由器进入交换机是会被打上默认标签,接着猜按照交换机间VLAN
的规则行走。简单理解就是把路由器当作终端 -
交换机初始端口类型是Access
-
Access端口只能属于一个VLAN
-
Access
端口的PVID值与端口所属VLAN的ID相同(默认为1
) -
Access
端口接收方法- 一般只接收"未打标签"的普通以太网MAC帧。根据接收帧的端口
PVID
值给帧"打标签",即插入4
字节的VLAN
标记字段,字段中的VID
取值与端口PVID
取值相等
- 一般只接收"未打标签"的普通以太网MAC帧。根据接收帧的端口
-
Access
端口发送处理方法- 若帧中的VID与端口的PVID相等,则"去标签"并转发该帧;否则不转发
②Trunk端口
Trunk
端口一般用于交换机之间或交换机与路由器之间的互连Trunk
端口可以属于多个VLAN
- 用户可以设置
Trunk
端口的PVID
值,默认情况下,Trunk
端口PVID
值为1
Trunk
端口发送处理方法- 对VID等于PVID的帧,“去标签,再转发”
- 对VID不等于PVID的帧,直接转发
Trunk
端口接收处理方法- 接收"未打标签"的帧。根据接收帧的端口的PVID给帧"打标签",即插入
4
字节的VLAN
标记字段,字段中的VID
取值与端口的PVID
取值相等 - 直接接收"已打标签的帧"
- 接收"未打标签"的帧。根据接收帧的端口的PVID给帧"打标签",即插入
③Hybrid端口
Hybrid
端口既可以用于交换机之间或交换机与路由器之间的互连(同Trunk
端口),也可用于交换机与用户计算机之间的互连(同Access
端口)Hybrid
端口可以属于多个VLAN
(同Trunk
端口)- 用户可以设置
Hybrid
端口的PVID
值。默认情况下,Hybrid端口的PVID值为1 Hybrid
端口发送处理方法↓- 查看帧的VID是否在端口的"去标签"列表中
- 若存在,则"去标签"后转发
- 若不存在,则直接转发
Hybrid
端口接收处理方法(同Trunk
)- 接收"未打标签"的帧,根据接收帧的端口的
PVID
给帧"打标签",即插入4
字节VLAN
标记字段,字段中的VID
取值与端口的PVID
取值相等 - 接收"已打标签的帧"
- 接收"未打标签"的帧,根据接收帧的端口的
华为交换机Hybrid端口应用例子
如何分割广播域?
-
路由器
由于路由器属于网络层设备,默认情况下不对广播数据包进行转发,因此自然达到隔离的效果。但是成本较高,局域网内部全靠路由器分割广播域是不现实的
-
VLAN虚拟局域网技术
默认情况下,交换机下的主机会被划入
VLAN 1
,可以通过设置相关语句为交换机设置VLAN
,如下是将PC1
与PC2
划入VLAN2
的方法
LSW3:
valan batch 2 //在LSW3上创建VLAN2
interface Ethernet 0/0/1 //进入交换机接口1
port link-type access //将此接口类型设置为access
port default vlan 2 //信息经过此接口时若没有VLAN标签则打上VLAN2标签;若有VLAN标签则检查是 否为VLAN2,若为VLAN2则去除标签并转发;若非VLAN2,则不转发。
//对接口2的设置同理
设置完毕后,发现PC1
不能ping
通PC4
,因为此时他们不属于一个同一个广播域,但是可以ping
通PC2
,因为PC1
与PC2
属于同一个广播域VLAN 2
eNSP路由与交换技术笔记
VLAN实现机制
VLAN
标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN
VID
的取值范围是0~4095
0
和4095
都不用来表示VLAN
,因此用于表示VLAN
的VID的有效范围是1~4094
- 802.1Q帧时由交换机来处理的,而不是用户主机来处理的
- 当交换机收到普通的以太网帧时,会将其插入
4
字节的VLAN标记转变为802.1Q
,简称**“打标签”** - 当交换机转发802.1Q帧时,可能会删除其
4
字节VLAN
标记转变为普通以太网帧,简称**“去标签”**
- 当交换机收到普通的以太网帧时,会将其插入
借鉴:https://blog.csdn.net/weixin_45488428/article/details/115102326