【计网】三、数据链路层

1. 概述

image-20220805190009934

物理层发出去的信号需要通过数据链路层才知道是否到达目的地;才知道比特流的分界线

  • 链路(Link):从一个结点到相邻结点的一段物理线路,中间没有任何其他交换结点
  • 数据链路(Data Link):把实现通信协议的硬件和软件加到链路上,就构成了数据链路
  • 数据链路层以为单位传输和处理数据

封装成帧

image-20220805190103441

数据链路层为数据加上帧首和帧尾使之成为帧的过程

image-20220728202009086

  • 帧头和帧尾中含有重要的控制信息
  • 帧头帧尾的作用之一就是帧定界**(变成比特传输后据此区分每个帧的起始和结束)**
  • 为了提高帧的传输效率,应当使帧的数据部分长度尽可能大
  • 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTUMaximum Transfer Unit

透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样(即保证接收方接到的数据是完整的数据)

  • 面向字节的物理链路使用字节填充(或称字符填充)的方法实现**透明传输**

    帧头帧尾有标志位用来划分一个个帧,如果帧内部恰好也出现了标志位,则在第一次扫描时在标志位前面加一个转义字符帮助区分哪个是真正的帧头。考虑到转义字符也可能在帧内部出现,因此在转义字符前也加转义字符。接收方接到消息后但凡看到转义字符开头就会去掉转义字符并且对其后一个字符不做特殊处理

  • 面向比特的物理链路使用比特填充的方法实现透明传输

    零比特填充:在发送前,对帧的数据部分进行扫描,每5个连续的比特1后就插入1个比特0,防止其与首部尾部的标志位混淆。接收方接收时将每5个连续的比特1后面的0剔除即可

差错检测

实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能变成00可能变成1。这叫比特差错

在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Big Error Rate)

使用差错检测码(如Mac帧尾的FCS)来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一

1. 奇偶校验(数据链路层一般不用这个)

在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中"1"的个数为奇数(奇校验)或为偶数(偶校验)

比如发送数据001

  • 若是奇校验,则在数据后添加0,使其成为0001,1的个数为奇数。如果传输过程中发生了1位误码,则1的个数会变成偶数,据此判断是否发生误码;但是若发生了2个误码,1的个数依然为奇数,因此检查不出来
  • 若为偶校验,则在数据后添加1,使其成为1001,1的个数为偶数,其他情况与奇校验类似

如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)

2. 循环冗余校验CRC

  • 收发双方约定好一个生成多项式G(x)

    image-20220728202053836

  • 发送方基于待发送的数据和生成多项式计算出差错检测码**(冗余码)**,将其添加到待传输数据的后面一起传输

  • 接收方通过生成多项式来计算收到的数据是否产生了误码

image-20220728202320173

除法内的相减实际是做异或运算,因此没有小的减不了大的这个说法

image-20220728202353232

  • 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误
  • 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用
  • CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
  • 在计算机网络中通常采用检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务

可靠传输(并不局限于数据链路层,放眼于整个整个网络体系结构中)

不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
可靠传输:想办法实现发送端发送什么,接收端就收到什么

  • 一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
  • 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
  • 比特差错只是传输差错中的一种,从整个计算机网络体系结构来看,传输差错还包括分组丢失分组失序以及分组重复
  • 分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层
  • 可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输
  • 可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求

image-20220728202720732

①停止-等待协议SW(是自动请求重传ARQ)

发送方发送数据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 1ACK,因此又会发送DATA2,而实际上DATA 1的是否误码等情况还不知道,因此出现了错误,这种情况怎么办?

可以为ACK加上编号。则每个ACK的相互作用就不会互串了。【对于数据链路层点对点信道,往返时间比较固定,不会出现确认迟到的情况,因此可以不给确认分组编号】

image-20220728202731838

image-20220728202740524

image-20210130161259644

②回退N帧协议GBN

相对停止-等待协议多个窗口的概念
接收窗口尺寸只能等于1,因此接收方只能按序接收正确到达的数据分组

image-20220728202824968

image-20220728202834739

  • 接收端返回ACK n表示发送过来的分组x<=n的都收到了

③选择重传协议SR

与回退N帧相比,接收窗口允许多个,且发送窗口最大情况有所变化

image-20220728202848434

image-20220728202930736

  • 发送窗口接收到ACK帧的部分不会超时重传

假设Wt>2^n-1时会出差错的原理

image-20220805230810731

2. PPP协议

数据链路层协议,用于规定帧格式

image-20210201201917595

透明传输

image-20220805191241527

①字节填充法(类似java的转义字符)

面向字节的异步链路采用插入转义字符的字节填充法

  • PPP帧的标志字段取值为7E(16进制),如果数据中出现7E则需要在数据前插入转义字符7D(16进制),并将原来的7E减20(16进制),所以7E在数据中最终会变成7D5E
  • **如果数据中有转义字符7D怎么办呢?**可以在转义字符7D前再加一个转义字符7D,并将数据的7D20(16进制),于是转义字符7D在数据中最终会变成7D5D
  • 数据中出现的每一个ASCII码控制字符【数值小于20(16进制)的字符】,则在该字符前插入一个7D,同时将该字符的编码加上20(16进制)
  • 接收方只需要反变换即可恢复出原来的帧的数据部分

image-20210201203628640

②比特填充法

面向比特的同步链路采用插入比特0的比特填充法

  • 发送方:对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立即填充1个比特0
  • 接收方:对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,就把其后的1个比特0删除

image-20210201204452398

PPP的差错检测

接收方每收到一个PPP帧,就进行CRC检验(多项式)。若CRC检验正确,就收下这个帧;反之就丢弃这个帧(不可靠传输服务)。检验由尾部的FCS实现

用于检验的多项式为X16+X12+X5+1X^{16}+X^{12}+X^5+1X16+X12+X5+1

image-20210201205024457

工作状态

image-20220805233251359

3. 媒体接入层

image-20220806003552018

共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)

复用(Multiplexing)就是通过一条物理线路同时传输多路用户的信号。
当网络中传输媒体的传输容量大于多条单一信道的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽

image-20210322202556354

静态划分信道

①频分复用FDM

将传输线路的频带资源划分成多个子频带,形成多个子信道。各子信道之间留出隔离频带,以免造成子信道间干扰。当多个信号输入一个多路复用器时,这个复用器将每一个信号调制到不同频率的载波上,接收端由相应的分用器通过滤波将各路信号分隔开,将合成的复用信号恢复成原始的多路信号

image-20210322204101543

②时分复用TDM

将时间划分为一个个时隙,将带宽资源按照时隙轮流分配给不同的用户,每对用户只在所分配时隙里使用线路传输数据。
时分复用技术将时间划分为一段段等长的时分复用帧,每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙。每个用户所占的时隙是周期性出现的,其周期就是时分复用帧的长度

image-20210322210341303

③波分复用WDM

波分复用其实就是光的频分复用。经过光调制,分别将光载波变换到不同波长。这些光波经过光复用器就可以在一根光纤中传输。到达终点后用光分用器将不同波长的光进行还原得到信息
光信号传输一段距离后会衰减,对衰减的光信号必须进行放大才能继续传输

image-20210322211112508

④码分复用CDM

码分复用CDM(最初用于军事通信)是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA

CDM的每一个用户可以在同样的时间使用同样的频带进行通信,由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰

CDMA中,每一个比特时间再划分为m个短的间隔,称为码片。通常m的值是64128
使用CDMA的每一个站被指派一个唯一的m bit码片序列

  1. 一个站如果要发送比特1,则发送它自己的m bit码片序列
  2. 一个站如果要发送比特0,则发送它自己的m bit码片序列二进制反码

image-20210322213435188

码片序列挑选原则:

  1. 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列

  2. 分配给每个站的码片序列必须相互正交(规格化内积为0)

    令向量S表示站S的码片序列,令向量T表示其他任何站的码片序列。S⋅T(计算方式为码片序列S和T对应项相乘相加再除以长度)等于0S·T(计算方式为码片序列S和T对应项相乘相加再除以长度)等于0ST(计算方式为码片序列ST对应项相乘相加再除以长度)等于0 即规格化内积等于0,此时会有以下四个特征↓。

    S⋅T恒等于0;S⋅T‾恒等于0;S⋅S恒等于1;S⋅S‾恒等于−1S·T恒等于0;S·\overline T恒等于0;S·S恒等于1;S·\overline S恒等于-1ST恒等于0ST恒等于0SS恒等于1SS恒等于1

image-20210322214653701
image-20210322215215724
image-20210322215444255

习题2B、C、D的情况同理↑

image-20210322215805438

复用与多址的区别

复用是将单一媒体的频带资源划分成很多子信道,这些子信道之间相互独立,互不干扰。从媒体的整体频带资源上看,每个子信道只占用该媒体频带资源的一部分

多址(更确切地应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久地分配给用户的应用中,多址是不需要的(对于无线广播或电视广播站就是这样)

频分复用FDM和时分复用TDM可用于多点接入,相应名词是频分多址FDMA时分多址TDMA。从某种程度上,FDMA、TDMA、CDMA可以分别看作是FDM、TDM、CDM的应用

动态接入控制

image-20220806004843760

随机接入

多个主机连接到一根总线上,当信息同一时间传送相遇时就会发生碰撞。
如何协调各主机的工作,使信息避免碰撞是很重要的

① 载波监听多址接入/碰撞检测(CSMA/CD)【不用于无线网络】

(Carrier Sense Multiple Access with Collision Detection)

96比特时间是指发送96比特所需要的时间,也称为帧间最小间隔。其作用是是接收方可以检测出一个帧的结束,同时也使得其他站点都能有机会平等竞争信道并发送帧

image-20220806010426943

image-20220806010420532

1)争用期(碰撞窗口)

image-20220806010413769

①为什么τ−δ2\tau – \frac{\delta}{2}τ2δ时刻发送碰撞?

D开始发送的时,A已经走了τ−δ\tau – \deltaτδ时间,所以剩下路程所需要的时间是δ\deltaδ
又因为AD发送速度是相同的,因此对于δ时间\delta时间δ时间的路程,每人只需要走δ2时间\dfrac{\delta}{2}时间2δ时间就会相遇,即碰撞
碰撞时刻=τ−δ+δ2=τ−δ2碰撞时刻=\tau – \delta +\dfrac{\delta}{2}=\tau -\dfrac{\delta}{2}碰撞时刻=τδ+2δ=τ2δ

②为什么t=τt=\taut=τ时,D检测到碰撞?

根据上边推论,发现D走了δ2的时间\dfrac{\delta}{2}的时间2δ的时间路程后就发送了碰撞,此时它开始返回,经过同样的时间可以回到D
检测到碰撞时间=δ2+δ2=δ检测到碰撞时间=\dfrac{\delta}{2}+\dfrac{\delta}{2}=\delta检测到碰撞时间=2δ+2δ=δ

③为什么2τ−δ2\tau – \delta2τδ时,A检测到碰撞?

D检测到碰撞同理,A走了τ−δ2时间\tau -\dfrac{\delta}{2}时间τ2δ时间,因此往回走也是这么多时间
A检测到碰撞时间=τ−δ2+τ−δ2=2τ−δA检测到碰撞时间=\tau -\dfrac{\delta}{2}+\tau -\dfrac{\delta}{2}=2\tau – \deltaA检测到碰撞时间=τ2δ+τ2δ=2τδ

  • 主机最多经过2τ(即δ→0)2\tau(即\delta→0)2τ(δ0)的时长就可以检测到本次发送是否遭受了碰撞
  • 因此,以太网的端到端往返传播时延2τ2\tau2τ称为争用期碰撞窗口期
  • 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
  • 每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间
  • 显然,在以太网中发生帧的主机越多,端到端往返传播时延越大,发生碰撞的可能性就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长
    • 10Mb/s10Mb/s10Mb/s以太网把争用期定为512bit512bit512bit发送时间,即51.2μs51.2\mu s51.2μs,因此其总线长度不能超过5120m5120m5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m2500m2500m
2)最小帧长

为什么需要规定最小帧长?

假设AD发送帧,如果帧很短的话,在2τ2\tau2τ内就会将帧发送完毕,帧发送完毕后不会进行碰撞检测,而此时依然有发生碰撞的可能。所以必须保证在2τ2\tau2τ时间内帧不会被发送完,在这段时间里能够保持碰撞检测

  • 以太网规定最小帧长为64字节,即512比特(512比特即争用期)
    • 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节
  • 以太网的最小帧长保证了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞
    • 如果在争用期没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞
    • 如果在争用期检测到碰撞就立即中止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于碰撞检测而异常中止的无效帧
3)最大帧长

当帧过长时,其他线路会迟迟得不到资源,同时也可能导致接收方缓冲区溢出,因此帧的最大长度也有规定。

image-20220806010405259

4)退避算法

当帧发送碰撞后会停止发送,隔一段时间后再次发送,而具体隔多少时间再发送需要根据退避算法得出

image-20220806010345666

5)极限信道利用率
  • 各主机发送帧都不会产生碰撞

  • 总线一旦空闲就有某个主机立即发送帧

  • 每帧的发送时延为T0T_0T0,传播时延为τ\tauτ,占用信道的时间为T0+τT_0+\tauT0+τ
    极限信道利用率Smax=T0T0+τ=11+τT0为了令Smax尽量大,所以应该让τT0尽量小即τ尽量小(以太网端到端距离收到限制)或T0尽量大(以太网帧尽量长)极限信道利用率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尽量大(以太网帧尽量长)

image-20220806010327016

6)CSMA/CD协议——帧发送流程图:

image-20220806010738780

7)CSMA/CD协议——帧接收流程图:

image-20220806010335770

② 载波监听多点接入/碰撞避免(CSMA/CA)【用于无线网络】

802.11无线局域网使用CSMA/CA(Carrier Sense Multiple Access With Collision Avoidance )协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能

由于不可能避免所有的碰撞,并且无线信道误码率较高802.11标准还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收

  • 在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以避免碰撞

  • 在无线局域网中,不能使用碰撞检测CD,原因如下:

    • 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能差百万倍)。如果要在无线网卡上实现碰撞检测CD,对硬件的要求特别高。

    • 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站的问题),进行碰撞检测的意义也不大(如下)。而有线网络中信号会随着总线到达各个地方,不会出现隐蔽站

      image-20210323205537045

  • 802.11MAC层标准定义了两种不同的媒体接入控制方式

    • 分布式协调功能DCF。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式
    • 点协调功能PCF。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中较少使用
1)帧间间隔IFS

802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS

帧间间隔的长短取决于该站点要发送的帧的类型

  • 高优先级帧需要等待的时间较短,因此可优先获得发送权
  • 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发送碰撞的机会。

常用的两种帧间间隔如下

  • 短帧间间隔SIFS(28μm28\mu m28μm)。这是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型由ACK帧、CTS帧、由过长的MAC帧分片后的数据帧、以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧
  • DCF帧间间隔DIFS(128μs128\mu s128μs)。它比短帧间间隔SIFS要长得多,在DCF方式中用来发送数据帧和管理帧
2)工作原理

image-20210324090833801

①为什么源站检测到信道空闲后,还需要等待DIFS时间才将帧发送呢?

因为其他站此时可能有优先级更高的帧需要发送,因此有DIFS时间进行缓冲,若这个时间内没有高优先级的帧要发送,则说明信道是真正的空闲

②为什么目的站接收到帧后还需要等到SIFS时间才返回ACK确认帧呢?

SIFS是最短的帧间间隔,用来分割一次对话的各帧,在这个时间里由接收状态转变为发送状态

③当其他站要发送数据,但是发现此时信道正忙时就会退避一段时间,等信道不忙后再进行操作,接着等待DIFS时间(与①同理),但为什么等待了DIFS时间后还要退避一段随机时间呢?

因为可能有多个站点在信道忙时都想发送帧,因此它们都会被搁置直至信道不忙,在DIFS时间后他们会同时发送,而实际上多个站点同时发送数据会碰撞。因此需要一个随机时间将他们进行错峰发送。

3)退避算法

多个站点发送冲突时,各个站点需要退避一段随机时间再进行操作

以下情况必须使用退避算法

  • 在发送数据帧之前检测到信道处于忙状态
  • 在每一次重传一个数据帧
  • 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用通道)

过程

  • 在执行退避算法时,站点为退避计时器设置一个随机的退避时间
    • 当退避计时器的时间减小到0,就开始发送数据
    • 当退避计时器的时间还未减小到0时信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过DIFS后,继续启动退避计时器
  • 在进行第i次退避时,退避时间在时隙编号{0,1,..,2i+1−1}\{0,1,..,2^{i+1}-1\}{0,1,..,2i+11}中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做时为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应第6次退避)就不再增加了

image-20210324092919347

4)信道预约

为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约

  1. 源站在发送数据帧之前先发送一个短的控制帧,称为请求发生RTS,它包括源地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间
  2. 若目的站正确收到源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,称为允许发送CTS,它也包括这次通信所需的持续时间从RTS帧中将此持续时间复制到CTS帧中
  3. 源站收到CTS帧后,再等待一段时间SIFS后,就可发送其数据帧
    • 如果RTS帧发送碰撞,源站就收不到CTS帧,需执行退避算法重传RTS帧
    • 由于RTS帧和CTS帧很短,发生碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发就会浪费很多时间,因此用很小的代价对信道进行预约往往是值得的。802.11标准规定了3种情况供用户选择
      • 使用RTS帧和CTS
      • 不使用RTS帧和CTS
      • 只有当数据帧的长度超过某一数值时才使用RTS帧和CTS
  4. 若目的站正确收到了源站发来的数据帧,在等待时间SIFS后,就向源站发送确认帧ACK
  5. 除源站和目的站以外的其他各站,在收到CTS帧(或数据帧)后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会收到其他站的干扰。

image-20210324094639706

5)虚拟载波监听

RTS帧和CTS帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为802.11的虚拟载波监听机制

  • 由于利用虚拟载波监听机制,站点只要监听到RTS帧、CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题
  • 如下图,AC虽然互相覆盖不到,但是C可收到B发出的关于A的CTS帧,从而得知A需要占用信道的时间。在这段时间里,C不发送数据,从而解决隐蔽站带来的碰撞问题

image-20210324100904465

4. MAC地址、IP地址和ARP协议

image-20220806145718209

① MAC地址

MAC地址是以太网的MAC子层所使用的的地址

  • 点对点的,只有一条路径的信道不需要地址,因为没得选
  • 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址
  • 在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址
    • MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址
    • MAC地址有时也被称为物理地址。但是MAC地址不属于物理层而是属于数据链路层
  • 一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
MAC地址格式

image-20210324113202609
image-20210324113544917

单播地址、广播地址与多播地址

  • 单播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地址变换情况

image-20210324155136245

  • 数据报转发过程中源IP地址和目的IP地址保持不变
  • 数据包转发过程中源MAC地址和目的MAC地址(由ARP协议获得)逐个链路改变
  • 路由器上有路由表,记录了要到目的IP地址,先要走哪些路(即下一跳位置)。所以H1起初只带有目的IP地址,查询路由表后路由器指路,从而知道下一步该往哪里走,从而不断转发直至到达目的地。

也就是说:mac地址属于数据链路层,不能跨网段

image-20210324160951956

③ ARP协议

地址解析协议ARP属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址获取到设备的MAC地址

  • 数据的发送需要经过链路,仅仅知道IP地址是无法在数据链路层实现传输的,因此我们需要得到IP地址与MAC地址的对应关系,即地址解析。

  • 每台主机都会有一个ARP高速缓存表,记录有IP地址与MAC地址的对应关系

  • 初始ARP高速缓存表为空(根据单播回传来添加记录),假设此时B知道CIP地址,准备发送信息,但是由于不知道CMAC地址,因此无法封装数据帧,所以此时会广播一个**ARP请求报文(封装在MAC帧中,目的地址为广播地址FF-FF-FF-FF-FF-FF)**,内容如下:(类比表白墙捞人(雾

    • 先发送广播:image-20220806184024888
    • 再接受单播:image-20220806184227601
    • 我的IP地址是:xxx ;我的MAC地址是:XXX;我想知道C主机的MAC地址是多少?这个广播帧会被该广播域的所有主机收到
    • A主机收到后交由上层处理,发现B问的不是他,所以不予理会
    • C收到后交由上层处理,发现这个IP地址正是自己,因此首先将B的MAC地址和IP地址的对应关系记录到自己的高速缓存表中,接着返回给==ARP响应报文(封装在MAC帧中,目的地址为B的MAC地址)==,其中包含自己的MAC地址
  • ARP高速缓存条目有静态与动态两种类型

    • 动态代表是通过广播自动获取的条目,生命周期默认为两分钟
    • 静态是手工设置的条目,不同操作系统下的生命周期不同。
  • ARP协议只能在一段链路或一个网络上使用:ARP只能逐段链路使用,不能跨网络使用

5. 集线器与交换机

image-20220806195556448

集线器

image-20220806201714720

集线器HUB的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。

  • 使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议
  • 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站网卡检测)
  • 集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作
  • 集线器是半双工模式,收发不能同时进行,收到帧后会广播到除本身接口外的各个接口

交换机

详细,简单理解,戳视频链接 ,只能说交换机太强了。

集线器和交换器的小区别:

image-20220806201804496

image-20220806202840775

交换机是一种负责转发信号的网络设备,可以为接入交换机的任意两个网络节点提供独享的电信号通路

  • 以太网交换机通常由多个接口,每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式

  • 以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)

  • 以太网交换机一般都具有多种速率的接口

  • 以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧

  • 以太网交换机是一种即插即用的设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的

  • 帧的两种转发方式

    • 存储转发
    • 直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查是否有差错)
  • 交换机每个接口是一个独立的碰撞域

  • image-20210325105312206
    • 此时交换机未进行任何操作pc1 ping pc4是可以通的,说明整个交换机连接的范围是一个广播域。且ping通后,LSW3交换机的MAC表PC1MAC地址与接口的对应关系以及PC4MAC地址与接口的对应关系都记录到MAC地址表中==【ping的消息发送出去时记录下PC1地址接口相关情况,ping成功的消息响应返回给PC1时记录下PC4地址接口的情况】==

      image-20210325105956076

① 交换机自学习和转发帧流程

image-20220806203654841

  • 初始交换机12MAC地址表都为空

  • 此时有以下任务:①A-->BB-->A

    1. A发送给B的数据通过端口1进入交换机,因此交换机先将MAC地址A 接口1==(表示如果要去MAC地址A,可以走接口1)==记录到MAC表中,同时扫描MAC表查看是否有MAC地址B对应的接口,发现没有。因此将这个帧从除来源外的所有端口发送出去【泛洪】。

      • 交换机1的端口2发送此帧到主机C,主机C对比MAC地址后发现不是给自己的帧,因此丢弃
      • 交换机13端口发送此帧到主机B,主机B对比MAC地址后发现是给自己的帧,因此收下该帧,交付给高层【注意:此时交换机MAC地址表并没有学习新的条目】
      • 交换机14端口发送此帧到交换机2的端口2,交换机2首先将MAC地址A 接口2记录到MAC地址表中,接着扫描MAC表,发现没有找到MAC地址B对应的接口,因此将这个帧从除来源外的所有端口发送出去【泛洪】。
      • 同理,接口134发送出去给主机后经过比对发现不是自己的帧,因此丢弃
    2. B-->A时,交换机1MAC地址表已经有了MAC地址A 接口1这个条目

      • B发送给A的帧从接口3进入交换机,交换机首先将MAC地址B 接口3记录到MAC地址表中,接着查询MAC地址表是否有MAC地址A对应的接口,发现接口1对应的就是MAC地址A,因此从接口1转发出去
      • 帧通过接口1到达主机A,主机A经过比对后发现这是自己的帧,因此将其接收交付给高层
    3. 此时若有一个与A连接在同一总线上的主机GA发送帧,过程如何?

      image-20210324202645078

      • GA发送帧时,由于AG处在同一总线上,因此G发送的帧会直接传送到A处,A进行比对发现这是发送给自己的数据,因此将数据接收
      • 同时数据会跑向交换机1的端口1,所以交换机1会将MAC地址G 接口1记录到MAC表中,同时扫描MAC地址表看看是否有MAC地址A对应的接口,发现接口1就是。但是刚刚学习到的MAC地址G也是来自接口1,因此交换机知道接口1是来源,没有必要将数据再从这个接口转发出去。

MAC地址表中的每条记录都有自己的有效时间,到期自动删除。这是因为MAC地址与交换机接口的对应关系并不是永久性的

② STP生成树协议

STP可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题

**当交换机之间链路较少时,某一条链路发送故障,会导致其中有些主机无法通信,即链路不可靠。
**如下图,AB之间的链路发送故障后,H1便无法与H2H3进行通信

image-20210325085836691

很容易想到的一个方法是在B与C之间多拉一条链路,这样即使A与B之间的链路发送故障,H1H2H3之间还是能够相互通信,但是这会带来一些问题。如下,当H1发送一个广播帧时,我们针对交换机B进行过程分析

image-20210325090406814

  • 首先H1发送的帧进入交换机,交换机将MAC地址H1 接口1记录到MAC表中,接着检索MAC表,发现没有MAC地址H2的接口条目,因此进行泛洪,交换机AC都接收到此帧
  • 交换机A/C首先将MAC地址H1 接口1记录到自身的MAC表中,接着检索MAC表,发现没有广播帧的接口条目,因此进行泛洪。A泛洪的帧会被H3、交换机BC收到;C泛洪的帧会被H2、交换机AB收到。H2H3接收帧后发现是一个广播帧,于是接收并交上层处理
  • 我们针对交换机B进行分析
    • 此刻它收到了来自交换机C的泛洪,帧内信息依然是MAC地址H1 【源MAC地址】,首先它会将此条目添加进MAC表中,发现原先有MAC地址H1 接口1的记录,此时它会认为这条记录已经出现错误,因此更新为MAC地址H1 接口2。由于该条目的来源就是接口2,所以交换机不会再从接口2转发出去,而是在接口13处进行泛洪……
    • 同时B也收到来自交换机A的泛洪,情况与交换机C泛洪类似,于是又将MAC地址H1 接口2更新为MAC地址H1 接口3……
  • 因此帧会在交换机中不停转发,究其原因是因为网络形成了环路,网络环路会带来以下问题
    • 广播风暴
      • 大量消耗网络资源,使得网络无法正常转发其他数据帧
    • 主机收到重复的广播帧
      • 大量消耗主机资源
    • 交换机的帧交换表震荡(内容不断更新)
生成树原理
  • 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路)
  • 最终生成树的逻辑拓扑要确保连通整个网络
  • 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树重新计算

③ VLAN虚拟局域网

image-20220808165741956

一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求,每个VLAN就是一个独立的广播域

为什么需要VLAN?

随着交换式以太网规模的扩大,广播域相应扩大,而巨大的广播域会带来很多弊端

  1. 广播风暴

    如数台交换机连接了数台主机,当主机A要向主机B发送数据帧,此时各交换机的MAC表均为空,因此帧每到一个交换机就会进行泛洪,由于网络巨大,因此泛洪的范围也巨大

  2. 难以管理和维护

  3. 潜在的安全风险

1)交换机端口类型

缺省VLAN ID

华为交换机上叫PVID每个端口有且只有一个PVID。默认情况下端口的PVID都为1(即端口属于VLAN 1)

端口上接收时总希望能够打上标签,发送出去时候总希望能去除标签

①Access端口

交换机:

image-20220808170609687

  • Access端口一般用于终端设备与交换机之间

    注意:交换机与路由器连接的接口也需要使用access接口。这是因为路由器中的消息也不带VLAN标签,就像终端一样,保证路由器的数据能够进入交换机领域,数据由路由器进入交换机是会被打上默认标签,接着猜按照交换机间VLAN的规则行走。简单理解就是把路由器当作终端

  • 交换机初始端口类型是Access

  • Access端口只能属于一个VLAN

  • Access端口的PVID值与端口所属VLAN的ID相同(默认为1)

  • Access端口接收方法

    • 一般只接收"未打标签"的普通以太网MAC帧。根据接收帧的端口PVID给帧"打标签",即插入4字节的VLAN标记字段,字段中的VID取值与端口PVID取值相等
  • Access端口发送处理方法

    • 若帧中的VID与端口的PVID相等,则"去标签"并转发该帧;否则不转发
②Trunk端口

多个交换机:

image-20220808170903869

  • Trunk端口一般用于交换机之间或交换机与路由器之间的互连
  • Trunk端口可以属于多个VLAN
  • 用户可以设置Trunk端口的PVID值,默认情况下,Trunk端口PVID值为1
  • Trunk端口发送处理方法
    • VID等于PVID的帧,“去标签,再转发”
    • VID不等于PVID的帧,直接转发
  • Trunk端口接收处理方法
    • 接收"未打标签"的帧。根据接收帧的端口的PVID给帧"打标签",即插入4字节的VLAN标记字段,字段中的VID取值与端口的PVID取值相等
    • 直接接收"已打标签的帧"
  • 例题:image-20220808171501468
③Hybrid端口(杂交端口)

A->C:

image-20220808172110751

A->B

image-20220808172045143

  • Hybrid端口既可以用于交换机之间或交换机与路由器之间的互连(同Trunk端口),也可用于交换机与用户计算机之间的互连(同Access端口)
  • Hybrid端口可以属于多个VLAN(同Trunk端口)
  • 用户可以设置Hybrid端口的PVID值。默认情况下,Hybrid端口的PVID值为1
  • Hybrid端口发送处理方法
    • 查看帧的VID是否在端口的"去标签"列表中
    • 若存在,则"去标签"后转发
    • 若不存在,则直接转发
  • Hybrid端口接收处理方法(同Trunk)
    • 接收"未打标签"的帧,根据接收帧的端口的PVID给帧"打标签",即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等
    • 接收"已打标签的帧"

华为交换机Hybrid端口应用例子

如何分割广播域?

  1. 路由器

    由于路由器属于网络层设备,默认情况下不对广播数据包进行转发,因此自然达到隔离的效果。但是成本较高,局域网内部全靠路由器分割广播域是不现实的

  2. VLAN虚拟局域网技术

    默认情况下,交换机下的主机会被划入VLAN 1,可以通过设置相关语句为交换机设置VLAN,如下是将PC1PC2划入VLAN2的方法

    image-20210325115755501

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不能pingPC4,因为此时他们不属于一个同一个广播域,但是可以pingPC2,因为PC1PC2属于同一个广播域VLAN 2

image-20210325120545097

eNSP路由与交换技术笔记

2)VLAN实现机制
  • 打标签

image-20210325121915329

  • VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN
    • VID的取值范围是0~4095
    • 04095都不用来表示VLAN,因此用于表示VLANVID的有效范围是1~4094
  • 802.1Q帧时由交换机来处理的,而不是用户主机来处理的
    • 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q,简称**“打标签”**
    • 当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称**“去标签”**

6、参考链接:

计算机网络详细笔记【湖科大教书匠,内含B站链接】_Infinity_and_beyond的博客-CSDN博客_湖科大教书匠

计算机网络微课堂(有字幕无背景音乐版)_哔哩哔哩_bilibili

计算机网络笔记总结:Part2 物理层_兴趣使然的草帽路飞的博客-CSDN博客

Published by

风君子

独自遨游何稽首 揭天掀地慰生平