数据链路层
简介
数据链路层的主要目的:
- 为IP模块发送和接口IP数据报
- 为ARP模块发送ARP请求和接收ARP应答
- 为RARP发送和接收
数据链路层使用的信道主要有两种类型:
- 点对点信道
- 广播信道
本章讨论在同一个局域网中,分组怎样从一台主机传送到另一台主机,但并不经过路由器转发。
使用点对点信道的数据链路层
数据链路和帧
链路指两个相邻节点之间的一段物理线路;而数据链路则是由物理硬件和软件协议组成的一条线路,可以控制数据的传输。
数据链路层把网络层交下来的数据成帧发送到链路上。
点对点信道的数据链路层在通信时的主要步骤:
- A节点将IP数据报添加头部和尾部之后封装成帧
- A节点将帧发送到链路上
- 若B节点收到帧无差错,则从中取出IP数据报上交给网络层,否则丢弃这个帧
三个基本问题
-
framing
首部和尾部包含了许多控制信息,每一种链路层协议都规定了帧的数据部分长度上限——MTU(Maximum Transfer Unit)。
帧定界:控制字符SOH置于帧的最前面表示帧的开始,EOT置于帧的最后面表示帧的结束。接收方只有接收到EOT才能表示接收到一个完整的帧。
-
transparent transmitting
问题来了,开始字符和结束字符都是专门指定的,如果帧的数据部分出现与结束符相同的字符提前结束了帧该怎么办呢?
这个问题其实并不存在,因为控制字符都是使用的不可打印的字符,所谓不可打印,即无法从键盘键入,因此数据的字符部分不会存在与控制字符相同的情况。
但是这是对于数据为文本字符的情况,如果数据为二进制,还是有可能出现二进制与控制字符对应的二进制相同的情况。
解决方法是:设法使数据中出现控制字符的地方在接收端不被解释为控制字符,具体办法就是在出现控制字符的地方添加一个转义字符ESC,接收端在接收到ESC时就不会把后面的一个字符解释为控制字符,随后将所有转义字符删除后上交给网络层。
-
error detection
目前数据链路层广泛使用CRC验证码的检错技术。
CRC的原理在《信息传输原理》里已经讲过了。
现在已经不要求数据链路层提供可靠传输的服务了,因此不再使用确认和重传机制。
点对点协议PPP(Point-to-Point Protocol)
满足的要求:
-
简单
-
封装成帧
-
透明性
-
支持多种网络层协议
-
多种类型链路
-
差错检测
-
检测连接状态
-
最大传送单元
-
网络层地址协商
即提供一种机制使通信的两个网络层的尸体能够通过协商知道彼此的网络层地址。
-
数据压缩协商
组成:
- 将IP数据报封装到串行链路的方法
- 用来建立、配置和测试数据链路连接的链路控制协议
- 一套网络控制协议,其中每一个协议支持不同的网络层协议
PPP协议的帧格式
字节填充
与前面讲的类似,为了防止数据部分出现和控制字符一样的字符,需要使用转义字符进行填充。
零比特填充
PPP协议用在SONET/SDH 链路时,使用同步传输而不是异步传输,需要采用零比特填充。
具体方法:在接收端扫描整个信息字段,只要发现5个连续1, 就填入一个0,保证信息字段不会出现6个连续1, 因为控制字符有6个连续1。在接收端同样扫描一遍,发现5连续1, 就将后面的一个0删除。
使用广播信道的数据链路层
广播信道需要解决的主要问题是多个节点之间的冲突问题,主要解决办法可以分为下面三种协议:
之所以在载波监听的前提下还存在碰撞,是因为电磁波的传播存在一定的延时,而现代电子设备的工作频率都比较高,因此可能存在两个设备同时发送信息。
混杂模式(promiscuous mode)
适配器配置在混杂模式时,接收来自所有硬件地址的数据包,用于监听局域网内的用户数据。
MAC帧格式
五个字段组成(这里的地址均为MAC地址):
地址解析协议ARP(Address Resolution Protocol)
ARP协议用于在A主机已知B主机的IP地址的情况下获知B主机的MAC地址,从而才能将给B的网络层数据报封装成数据链路层帧发送出去。
首先需要知道的是ARP协议不像DNS解析一样可以获知任何IP地址的MAC地址,其只针对同一个子网上的主机和路由器。
工作方式:每台主机或路由器在内存中维护一个ARP表,表中包含了IP地址到MAC地址的映射关系,还包含了一个TTL值,指示了从表中删除该项的时间。
当一个IP数据报到达主机或路由器时,如果在ARP表里面找到对应项,则发送方需要先构造一个ARP分组,包括发送和接收IP地址及MAC地址。ARP分组的目的是询问子网上所有其他主机和路由器,以确定对应于要解析的IP地址和MAC地址。ARP分组的目的MAC地址应该是广播地址(FF-FF-FF-FF-FF-FF)。
发送数据报到子网以外
如果要发送的目的IP地址与本主机的IP地址不位于同一个子网内,则需要首先将数据报发送到网关(通常即路由器),主机需要通过ARP协议获得网关的MAC地址,然后直接发送数据报给网关。
路由器本身有多张网卡用于连接不同子网,且本身维护一个表用于映射子网地址与网卡的映射关系,相应内容在网络层一章会继续讲到。
扩展的以太网
在物理层扩展以太网
使用光纤连接两个网段,光纤的时延很小。
在数据链路层扩展以太网
使用以太网交换机来扩展以太网。
交换机实质上是一个多接口的网桥,内部还设有存储器,可以将暂时无法发送出去的帧存储起来。
交换机可以同时连通多对接口,进行同时通信。
交换机内部的帧交换表(地址表)通过自学习算法逐渐建立,并通过硬件进行帧转发。
交换机的自学习算法
只要某个主机主动发送帧,交换机就会自动记录下帧发送的接口,即将该接口与该主机进行对应。每个对应项存在一定的有效时间,过期则删除。
生成树协议(Spanning Tree Protocol)
用于判断网络中是否存在环路,并将环路切断。
虚拟局域网VLAN
VLAN通过在逻辑上划分局域网,每个VLAN帧都有一个明确的标识符,指明这个帧属于哪个VLAN
VLAN允许连接同一个交换机上的主机被分配到不同的局域网,从而更好地利用网段资源。