【考前预习】3.计算机网络—数据链路层

数据链路层概述、封装成帧、透明传输、差错检测、可靠传输、点对点信道、PPP协议、CSMA/CD协议、广播信道、循环冗余检验CRC、字节填充、零比特填充、适配器、以太网、MAC地址、集线器、交换机

数据链路层概述

数据链路层属于计算机网络的低层。数据链路层使用的信道主要有以下两种类型:

  • 点对点信道:使用一对一的点对点通信方式。
  • 广播信道:使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。

局域网虽然是个网络,但我们并不把局域网放在网络层中讨论。这是因为在网络层要讨论的问题是多个网络互连的问题,是讨论分组怎样从一个网络通过路由器转发到另一个网络

数据链路层研究的是在同一个局域网中,分组怎样从一台主机不用路由器传送到另一台主机。

数据链路和帧

  • 链路:从一个节点到相邻节点的一段物理线路。
  • 数据链路:在链路的基础上增加必要的通信协议控制数据传输。
  • 链路层协议数据单元:帧,链路层接收到网络层的 IP 数据报添加首部尾部信息封装成帧作为链路层传输单元。 点对点信道的数据链路通信步骤:
    (1)节点 A 的数据链路层把网络层交下来的 P 数据报添加首部和尾部封装成帧。
    (2)节点 A 把封装好的帧发送给节点 B 的数据链路层。
    (3)若节点 B 的数据链路层收到的帧无差错,则从收到的帧中提取出 P 数据报交给上面的网络层:否则丢弃这个帧。

数据链路层三个基本问题

封装成帧

在 IP 数据报头部尾部添加一些控制信息,使得接收端的数据链路层接收到物理层的比特流后能根据首部尾部标记识别到帧的开始和结束,因此帧的作用之一就是帧定界

最大传送单元 MTU 是数据部分长度上限。 >

帧定界

  • 当数据是由可打印的 ASCⅡ 码组成的文本文件时,帧定界可以使用特殊的帧定界符。**ASCⅡ 码是 7 位编码,一共可组合成 128 个不同的 ASCIⅡ 码,其中可打印的有 95 个,而不可打印的控制字符有 33 个。**控制字符 SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT(End Of Transmission)表示帧的结束。SOH 和 EOT 都是控制字符的名称。它们的十六进制编码分别是 01(二进制是 00000001)和 04(二进制是 00000100)。SOH(或 EOT)并不是 S,O,H(或 E,O,T)三个字符。
  • 如果数据传送时中断,那么接收端接收到的数据就只有 SOH,没有 EOT,那么说明帧是不完整的,接后端链路层就会丢弃该帧,因此帧定界有一定的检错作用。 >

透明传输

  • 由于帧的开始和结束的标记使用专门指明的控制字符,因此传输数据中的任何 8 bit 的组合不能和帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。
  • 当传送的帧是用文本文件组成的帧时(从键盘上输入),其数据部分一定不会出现像 SOH 或 EOT 这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,这样的传输就是透明传输
  • 当数据部分是非 ASCⅡ 码的文本文件时(如二进制代码的计算机程序或图像等),情况就不同了。如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 这种控制字符一样,数据链路层就会错误地"找到帧的边界",把部分帧收下(误认为是个完整的帧),而把剩下的那部分数据丢弃,这样就不是透明传输。

实现透明传输—字节填充

设法使数据中出现的控制字符 “SOH"和"EOT"在接收端不被解释为控制字符。具体的方法是:发送端的数据链路层在数据中出现控制字符"SOH"或"EOT"的前面插入一个转义字符"ESC” (其十六进制编码是 1B,二进制是 00011011)。而在接收端数据链路层在把数据送往网络层之前删除这个插入的转义字符 。这种方法称为字节填充或字符填充 。如果转义字符也出现在数据
当中,那么解决方法仍然是在转义字符的前面插入一个转义字符 。因此,当接收端收到连续
的两个转义字符时,就删除其中前面的一个。

差错检测

比特流在传输过程中可能出现比特差错,一段时间内,传输错误的比特占传输总比特的比率叫误码率 BER,这和信噪比有一定关系。

循环冗余检验 CRC

  • 在发送端,先把数据划分为组,假定每组 k 个比特。现假定待传送的数据 M=101001(k=6)。CRC 运算就是在数据 M 的后面添加供差错检测用的 n 位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。在所要发送的数据后面增加 n 位的冗余码,虽然增大了数据传输的开销,却可以进行差错检测。
  • 冗余码可用以下方法得出:用二进制的模 2 运算进行2^{^{n}}乘 M 的运算,相当于在 M 后面添加 n 个 0。得到的(k+)位的数除以收发双方事先商定的长度为(n+1)位的除数 P,得出商是 Q 而余数是 R(n 位,比 P 少一位)。M=101001(即 k=6)。假定除数 P=1101(即 n=3)。经模 2 除法运算后的结果是:商 Q=110101(商没有用处),而余数 R=001 这个余数 R 就作为冗余码拼接在数据 M 的后面发送出去。这种为了进行检错而添加的冗余码常称为帧检验序列 FCS。因此加上 FCS 后发送的帧是 101001001(即2^{^{n}}M+FCS),共(k+n)位。
  • 在接收端对收到的每一帧经过 CRC 检验后,有以下两种情况:
    • 若得出的余数 R=0,则判定这个帧没有差错,就接受。
    • 若余数 R≠0,则判定这个帧有差错(但无法确定究竟是哪一位或哪几位出现了差
      错),就丢弃。

CRC 是一种检错方法,而 FCS 是添加在数据后面的冗余码。

生成多项式

可靠传输

由上面知,凡是数据链路层接收到的帧,都概率接近 1 的认为帧没有差错,因为差错的帧都被丢弃了。但是我们并不要求链路层向网络层提供可靠传输的服务。

传输差错可分为两类:一类是前面的比特差错,另一类是帧丢失、重复、失序。所以,CRC 检验实现的无比特差错传输还不是可靠传输。

点对点信道—点对点协议 PPP

除了能实现可靠传输的高级数据链路控制 HDLC,还有更为简单好用的 PPP 协议。

PPP 协议制定于 1992 年,是用户计算机和 ISP 进行通信所使用的数据链路层协议。

PPP 协议组成

PPP 协议有三个组成部分:

  • 一个将 IP 数据报封装到串行链路的方法。PPP 既支持异步链路(无奇偶检验的 8 bit 数据),也支持同步链路。IP 数据报在 PPP 帧中就是其信息部分。这个信息部分的长度受最大传送单元 MTU 的限制。
  • 一个用来建立、配置和测试数据链路连接的链路控制协议 LCP(Link Control Protocol)。通信的双方可协商一些选项。
  • 一套网络控制协议 NCP(Network Control Protocol),其中的每一个协议支持不同的网络层协议。

PPP 协议帧格式

PPP 帧的首部和尾部分别为四个字段和两个字段。

  • 首部的第一个字段和尾部的第二个字段都是标志字段 F(Flag),规定为 0x7E(符号“0x”,表示它后面的字符是用十六进制表示的。十六进制的 7E 的二进制表示是 01111110)。标志字段表示一个帧的开始或结束。因此标志字段就是 PPP 帧的定界符。
  • 首部中的地址字段 A 规定为 0xFF(即 11111111),控制字段 C 规定为 0x03(即 00000011)。最初曾考虑以后再对这两个字段的值进行其他定义,但至今也没有给出。可见这两个字段实际上并没有携带 PPP 帧的信息。
  • PPP 首部的第四个字段是 2 字节的协议字段。当协议字段为 0x0021 时,PPP 帧的信息
    字段就是IP 数据报。若为 0xC021,则信息字段是 PPP 链路控制协议 LCP 的数据,
    0x8021 表示这是网络层的控制数据。
  • 信息字段的长度是可变的,不超过 1500 字节。
    尾部中的第一个字段(2 字节)是使用 CRC 的帧检验序列 FCS。

透明传输实现—字节填充

**PPP 使用异步传输时,**采用字节填充来实现透明传输:

  • 把信息字段中和标志字段一样的比特组合(0x7E)转义为 0x7D 并使用字节填充。
  • 把信息字段中比特组合为 0x7D 的变为 2 字节序列(0x7D,0x5D)。
  • 把信息字段中的 ASCⅡ 码控制字符前加 0x7D。

透明传输实现—零比特填充  

**PPP 在 SONET/SDH 使用同步传输时,**采用零比特填充来实现透明传输:

  • 发送端先扫描整个信息字段,只要发现有 5 个连续 1,则立即填入一个 0。保证在信息字段中不会出现 6 个连续 1。
  • 接收端在收到一个帧时,先找到标志字段 F 以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现 5 个连续 1 时,就把这 5 个连续 1 后的一个 0 删除,以还原成原来的信息比特流。
  • 这样就保证了透明传输:在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的错误判断。

  广播信道

局域网最主要的特点:网络为一个单位所拥有,且地理范围和站点数目均有限。

局域网可按网络拓扑进行分类:

  • 星形网,由于集线器(hub)的出现和双绞线大量用于局域网中,星形以太网以及多级星形结构的以太网获得了非常广泛的应用。
  • 环形网
  • 总线网,各站直接连在总线上。总线两端的匹配电阻吸收在总线上传播的电磁波信号的能量,避免总线产生有害电磁波反射。
    总线网以传统以太网最为著名,但以太网后来又演变成了星形网

现在以太网已成为了局域网的同义词,因此本章从本节开始都是讨论以太网技术。

共享信道

共享信道要着重考虑的一个问题就是如何使众多用户能够合理而方便地共享通信媒体
资源。这在技术上有两种方法:

  • 静态划分信道,用户只要分配到了信道就不会和其他用户发生冲突。但这种划分信道的方法代价较高,不适合于局域网使用。
  • 动态媒体接入控制,又称为多点接入,特点是信道并非在用户通信时固定分配给用户。这里又分为以下两类:
    • 随机接入随机接入的特点是所有的用户可随机地发送信息。但如果恰巧有两个或更多的用户在同一时刻发送信息,那么在共享媒体上就要产生碰撞(即发生了冲突),使得这些用户的发送都失败。因此,必须有解决碰撞的网络协议。
    • 受控接入,受控接入的特点是用户不能随机地发送信息而必须服从一定的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路探询。

适配器的作用

  • 早期的适配器是计算机主箱的网络接口板,称为网卡,用于连接外界局域网,现在的计算机主板镶嵌了这种适配器,不再单独使用网卡。
  • 通信适配器上面装有处理器和存储器(包括 RAM、ROM)。适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的,而适配器和计算机之间的通信则是通过计算机主板上的 I/O 总线以并行传输方式进行的。
  • 由于网络上的数据率和计算机总线上的数据率并不相同,因此在适配器中必须装有对数据进行缓存的存储芯片。在主板上插入适配器时,还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。
  • 同时适配器还要实现以太网协议。
  • 计算机的硬件地址在适配器 ROM 中,软件地址(IP 地址)在存储器中 >

总线型网络拓扑—CSMA/CD 协议

为了通信简便,以太网有如下两种措施:

  • 采用无连接,不建立连接直接发数据、不需要 ACK 确认,提供不可靠交付,接收端 CRC 检测到错误帧,对于错误帧是否重传由高层决定,比如 TCP 协议,TCP 协议检测到数据缺失,会让以太网重传。
    然而,总线型拓扑网络中只要有一台计算机发送数据,那么总线传输资源就会被占用,所以在同一时间只能允许一台计算机发送数据,否则会发生冲突。
    为了避免发生冲突,就有了 CSMA/CD 协议,意为载波监听多点接入/碰撞检测
  • 以太网使用曼彻斯特编码 >

“多点接入”就是说明这是总线型网络,许多计算机以多点接入的方式连接在一根总
线上。协议的实质是“载波监听”和“碰撞检测”。
“载波监听”也就是“边发送边监听”。载波监听就是在发送数据前后,每个站都必须不停地检测信道。如果检测出已经有其他站在发送,则本站就暂时不要发送数据。在发送中检测信道,是为了及时发现如果有其他站也在发送,就立即中断本站的发送。这就称为碰撞检测。

然而也会出现两个计算机同时发送消息的情况。

在使用 CSMA/CD 协议时,一个站不可能同时进行发送和接收。因此使用 CSMA/CD 协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)

截断二进制指数、退避算法

以太网使用截断二进制指数退避算法来确定碰撞后重传的时机。这种算法让发生碰撞而停止发送数据的站退避一个随机的时间再发送数据,而不是等待信道变为空闲后就立即再发送数据,因为几个发生碰撞的站将会同时检测到信道变成了空闲。如果大家都同时重传,必然接
连发生碰撞。如果采用退避算法,生成了最小退避时间的站将最先获发送权。以后其余的站
的退避时间到了,但发送数据之前监听到信道忙,就不会马上发送数据了。

星形网络拓扑—集线器

  • 传统以太网使用粗同轴线缆后来演变成便宜灵活的双绞线,这种以太网采用星形拓扑,星形中心增加了一种可靠性非常高的设备,叫做集线器
  • 双绞线能够传送高速数据的主要措施是把双绞线的绞合度做得非常精确。这样不仅可使特性阻抗均匀以减少失真,而且大大减少了电磁波辐射和无线电频率的干扰。
  • 使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线,使用的还是 CSMA/CD 协议。网络中的各站必须竞争对传输媒体的控制,并且在同一时刻至多只允许一个站发送数据。
  • 一个集线器有许多端口,每个端口通过 RJ-45 插头用两对双绞线与一台计算机上的适配器相连。一个集线器很像一个多端口的转发器。
  • 集线器工作在物理层,每个端口仅转发比特,不进行碰撞检测 >

以太网信道利用率

以太网 MAC 层

MAC 的硬件地址

硬件地址又称为物理地址、MAC 地址,它固化在适配器的 ROM 中,全球唯一,48 比特位。如果计算机更换了适配器,那么其局域网位置就发生改变,因此严格的讲,MAC 地址是每台计算机的唯一名字,而不能确定其位置。

IEEE 规定地址字段的第一字节的最低有效位为 I/G 位。当 I/G 位为 0 时,地址字段表示一个单个站地址。当 I/G 位为 1 时表示组地址,用来进行多播(组播)。

在地址记法中有两种标准:第一种记法是把每一字节的最低位(即最低有效位)写在最左边(第一位)。IEEE802.3标准就采用这种记法。例如,十进制数 11 的二进制表示是 1011,最高位写在最左边。但若使用IEEE802.3标准的记法,就应当记为 1101,把最低位写在最左边。

适配器有过滤功能。当适配器从网络上每收到一个 MAC 帧就先用硬件检查 MAC 帧中的目的地址。如果是发往本站的帧则收下,然后再进行其他的处理。否则将此帧丢弃,

这里“发往本站的帧”包括以下三种帧:

  • 单播(unicast)帧(一对一),即收到的帧的 MAC 地址与本站的 MAC 地址相同。
  • 广播(broadcast)帧(一对全体),即发送给本局域网上所有站点的帧**(全 1 地址)**。
  • 多播(multicast)帧(一对多),即发送给本局域网上一部分站点的帧。

以太网适配器还有一种混杂工作方式,可以窃听传输的帧。嗅探器就使用了这种适配器。

MAC 帧格式  

常用的以太网 MAC 帧格式有两种标准:DIX Ethernet V2 标准(以太网 V2 标准)和 IEEE 的 802.3 标准。这里只介绍使用得最多的以太网 V2 的 MAC 帧格式,图中假定网络层使用的是 IP 协议。实际上使用其他的协议也是可以的。

以太网扩展

扩展以太网更常用的方法是在数据链路层进行的。最初人们使用的是网桥(bridge)。网桥对收到的帧根据其 MAC 帧的目的地址进行转发和过滤。当网桥收到一个帧时,并不是向所有的端口转发此帧,而是根据此帧的目的 MAC 地址,查找网桥中的地址表,然后确定将该帧转发到哪一个端口,或者是把它丢弃(即过滤)。
1990 年问世的交换式集线器(switching hub)代替了网桥。交换式集线器常称为以太网交换机(switch)或第二层交换机(L2 switch),强调这种交换机工作在数据链路层。

以太网交换机特点

  • 交换机实质是多端口网桥,采用全双工方式,可以并行。换句话说,每一个端口和连接到端口的主机构成了一个碰撞域,具有 N 个端口的以太网交换机的碰撞域共有 N 个。
  • 以太网交换机的端口还有存储器,能在输出端口繁忙时把到来的帧进行缓存
  • 以太网交换机即插即用,内部的帧交换表(又称为地址表)是通过自学习算法自动地逐渐建立起来的。实际上,这种交换表就是一个内容可寻址存储器 CAM。以太网交换机由于使用了专用的交换结构芯片,用硬件转发收到的帧,其转发速率要比使用软件转发的网桥快很多。

以太网交换机自学习

图示中以太网交换机有四个端口,各连一台计算机,计算机 MAC 地址分别是 ABCD

考虑到主机更换适配器改变了 MAC 地址,那么就需要更改交换表的信息,因此交换表还有第三列用来记录时间,只要超过预设时间信息就会删除,以保证交换表数据符合当前网络的实际状况。
兜圈子问题 >

总线以太网使用 CSMA/CD 协议,以半双工方式工作。

以太网交换机不使用共享总线,没有碰撞问题,不使用 CSMA/CD 协议,以全双工方式工作。

既然连以太网的重要协议 CSMA/CD 都不使用了(相关的“争用期”也没有了),为什么还叫作以太网呢?原因就是它的帧结构未改变,仍然采用以太网的帧结构。

虚拟局域网 VLAN

虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。

  • VLAN 标签字段的长度是 4 字节,插入在以太网 MAC 帧的源地址字段和类型字段之间。
  • VLAN 标签的前两个字节总是设置为 0x8100(即二进制的 1000000100000000),称为 IEEE802.1Q 标签类型。
  • VLAN 标签的后两个字节中,前面 4 bit 实际上并没有什么作用**,后面的 12bit**是该虚拟局域网 VLAN 标识符 VID(VLAN ID),它唯一地标志了 802.1Q 帧属于哪一个 VLAN。12 位的 VID 可识别 4096 个不同的 VLAN。插入 VLAN 标签后,802.1Q 帧最后的帧检验序列 FCS 必须重新计算。
  • 当数据链路层检测到 MAC 帧的源地址字段后面的两个字节的值是 0x8100 时,就知道现在插入了 4 字节的 VLAN 标签。由于用于 VLAN 的以太网帧的首部增加了 4 个字节,因此以太网的最大帧长从原来的 1518 字节(1500 字节的数据加上 18 字节的首部和尾部)变为 1522 字节。

交换机端口类型

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计