第3章 数据链路层
3.1 关于数据链路层我们需要学习什么?
数据链路层属于计算机网络五层系统结构的第二层,属于计算机网络的低层。我们需要理解和掌握以下内容:
- 数据链路层的点对点信道和广播信道,以及这两个信道使用的协议(PPP协议、CSMA/CD协议)
- 数据链路层的基本问题:封装成帧、透明传输和错误检测。
- 广播信道数据链路层的基本问题:识别主机据碰撞。
- 以太网MAC地址相关知识。
- 适配器、转发器、集线器、网桥、以太网交换机的功能及适用场合。
3.2 数据链路层概述
在开始学习数据链路层之前,我们需要澄清一些独家术语的概念。
- :链路是一条无源的物理线路段,中间没有其他交换点。
- :在此,我们将任何运行数据链路层协议的设备作为节点(即主机、路由器、交换机和WiFi接入点等)。
- :数据链路层传输的数据单元。在数据链路层中,每个传输节点在链路层帧中包装数据报告,并将帧传输到链路中。
3.2.1 数据链路层分类
根据使用的信道,数据链路层可分为两类:。
3.2.1.1点对点信道
:使用一对一的点对点通信。
使用点对点信道的数据链路层面临着三个问题:
- :将网络层交付到数据链路层的数据单元,添加数据链路层的首尾控制信息,继续以帧为数据传输单元传输数据,称为。(详见3.3小节)
- :在数据链路层中,透明传输是指,,也就是说,任何比特组合的数据都可以放置在帧中,通过数据链路层完全无误。(详见3.4小节)
- :在数据传输过程中,由于外部影响,比特0可能会变成比特1,为了检测数据传输过程中是否存在上述问题,数据链路层采用循环冗余检测(CRC)技术错误检测。(详见3。.5小节)
3.2.1.2 广播信道
:各种信道采用一对多的广播通信方式,过程复杂。广播信道上连接的主机很多,所以必须使用专用的协调这些主机的数据发送。
除了使用点对点信道的数据链路层外,使用广播信道的数据链路层还面临以下两个问题:
- :在广播信道中,多个主机共享相同的信道进行数据传输。因此,每个主机都可能收到不发送给自己的数据。在这个时候,它经常附带在数据帧中传输,以便信道中的主机识别数据是否传输给自己。如果您没有收到传输给您的数据,您通常会直接丢弃数据帧。
- :在广播信道中,由于多个主机共享相同的信道传输数据,多个主机同时发送数据,导致数据碰撞,每个主机无法接收正确的数据帧。在这种情况下,有很多方法可以处理,常见的是CSMA/CD控制协议。
3.2.2 在哪里实现数据链路层?
下图显示了一个典型的主机系统结构。数据链路层的主题部分是在网络适配器(网络接口卡,即网卡)中实现的。链路层控制器位于网络适配器的核心。该控制器通常是实现多链路层服务(帧、链路接入、错误检测等)的专用芯片。
尽管数据链路层的大部分功能都是在硬件中实现的,但是部分数据链路层的功能是在运行于CPU实现了组装链路层搜索信息、激活控制器硬件、向上交付数据等功能。。
3.3 封装成帧
3.3.1 基本概念
包装帧是数据链路层提供的最基本的服务。在数据链路层的发送端,,同时,在接收端,在接收到物理层交付的比特流后,根据数据帧的第一部分和尾部定义帧,提取数据,然后向上交付到网络层。
在这个过程中,。因为物理传输的比特流是数据流,不能定义数据。
增加帧头和帧尾:
- 增加数据链路层的必要控制信息
- 帧定界
最大传输单元(MTU):链路层协议规定的可传输帧数据的长度上限。
3.3.2 帧定界
数据链路层传输的数据是可打印的(可以由键盘输入)ASCII当编码构成文本时,帧定界可以使用特殊的文本。(ASCII代码是7位代码,总共可以形成128个不同的代码ASCII代码,其中95个可以打印,33个不能打印的控制字符,所以这33个不能打印的控制字符可以用作帧定界。
下图显示了帧定界的概念,控制字符SOH放在帧的前面,表示帧的开始,EOT放在帧的最后,表示帧的结束。
注意:
:判断收到的帧是否完整,如果不完整,则丢弃。
3.4 透明传输
,也就是说,任何比特组合的数据都可以通过数据链路层完全放置在帧中,没有错误。
基于上述帧定界,如果传输的数据是当构成文本时,数据中某个字节的二进制代码可能恰到好处SOH或者EOT同样,数据链路层的帧定界也会出现错误,只接收部分帧,然后丢弃另一部分帧。在这种情况下,数据链路层的传输阻碍了数据的正确传输。此时,数据链路层可见数据,违反了透明传输的原则。
为了解决数据链路层中可能出现的这种情况,我们经常使用它或者,对数据进行特殊处理,据中的定界符,防止链路层误读,导致不透明。
-
字节填充法
在发送端的SOH和EOT前插入一个,在接收端的数据链路层中,插入的转义字符将在将数据交付到网络层之前删除。如果转义字符也出现在数据中,则在转义字符前插入另一个转义字符。如果在接收端遇到两个相邻的转义字符,则将删除前一个转义字符。这种处理方法被称为。
-
比特填充法
在发送端,如果连续5个1,则在发送帧前扫描帧的数据部分后续增加1个0。在接收端的数据链路层中,如果连续5个1,则用1替换后续0。
3.5 差错检测
3.5.1 基本概念
-
比特错误:在信道传输过程中,由于各种外部因素的影响,数据可能会从0变为1,或从1变为0。这种现象被称为。
-
码误率:在一段时间内,传输错误的比特占传输总比特数的比例称为码误率。
在现实生活中,通信链路并非是理想的,必须采用各种差错检测措施。
3.5.2 CRC检错技术
CRC检错技术也被称为,因为该编码能够将发送的比特串看作为系数为0和1的一个多项式,对比特串的操作被解释为多项式算术。
CRC检错技术的步骤总结如下:
- 发送数据前,发送方和接收方约定一个生成多项式G。
- 发送方将要发送的数据按照k比特为一组进行分组,基于要发送的数据和生成多项式G计算出n位的冗余码,将该冗余码添加到要传输的数据的后面一起发送给接收方。
- 接收方通过生成多项式G来计算收到的数据是否出现错误。
冗余码的计算规则:
- 用二进制的模 2 运算进行 2的n次方 乘 M 的运算,这相当于在 M 后面添加 n 个 0。
- 得到的 (k + n) 位的数除以事先选定好的长度为 (n + 1) 位的除数 G,得出商是 Q 而余数是 R,余数 R 比除数 G 少 1 位,即 R 是 n 位。
- 将余数 R 作为冗余码拼接在数据 M 后面发送出去。
举例说明CRC的原理:
- 假定k = 6,要发送的数据M = 101001,冗余码的位数为n = 3,双方约定的生成多项式G = 1101。
- 被除数可以得出为101001000,进行模2运算得出商Q = 110101,余数R = 001,发送方把R作为冗余码拼接在M后面发送给接收方,即发送方发送的数据为101001001,共(k + n)位。
- 在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。
- 循环冗余检验 CRC 和帧检验序列 FCS 并不等同。
- CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
- FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。
注意:
如果数据链路层仅仅使用CRC差错检测技术,则只能做到对帧的无差错接受,即:“凡是接收端数据链路层接收的帧,我们都能以非常接近1的概率认为这些帧在传输过程中没有产生差错”,接收端接收到错误的帧后就会丢弃,虽然这些帧曾被接收到过,但是最终被丢弃了,还没有被接受。以上所述可以近似地表述为”凡是接收端在数据链路层接受的帧都是无差错的“。
但是在这里,我们所讲的无差错,是指,并非只可靠传输,如果想在数据链路层实现可靠传输,光是使用CRC差错检测技术,是无法完成的,必须加上。
3.6 可靠传输
3.7 PPP协议
3.7.1 简介
在通信线路质量较差的年代,在数据链路层一般使用了可靠传输协议,即HDLC(高级数据链路控制协议)。但是在如今通信线路质量普遍较好的情况下,在数据链路层一般不采用可靠传输协议了。对于点对点链路,目前广泛的使用了相对较简单的
PPP协议是IETF在1992年制定的,经过1993年和1994年的修订,现在的PPP协议在1994年就已经成为了互联网的正式标准。
用户使用拨号电话线接入互联网时, 用户计算机和 ISP 进行通信时所使用的数据链路层协议就是 PPP 协议。
3.7.2 PPP协议应满足的需求
- 简单:IETF在设计互联网体系结构的时候,把最复杂的功能部分放在TCP协议中,而 IP协议相对比较简单,它不提供可靠的数据包服务,因此在这种情况下,数据链路层的PPP协议没有必要提供比IP协议更多的功能,因此
- 封装成帧:PPP协议必须规定特殊的字符作为帧定界符。
- 透明性:必须保证数据传输的透明性。
- 支持多种网络协议:能够在同一条物理链路上同时支持多种网络层协议。
- 支持多种链路类型:能够在多种类型的链路上运行。
- 差错检测:能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。
- 检测连接状态:能够及时自动检测出链路是否处于正常工作状态。
- 最大传送单元:必须对每一种类型的点对点链路设置最大传送单元 MTU 的标准默认值,促进各种实现之间的互操作性。
- 网络地址协商: 必须提供一种机制使通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址。
- 数据压缩协商:必须提供一种方法来协商使用数据压缩算法。
PPP协议不需要保证可靠传输,不提供帧序号和确认机制。
原因如下:
- 在数据链路层出现差错的概率不大时,使用比较简单的 PPP 协议较为合理。
- 在因特网环境下,PPP 的信息字段放入的数据是 IP 数据报。数据链路层的可靠传输并不能够保证网络层的传输也是可靠的。
- 帧检验序列 FCS 字段可保证无差错接受。
3.7.3 PPP协议的组成
PPP协议由三个部分组成
- 。PPP既支持异步链路,也支持面向比特的同步链路。
- 。
- ,其中每一个协议支持不同的网络层协议,如IP、OSI的网络层,DECnet,以及AppleTalk等。
3.7.4 PPP协议的帧格式
- PPP 帧的首部和尾部分别为 4 个字段和 2 个字段。
- 标志字段 F = 0x7E (符号“0x”表示后面的字符是用十六进制表示。十六进制的 7E 的二进制表示是 01111110)。
- 地址字段 A 规定为 0xFF。地址字段实际上并不起作用。
- 控制字段 C 规定为 0x03。
- PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。
PPP 有一个 2 个字节的协议字段。
- 若为 0x0021,则信息字段就是 IP 数据报。
- 若为 0x8021,则信息字段是网络控制数据。
- 若为 0xC021,则信息字段是 PPP 链路控制数据。
- 若为 0xC023,则信息字段是鉴别数据。
3.7.5 PPP协议的透明传输问题
- 当 PPP 用在同步传输链路时,协议规定采用硬件来完成比特填充(和 HDLC 的做法一样)。
- 当 PPP 用在异步传输时,就使用一种特殊的字符填充法。
3.7.5.1 字节填充
当使用PPP协议进行异步传输时,它会把转移字符定义为0x7E,并且使用,字节填充的规则如下:
- 将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列 (0x7D, 0x5E)。
- 若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列 (0x7D, 0x5D)。
- 若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变,例如,出现0x03就要把它转换为2字节序列(0x7D,0x23)。
在接收方对收到的数据进行相反的转换即可正确还原出发送方发送的数据信息
3.7.5.2 零比特填充
- 在发送端,只要发现有 5 个连续 1,则立即填入一个 0。
- 接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
3.7.6 PPP协议的工作状态
用户使用PPP协议拨号上网至最终结束拨号上网整个过程中PPP协议发挥了如下作用:
-
刚开始,线路处于静止状态,此时不存在物理层连接。
-
当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接,此时线路变成链路建立状态。
-
PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧),以便于建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数,商定成功后,就会进入身份验证,当双方的身份验证通过后,就会进入网络层协议状态。
-
处于网络层协议状态时,需要进行网络层配置,NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机,此时链路处于链路打开状态,此时就可以进行数据传输了。
-
通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接,最终链路回到静止状态。
可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
上述过程可以用下图进行描述。
3.8 使用广播信道的数据链路层
3.8.1 局域网
首先,学习了前面第一章的同学,应该对于局域网有了一定的认知,接下来我会稍微详细的讲解局域网的特点、拓扑结构以及使用的传输介质等相关知识。
3.8.1.1 局域网的特点与优点
局域网的特点:网络为一个单位所拥有的,且地理范围和站点数目均有限。
局域网的优点:
- 具有广播功能,可以从一个站点方便的访问全网。
- 便于系统的扩展和逐渐演变,各个设备的位置可以灵活地调整和改变。
- 提高了系统的可靠性、可用性和生存性。
3.8.1.2 局域网的拓扑结构
局域网常用的拓扑结构主要有四大类:星形结构、环形结构、总线形结构、星形和总线形结合的复合结构。
3.8.1.3 局域网的传输介质以及介质访问控制
局域网可以使用双绞线、铜缆以及光纤等多种传输介质,最主流的便是双绞线。
局域网的介质访问控制方法主要是CSMA/CD、令牌总线和令牌环,其中前两种主要用于总线形局域网,令牌环主要用于环形局域网。
3.8.1.4 局域网的两个标准
- :世界上第一个局域网产品(以太网)的规约。
- :第一个 IEEE 的以太网标准。
DIX Ethernet V2 标准与 IEEE 的 802.3 标准只有很小的差别,因此可以将 802.3 局域网简称为“以太网”。
严格说来,“以太网”应当是指符合 DIX Ethernet V2 标准的局域网 。
IEEE802标准定义的局域网参考模型只对应于OSI参考模型的数据链路层和物理层,并将数据链路层拆分为了两个子层:以及。
- MAC子层:与接入到传输媒体有关的内容都放在 MAC子层,向上屏蔽对物理层访问的各种差异,提供对物理层的统一访问接口,主要功能包括:组帧和拆卸帧、比特传输差错检测、透明传输。
- LLC子层:LLC子层向网络层提供无确认无连接、面向连接、带确认无连接、高速确认4种不同的连接服务类型。不管采用何种协议的局域网,对 LLC 子层来说都是透明的。
由于 TCP/IP 体系经常使用的局域网是 DIX Ethernet V2 ()而不是 802.3 标准中的几种局域网,因此现在 802 委员会制定的逻辑链路控制子层 LLC(即 802.2 标准)的作用已经不大了。很多厂商生产的适配器上就仅装有 MAC 协议而没有 LLC 协议。
3.8.2 媒体共享技术(介质访问控制)
使用广播信道的数据链路层,会遇到上文提过的两个额外的问题:与。因此在数据链路层需要采取介质访问控制,来保证同一条广播信道上的两对结点之间的通信不会互相产生干扰,并且能够正确的识别并接收信号。
3.8.2.1 介质访问控制的分类
介质访问控制分为两大类:静态划分信道以及动态媒体接入控制。
- 静态划分信道:此方法就是在2.5小节中介绍过的四种信道复用方法。该类方法付出的代价过大,并不适用于局域网中。
- 动态媒体接入控制:这类方法的特点是信道并非在用户通信时固定分配给用户,而是动态的分配给用户,此时又分为两种:随机接入与受控接入。
3.8.2.2 随机接入介质访问控制
在随机接入介质访问控制中,不采用集中控制的方式去解决发送信息的次序问题,所有用户都可以根据自己的需要,随机地发送信息,占用信道的全部速率。然而在总线形的网络中,当有两个或多个用户同时发送信息时,就会产生帧冲突,导致所有有冲突用户的发送结果都是失败的。因此必须要有一个协议来解决这种帧的冲突问题,常用的协议由ALOHA协议、CSMA协议、CSMA/CD协议以及CSMA/CA协议等。
这些协议的核心思想就是:胜利者通过争用获取信道的使用权。因此随机接入介质访问控制的协议又被称为。
3.8.2.2.1 ALOHA协议
ALOHA协议是由夏威夷大学早期研发的随机接入系统,ALOHA协议分为两种:和。
-
:当网络中的任何一个站点需要发送数据时,可以不进行任何检测就发送数据,如果一段时间内未收到确认,那么该站点就认为传输过程中出现了冲突,发送站点就会等待一段时间后再次发送数据,直至发送成功。
:由上图可以看出,在网络用户很多的情况下,纯ALOHA协议产生碰撞的概率很高,为了克服这个缺点,在纯ALOHA协议的基础上,就改进发展出了时隙ALOHA协议。
-
:时隙ALOHA协议将共享信道上的所有站点在时间上同步起来,并且将时间划分为一段段等长的时隙,规定只能在每一个时隙的开始才能发送帧。这种方法可以减少用户发送数据的随机性,从而减少数据碰撞的几率,提高信道的利用率。
示例图如下
在上图中,时隙长度为T,每个帧到达站点后,一般需要在缓存中等待一段小于T的时间,才能被发送。当一个时隙内有多个帧到达时,在下一个时隙必然会发生碰撞,碰撞之后的冲突重发机制与纯ALOHA是类似的。
:时隙ALOHA协议虽然是在纯ALOHA协议的基础上做了改进,减少了数据碰撞的几率,但是用户发送数据时,依然是随心所欲的,即使其他站点在发送数据,也依旧照发不误,因此产生数据碰撞的几率依旧很大。
3.8.2.2.2 CSMA协议
上一小节,介绍了ALOHA协议的缺点(发送数据随心所欲,即使有其他站点在发送数据,依旧照发不误),因此,如果每个站点在发送之前侦听一下信道,发送信道空闲之后再发送数据,就会大大的减少数据碰撞的几率。基于这一思想,产生了。CSMA协议在ALOHA协议的基础上进一步进行了改进,两者的最主要区别在于,CSMA协议比ALOHA协议多了载波侦听装置。
根据侦听方式和侦听到信道忙碌后的处理方式的不同,CSMA协议分为三种:、以及。
-
:当一个结点要发送数据时,首先要侦听信道,如果信道空闲,则立即发送数据。如果信道中有其他站点发送数据,则不发送数据(等待),并且继续侦听信道直至信道空闲后立即发送数据。如果产生了数据碰撞,则随机等待一段时间后再侦听信道。
可能有读者就会疑惑,为什么使用1-坚持CSMA协议还会产生数据碰撞?
其原因是,数据在链路上的传播速度是有限的,当两个站点相聚较远,在T1时刻,A站点侦听信道发现信道空闲,B站点侦听信道发现信道也空闲,那么A站点与B站点都会立即发送数据,从而导致数据碰撞。或者在T1时刻,A站点正在发送数据,而B站点也要发送数据,但是由于A站点发送的数据还未传播至B站点,因此此时B站点侦听信道发现信道时空闲的,B站点就会立即发送数据,也会产生数据碰撞。
:受传播延迟的影响较大。
-
:当一个结点要发送数据时,首先要侦听信道,如果信道空闲,则立即发送数据。如果信道中有其他站点发送数据,则不发送数据并且放弃侦听,等待一个随机时间后再重复上述过程。
该协议在侦听到信道空闲后就放弃侦听,降低了多个结点等待信道空闲后立即发送数据导致冲突的概率。
:增大数据在网络中的平均延迟。
-
:当一个结点要发送数据时,首先要侦听信道,如果信道中有其他站点发送数据,则持续侦听,直至信道空闲。如果信道空闲,则以概率p发送数据,以概率1-p推迟到下一个时隙。如果在下一个时隙信道依旧空闲,那么仍然以概率p发送数据,以概率1-p推迟到下一个时隙。这个过程一直持续到数据发送成功,或者因为其他结点发送了数据而侦听到信道忙为止。如果是后者,则等待下一个时隙再重新开始侦听信道。
该协议属于1-坚持CSMA协议以及非坚持CSMA协议的折中方案。坚持侦听,是为了克服非坚持CSMA协议中由于随机等待而导致的延迟增大的问题,以p概率发送数据是为了克服1-坚持CSMA协议中由于多个结点检测到信道空闲后立即发送数据导致数据冲突的问题。
信道状态 | 1-坚持CSMA | 非坚持CSMA | p-坚持CSMA |
---|---|---|---|
空闲 | 立即发送数据 | 立即发送数据 | 以概率p发送数据,以概率1-p推迟到下一个时隙 |
忙碌 | 持续侦听 | 放弃侦听,等待一个随机时间后再侦听 | 持续侦听 |
3.8.2.2.3 CSMA/CD协议
以太网解决数据碰撞所广泛使用的协议就是,该协议是在CSMA协议的基础上进行了进一步改进,该协议适用于总线形网络以及半双工网络环境。
CSMA/CD协议的工作流程可以概括为十六个字:“”。
- 站点从网络层获得分组,封装成以太网帧,放入缓存,准备发送。
- 站点侦听信道,如果发现信道空闲,则立即发送该帧,如果发现信道繁忙,则持续侦听直至信道空闲,然后立即发送该帧。
- 在发送帧的过程中,站点持续侦听信道,如果一直未检测到数据碰撞,则顺利的把该帧发送完毕。如果检测到产生了数据碰撞,则中止帧的发送,并且发送一个拥塞信号,通知该信道上的其他站点,发生了数据碰撞。
- 中止发送后,执行,等待一段随机时间后返回到步骤2。
CSMA/CD协议虽然在CSMA协议上进行了改进,但是依旧避免数据碰撞(原因在上文中也陈述过,即电磁波在信道中的传输速度是有限的)。下图是传播时延对于载波侦听的影响的示意图。
上图中站点A和站点B相距1KM,用同轴电缆相连,电磁波在1KM电缆的传播时延约为5微秒,因此,A向B发送的数据,在5微秒后才能传送到B。假设图中的单程传播时延为x,在t=0时,A发送数据。在t=x-y时,A发送的数据还未到达B,此时B检测到信道空闲而立即发送数据。在t=x-y/2时,A发送的数据和B发送的数据发生碰撞,但此时A和B都不知道发生了碰撞。在t=x时,B检测到碰撞,停止发送数据,在t=2x-y时,A也检测到碰撞,停止发送数据。
-
由以上示例也可以看出,使用CSMA/CD协议的信道是无法做到同时发送和接收的,因此。
-
由上图也可以看出,站点A在发送数据后,最多后就能知道是否发生了碰撞,因此,以太网端到端往返时间也被称为(或者),如果在争用期内依旧没发生碰撞,则代表此次发送数据不会发生碰撞。
-
为了确保发送站在发送数据的同时能够检测到是否发生了碰撞,需要在发送完帧之前就能收到自己发送出的数据是否发生了碰撞。因此,因此使用CSMA/CD协议的总线网中的所有数据帧都必须大于最小帧长。在总线上任何站点收到小于最小帧长的数据帧时,都会被当作无效帧丢弃。
最小帧长 = 总线传播时延 * 数据传输速率 * 2
那么如果某个数据帧确实小于最小帧长,该怎么办呢?
如果当数据帧小于最小帧长时,在数据链路层的MAC子层中就需要在数据字段的后面加入一个证书字节的填充字段,保证数据帧不小于最小帧长。
-
如果两个站点发送的数据产生了冲突后,立即重新发送数据,那么就会导致无休止的冲突。因此CSMA/CD协议采用了截断二进制指数退避算法来计算冲突后重发的等待时间。
算法步骤:
- 确定基本的退避时间,一般是取争用期。
- 定义参数k,它等于重传次数,但k不超过10,即k=min[重传次数,10],当重传次数不超过10时,k等于重传次数,当重传次数大于10时,k仍旧等于10。
- 从离散的整数集合[0,1,…,(2^k - 1)]中随机取一个数r,重传所需要退避的时间就是争用期*r。
- 当重传次数达到16次仍然不能成功时,表明网络过于拥挤,此帧永远无法正确发出,此时数据链路层的站点会丢弃该帧,并且向网络层报告该情况。
使用二进制指数退避算法,可以使得重传的等待时间随着重传次数的增大而增大,从而减少发送数据碰撞的概率,提高信道的利用率。
3.8.2.2.4 CSMA/CA协议
有线局域网目前广泛使用的是CSMA/CD协议,然而在无线局域网中,无法使用CSMA/CD协议。原因如下:
-
“碰撞检测”要求一个站点在发送本站数据的同时,还必须不间断地检测信道,但接收到的信号强度往往会远远小于发送信号的强度,在无线局域网的设备中要实现这种功能就花费过大。。
-
在无线通信中,存在’屏蔽站’问题以及’暴露站’问题。
当站点A和C同时想和站点B进行通信时,由于A和C相隔较远,彼此都无法接收到对方发送的信号,因此当它们检测到信道空闲时,都会向站点B发送数据,于是就会产生碰撞。
这种未能检测出信道上其他站点信号的问题被称为**屏蔽站问题**。
当站点B向站点A发送数据,站点C向站点D发送数据,但是此时,站点C能够接收到站点B发送的数据,因此它误以为当前信道是忙碌的,因此站点C就不会向站点D发送数据,这种问题就被称为**暴露站问题**。
由于上述一些问题,导致在无线局域网中无法使用碰撞检测,在无线局域网中的站点一旦开始发送数据,就必须完整的发送完该帧,这就导致了如果在无线局域网中产生数据碰撞,就需要重发整个帧,会造成信道资源的严重浪费。因此在无线局域网中应该。同时,CSMA/CA协议引入了预约信道的概念,发送站可以通过和控制帧进行信道的预约。
在无线局域网中,在CSMA/CD协议的基础上进行了改进,将碰撞检测改为了碰撞避免(Collision Avoidance,CA),产生了CSMA/CA协议。注意,碰撞避免并不是代表使用了CSMA/CA协议就能完全避免碰撞,而是指该协议可以尽量降低碰撞发生的概率。同时,在无线局域网中,除了要使用CSMA/CA协议之外,还需要使用,
在CAMS/CA协议中有如下几个重点:
-
为了尽量避免碰撞,在无线局域网中规定,站点每次发送完一帧后,都需要等待一段很短的时间才能发送下一帧,这个时间间隔就是。SIFS的时间长短取决于站点发送的帧的类型,常用的有三种SIFS。
- SIFS(短IFS):最短的IFS,用于分隔属于同一个对话的帧,一般使用该SIFS的帧类型有ACK帧、CTS帧、分片后的数据帧以及所有回答AP探询的帧等。
- PIFS(点协调IFS):中等长度的IFS,在PCF操作中使用。
- DIFS(分布式协调IFS):最长的IFS,用于异步帧竞争访问的时延。
-
与
正如上文中所描述的,RTS与CTS控制帧是用于信道预约,从而避免产生数据碰撞的手段。
举例如下:
图中A、B、C分别表示三个站点,其中站点A和C都在站点B的通信范围内,此时如果站点A需要给站点B发送数据,那么A就需要先广播一个很短的控制帧,该帧包括源地址、目的地址和此次通信所需要的时间(包括了接收确认帧所需时间),这个帧会被A的通信范围内的所有站点接收(当然这些站点包含了B),当站点B接收到RTS控制帧后,如果信道空闲,则站点B就会广播一个很短的控制帧,该帧包括这次通信所需的持续时间,该帧会被站点B通信范围内的所有站点接收,当站点C和其他站点接收到该帧后,就会在CTS所指明的时间内抑制发送,当站点A接收到该CTS后,就会尝试发送数据帧(当然,需要)。
注意:虽然使用RTS和CTS控制帧会使网络的通信效率下降,但是由于这两种控制帧都很短,与数据帧产生碰撞后重传导致的通信效率下降相比,这种开销就是可以接受的了。并且是否使用控制帧,并不是强制性的,各个站点可以自行决定。
-
在CSMA/CA协议中也是使用,然而具体做法有所不同:
- 第 i 次退避就在 2^(2 + i) 个时隙中随机地选择一个,即:第 i 次退避是在时隙 {0, 1, …, 2^(2 + i) – 1} 中随机地选择一个。
- 第 1 次退避是在 8 个时隙(而不是 2 个)中随机选择一个。
- 第 2 次退避是在 16 个时隙(而不是 4 个)中随机选择一个。
- 当时隙编号达到 255 时(这对应于第 6 次退避)就不再增加了。
这里决定退避时间的变量 i 称为退避变量。
当某个站点要发送数据时,使用退避算法选择一个争用窗口后中的某个时隙后,就根据该时隙的位置设置一个。当退避计时器的时间减小到0时,就开始发送数据。当然,也存在退避计时器还未减小到0时,信道就又变为了繁忙状态,此时就会冻结退避计时器的数值,重新等待信道变为空闲,再等待DIFS后,继续启动退避计时器。
-
1.若站点最初有数据要发送(而不是发送不成功再进行重传),且检测到信道空闲,在等待时间 DIFS 后,就发送整个数据帧。 2.否则,站点执行 CSMA/CA 协议的退避算法。一旦检测到信道忙,就冻结退避计时器。只要信道空闲,退避计时器就进行倒计时。 3.当退避计时器时间减少到0时(这时信道只可能是空闲的),站点就发送整个的帧并等待确认。 4.发送站若收到确认,就知道已发送的帧被目的站正确收到了。这时如果要发送第二帧,就要从上面的**步骤 2**开始,执行 CSMA/CA 协议的退避算法,随机选定一段退避时间。若源站在规定时间内没有收到确认帧 ACK(由重传计时器控制这段时间),就必须重传此帧(再次使用 CSMA/CA 协议争用接入信道),直到收到确认为止,或者经过若干次的重传失败后放弃发送。
上图是CSMA/CA协议的工作流程图。
-
1.CSMA/CA协议适用于无线局域网,CSMA/CD协议适用于有线局域网 2.CSMA/CA协议不可以检测冲突,只能尽量避免冲突,CSMA/CD协议可以检测冲突。 3.CSMA/CA协议的基本思想是发送站点先广播告知其他结点,自己要发送数据了,让其他结点在这个时间段内抑制发送。而CSMA/CD协议的基本思想是发送前先监听,一旦监听到信道空闲就发送数据,且边发边听,一旦发现碰撞,就停止发送。
3.8.2.3 受控接入介质访问控制
受控接入介质访问控制的相关协议主要有:。
令牌访问协议主要在环状网络中使用,主要步骤如下:
- 当网络空闲时,环路中只有令牌帧在循环传递。
- 令牌传递到有数据要发送的站点时,该站点就会修改令牌帧的标志位,并且在令牌帧中附加自己需要传输的数据,使得令牌帧变成一个数据帧,然后将该帧发送出去。
- 数据帧沿着环路不断传输,当传输到目的地址后,接收站点就会复制该数据帧的数据做进一步处理,并且继续传递令牌给下一个站点,在沿路的每个站点都会检查该帧的目的地址是否与自己相同,若不是,则继续转发给下一个站点。
- 数据帧沿着环路传回发送站点后,发送站点就不会继续传递该帧了。同时发送站点会校验该帧,判断是否出现了传输错误,如果有错误则重传。
- 发送站点传送完数据后,会重新产生一个令牌帧,传递给下一个站点,交出信道的控制权。
注意:令牌帧时一个特殊的MAC控制帧,它本身并不包含信息,仅用于信道的控制,确保同一时刻,整个环路中只有一个站点有发送数据的权限。
因此在环路中,不会出现数据碰撞。
3.8.3 以太网
3.8.3.1 以太网的传输介质
目前市面上的以太网使用的传输介质是,并且搭配了,形成了()。
-
集线器拥有多个接口,每个接口通过RJ-45插头用两对双绞线与计算机的适配器相连,于是,我们可以把集线器看作是一个具有多个接口的转发器,它工作在,它的每个接口,不进行,且集线器采用了专门的芯片,可以,可以使接口转发出去的较强的信号不对接口接收的较弱的信号产生干扰。
3.8.3.2 以太网的MAC层
-
MAC层的硬件地址
在局域网中,硬件地址又被称为物理地址或者MAC地址。
MAC地址,就相当于计算机的’身份证号’,是全球唯一,用来标识识别该计算机的一串48位的字符。这个地址所处的位置在中,如果一台计算机有多个适配器,那么它就拥有了多个MAC地址,同时如果计算机更换了适配器,那么该计算机的MAC地址也就改变了(即使该计算机的物理地址没有发生改变)。
那么,如何保证每个适配器中的MAC地址是全球唯一的呢?
现在IEEE的是局域网全球地址的法定机构,它负责分配地址字段的6个字节中的前3个字节(即高24位),,这个号码的正式名称是,也被称为。6个字节的MAC地址的后三位(低24位)由生产厂家分配,注意生产厂家必须保证其分配的后三位不产生重复。
-
MAC帧
在以太网中使用的数据层链路帧被称为MAC帧。
MAC帧分为三种:单播帧、广播帧、多播帧。
单播帧:一对一,即该帧用于两个站点之前的通信。
广播帧:一队全体,即该帧是发送给局域网所有站点的。
多播帧:一对多,即该帧是发送给局域网的多个站点的。
一般的适配器必须能够接收识别前两种帧,第三种帧可以使用编程方法进行识别。
以太网MAC帧由五个字段组成
第一个字段:目的地址,目的站点的地址
第二个字段:源地址,发送站点的地址
第三个字段:类型字段,用于标识上层协议的类型
第四个字段:数据字段,长度范围是46~1500
第五个字段:帧检验序列FCS,用于CRC检验
MAC的格式如下图所示
注意:
该解决方法就是,之前讲过的以太网使用的编码格式是曼切斯特编码,以太网的MAC子层在接收到发送方传来的以太网帧后,根据电压变化可以得到MAC帧的结束位置,该位置往前4字节,就是MAC帧的数据结束位置了。当数据字段长度小于46字节时,MAC子层就会在后面填充一个整数字节的填充字段,保证该帧大于以太网中的最小帧长。
其实上层协议具有识别有效数据字段长度的功能,当上层协议使用IP协议时,数据报的首部有一个字段用于标识’总长度’,因此这个总长度+填充字段就等于MAC子层交付的MAC帧的数据字段的长度,因此就可以有效的识别出数据字段了。
上图中在MAC帧前面还插入了8字节长度的数据,这个是因为,当一个站在刚开始接收MAC帧时,由于适配器的时钟尚未与到达的比特流达成同步,因此MAC帧的最前面的若干位就无法接收,就会使得整个MAC帧无法接收。因此为了接收端可以迅速的,发送方就在MAC帧的最前面插入了8个字节,其中前7个字节是同步码,用于使接收端的适配器在接收MAC帧后能迅速的调整时钟频率,实现时钟同步。最后一个字节是帧开始的定界符,用于告诉接收端,该字节后面的位置就是MAC帧。
3.8.4 802.11无线局域网
3.8.4.1 简介
无线局域网,即不通过有线媒体介质传输数据的局域网,无线局域网可以分为两大类:有固定基础设施的无线局域网和无固定基础设施的移动自组织网络。
-
IEEE制定了802.11系列协议标准用于有固定基础设施的无线局域网,802.11系列协议相当复杂,但是简单的来说,它就是,它使用,中心点被称为,在MAC子层中使用的协议就是上文介绍过的CSMA/CA协议。(使用802.11标准的无线局域网就是我们日常生活中使用最多的Wi-Fi)。
802.11标准规定了无线局域网的最小构件是,BBS由一个基站和若干移动站组成,所有的站在本BBS内都可以直接通信,但如果想和BBS以外的站点通信时必须通过本BBS的基站。上文提到的AP就是BBS的基站。当网络管理员设置AP的时候,会给AP设置一个不超过32字节的和一个通信信道。SSID就相当于使用该AP的无线局域网的名字。一个BBS所覆盖的有效范围叫做。一个基本服务区BSA的范围直径一般不超过100米。
我们可以使用门户,来使多个BBS连接在一起。下图表示了由两个BBS组成的一个分配系统DS。
上图中站点A要和站点A’进行通信了,那么它的数据流动路径就是A->AP1->AP2->A’。
-
无固定基础设施的移动自组织网络没有接入点AP,它是由一些处于平等状态的移动站相互通信组成的临时网络。
这种网络常用于特殊的活动场景中,例如在军事领域中,携带了移动站的战士可利用临时建立的移动自组网络进行通信。当出现自然灾害时,在抢险救灾时利用移动自组网络进行及时的通信往往很有效的。
移动自组织网络并不是移动IP,移动IP技术使得漫游的主机可以用多种方法连接到因特网,其核心网络功能仍然是基于固定网络中一直使用的各种路由选择协议,而自组织网络是把移动性扩展到无线领域的自治系统,具有自己特定的路由选择协议,可以不与因特网相连。
3.8.4.2 802.11局域网的MAC层
802.11局域网的MAC帧共有三种类型:、和。
数据帧由三个部分组成:、以及。
-
,共 30 字节,帧的复杂性都在帧的首部。
-
,也就是帧的数据部分,不超过 2312 字节。这个数值比以太网的最大长度长很多。不过 802.11 帧的长度通常都是小于 1500 字节。
-
,共4个字节。
802.11 数据帧最特殊的地方就是有四个地址字段。地址 4 用于自组网络。我们在这里只讨论前三种地址。
去往AP | 来自AP | 地址1 | 地址2 | 地址3 | 地址4 |
---|---|---|---|---|---|
0 | 1 | 接收地址=目的地址 | 发送地址=AP地址 | 源地址 | --------- |
1 | 0 | 接收地址=AP地址 | 发送地址=源地址 | 目的地址 | --------- |
地址1时直接接收数据帧的结点地址,地址2是实际发送数据帧的结点地址。
基于此,我们讨论两种情况,来帮助各位理解上表的内容。
-
现在假定在一个基本服务集BBS中的站点A向站点B发送数据帧。在站点A发往接入点AP的数据帧的帧控制字段中,“去往AP=1”,“来自AP=0”,地址1是接入点AP的MAC地址,地址2是站点A的MAC地址,地址3是站点B的MAC地址。AP接收到数据帧后,转发给站点B,此时在数据帧的帧控制字段中,“去往AP=0”,“来自AP=1”,地址1是站点B的MAC地址,地址2是AP的MAC地址,地址3是站点A的MAC地址。
-
现在假定有两个AP通过有线链路连接到路由器,现在路由器要向站点A发送数据,由于路由器是网络层的设备,无法“看见”数据链路层的接入点AP,只认识站点A的IP地址,而AP是数据链路层设备,它只认识MAC地址,不认识IP地址。具体结构如下图所示
(1)路由器向站点A发送数据的情况模拟
路由器从IP数据报获取站点A的IP地址,使用ARP获取站点A的MAC地址后,路由器接口R1将该IP数据报封装成802.3帧,该帧的源地址是R1的MAC地址,目的地址是站点A的MAC地址。当AP收到该帧后,将该帧转换为802.11帧,在帧控制字段中,“去往AP=0”,“来自AP=1”,地址1时站点A的MAC地址,地址2是AP的MAC地址,地址3是R1的MAC地址。于是站点A就可以通过地址3确定将数据报发送到子网中的路由器接口的MAC地址了。
(2)站点A向路由器接口R1发送数据的情况模拟
站点A生成一个802.11帧,在帧的控制字段中,“去往AP=1”,“来自AP=0”,地址1是AP的MAC地址,地址2是站点A的MAC地址,地址3是R1的MAC地址。当AP接收到该802.11帧后,将其转换为802.3帧,该帧的源地址字段为站点A的MAC地址,目的地址是R1的MAC地址。
由上面的情况模拟可以看出,地址3在BBS和有限网络的互联中起着关键作用,它允许AP在构建以太网帧时能够确定目的地址的MAC地址。
3.9 数据链路层的设备
3.9.1 网桥
网桥是工作在数据链路层的MAC子层中的,用于连接多个以太网的硬件设备,多个以太网通过其连接后,形成了一个更大范围的以太网,此时原来的每个以太网就被称为。
网桥将各个网段隔离成了一个个独立的碰撞域(冲突域),各个网段相对独立,因此一个网段产生了故障并不会影响其他网段的正常运行。
网桥具有路径选择功能,它接收到帧后可以决定正确的路径转发帧给正确的站点。
当网络1和网络2通过网桥相连后,网桥接收网络1发送的数据帧后,会查询数据帧中的地址,如果该地址是网络2中的地址,那么就会转发给网络2,如果是网络1的地址,就会将其丢弃,因为源站点和目的站点处于同一个网段,目的站点可以直接接收到该帧,不需要借助网桥转发。
3.9.2 适配器
这里介绍的适配器又称网络适配器(Adapter)或者网卡,它是用于计算机与外界局域网连接的一个桥梁。在适配器中有处理器和存储器,是工作在数据链路层的网络组件。适配器和局域网的通信时通过双绞线以方式进行的,而适配器和主机的通信时通过计算机主板上的I/O总线以方式进行的,因此适配器的重要功能就是进行数据的串行并行转换。
世界上的每一个适配器在出厂时都有一个唯一的代码,这个代码就是上文中提到的MAC地址。
3.9.3 集线器
集线器在上文中已经介绍过了,详见3.8.3.1。
3.9.4 交换机
这里介绍的交换机指,以太网交换机本质上是一个多端口的网桥,它工作在数据链路层。
3.9.4.1 以太网交换机的特点
- 以太网交换机的每个接口都直接与一个单台主机或另一个以太网交换机相连,并且一般都工作在全双工方式。
- 以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信。
- 使用以太网交换机相连的主机,都是,。
- 以太网交换机是一种的设备,其内部的帧的转发表是通过自动地逐步建立起来的。
- 以太网交换机使用了专用的交换结构芯片,交换速率较高。
3.9.4.2 以太网交换机的优点
-
使用以太网交换机的用户,独享带宽,增加了总容量。
对于普通 10 Mbit/s 的共享式以太网,若共有 N 个用户,则每个用户占有的平均带宽只有总带宽 (10 Mbit/s)的 N 分之一。
使用以太网交换机时,虽然在每个接口到主机的带宽还是 10 Mbit/s,但由于一个用户在通信时是独占而不是和其他网络用户共享传输媒体的带宽,因此对于拥有 N 个接口的交换机的总容量为 N10 Mbit/s。
-
从共享总线以太网转到交换式以太网时,所有接入设备的软件和硬件、适配器等都不需要做任何改动。
-
以太网交换机一般都具有多种速率的接口,方便了各种不同情况的用户。
3.9.4.3 以太网交换机的交换模式
以太网交换机有两种交换模式:和。
-
直通式交换机
接收数据帧的同时就立即按数据帧的目的 MAC 地址决定该帧的转发接口,这种方式交换速度快,但是