数据链路层的主要职责包括帧传送和接收,物理编址。数据链路层在发送数据帧之前,会给每个数据帧加上一个头部和一个4字节的尾部。术语包成帧用来形容将包封装成一系列帧的过程。在 OSI 参考模型中只有数据链路层会给数据添加尾部。
数据链路层的主要特征和职责:
• 控制对媒介的访问。
• 添加源和目的的硬件地址。
• 承担数据在线路上的发送和接收。
• 进行 CRC 校验。
• 桥接和交换功能也在这层实现。
注意
数据链路层从网络层接收数据报或者包,并将他们封装成帧。
注意
术语帧用来表示数据链路层所操作的信息单元。每个帧包括一个数据链路头部,里面包含源和目的的硬件地址,以及一个 CRC 校验值的尾部。
数据链路层的一个主要工作是发送数据到线路上,以及从线路上获取数据。在发送数据之前,数据链路层必须把从网络层获取的信息打包成帧。这个过程包括加上一个包含源和目的 MAC 地址的头部,以及一个包含 CRC 校验值的尾部。在接收数据的时候,数据链路层必须先把帧保存在缓存中,然后验证 CRC 是否正确。如果正确,则立即将帧的内容传送给上层协议做进一步的处理。如果数据报不是这个系统的,或者验证 CRC 结果不正确,则这个数据报将会被丢弃,且没有后续操作。
二层(数据链路)地址
制造商将数据链路地址或者 MAC 地址烧制在每一块网络接口卡上。制造商在生产这些接口卡的时候给他们分配序号。每个地址长6字节或者说48比特,统一由 IEEE(电子电气工程师协会) 进行管理。
注意
IEEE 是一个制定和规划电子计算机和网络相关标准的组织。委员会由众多行业内专家和组织组成,帮助制定和规划协议标准,比如:802.x 系列,用来处理数据链路层和物理层的相关技术。其中有 802.3(以太网)和802.5(令牌环网)的详细规格指标。
头三个字节表示预先分配给厂商的代码,用来区分产品的制造商。IEEE给每个厂商都分配了这个代码。而后三字节由厂家自行决定。工作在数据链路层的设备必须能够有能力识别这些地址信息。
数据链路层将源和目的MAC地址加入帧头部用于识别发送数据帧的网络接口卡以及接收数据帧的本地设备。在整个网络中,每个MAC地址都必须是唯一的。二层网络设备,比如桥和交换机都是直接使用目的MAC地址来决定如何转发数据的。
发送设备在发送数据之前要进行 CRC 校验。数据链路层设备将 CRC 校验值作为尾部添加到从网络层获取的数据上。
CRC 无法保证数据的传输,他仅仅用来验证发送的数据和接收端收到的数据是否一样。接收端主机使用相同的算法来验证接收的帧是否在传输过程中出现错误。如果 CRC 不相同,接收端主机将直接丢弃有问题的数据帧,并且不会发送通知给发送端主机。主机绝不会将有问题的数据上传给高层处理,除非数据帧是正确的。而发送设备有责任负责重新发送之前损坏的帧。
基本交换操作
二层(数据链路层)设备,比如交换机和桥,是基于 MAC 地址来转发数据帧的。因为工作在 OSI 参考模型的第二层,所以无论上层协议是什么(IP、IPX、AppleTalk,NetBIOS或者其他),只要用数据帧来承载的流量就能转发。为了这样做,交换机必须学习 MAC 地址,并建立一张 MAC 地址到端口的对应表,然后基于这张表来转发流量。
交换机,与路由器不同,不会阻塞广播或者组播流量。当收到一个带有目的地址信息的帧的时候,这个数据帧会被从除了接收端口以外的所有端口发送出去,这个过程叫做泛洪,并且会给网络带来额外的负载。显然,如果被泛洪的数据帧没有包含主机需要或者感兴趣的信息,那么就是不是必须的,且浪费了带宽。VLAN 能够用来隔离广播和组播流量到只对泛洪流量有需求的端口。通过隔离流量到指定端口,网络的整个流量负载就减少了。
注意
交换机和交换操作不是标准化的。有些交换机不支持VLAN。最好的办法是与你的厂商协商,以明确他们的产品所支持的操作。
那么交换机到底如何工作呢?交换机如何识别设备在哪里,如何构建转发表,以及如何转发数据帧呢?交换机的转发过程总体概括起来就是:泛洪数据直到学习到MAC,然后转发数据帧。
交换机以及桥在最初的时候(上线的时候),内存中只有一张空的 MAC 地址到端口的对应表。带有未知目的地址(没有在对应表中)的流量将被立即泛洪到除接收端口以外的所有端口。(参见图1.5)
点击查看图片
交换机快速且动态的构建这张表格通过侦听从每个端口收到的所有流量。每一个收到的数据帧都将被检查,并使用数据链路层头部中的源 MAC 地址信息来标识。交换机假设源主机发送的这个数据帧必须通过那个接收这个数据帧的端口,于是将这个地址加入 MAC 地址表,并映射到这个数据帧的入端口。依靠这样的操作,交换机能够识别连接到每一端口上的所有的主机。(参加图1.6)
点击查看图片
然后,交换机将使用这张对应表发送数据帧到设备。当收到一个数据帧的时候,交换机将把目的MAC地址与对应表做比较,然后决定从哪一个端口转发。如果目的MAC地址对应的端口与接收端口一致,交换机将直接丢弃此帧,且不会有进一步的处理。如果目的 MAC 地址的对应端口在表中,则从对应的端口发送出去。(参见图1.7)
点击查看图片
如果交换机没有在表格中找到目的 MAC 地址(源 MAC 地址还没有被学习到),则会将此帧泛洪。然后在目的主机回应之后,交换机将学习到主机的源 MAC 地址,并映射到对应的端口上,在之后的转发中将不在需要泛洪。如果在表格中找到了目的 MAC 地址,交换机将从指定的端口转发数据帧,且不会进行泛洪操作。
取决于交换机本身以及它的配置,交换机有三种转发模式:直通转发、无碎片转发和存储转发(参见图1.8)。转发模式将影响到数据帧在端口间的转发速度。最快的模式是直通模式,拥有最低的转发时延。最慢但是最可靠的是存储转发模式。一些交换机支持所有三种转发模式(可以通过管理员配置),然而其他的可能仅支持一种模式。
点击查看图片
直通转发模式
交换机采用直通模式的时候,仅基于数据帧的头6字节(目的 MAC 地址)来做出转发决定。因为交换机在做转发决定的时候只查看目的 MAC 地址,所以转发速度非常快。然而当最快的方法不是必要的时候,就意味着它不是最好的。
因为直通模式下,交换机只考虑数据帧的头6字节,错误的帧(例如,冲突帧)也会被转发,这样就浪费了带宽。如果你的网络通常是空闲的,那么这种方法无疑是最好的。
冲突发生在当一个传输介质上存在多个信号的时候。LAN 架构是基于基带技术实现的,在同一个时刻只能允许一个信号在介质中传送。如果多于一个信号出现,则冲突发生了。
冲突导致数据帧被截断。截断的数据帧被成为数据帧碎片。大多数帧发生冲突而被截断时都在前64字节之内的位置上。因为直通模式仅仅检查前6字节,这样就导致错误的数据帧仍旧被发送。
无碎片转发模式
这个模式比直通模式要慢一些,但是比存储转发模式要快。交换机在采用这种模式工作的时候,将检查每一个数据帧的前64字节。这种方法能保证碎片(冲突导致的碎片)不被转发。碎片就是任意小于64字节的帧。碎片通常由冲突导致。尽管冲突可能发生在一个数据帧内的任意位置,但通常发生在前64字节之内。
在转发之前,验证每一个数据帧的前64字节,能阻止大部分的被损坏的数据帧被转发。这种方法仅仅是验证每一个数据帧的至少64字节,无法对帧内容进行 CRC 校验检查。这就意味着在第64字节之后的位置出现问题的数据帧仍旧会被传送出去。
存储转发模式
这种模式是最慢的转发模式,因为一个附加的处理过程。然而这种确是最可靠的模式,因为不会转发所有的错误帧。当一台工作在存储转发模式的交换机收到一个数据帧时,将完整的将此数据帧放在缓存中,然后在发送前对整个内容执行 CRC 校验检查。通过第一次 CRC 检查,交换机能够知道数据帧是否被噪音或者冲突损坏。
如果 CRC 校验失败,那就说明数据帧已经损坏了,损坏的数据帧将被丢弃而不会被转发。如果 CRC 校验成功,则交换机将在 MAC 地址表中查找目的 MAC 地址,然后转发(如果目的地址是单播地址)或者泛洪(如果目的地址未知或者是广播地址)数据到对应的端口上。
商家决定他们生产的交换机将使用哪种模式。有些厂商的交换机最开始使用直通模式,当遭遇了损坏帧以后,将在三种模式中循环。这种循环依靠设置在交换机上的阀值来控制。例如:没有或者仅有非常少量的错误帧,交换机将依旧工作在最快的直通模式下。一旦错误帧的数量超过可以接受的范围,交换机将会动态的切换到无碎片转发模式下。如果错误帧依旧在持续增加,交换机将切换到存储转发模式。而如果错误帧的数量下降到一个指定阀值时,交换机将回到直通或者无碎片模式下。循环模式以及阀值是由厂商自行决定的,本书不涉及这些信息。