从零开始的计网学习——数据链路层(内容超多,收藏!)

文章目录

    • 3.1 数据链路概述
    • 3.2 封装成帧
    • 3.3 差错检测
      • 奇偶检验
      • 循环冗余校验CRC(Cyclic Redundancy Chek)
    • 3.4 可靠传输
      • 分组丢失
      • 分组失序
      • 分组重复
    • 3.5 三种可靠传输实现机制
      • 停止-等待协议SW
      • 回退N帧协议GBN
      • 选择重传协议SR
    • 3.5 点对点协议PPP
      • PPP协议标准办法
      • **PPP协议的帧格式:**
      • PPP协议解决透明传输问题
      • PPP协议进行差错检测
      • PPP协议的工作状态
    • 3.6 数据媒体接入控制
      • 静态划分信道
      • 动态接入控制
    • 3.7 MAC地址、IP地址以及ARP地址
      • MAC地址
      • IP地址
      • ARP地址
    • 3.8 集线器和交换器的区别
    • 3.9 以太网交换机自学习和转换帧的流程
    • 3.10 以太网交换机的生成树协议STP
    • 3.11 虚拟局域网VLAN
        • 虚拟局域网VLAN的实现机制

3.1 数据链路概述

数据链路层的功能:

实现数据在一个网络之间的传输。因此,为了实现这个功能就有了以下多个概念:

数据链路的组成:

  1. 链路:从一个节点到一个相邻节点的一段物理线路,而中间没有任何其他交换节点

  2. 数据链路:数据链路的构成由把实现通信协议的硬件和软件加到链路上构成的。

数据链路以帧为单位传输和处理数据

从零开始的计网学习——数据链路层(内容超多,收藏!)_第1张图片

数据链路层的三个重要问题:

封装成帧:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第2张图片
封装成帧是把网络层交付的协议数据单元,添加帧头和帧尾的操作,称为封装成帧,主要目的是为了在链路上以帧为单元传输数据,从而实现数据链路层本身的功能

封装后的帧的格式:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第3张图片
差错检测:

在传输过程中可能会产生比特差错:1 可能会变成 0, 而 0 也可能变成 1。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第4张图片

  1. 发送方会基于发送的数据和检错算法计算出检错码,并放在帧尾。

  2. 接收方主机根据数据链路层放在帧尾的检错码和检错算法来判断传输过程是否有错误。

接收方主机收到有误码的帧后,是不会接受该帧的,会将它丢弃

可靠传输:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第5张图片

丢弃有误码的帧后,会进行其他措施来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本,来实现发送方发送什么,接收方就能接收到什么

可靠传输时数据链路层中最基本、最重要的问题。

不可靠传输:

在丢弃有误码的帧后,不进行任何其他处理,接收方不一定能够收到发送方发送的东西

以上三个问题都是使用点对点信道的数据链路层来举例的。

如果使用广播信道的数据链路层除了包含上面三个问题外,还有一些问题要解决:

  1. 在发送信号过程中,如何识别是否发送的是给自己主机:
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第6张图片
    在发送数据过程中,信号是以广播的形式发送,因此数据中需要带有发送主机和目的主机地址,来实现识别主机的目的。

常用的解决方法是编址方法:将帧的目的地址添加在帧中一起传输。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第7张图片
例如以太网V2的MAC帧,在其帧头就有目的地地址和发送主机源地址。

  1. 数据碰撞:在数据发送过程中可能出现有两个主机同时发送数据,就会造成数据碰撞。
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第8张图片
    常用的解决方法就是控制协议:CSMD/CD。

随着技术的发展,交换技术的成熟,


有线(局域网)领域 使用点对点链路和链路层交换机的交换式局域网取代了共享式局域网


在无线局域网中仍然使用的是共享信道技术

3.2 封装成帧

从零开始的计网学习——数据链路层(内容超多,收藏!)_第9张图片
封装成帧是把网络层交付的协议数据单元,添加帧头和帧尾的操作,称为封装成帧,主要目的是为了在链路上以帧为单元传输数据,从而实现数据链路层本身的功能

例如:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第10张图片
就是一个帧,带有帧头和帧尾。

在物理层中会将构成帧的各比特,转换成电信号交给传输媒体,为了便于接收方数据链路层从物理层交付比特流中提取出一个一个的帧,因此需要帧头跟帧尾来做一个帧定界,来实现从比特流中提取出一个一个的帧。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第11张图片
例如在ppp帧的格式中,在帧头和帧尾各有一个帧定界编制,由1子节组成,其01111110和01111110所包裹的数据就是一个帧,数据链路层可以识别这个帧定界从而提取出一个帧。

但是也存在没有帧定界标志的数据链路层协议:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第12张图片
前导码:其前导码由两部分组成:

前同步码:作用是使接收方的时钟同步


帧开始定界符:表明其后面紧跟着的就是MAC帧

其帧的提取由物理层添加的前导码来识别开始,并且按照稳定的时钟周期,在每一帧的结束会由96比特发送时间的间隔,以此来识别一个帧的结束。

透明传输

封装抽象出具体的传输逻辑,只暴露出传输的功能

在此指的是数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第13张图片
在传输数据过程中可能会出现数据比特流与帧定界标志符一样的情况,造成误读定界标志导致传输错误

在这种情况下,说明数据链路层对于数据有了一个要求:不能存在与定界符一样的数据编码。这就代表着对上层交付的数据有了限制,这就不是透明传输

因此为了实现透明传输,需要在数据链路层对数据进行处理,实现透明传输的功能。

因此在数据链路层中就会有对数据的处理来实现透明传输功能,例如:字节填充、比特填充,主要思路是在每一个传输数据中出现的定界符进行转义,防止误读。

子节填充:在面向字节的物理链路中适用,主要步骤:

  1. 通过在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)

  2. 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符

  3. 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。

比特填充:适用于面向比特传输的物理链路,使用步骤:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第14张图片

  1. 在数据链路层中发送帧前扫描帧的数据部分,若出现连续的5个1,将后续的一个1换成0(因为帧定界标志符为01111110)。

  2. 在接收方数据链路层接收帧时,帧的数据部分,若出现连续的5个1,将后续的一个0换成1。

3.3 差错检测

实际的通信过程中都不是理想的,在传输过程中可能会产生比特差错:1 可能会变成 0, 而 0 也可能变成 1。

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

使用差错检测码来检测数据在传输过程中是否出现差错是数据链路层的一个重要问题。
传输差错
从零开始的计网学习——数据链路层(内容超多,收藏!)_第15张图片
如图所示的FCS就是检错码,可以让接收方使用检错码和检错算法检验传输数据是否出现错误。

奇偶检验

从零开始的计网学习——数据链路层(内容超多,收藏!)_第16张图片
在发送的数据中添加1个奇偶检验位,在接收方根据1的个数来判断是否出现错误

例如传输过程中添加1个1后,整体的1的个数为奇数,在传输过去后根据1的个数判断是否出现传输错误,但是当传输错了偶数个1时不能判断出来

因此这种判断存在很大的局限性。在数据链路层中不使用。

循环冗余校验CRC(Cyclic Redundancy Chek)

循环冗余检验是一种可靠性非常高的校验方法。

主要有以下几步:

  1. 收发双方约定好一个生成多项式G(x)
  2. 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后方一起传输
  3. 接收方通过生成多项式来计算收到的数据是否出现误码

发送方处理:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第17张图片
整体做除法,根据约定的多项式次数,在待发送数据后面添加多项式最高项次数个零。然后进行除法,最后生成的余数就是冗余码,其长度应该和多项式最高次数相同。

其中除数就是生成多项式的各项系数构成的比特串

接收方处理:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第18张图片
已接受数据加上余数,同生成多项式各项系数构成比特串进行除法,若余数为零则无误码,余数不为零则有误码。

生成多项式举例:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第19张图片
由此可见,生成多项式系数构成的比特串比生成多项式最高项次数的个数要多一。因此除数的个数应该比发送方构建被除数时添加的零的个数多一个

常用的生成多项式:

常用的生成多项式:
经过反复验证,使用上述的多项式可以达到较好的检验效果。

例子:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第20张图片
在计算除数时,要进行异或运算,两数相同为0不同为1。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第21张图片

3.4 可靠传输

根据差错检测技术,接收方的数据链路层可以检测出帧在传输过程中是否出现了误码。

接收方主机收到有误码的帧后,是不会接受该帧的,会将它丢弃

此时有两种情况:

可靠传输:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第22张图片

丢弃有误码的帧后,会进行其他措施来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本,来实现发送方发送什么,接收方就能接收到什么

可靠传输时数据链路层中最基本、最重要的问题。

不可靠传输:

在丢弃有误码的帧后,不进行任何其他处理,接收方不一定能够收到发送方发送的东西

一般情况下,有线链路的误码率比较低,为了减小开销,不要求数据链路层向上提供可靠传输服务。即使出现了误差,可靠传输的问题由其上层解决。

对于无线链路,误码率较高,因此要求数据链路层必须向上层提供可靠传输服务。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第23张图片
比特差错知识传输差错中的一种,从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序、分组冲重复。

分组丢失

从零开始的计网学习——数据链路层(内容超多,收藏!)_第24张图片
路由器输入队列由于空间不足,主动丢弃收到的分组,造成分组丢失。

分组失序

从零开始的计网学习——数据链路层(内容超多,收藏!)_第25张图片
由于传输过程中选择失序的问题,接收方实际收到的数据与发送方发送的分组顺序不同造成分组失序。

分组重复

从零开始的计网学习——数据链路层(内容超多,收藏!)_第26张图片
分组在传输过程中由于某种原因在线路中滞留,导致一定时间内没有到达接收方,触发发送方超时重传机制,最终导致接收方收到了两个相同分组,造成分组重复。

  • 分组丢失、失序、重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层,因此可靠传输服务并不局限于数据链路层,在其他各层均可选择实现。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第27张图片
TCP/IP4层结构中的以太网便不要求数据链路层实现可靠传输。

  • 可靠传输的实现比较复杂,开销比较大,是否使用取决于应用需求。

3.5 三种可靠传输实现机制

  • 可靠传输服务并不局限于数据链路层,在其他各层协议均可选择实现。

停止-等待协议SW

停止等待协议有4个最基本原则:

1. 确认与否认:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第28张图片
在停止等待协议中:

  • 在每个数据发送后,接收方接到后会发送ACK(确认)信号确认无误收到,发送收到ACK信号后便开始发送下一个数据。

  • 接收方检测收到数据出现误码后,会发送NAK(否认)信号,发送方接收到NAK信号后会重新发送缓存区中的数据

  • 因此,在此过程中,发送方与接收方一直处于一种停止等待对方的过程,在此过程中要进行确认与否认,这也是停止-等待协议的最基本原则。

2. 超时重传:

  • 此原则可以避免当数据传输过程中出现丢失,导致接收方一直等待不到数据传送到达,而发送方又在等待接受方发送确认信号系统处于互等的请况

从零开始的计网学习——数据链路层(内容超多,收藏!)_第29张图片
从零开始的计网学习——数据链路层(内容超多,收藏!)_第30张图片

3. 确认丢失:

  • 此原则可以避免:接收方发送ACK信号后,由于传输问题出现ACK信号丢失,导致发送方没收到确认信号,重传分组,此时接收方重新接收到一样的分组,造成分组重复错误
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第31张图片
    解决办法:
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第32张图片
    一个比特就是0或者1,只要接收的分组信号与上一次不同便可以。这样子就可以避免重复的问题。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第33张图片
4. 确认迟到:
此原则可以避免:接收方发送ACK信号后,由于传输问题出现ACK信号迟到,导致发送方没收到确认信号,重传分组,同时开始传输下一个分组,此时ACK到达,但是此时超时重传的分组已经发送出去,接收方接收到后会发送一个一样的ACK信号。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第34张图片
在点对点通信中,传输的时钟周期比较固定,很少出现确认迟到的情况,可以不用给确认分组编号。

注意事项:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第35张图片
停止-等待协议的信道利用时间:

  • TD:发送时间,发送时延

  • RTT:往返时间

  • TA:发送确认分组时间,发送时延
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第36张图片
    信道利用率就是发送方发送时延占据整个事件比例。

  • 当往返时延RTT远大于数据帧发送时延TD时(卫星电路),信道利用率非常低

  • 若出现重传,信道利用率还要减低

  • 因此就出现了另外两种协议:回退N帧协议GBN、选择重传协议SR

回退N帧协议GBN

回退N帧协议可以理解为停止等待协议的一种优化,在相同的时间内,使用停止-等待协议的发送方只能发送一个数据分组,而采用流水线传输的发送方,可以发送多个数据分组

  • 回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数

从零开始的计网学习——数据链路层(内容超多,收藏!)_第37张图片
发送窗口即每次可以连续发送的个数,个数由数据链路协议决定,有n个比特数据参与编号既有2^n次方个发送窗口大小

选择发送的窗口数量一般要小于发送限定窗口。

接收窗口为1.

若发送窗口的取值为1,则变成停止等待协议。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第38张图片
对于发送过程无差错情况:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第39张图片

发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去


分组经过互联网传输正确到达接收方,没有乱序和误码,接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组,在通过互联网的传输正确到达了发送方


发送方每接收一个、发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付上层处理

累计确认:接收方不一定要对收到的数据分组逐个发送确认,而可以在收到几个数据分组后(由具体实现),对按序到达的最后一个数据分组发送确认,ACKn表示序号为n及以前的所有数据分组都已正确接收。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第40张图片

优点:

即使确认分组丢失,发送方也可能不必重传


减小接收方的开销


减小对网络资源的占用


缺点:


不能向发送方及时反映出接收方已经正确接收的数据分组信息

对于有差错情况:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第41张图片
在传输过程中,5号数据分组出现错误,接收方在接收5号分组时通过其检错码发现了错误。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第42张图片
于是丢弃该分组,而后续到达的分组通过对比序号发现序号不匹配,接收方就选择不接受他们,将他们丢弃,并且回传按序接受的最后一个正确数据分组,发送ACK4每丢弃一个分组就发送一个最后正确数据分组信号
从零开始的计网学习——数据链路层(内容超多,收藏!)_第43张图片
当收到重复的ACK4时,就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻开始重传,具体收到几个重复确认就立刻重传,根据具体实现决定

从零开始的计网学习——数据链路层(内容超多,收藏!)_第44张图片
如果收到这4个重复的确认并不会触发发送立刻重传,一段时间后。超时计时器超时,也会将发送窗口内以发送过的这些数据分组全部重传

为什么叫回退n帧?

在5序号缺失后,此时确认的信号为4号帧,此时已经正确发送的6,7,0,1号帧全部选择丢弃,回退到已经确认的第n号帧,因此叫回退n帧协议。

三个知识点:

  • 回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议

  • 在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议

  • 当通信线路质量不好时,回退n帧的效率会不比停止等待协议好。

为什么要将发送窗口的序号设置为小于取值范围上限?

以设置窗口长度为接收限定长度举例。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第45张图片

在实际传输过程中,假设所有的分组都被接收,此时发送一个ACK7,但是ACK7在传输过程中丢失。


此时发送方到一定时间后触发超时重传机制,重新发送0-7编号分组。


此时接送方接收到后,会比对分组序号,发现分组序号符合当前窗口选择接收。


但是此时0-7分组实际上已经接收过了,此时就出现了差错。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第46张图片
很明显,若发送窗口长度大于限定长度,会导致不能识别新旧数组。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第47张图片
回退N帧协议的缺点:

一个数据分组的误码就会导致其后续多个数据分组不能被接收方接收而丢弃,尽管他们并没有错误。

这必然会导致发送方对这些数据分组的超时重传,这时对通信资源的极大浪费。


基于此,为了进一步提高传输性能,就提出了选择重传协议。

选择重传协议SR

对于选择重传协议,在回退n帧协议的基础设,为了进一步提高传输性能,可设法只重传出现无法的数据分组。因此,接收窗口的尺寸WR不应在等于1,应该大于1,以便接收方先收下失序到达但无误码并且序号落在接收串口内的那些数据分组,等到所缺分组收齐后再一起送交上层

对于选择重传协议,为了使发送方仅重传出现差错的分组,接收方不能再采用累计确认机制,而要选择对每个正确接收到的数据分组进行逐一确认

举例:

条件限定:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第48张图片
一般情况下接收窗口大小与发送窗口相同。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第49张图片

  1. 发送方将发送窗口内数据0123发送给接收方,且此时2号分组出现丢失。

  2. 此时接收方能正确接收0,1 序号分组,并且发送ACK0,ACK1。并且此时接收窗口向前滑动。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第50张图片
3. 此时接收方接收3号数据分组,并且发送ACK3,但是由于此时2号分组没有收到,不能向后滑动创建,只能继续接收剩余窗口。此时发送方会对发送窗口中的3号数据做已确认标记,防止超时重发。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第51张图片

  1. 此时发送方收到ACK0,ACK1,将窗口向后滑动,并且将4,5号数据发送出去。

  2. 接收方接收到4,5号分组后,回传ACK4,ACK5

从零开始的计网学习——数据链路层(内容超多,收藏!)_第52张图片

  1. 2号数据触发超时重传机制,此时将2号数据发送过去,接收方接收到后回传ACK2,并且此接收方有序并且已确认数据已经连续,向后滑动窗口。

  2. 发送方接收到ACK2信号后,所有发送窗口都满足确认,并且已经连续,发送窗口也向后滑动。

依次类推,最后完成所有分组传输。

条件限定:
**条件限定:**
具体原因与上面回退n帧协议窗口尺寸问题类似。

若不满足要求会导致不能识别新旧分组问题。

小结:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第53张图片

3.5 点对点协议PPP

  • 点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议

  • PPP协议是因特网工程任务组IEIF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]

  • PPP协议是数据链路层使用的一种协议,它的特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第54张图片

  • PPPoE 是为宽带上网的主机使用的链路层协议

  • PPP协议也广泛应用于广域局域网路由器之间的专用线路。

PPP协议是目前用用最广泛的点对点数据链路层协议。

PPP协议标准办法

PPP协议为在点对点链路传输各种协议数据报中提供了一个标准办法,主要由三部分组成:

  • 对各种协议数据报的封装方法(封装成帧)
  • 链路控制协议LCP ——用于建立、配置以及测试数据链路的连接
  • 一套网络控制协议NCPs——其中的每一个协议支持不同的网络层协议

PPP协议的地位:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第55张图片

PPP协议的帧格式:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第56张图片

PPP协议解决透明传输问题

关于透明传输的思路在上面3.2已有讲解,不再重复赘述。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第57张图片
简单来说:

  • 面对字节的链路,选择插入转义字符的子节填充法。

  • 面向比特的同步链路选择插入比特0的比特填充法。

举例:

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

从零开始的计网学习——数据链路层(内容超多,收藏!)_第58张图片


面向比特的同步链路采用填充比特字符的比特填充法:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第59张图片
其具体思路与3.2所讲述的类似。

PPP协议进行差错检测

PPP协议的帧
在PPP协议中的FCS是一个两字节的帧检验序列FCS字段,可以使用循环冗余校验CRC来计算该字段的取值。

接收方每收到一个PPP帧,就进行过CRC校验,若CRC校验正确,就接收这个帧,否则,就丢弃这个帧。

使用PPP协议的数据链路层向上不提供给可靠服务。

PPP协议的工作状态

从零开始的计网学习——数据链路层(内容超多,收藏!)_第60张图片

3.6 数据媒体接入控制

数据媒体接入控制(Medium Access Control)简称MAC其要着重考虑的问题就是如何协调多个发送和接收站对一个个共享传输媒体的占用,也就是解决冲突的问题。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第61张图片

静态划分信道

  • 预先固定分配好信道,这类方法非常不灵活,对于突发性数据传输信道利用率会很低。
  • 通常在无线网络的物理层中使用,而不是在数据链路层中使用。

信道复用:

  • 复用是通信技术中的一个重要概念,复用就是通过一条物理线路同时传输多路用户的信号。
  • 当网络中传输媒体的传输容量大于多条单一信道的总通信量时,就可以利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第62张图片
    常用的复用技术有4种:
    频分复用FDM、时分复用TDM、波分复用WDM、码分复用CDM

频分复用FDM:

  • 将整个带宽分为多份,用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带

  • 频分复用的所有用户在同样的时间占用不同的带宽资源(请注意,这里的“带宽”是频率带宽而不是数据的发送速率)。
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第63张图片
    接收端通过相应的分用其通过滤波将各路信号分开。将合成的服用信号恢复成原始的多路信号。

时分复用TDM:

  • 将时间划分成一个个的时间间隙
  • 时分复用技术将传输线路的带宽资源按一个个的时间间隙轮流分配给不同的用户。
  • 每个用户只在所分配的时隙里使用线路传输数据。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第64张图片

  • 时分复用则是将时间划分为一段段等长的时分复用帧(TDM帧)。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙
  • 每一个用户所占用的时隙是周期性地出现(其周期就是TDM帧的长度)的。
  • TDM 信号也称为等时 (isochronous) 信号。
  • 时分复用的所有用户在不同的时间占用同样的频带宽度。

波分复用(WDM)

波分复用就是光的频分复用。

光信号传输一段距离后会衰减,所以要用掺铒光纤放大器放大光信号
从零开始的计网学习——数据链路层(内容超多,收藏!)_第65张图片
码分复用(CDM):
码分复用,由于该技术主要用于多址接入,人们更常用的名词时码分多址CDMA(Code Division Multiple Access)

同理:频分复用(FDM)和时分复用(TMD)都可用于多址接入,相应的名词是频分多址(FDMA)和时分多址(TMDA)

复用和多址:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第66张图片

  • 与FDM和TDM不同,CMD的每一个用户可以在同样的时间使用同样的频带进行通信。

  • 由于个用户经过特殊挑选的不同码型,因此个用户之间不会造成干扰

  • CMD最初是用于军事通信的,因此这种系统发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易于被敌人发现

关于码片和相关计算请看我的这篇文章:

计算机网络码分多址CDMA及计算例题(简单易懂)

动态接入控制

从零开始的计网学习——数据链路层(内容超多,收藏!)_第67张图片

受控接入:

由于市场竞争已经退出历史舞台。

集中控制:

  • 由一个主站以循环方式轮询每个站点有无数据发送,只有被轮询到的站点才能发送数据,最大缺点是存在单点故障问题。

分散控制:

  • 个站点是平等的,并且练级成一个环形网络,令牌(一个特殊的控制帧)沿环逐站传递,接收到令牌的站点才有权发送数据,并在发送完数据后把令牌传递给下一个站点

值得注意的是:

注意事项

随机接入:

以太网(Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网(Ethernet)的技术标准


以太网采用无连接的工作方式,对发送的数据帧不进行编号,也不要求对方发回确认。目的站收到有差错帧就把它丢弃,其他什么也不做

最初的以太网是将许多计算机都连接到一根总线上。易于实现广播通信。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第68张图片

但是在多个主机公用一个总线时,避免不了会出现碰撞的问题。如何协调总线上个主机的工作,尽量避免碰撞是一个必须解决的重要问题。

因此就出现了载波监听多址接入/碰撞检测 CSMA/CD协议用于解决碰撞问题

随机接入分为总线型局域网无线型局域网。


总线型局域网使用的是CSMA/CD协议


无线型局域网使用的是CSMA/CA协议

总线型CSMA/CD协议:

  • 什么是载波监听多址接入/碰撞检测 CSMA/CD协议?

首先是多址接入MA:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第69张图片

从零开始的计网学习——数据链路层(内容超多,收藏!)_第70张图片
如图所示,多个主机接在一个总线上,就是一种多址接入现象。

载波监听CS:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第71张图片
其中,96比特时间是发送96比特需要的时间,其作用是可以检测出一个帧的结束

同时也是的其他站点都能有机会平等竞争信道并发送帧。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第72张图片
在多址接入的基础设,若想发送数据,要先听后写,在检测信道是否空闲96比特时间,若是才申请发送数据。

但是实际上:总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号

碰撞检测CD:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第73张图片

  • “碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小

  • 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)

  • 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞

  • 所谓“碰撞”就是发生了冲突。因此碰撞检测 也称 冲突检测

  • 在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。

  • 每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第74张图片
在B发送帧的过程中,还是要进行边发送边检测(边说边听),若检测到碰撞立即停止发送,而后退避一段随机时间

在以太网中还采取一种叫强化碰撞的措施:从零开始的计网学习——数据链路层(内容超多,收藏!)_第75张图片
这里再引入一个CSMA/CD协议工作中的争用期或碰撞窗口的概念

从零开始的计网学习——数据链路层(内容超多,收藏!)_第76张图片

首先在图中先参数:

τ : 以太网单程端到端传播时延,也就是比特端到端传输花费的时间。

因此由图可以看出,当发生碰撞时,最长需要2τ的时间就能检测到本次是否发生碰撞(也就是碰撞点在最远端)。

因此,以太网中,端到端的往返传播时延2τ称为争用期碰撞窗口。

也就是说在这段时间才有可能发生碰撞,若这段时间没有发生碰撞,则不再会发生碰撞。

可以有以下结论:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第77张图片

CSMA/CD中最小帧长的概念:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第78张图片
在这种情况中,若A发送信号,并且在信号发送到C端前已经发送完毕,于是A不再进行碰撞检测。

但是在C处发生碰撞,导致D收到有差错的帧。

但是此时A并不知道发生了碰撞。

为了避免这种情况,就要求帧长不能太短,也就引出了最小帧长的概念。

  • 在以太网中,规定最小帧长为64子节,也就是512比特(512比特即为以太网的争用期)

从零开始的计网学习——数据链路层(内容超多,收藏!)_第79张图片

CSMA/CD中最大帧长的概念:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第80张图片
在此传输情况中,A发送了一个很长的帧,占用了大量时间造成B、C无法传输数据,并且可能会造成某一端的缓冲区满的情况。

因此便提出了最大帧长的概念。

以太网版本的MAC帧为例:

以太网mac帧
此时他便规定了其数据在和的最大长度为1500子节。

CSMA/CD中的截断二进制指数退避算法:

首先明确退避时间的取值:

退避时间
随机从二进制集合中取值也就是截断二进制指数名词的由来。

为何要随机取数,原因就是为了尽量避免退避时间相同,再次重新发送数据引发新的冲突

退避时间取值举例:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第81张图片
重传16次都失败,说明同时发送帧的主机太多,于是丢弃该帧,并向高层报告。

CSMA/CD中的信道利用率概念:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第82张图片
在发送过程中,发送一帧需要的时间为:

多个争用期2τ时间 + 发送时间To + 发送到最远端时间 τ

此时其信道利用率为:

To / 平均时间。

可以看出此时的信道利用率还是比较低的。

考虑一种理想情况:

极限信道利用率

此时就提出了极限信道利用率的概念。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第83张图片
CSMA/CD中的帧发送流程图:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第84张图片
CSMA/CD中的帧接收流程图:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第85张图片
无线型局域网 CSMA/CA协议:

  • 载波监听多址接入/碰撞避免协议 CSMA/CA(Carrier Sense Multiple Access / Collosion Acoidance)

在无线局域网中能不能使用CSMA/CD协议呢?
从零开始的计网学习——数据链路层(内容超多,收藏!)_第86张图片
从零开始的计网学习——数据链路层(内容超多,收藏!)_第87张图片
在无线局域网中,每个主机的作用域有限,不能做到像总线型局域网中信号传遍总线的情况。

因此难以进行碰撞检测。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第88张图片
CSMA/CA协议中帧间间隔:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第89张图片
CSMA/CA协议工作原理:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第90张图片
在工作流程中,有两个问题需要我们明白:

  1. 信道空闲后若有数据要发送为何需要在等待DIFS帧间间隔时间?

因为考虑到能有其他高优先级的帧要发哦是那个数据,若有高优先级要发送,先让高优先级发送。

  1. 在接收到帧后,为和要等待SIFS个时间后再发送确认ACK?

SIFS是最短帧间间隔,用来分隔开属于一次对话的各帧,再这段时间内,发送站点应该要从发送方式,转换为接收方式。

对于发送过程中其他信道检测到信道忙:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第91张图片
退避发算法的使用时间:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第92张图片

CSMA/CA的退避算法:

  • 在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
  • 当退避时间减少为0时便开始发送数据。
  • 若退避时间未减少为零并且信号右变程忙状态,这是间CSMA/CA协议工作原理:等到信道变为空闲再经过DIFS后,继续启动退避计时器。

对于退避算法退避次数的设置:
退避算法退避次数

退避算法的工作流程图:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第93张图片
由以上退避算法的原则,就可以很清晰得看懂这篇流程图。

CSMA/CA协议的信道预约和虚拟载波监听:

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

对于一次信道预约要进行得过程:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第94张图片
预约过程流程图:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第95张图片

  • 除源站和目的站意外得其他各站,在收到CTS帧后就会推迟接入到无线局域网中,这样子就可以保证原则和目的站之间得通信不会收到其他站得影响。

  • 如果RTS帧发生碰撞,源站就收不到CTS帧,此时需使用退避算法重传RTS帧

  • 由于RTS帧和CTS帧都很小发生碰撞、碰撞产生得开销以及本身得开销都很小,而对于一般得数据帧,其发送时延往往大于传播时延,因此碰撞概率很大。因此用很小的代价进行预约往往是值得得

802.11标准规定了3中情况供用户选择:
三种情况
802.11的虚拟载波监听机制:

虚拟载波监听机制

从零开始的计网学习——数据链路层(内容超多,收藏!)_第96张图片

  • 对于A和C互为隐蔽站(双方都不能收到对方信息),此时只要A发送给B的RTK,B再发一个CTK广播,C收到后便可以知道信道被占用的持续时间,也就是虚拟载波监听。

3.7 MAC地址、IP地址以及ARP地址

  • MAC地址是以太网的MAC子层所使用的地址,数据数据链路层

  • IP地址是TCP/IP体系结构网际层所使用的地址

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

MAC地址

从零开始的计网学习——数据链路层(内容超多,收藏!)_第97张图片
对于点对点信道来说,由于数据是直接传输到目标主机的,不存在主机识别的问题,因此不需要用到地址。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第98张图片
使用广播信道的主机,由于发送数据时是广播给所有主机,数据链路层必须使用地址来区分主机

  • 当多个主机连接再同一个广播信道上,想要实现两个主机之间的通信,则每个主机必须有一个唯一的标识,即一个数据链路层地址。

  • 在每个主机发送帧中必须携带标识发送主机和接收主机的地址,由于这类地址是用于媒体接入控制(Medium Access Contr),因此这类地址被称为MAC地址

从零开始的计网学习——数据链路层(内容超多,收藏!)_第99张图片
一般MAC地址被固化在网卡中(网络适配器)的电可擦只读存储器EEPROM中,因此MAC地址也被称为硬件地址

MAC地址有时也被称为物理地址,但是MAC是数据数据链路层的内容。

一般情况网卡
MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标志

MAC地址的格式:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第100张图片
MAC地址由6个子节表示每个子节由两个16进制数字表示。

其表示方法:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第101张图片
在ieee官网中,可以根据MAC地址查询到地址的相关信息,例如厂商,生产地址等等。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第102张图片
在MAC地址中,第一子节的b0和b1字符由特殊的含义。如图所示。

注意,在剩余46位全部取1时,就是广播地址FF-FF-FF-FF-FF。此时发送的是广播消息。

  • 对于使用EUI-48空间的应用程序,IEEE的目标寿命为100年(直到2080年),但是鼓励采用EUI-64作为替代

关于无效的MAC帧:

  1. 数据字段的长度与长度字段的值不一致;
  2. 帧的长度不是整数个字节;
  3. 用收到的帧检验序列 FCS 查出有差错;
  4. 数据字段的长度不在 46 ~ 1500 字节之间。
  5. 有效的 MAC 帧长度为 64 ~ 1518 字节之间。

对于检查处无效的MAC帧就简单地丢弃,以太网不负责重传丢弃的帧。
MAC地址的发送顺序:从零开始的计网学习——数据链路层(内容超多,收藏!)_第103张图片
单播MAC地址发送例子:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第104张图片

  1. 主机B给主机C发送单播帧,主机B首先要构建该单播帧,在帧首部中的目的地址字段填入主机C的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部的其他字段、数据载荷以及帧尾部,就构成了该单播帧。

  2. 将该帧发送给出去
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第105张图片

  3. 此时A接收该单播帧,发现该单播帧的目的MAC地址与自己的MAC地址不匹配,丢弃该帧

  4. 此时C接收该单播帧,发现该单播帧的目的MAC地址与自己的MAC地址匹配,接受该帧,并将该帧交给其上层处理

广播MAC地址发送例子:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第106张图片

  1. 主机B首先要构建该广播帧,在帧首部中的目的地址字段填入广播地址,也就是十六进制的全F源地址字段填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该广播帧

  2. 发送该广播帧

从零开始的计网学习——数据链路层(内容超多,收藏!)_第107张图片
3. 主机A和C都会收到该广播帧,发现该帧首部中的目的地址字段的内容是广播地址,就知道该帧是广播帧,主机A和主机C都接受该帧,并将该帧交给上层处理

多播MAC地址发送例子:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第108张图片

  • 主机A要发送多播帧给该多播地址。将该多播地址的左起第一个字节写成8个比特第一个字节的最低比特位是1,这就表明该地址是多播地址。
  • 快速判断地址是不是多播地址,就是上图所示箭头所指的第十六进制数不能整除2(1,3,5,7,9,B,D,F),则该地址是多播地址

发送过程:

  1. 构建该多播帧,在帧首部中的目的地址字段填入该多播地址,源地址点填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该多播帧

  2. 将该多播帧发送出去,主机B、C、D都会收到该多播帧
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第109张图片
    各用户给自己的主机配置多播组列表如图所示。

可以看出主机B属于两个多播组,主机C也属于两个多播组,而主机D不属于任何多播组

从零开始的计网学习——数据链路层(内容超多,收藏!)_第110张图片

  1. 主机B和C发现该多播帧的目的MAC地址在自己的多播组列表中,主机B和C都会接受该帧

  2. 主机D发现该多播帧的目的MAC地址不在自己得多播组列表中,则丢弃该多播帧

IP地址

  • IP地址属于网络层的范畴,不属于数据链路层的范畴。

  • 下面内容讲的是IP地址的使用,详细的IP地址内容在网络层中介绍。

IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:

  1. 网络编号:标识因特网上数以百万计的网络

  2. 主机编号:标识同一网络上的不同主机

从零开始的计网学习——数据链路层(内容超多,收藏!)_第111张图片
如图,192.168.0 便是网络编号。

0.254 0.1等便是主机编号。

因特网中不同的网络的网络编号必须不同!

MAC地址不具备区分不同网络的功能,IP地址可以区分不同网络。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第112张图片
在网络体系结构中:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第113张图片
IP地址的添加属于网络层的功能。

数据包转发过程中IP地址与MAC地址的变化情况:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第114张图片
在图中可以清晰看出:

IP地址在传输过程中不会发生变化。

MAC地址在发送过程中沿着主机的传输而变化。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第115张图片

在此例子中可以看出,在传输过程中可以知道IP地址,但是不知道其MAC地址是什么。

此时就引出了ARP地址。

ARP地址

  • ARP(地址解析协议)

  • 可以实现由IP地址寻求到MAC地址

从零开始的计网学习——数据链路层(内容超多,收藏!)_第116张图片

  • 在B要发送数据时,由于不知道目的的MAC地址,导致不能完成帧的构建发送。

在每一个主机中都有一个高速缓存表,可以记录IP地址和MAC地址的对应信息。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第117张图片
在查找主机MAC地址时会先在ARP高速缓存表中查找。

很明显,在此例中无法找到。

此时,就需要主机B需要发送ARP请求报文广播,来获取主机C的MAC地址。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第118张图片

  • ARP请求报文被封装在MAC帧中发送,目的地址为广播地址
  • 主机B发送封装有ARP请求报文的广播帧,总线上的其他主机都能收到该广播帧

从零开始的计网学习——数据链路层(内容超多,收藏!)_第119张图片
从零开始的计网学习——数据链路层(内容超多,收藏!)_第120张图片

符合请求IP地址的主机会把自己的MAC地址通过ARP相应报文发送给请求主机
从零开始的计网学习——数据链路层(内容超多,收藏!)_第121张图片
主机B接收到回复信息后会把IP地址和MAC地址放在ARP中保存下来,并且此时将原来构建中的帧构建好并发送出去。

在ARP中有两种类型的数据,动态和静态

动态:自动获取,生命周期默认为两分钟


静态:手工设置,不同操作系统的生命周期不同。

由于ARP协议的适用是逐段链路进行的,因此ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用

从零开始的计网学习——数据链路层(内容超多,收藏!)_第122张图片

3.8 集线器和交换器的区别

早期的计算机网络中,常用的是总线型以太网。
从零开始的计网学习——数据链路层(内容超多,收藏!)_第123张图片
但是随着网络的发展被逐渐淘汰,出现了两种新型以太网结构:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第124张图片
从零开始的计网学习——数据链路层(内容超多,收藏!)_第125张图片

传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。


采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)。


集线器是也可以看做多口中继器,每个端口都可以成为一个中继器,中继器是对减弱的信号进行放大和发送的设备


集线器的以太网在逻辑上仍是个总线网,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,收发帧不能同时进行

集线器HUB在物理层扩展以太网:

使用集线器扩展:将多个以太网段连成更大的、多级星形结构的以太网,会扩大碰撞域
从零开始的计网学习——数据链路层(内容超多,收藏!)_第126张图片

  • 优点
  1. 使原来属于不同碰撞域的以太网上的计算机能够进行跨碰撞域的通信。
  2. 扩大了以太网覆盖的地理范围。
  • 缺点
  1. 碰撞域增大了,但总的吞吐量并未提高。
  2. 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。

在这里引出了碰撞域的概念:

碰撞域:

  • 碰撞域(collision domain)又称为冲突域,是指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络。

  • 碰撞域越大,发生碰撞的概率越高。

以太网交换机:

  • 以太网交换机是在数据链路层扩展以太网

从零开始的计网学习——数据链路层(内容超多,收藏!)_第127张图片
在集线器中,数据是以广播的形式发送,而在交换机中,会发送到目的主机中,因此其效率要高很多。

以太网交换机示意图:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第128张图片
从零开始的计网学习——数据链路层(内容超多,收藏!)_第129张图片
交换方式中:

  • 存储转发:把整个数据帧先缓存后再进行处理。
  • 直通交换:接收数据帧的同时就立即按数据帧的目的 MAC 地址决定该帧的转发接口,因而提高了帧的转发速度。但是不检查差错就直接将帧转发出去,因此有可能也将一些无效帧转发给其他的站。

**集线器和交换机的对比**

对于传播对比:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第130张图片

  1. 在单播情况下,集线器会像总线型一样把信号全部转发出去,而交换机只会发送给目标主机

  2. 在广播情况下,二者无明显区别。

对于处理冲突的对比:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第131张图片

多台主机同时给另一台主机发送单播帧


集线器以太网:会产生碰撞,遭遇碰撞的帧会传播到总线上的各主机


交换机以太网:会将它们缓存起来(存储转发),然后逐个转发给目的主机,不会产生碰撞

对于扩展以太网的对比:

单播的情况:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第132张图片

  • 对于集线器,会把信号发送给整个碰撞域中。

  • 对于交换机,会直接发送给目标主机。

对于广播情况:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第133张图片

  • 对于广播情况,二者无较大区别。

对于多个单播:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第134张图片

  • 集线器扩展中,多个单播会导致冲突。

  • 交换机扩展中,多个单薄由于交换机具有存储转发功能,不会导致冲突。

碰撞域对比:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第135张图片
在交换机中,可以实现扩大广播域而不扩大碰撞域,用路由器实现

总结:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第136张图片

3.9 以太网交换机自学习和转换帧的流程

  • 以太网交换机工作在数据链路层(也包括物理层)
  • 在以太网交换机中,有一个帧交换表。其中记录了帧的目的MAC地址对应的接口号。
  • 帧交换表最开始是空的,在启动后随着主机间的通信,交换机通过自学习算法逐渐建立起帧交换表

自学习和转发帧的示例:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第137张图片
若A要发送某数据给B主机,要经过以下过程:

  1. A 先向 B 发送一帧。该帧从接口 1 进入到交换机。
  2. 交换机收到帧后,先查找(图中左边)交换表。没有查到应从哪个接口转发这个帧给B。
  3. 交换机把这个帧的源地址 A 和接口 1写入交换表中
  4. 交换机向除接口 1 以外的所有的接口广播这个帧,寻求帧地址
  5. 接口 4到接口 2,先查找交换表。没有查到应从哪个接口转发这个帧给 B
  6. 交换机把这个帧的源地址 A 和接口 1 写入交换表中
  7. 除B主机之外与该帧的目的地址不相符,将丢弃该帧
  8. 主机B发现是给自己的帧,接受该帧
  • 总的来说,若查表为无想要数据,先将自己的数据存在表中,再进行广播请求表数据,若得到响应便将该MAC地址与接口存在表中,如此往复进行。

对于B发送数据给A:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第138张图片

1 . B 向 A 发送一帧。该帧从接口 3 进入到交换机。


2. 交换机收到帧后,先查找(图中左边)交换表。 发现(图中左边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口1转发出去。于是就把这个帧传送到接口 1 转发给 A。


3. 主机 A 发现目的地址是它,就接受该帧


4. 交换机把这个帧的源地址 B 和接口 3 写入(图中左边)交换表中

对于E发送到A:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第139张图片

  1. E 向 A发送一帧
  2. 交换机收到帧后,先查找(图中右边)交换表。发现(图中右边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口2转发出去。于是就把这个帧传送到接口 2 转发给 接口 4。
  3. 交换机把这个帧的源地址 E 和接口 3 写入(图中右边)交换表中
  4. 接口 4 到 左边的交换机,先查找(图中左边)交换表。发现(图中左边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口1转发出去。于是就把这个帧传送到接口 1 转发给 A。
  5. 交换机把这个帧的源地址 E 和接口 4 写入(图中左边)交换表中
  6. 主机 A 发现目的地址是它,就接受该帧

对于G发送给A:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第140张图片

主机 A、主机 G、交换机 1的接口 1就共享同一条总线(相当于总线式网络)

  1. 主机 G 发送给 主机 A 一个帧
  2. 主机 A 和 交换机接口 1都能接收到
  3. 主机 A 的网卡收到后,根据帧的目的MAC地址A,就知道是发送给自己的帧,就接受该帧
    交换机 1收到该帧后,首先进行登记工作
  4. 然后交换机 1对该帧进行转发,该帧的MAC地址是A,在(图中左边)交换表查找MAC 地址有 A
  5. MAC 地址为 A的接口号是1,但是该帧正是从接口 1 进入交换机的,交换机不会再从该接口 1 讲帧转发出去,因为这是没有必要,于是丢弃该帧
  • 考虑到可能有时要在交换机的接口更换主机,或者主机要更换其网络适配器,这就需要更改交换表中的项目。为此,在交换表中每个表项都设有一定的有效时间。过期的表项就自动被删除。

  • 以太网交换机的这种自学习方法使得以太网交换机能够即插即用,不必人工进行配置,因此非常方便。

总结:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第141张图片

3.10 以太网交换机的生成树协议STP

由于在实际使用过程中,可能会出现线路故障导致无法通信。

如:
从零开始的计网学习——数据链路层(内容超多,收藏!)_第142张图片
若A与B之间的线路故障会导致B与A、C之间无法通信。

此时就提出了一个问题:

  • 如何提高以太网的可靠性?

可以选择通过添加冗余链路来提高以太网的可靠性。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第143张图片

但是冗余链路会带来负面效应:网络环路

而网络环路会导致广播风暴
从零开始的计网学习——数据链路层(内容超多,收藏!)_第144张图片

广播风暴指的是由于网络形成环路,网络信号广播会在环路之间不停往返进行,导致大量消耗网络资源

同理,还会导致主机收到重复的广播帧,导致交换机的交换表震荡。

为了解决以上问题,避免出现网络环路,便引出了生成树协议(STP)。

  • STP可以保证,不管交换机之间采用怎么样的物理连接,交换机都能自动构建出一个在逻辑上没有环路的网络,其逻辑拓扑结构必须是树形的,也就是生成最小生成树。关于最小生成树可以看:

  • 当网络拓扑发生变化时,交换机都会自动进行生成树的重新计算。

3.11 虚拟局域网VLAN

  • 虚拟局域网VLAN是一种将局域网内设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有共同的需求。

  • 这种技术的出现是为了避免广播域过大,每次发送广播都需要发送到整个广播域造成的浪费网络资源和CPU资源的问题。
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第145张图片
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第146张图片
    网络中会频繁出现各种广播:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第147张图片

分割广播域的方法有两种:

  1. 使用路由器隔离广播域
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第148张图片
  2. 虚拟局域网技术。

从零开始的计网学习——数据链路层(内容超多,收藏!)_第149张图片
可以根据不同的网段划分出逻辑局域网,实现广播域的分割。

对于VLAN有以下知识点:

  • 利用以太网交换机可以很方便地实现虚拟局域网 VLAN (Virtual LAN)。
  • EEE 802.1Q 对虚拟局域网 VLAN 的定义: 虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机是属于哪一个 VLAN。
  • 同一个VLAN内部可以广播通信,不同VLAN不可以广播通信
  • 虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。
  • 由于虚拟局域网是用户和网络资源的逻辑组合,因此可按照需要将有关设备和资源非常方便地重新组合,使用户从不同的服务器或数据库中存取所需的资源。

虚拟局域网VLAN的实现机制

  • 虚拟局域网VLAN技术是在交换机上实现的,需要交换机能够实现以下功能:
  1. 能够处理带有VLAN标记的帧——IEEE 802.1 Q帧

  2. 交换机的各端口可以支持不同的端口类型,不同端口类型的端口对帧的处理方式有所不同。
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第150张图片

交换机的端口有三种:

  1. Access
  2. Trunk
  3. Hybrid(思科交换机中没有)

交换机中的缺省VLAN ID:
缺省ID

Access端口:

  • Access端口主要用于交换机与用户计算机之间的互连。
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第151张图片
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第152张图片
    对于A广播发送后,端口会先给帧进行打标签

打完标签后,与标签号相同的端口就会接收该帧,并且接收后进行去标签接收

对于VLAN的实现,可以通过划分VLAN后,修改ACEES端口的PVID:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第153张图片

从零开始的计网学习——数据链路层(内容超多,收藏!)_第154张图片

从而可以实现广播域的划分。

Trunk端口:

  • Trunk端口用于交换机之间或交换机与路由器之间的互连。
    Trunk端口概念
    从零开始的计网学习——数据链路层(内容超多,收藏!)_第155张图片

在Trunk端口中:
Trunk端口相当于Access端口的跨交换机版,具体的操作与Access相同,不再进行赘述。

华为交换机私有的Hybrid端口类型:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第156张图片

从零开始的计网学习——数据链路层(内容超多,收藏!)_第157张图片
三种端口小结:

从零开始的计网学习——数据链路层(内容超多,收藏!)_第158张图片
总的来说:

虚拟局域网技术有以下优点:

  1. 改善了性能
  2. 简化了管理
  3. 降低了成本
  4. 改善了安全性

如果觉得文章写的还不错,麻烦点个赞支持一下,欢迎评论,互相交流学习。

你可能感兴趣的:(计算机网络,计算机网络)