下面咱们把关注点放在数据链路层,若是没有数据链路层,计算机网络也就不复存在;这就比如大楼没有了地基,人没有了腿;因此,数据链路层的知识也当然重要,很多小伙伴只把关注点放在 TCP 和 IP 这两个协议上,这是一种狭隘的思想,须要及时纠正,计算机网络可不仅有 TCP 和 IP。下面 cxuan 就和你聊聊计算机中的数据链路层。前端
数据链路层,按照 OSI 七层模型来划分的话,就属于物理层的上层node
数据链路层是一种协议层,它有不少协议。数据链路层用于跨物理层在网段节点之间传输数据,一般指以太网、无线局域网等通讯手段。数据链路层提供了在网络的两个实体之间传输数据的功能,而且提供了差错检测
用于纠正物理层中发生的错误。安全
在数据链路层中,链路层地址有不少中不一样的称谓:LAN 地址、物理地址或者 MAC 地址,由于 MAC 地址是最流行的术语,因此咱们通常称呼链路层地址指的就是 MAC 地址。网络
下面咱们就来认识一下数据链路层的几个关键概念分布式
打包成帧(framing)
: 在每一个网络层数据报在传输以前,几乎全部的链路层协议都会将数据报用链路层封装起来。数据链路层从网络层获取数据后将其封装成为 帧
,若是帧太大的话,数据链路层会将大帧拆分为一个个的小帧,小帧可以使传输控制和错误检测更加高效。ide
帧就是 0 1 序列的封装。性能
一个帧由 Header、Payload Field、Trailer 组成,网络层数据报就封装在 Payload Field
字段中。根据不一样的物理介质,每一个帧的结构也不一样。帧的组成以下计算机网络
帧中主要涉及的内容以下设计
帧头(Frame header)
:它包含帧的源地址和目的地址。有效载荷(Payload Field)
:它包含要传递的数据和信息。尾部标记(Trailer)
:它包含错误检测和错误纠正位。标记(Flag)
:它标记了帧的开始和结束。Flag 位位于帧的开头和结尾,两个连续的标志指示帧的结束和开始3d
帧的类型主要有两种,固定大小的帧和可变大小的帧。
固定大小的帧(Fixed-sized Framing)
:表示帧的大小是固定的,帧的长度充当帧的边界,所以它不须要额外的边界位来标识帧的开始和结束。可变大小的帧(Sized Framing)
:表示每一个真的大小是不固定的,所以保留了其余机制来标记一帧的结束和下一帧的开始。它一般用于局域网,在可变大小的帧中定义帧定界符的两种方法是
长度字段(Length Field)
: 使用长度字段来肯定帧的大小。它用于以太网(IEEE 802.3)结束定界符(End Delimiter)
: 常常用于令牌环链路接入主要指的是 MAC 协议,MAC(Medium Access Control)
协议规定了帧在链路上的传输规则。咱们知道,数据链路层是 OSI 标准模型的第二层,数据链路层向下还可以细分,主要分为 The logical link control (LLC)
层和The medium access control (MAC)
层。
LLC 层又叫作逻辑控制链路
层,它主要用于数据传输,它充当网络层和数据链路层中的媒体访问控制(MAC)
子层之间的接口。LLC 层的主要功能以下
一跳
。MAC 层负责传输介质的流控制和多路复用,它的主要功能以下
在 MAC 层中,有一个很是关键的概念就是 MAC 地址
。MAC 地址主要用于识别数据链路中互联的节点,以下图所示
MAC 地址长 48 bit,在使用网卡(NIC)
的状况下,MAC 地址通常都会烧入 ROM 中。所以,任何一个网卡的 MAC 地址都是惟一的。MAC 地址的结构以下
MAC 地址中的 3 - 24 位表示厂商识别码,每一个 NIC 厂商都有特定惟一的识别数字。25 - 48 位是厂商内部为识别每一个网卡而用。所以,能够保证全世界不会有相同 MAC 地址的网卡。
MAC 地址也有例外状况,即 MAC 地址也会有重复的时候,好比你能够手动更改 MAC 地址。可是问题不大,只要两个 MAC 地址是属于不一样的数据链路层就不会出现问题。
网络层提供的可靠交付更多指的是端系统到端系统的交付,而数据链路层提供的可靠交付更多指的是单端链路节点到节点地传送。当链路层协议提供可靠交付时,它能保证无差错地经链路层移动每一个网络层数据报。链路层提供可靠交付的方法和 TCP 相似,也是使用 确认
和 重传
取得的。
链路层的可靠交付一般用于出错率很高的链路,例如无线链路,它的目的是在本地纠正出错的帧,而不是经过运输层或应用层协议强制进行端到端的数据传输。对于出错率较低的链路,好比光纤、同轴电缆和双绞线来讲,链路层的交付开销是没有必要的,因为这个缘由,这些链路一般不提供可靠的交付
链路层数据以帧的形式发送,在发送的过程当中,接收方节点的链路层硬件可能会因为信号干扰或者电磁噪音等缘由错误的把 1 识别为 0 ,0 识别为 1。这种状况下没有必要转发一个有差错的数据报,因此许多链路层协议提供一种机制来检测这样的比特差错。经过让方节点在帧中包括差错检测比特,让接收节点进行差错检查,以此来完成这项工做。
运输层和网络层经过因特网校验和来实现差错检测,链路层的差错检测一般更复杂,而且用硬件实现。差错纠正相似于差错检测,区别在于接收方不只能检测帧中出现的比特差错,并且可以准确的肯定帧中出现差错的位置。
差错检测和纠正的技术主要有
由于存在网络层地址(IP 地址)和 数据链路层地址(MAC 地址),因此须要在它们之间进行转换和映射,这就是地址解析协议所作的工做,更多关于地址解析协议的理解,请查阅
数据链路层中的协议定义了互联网络的两个设备之间传输数据的规范。数据链路层须要以通讯介质
做为传输载体,通讯媒介包含双绞铜线、光纤、电波等红外装置。在数据分发装置上有 交换机、网桥、中继器 等中转数据。链路层中的任何设备又被称为节点(node)
,而沿着通讯路径相邻节点之间的通讯信道被称为 链路(link)
。实际上,在链路层上传输数据的过程当中,链路层和物理层都在发挥做用。由于在计算机中,信息是以 0 1 这种二进制的形式进行传输,而实际的链路通讯倒是以电压的高低、光的闪灭以及电波的频谱来进行的,因此物理层的做用就是把二进制转换成为链路传输所须要的信息来进行传输。数据链路层传输也不仅是单个的 0 1 序列,它们一般是以 帧
为单位进行的。
如今咱们知道了数据链路层大概是干啥的,那么只有理论不行,你还得有硬通货,也就是硬件,一切的理论都离不开硬件的支撑。
硬件就能够简单理解为通讯介质
,在通讯介质上会有不一样种类的信息传递方式,不过总的来讲能够归纳为两种:一种是共享介质型网络
,一种是非共享介质型网络
,下面咱们就要聊一聊这两种通讯类型。
共享介质型网络故名思义就是多个设备共同使用同一个通讯介质的网络。共享介质型网络的类型主要有以太网(Ethernet)
和 光纤分布式数据接口(Fiber Distributed Data Interface,FDDI)
。
共享说的是,多个设备会使用同一个载波信道进行发送和接收,这是一种半双工的设计。
什么是半双工?
半双工指的是数据能够在一个信道上的两个方向上相互传输,可是不能同时传输,举个简单的例子,就是你能给我发消息,我也能给你发消息,可是不能你给我发消息的同时我也在给你发消息。
既然多个设备会共同使用一个信道,那么就可能存在多个数据传输到同一个介质上致使的数据争用问题,为此,共享介质型网络有两种介质访问控制方式:争用和令牌传递。
争用是发生在共享介质,载波监听多路访问(CSMA)
上的数据访问方式。在这种访问方式下,网络中各个介质会采用先到先得
的方式占用载波信道发送数据。若是多个介质同时发送帧,就势必会产生冲突,继而致使通讯性能的降低和网络拥堵。下面是争用的处理方式
如上图所示,假如 A 想要给 C 发送数据,那么介质 A 会在确认周围没有其余介质要给 C 发送数据后,也就是通过一段时间后,A 会把数据立刻发送给 C。
每一个介质在接受到 A 发送的数据后,会从 A 报文中解析出来 MAC 地址判断是不是发送给本身的数据包,若是不是的话就是丢弃这条数据。
上面这种方式会使用在一部分以太网中,可是另一部分以太网却使用了 CSMA 的改良方式 - CSMA/CD 。CSMA/CD 会要求每一个介质提早检查一下链路上是否有可能产生冲突的现象,一旦发生冲突,那么尽量早地释放信道。它的具体工做原理大体以下:
下面是 CSMA/CD 的改良版
上图这个过程是 CSMA(Carrier Sense Multiple Access)
,首先介质会监控载波信道上是否有数据存在,若是没有再发送,若是有,等一段时间再发送。
下面是 CD(Collision Detection)
的示意图
第二种共享介质型网络的传输方式就是令牌环
了,令牌环顾名思义就是有一个令牌同样的东西,以环为一圈进行令牌传输,那么令牌是啥呢?你想啊,咱们最终的目的不就是为了传输数据吗?那么这个令牌,它可不能够做为数据呢?
其实,在这种传输方式中,令牌环是做为一种特殊报文
来传输的,它是控制传输的一种方式,在数据传输的过程当中同时会将令牌进行传递,只有得到令牌的介质才可以传输数据。这种方式有两个优势,即
可是这种令牌环的传递方式也是有缺点的,由于只有持有令牌的介质才能发送数据,因此即便在网络不太拥堵的状况下,其利用率也达不到 100%。
下面是令牌的传递示意图
最一开始,令牌位于介质 A 处,此时介质 A 拥有数据传输的能力,而后介质 A 把令牌传递给介质 B。
此时 B 持有令牌,因此介质 B 具备发送数据的能力。
这个数据最终会由 D 接收,而后 D 就会设置一个已接收数据的标志位,而后数据会继续向下发送。
令牌环是一项很成功的技术,尤为是在公司环境中使用,但后来被更高版本的以太网所取代。
在了解完共享网络以后,咱们来探讨一波非共享网络
若是说共享介质型网络是共享介质的话,那么非共享介质型网络就是不共享介质,那么如何通讯呢?在这种方式下,网络中的每一个介质会直接连上交换机
,由交换机来转发数据帧。发送端和接收端不会共享通讯介质,共享通讯介质的意思就是介质之间直接通讯。这种网络传输方式通常采用的是全双工通讯。
非共享介质型网络比较适合应用于搭建虚拟局域网(VLAN)
,可是这种通讯方式有一个及其致命的弱点:一旦交换机发生故障,那么与交换机相连的全部计算机都没法通讯。
下面是非共享介质型网络的通讯示意图
如图所示,主机 A 发送了一个目标地址为 B,源地址为 A 的交换机,由交换机负责将数据转发给介质 B,以下图所示
非共享型网络是一种全双工通讯的方式,每一个介质在发送数据的同时也可以接受来自交换机传递过来的数据。
交换集线器是一种共享型网络通讯介质,它是使用同轴电缆做为传输介质,一般用于以太网中,交换集线器也叫作以太网交换机
。
以太网交换机中的各个端口会根据介质的 MAC地址
来转发数据,那么转发数据确定得有所依靠啊,这时能够参考的表就叫作转发表(Forwarding Table)
,转发表中记录着每一个介质的 MAC 地址。转发表固然不须要咱们手动维护,交换机会自动维护转发表。交换机会自学
每一个数据包的通过介质的 MAC 地址,以下图所示
因为不知道主机 B 的 MAC 地址,因此主机 A 发送的数据会通过交换机广播给以太网内的其余主机,主机 B 接收到数据后,会给主机 A 回送消息。
在主机 B 给主机 A 回送消息后,交换机就知道主机 A 和主机 B 的 MAC 地址了,今后之后双方通讯会在各自相连的端口之间进行。
因为 MAC 地址没有层次性,转发表中的记录个数与全部网络设备的数量
有关,当设备增长时,转发表的记录也会愈来愈多,检索时间会逐渐增长。因此若是须要链接多个终端时,须要将网络分红多个数据链路,采用相似 IP 地址同样对地址进行分层管理。
在网络通讯的过程当中,因为网络链路的冗余或者路由线路冗余可能会形成闭环
,也就是咱们所称的环路
。环路会致使数据报文在网络中不断重复复制,最终致使网络设备负载太重,没法正常运行。影响的范围可能会扩散至整个局域网,致使整个局域网里的计算机没法正常使用网络。
那么如何检测网络中出现的环路呢?
目前有两种检测环路的方式,一种是生成树
,一种是源路由法
。
生成树:生成树指的是每一个网桥必须在 1 - 10 秒内相互交换生成树协议单元包,以此来判断哪些接口使用,从而消除环路,一旦发生故障后就会马上切换线路,利用没有被使用的端口进行传输。
源路由法:源路由法一般是用来解决令牌环路。这种方式能够判断发送数据的源地址是经过哪一个网桥实现传输的,并将帧写入 RIF,网桥会根据这个 RIF 信息发送给目标地址,即便网桥中出现了环路,数据帧也不存在被反复转发的可能。
网络通讯过程当中常常会遇到网络负载太高,通讯性能降低的状况,每每遇到这种状况,就须要分散网络负载,变换部署网络设备的位置等。在虚拟局域网出现以前,每每须要管理员手动变动网络的拓扑结构,好比变动主机网段,进行硬件线路改造等,可是使用了虚拟局域网,就能够不用再作如此复杂的操做了,只须要修改网络结构便可。
那么虚拟局域网到底是什么呢?
如上图所示,交换机按照端口区分了多个网段,从而区分了广播数据的传播范围,提升网络安全性。然而异构的两个网段之间,须要利用具备路由功能的交换机才能实现通讯。
因为交换机端口有两种 VLAN 属性,一个是 VLANID,一个是 VLANTAG,分别对应 VLAN 对数据包设置 VLAN 标签和容许经过的 VLANTAG(标签)数据包,不一样 VLANID 端口,能够经过相互容许 VLANTAG,构建 VLAN。
以太网提了这么屡次,那么以太网究竟是什么?
数据链路层有不少分类,包括以太网、无线通讯、PPP、ATM、POS、FDDI、Token Ring、HDMI 等,其中最著名的通讯链路就是以太网了。
以太网最开始的时候,通常使用的是以同轴电缆为传输介质的共享介质型链接方式,这也是以太网的第一种方式,叫作经典以太网
。而如今,随着互联设备的处理能力和传输速度的提升,如今都采用终端和交换机之间链接方式,这也是第二种方式,叫作交换式以太网
。以太网使用的是 CSMA/CD
的总线技术,咱们前面也介绍过了。
在以太网链路上的数据包被称为以太帧
,以太帧开头有一个叫作前导码(Preamble)
的部分,它是由 0、1 数字交替组合而成。前导码的末尾最后是一个叫作 SFD(Start Frame Delimiter)
的域,值为 11。前导码与 SFD 共同占用 8 个字节。
以太网最后 2 bit 称为 SDF,而 IEEE802.3 中将最后 8 bit 称为 SDF。
IEEE802.3 是电气和电子工程师协会 (IEEE)标准的集合制定的标准。
这是以太帧的前导码部分,下面是以太帧的本体部分
以太帧体格式也有两种,一种是以太帧格式,一种是 IEEE802.3 标准以太帧格式。
在以太帧格式中,以太帧的本体的前端是以太网的首部,总共占用 14 字节,分别是 6 字节的目标 MAC 地址、6 字节的源 MAC 地址和 2 字节的上层协议类型,后面是数据部分,占用 46 - 1500 字节,最后是 FCS(Frame Check Sequence,帧检验序列)
4 个字节。FCS 用于检查帧是否有所损坏,由于在通讯过程当中因为噪声干扰,可能会致使数据出现乱码位。
IEEE802.3 以太帧的格式有区别,通常以太帧中的类型字段却在 IEEE802.3 表示帧长度,此外新增长了 LLC 和 SNAP 字段。
数据链路层在细化的话能够分为两层,介质访问控制层和逻辑链路控制层
介质访问会根据以太网等不一样链路特有的首部信息进行控制,逻辑链路层则根据以太网等不一样链路共有的帧头信息进行控制。
LLC 和 SNAP 就是逻辑链路控制的首部信息,那么如今你应该明白怎么回事儿了吧。