注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

数据链路层

网络基础 彭东稳 3427次浏览 已收录 0个评论

数据链路层属于计算机网络的底层,数据链路层使用的信道主要有以下两种类型。一是点对点信道:这种信道使用一对一的点对点通信方式。二是广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。

一、链路与数据链路

链路(link)是一条点到点的物理线路段,中间没有任何其他的交换结点。

数据链路(data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。(现最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层的功能。)

说一说点对点信道的数据链路层的PDU(协议数据单元)———–

数据链路层把网络层交下来的数据构成数据帧(也就是数据链路层能够处理的数据格式)发送到链路上,以及把接收到的帧中的数据取出并上交给网络层处理。在因特网中,网络层协议数据单元就是IP数据报(或简称为数据报、分组或包)。

为了把主要精力放在点对点信道的数据链路层协议上,可以采用如下图所示的三层模型。 数据链路层

点对点信道的数据链路层在进行通信时的主要步骤如下:节点A的数据链路层把网络层交下来的IP数据包添加首部和尾部封装成帧。然后把封装好的帧通过物理层到链路;发送给节点B的数据链路层。若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据包上交给上面的网络层,否则丢弃这个帧。

数据链路层协议有许多种,但有三个基本问题则是共同的,这个基本问题是:封装成帧、透明传输和差错检验。下面分别说说。

1. 封装成帧

封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。下图表示用帧首部和帧尾部封装成帧的一般概念。

数据链路层

我们都知道,分组交换的一个重要概念就是:所有在因特网上传送的数据都是以数据包为传送单位。网络层的IP数据包传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,构成了一个完整的帧。因此帧长等于数据部分的长度加上帧首部和帧尾部的长度。而首部和尾部的一个重要左右就是进行帧定界。此外,首部和尾部还包括许多必要的控制信息。在发送帧时,是从帧首部开始发送。各种数据链路层协议都要对帧首部和帧尾部的格式有明确的规定。显然,为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限即最大传输单元MTU,1500字节。

当数据部分由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。因为ASCII码是7位编码,一共可组成128个不同的ASCII码,其中可打印的有95个,而不可打印的控制字符有33个。下图可说明帧定界的概念。

数据链路层

控制字符SOHstart of header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT表示帧的结束。注意,SOHEOT都是控制字符的名称。当数据在传输中出现差错时,帧定界符的作用更加明显。它能让接收方识别到数据帧是否完整。

2. 透明传输

由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。

当传送的帧使用文本文件组成的帧时,其数据部分显然不会出现像SOHEOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。

但当数据部分是非ASCII码的文本文件时(如二进制代码的计算机程序或图像等)。情况就不同了。如果数据中的某个字节的二进制代码恰好和SOHEOT这种控制字符一样,那么数据链路层就会错误地找到帧的边界,把部分帧收下(误以为是完整的),而把剩下的那部分数据丢弃。为了解决这个问题,数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转移字符“ESC”,而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充。

3. 错误检测

现实的通信链路都不会是理想的,这就是说。比特在传输过程中可能会产生差错;1可能会变成0,而0也可能变成1.这就叫做比特差错。比特差错跟信噪比有很大的关系。如果设法提高信噪比,就可以使误码率减小。实际的通信链路并非理想的,因此为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC的检错技术。而CRC这种技术需要用到跟着数据帧一块发送的FCS帧检验序列。注意不要把CRCFCS搞混了,CRC是一种检测方法而FCS是添加在数据后面的冗余码,也称帧检验序列。检测方法可以是CRC也可以是别的技术,但FCS是不管使用哪种技术都需要用的前提条件。

二、局域网的数据链路层

局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。在局域网刚刚出现时,局域网比广域网具有较高的数据率、较低的时延和较小的误码率。但随着光纤技术在广域网中普遍使用,现在的广域网也具有很高的数据率和很低的误码率。

局域网按网络拓扑分类:

总线网:各站直接连在总线上,总线两端的匹配电阻吸收再总线上传播的电磁波信号的能量,避免在总线上产生有害的电磁波反射。总线网常使用的协议是CSMA/CD

树形网:它是总线王的变型,都属于使用广播信道的网络。

环形网:最典型的就是令牌环形网,简称为令牌网。

星形网:由于集线器和双绞线的出现,星形以太网获得了广泛的应用。

局域网经过几十年的发展,尤其是在快速以太网(100Mb/s)和吉比特以太网(1Gb/s)进入市场后,以太网已经在局域网市场中占据了绝对优势。现在以太网几乎成为了局域网的同义词。所以学习肯定也是学我们使用的以太网。

另外局域网工作的层次跨域了数据链路层和物理层,由于局域网技术中有关数据链路层的内容比较多,因此就在数据链路层中把局域网给讲讲。

三、以太网

以太网这个术语一般是指数字设备公司、英特尔公司和施乐公司(Xerox)在1982年联合公布的一个标准(实际上它是第二版本,第一版本早在1972年就在施乐公司帕洛阿尔托研究中心PARC里产生了)。它是目前TCP/IP网络采用的主要的局域网技术。它采用一种称作CSMA/CD的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(Carrier Sense, Multiple Access with Collision Detection)。它的速率为10 Mb/s,地址为48 位的MAC地址。

1985年,IEEE(电子电气工程师协会) 802委员会公布了一个稍有不同的标准集,其中802.3针对整个以太网,802.4针对令牌总线网络,802.5针对令牌环网络。为了使数据链路层能更好地适应多种局域网标准,IEEE 802委员会就把局域网的数据链路层拆成两个子层,即逻辑链路控制(LLC)和媒体接入控制(MAC)。与接入到传输媒体有关的内容都放在MAC子层,而LLC子层则与传输媒体无关,不管采用何种传输媒体和MAC子层的局域网对LLC子层来说都是透明的。但是由于后来的发展以太网也就代表了局域网,因此IEEE 802委员会制定的逻辑链路控制子层LLC的作用以及消失了,很多厂商的适配器上就仅安装有MAC协议而没有LLC协议。

四、网络接口卡

计算机与局域网的连接是通过网络接口卡NICnetwork interface card)或简称为“网卡”。在网卡上面安装有自己的处理器和存储器(包括RAMROM)。网络和局域网之间的通信是通过电缆或双绞线以串行方式进行的,而网卡和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行的。因此,适配器的一个重要功能就是要进行数据串行传输和并行传输的转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此在网卡中必须装有对数据进行缓存的存储芯片。当然还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。这个驱动程序以后就会告诉网卡,应当从存储器的什么位置上把多长的数据块发送到局域网,或者应当在存储器的什么位置上把局域网传送过来的数据库存储下来。网卡还要能够实现以太网协议。

网卡接收和发送各种帧时不使用计算机的CPU。这时CPU可以去处理其他任务。当网卡收到有差错的帧时,就把这个帧丢弃而不必通知计算机。当网卡收到正确的帧时,它就使用中断来通知该计算机并交付给协议栈中的网络层。当计算机要发送IP数据包时,就由协议栈把IP数据包向下交给网卡,组装成帧后发送到局域网。要注意:计算机的硬件MAC地址就在网卡的ROM中,而计算机的软件地址IP则在计算机的存储器中。

五、集线器时代的星形拓扑

传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。这种以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器,如图

数据链路层

集线器的特点:

1. 从表面上看,使用集线器的局域网在物理上是一个星型网,但由于集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统扔像一个传统以太网那样运行。也就是说,使用集线器的以太网在逻辑上仍是一个总线网(同轴电缆通信),各站共享逻辑上的总线,使用的还是CSMA/CD载波监听多路访问冲突域协议。当主机需要发送信息时就会先探测一下此时有没有信号传输在网络中,如果没有才会发送信息。因为在同一时刻至多只允许一个站发送数据。

2. 一个集线器有许多接口,每个接口通过RJ-45插头用两队双绞线与一个工作站上的网卡相连接,因此,一个集线器很像一个多接口的转发器。

3. 集线器还是工作在物理层,它的每个接口仅仅简单地转发比特而已。不进行碰撞检测,若两个接口同时又信号输入(即发生碰撞),那么所有的接口都将收不到正确的帧。

4. 集线器由于无法区分目标主机是哪个,所以使用的是以广播的形式,即给集线器上的每一个主机都发送信息,目标主机收到信息后确认是自己则回应,而其他主机则丢弃数据包。

六、以太网MAC

MAC层的硬件地址:在局域网中,硬件地址又称为物理地址或MAC地址(因为这种地址用在MAC帧中,也是现代数据链路层的帧格式)。802标准所说的“地址”严格地讲应当是每一个站的“名字”或标识符。MAC地址就是所谓的网卡的物理地址,MAC地址是全球唯一的,MAC地址由48为二进制组成,通常分为六段,用16进制表示,其中前24位是生产厂商想IEEE申请的厂商编号,后24位是网络接口卡序列号。MAC地址的第8位为0时,表示该MAC地址为单播地址,为1时,表示该MAC地址为组播MAC地址。一块物理网卡的地址一定是一个单播地址,也就是第8位一定为0;组播地址是一个逻辑地址,用来表示一组接收者,而不是一个接收者,必须保证生产出的适配器没有重复地址,且全球唯一。MAC地址出厂就被做进网卡的ROM中。在windows中通过ipconfig /all可以查看本机的MAC地址。

当路由器通过网卡连接到局域网时,网卡上的硬件地址就用来标志路由器的某个接口。路由器如果同时连接到两个网络上,那么它就需要两个网卡和两个硬件地址。网卡有过滤功能。网卡从网络上每收到一个MAC帧就先用硬件检查MAC帧中的目的地址。如果是发往本站的帧则收下,然后再进行其他的处理。否则就将此帧丢弃,不再进行其他的处理。这样做不用浪费计算机资源。这里发往本真的帧包括以下三种帧:

单播(unicast)帧:一对一,即收到的帧的MAC地址与本站的硬件地址相同

广播(broadcast)帧:一对全体,即发送给本局域网上所有站点的帧(全1的地址)

组播(multicast)帧:一对多,即发送给本局域网上一部分站点的帧。

以太网网卡还可设置为一种特殊的工作方式,即混杂方式(promiscuous mode)。工作在混杂模式的网卡只要有帧在以太网上传输就都悄悄地接收下来。

七、MAC帧的格式

常用的以太网MAC帧格式有两种标准,一种是DIX Ethernet v2标准,另一种是IEEE802.3标准。这里都说一说。

Ethernet V2帧格式,如下图:

数据链路层

V2MAC帧比较为简单,由5个字段组成。前两个字段分别为6字节长的目的MAC地址和源MAC地址。第三个字段是2字节的类型字段,用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议,如0800表示IP协议。第四个字段是数据字段其长度在41500字节之间。最后一个字段是4字节的FCS帧检验序列(使用CRC检验)。

IEEE 802.3帧格式,如下图:

数据链路层

因为这两种帧是我们在现在的局域网里最常见的两种帧,因此,我们对它们进行一些比较。如下:

Ethernet V2可以装载的最大数据长度是1500字节,而IEEE 802.3可以装载的最大数据是1492字节(SNAP)或是1497字节;Ethernet V2不提供MAC层的数据填充功能,而IEEE 802.3不仅提供该功能,还具备服务访问点(SAP)和SNAP层,能够提供更有效的数据链路层控制和更好的传输保证。那么我们可以得出这样的结论:Ethernet V2比IEEE802.3更适合于传输大量的数据,但Ethernet V2缺乏数据链路层的控制,不利于传输需要严格传输控制的数据,这也正是IEEE802.3的优势所在,越需要严格传输控制的应用,越需要用IEEE802.3或SNAP来封装,但IEEE802.3也不可避免的带来数据装载量的损失,因此该格式的封装往往用在较少数据量承载但又需要严格控制传输的应用中。 

在实际应用中,我们会发现,大多数应用的以太网数据包是Ethernet V2的帧(如HTTP、FTP、SMTP、POP3等应用),而交换机之间的BPDU(桥协议数据单元)数据包则是IEEE802.3的帧,VLAN Trunk协议如802.1Q和Cisco的CDP(思科发现协议)等则是采用IEEE802.3 SNAP的帧。大家有兴趣的话,可以利用Sniffer等协议分析工具去捕捉数据包,然后解码查看是不是这样的。

八、网桥设备

集线器有很多问题,如广播发送数据包带来的安全问题,且集线器使用的是单工模式,还有集线器带来的冲突域。接入的主机越多通信质量越低。后来在这个基础上人们发展出了网桥这个设备。网桥也是工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发和过滤。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC地址。然后再确定将该帧转发到哪一个接口,或者是把它丢弃。

网桥设备依靠内部转发表来转发MAC帧,它可以把两个总线型网络连接起来在既能减缓冲突域的同时各个主机之间还可以通信(还是以广播的形式发送数据)。网桥比起集线器来算是有点智能的了,它的内部维护了一张转发表也叫转发数据库或路由目录。这个内部表可以是自动学习的也可以是手动生成,表内部标识着有那些主机连接在1号口上,有那些主机连接在2号口上。如下图:

数据链路层

这样一来当A主机发送信息给B主机时都是广播发送的,所以B主机会接收到信息。而网桥的1号接口也会接收到这个广播信息,然后就会查看内部表,会发现目标地址就存在于1号口,所以就不会转发到另一个总线网络中,就这样减少了冲突域。如果是A发送给C网桥发现C2号口就会把信息广播过去。

虽然网桥的出现带来的一些好处,如减少缓冲突域、扩大了物理范围、提高了可靠性等等。但是网桥也是有一些缺点,如:一对接收的帧要先存储和查找转发表,然后才转发,而转发之前还必须执行CSMA/CD算法避免碰撞,这就增加了延迟。二用户数不可太多,不然就会因为传播过多的广播而产生网络堵塞,也就是所谓的广播风暴。

九、以太网交换机

以后1990年交换式交换式集线器出现,可明显地提高以太网的性能。交换式集线器常称为以太网交换机或第二层交换机,以太网交换机通常都有十几个接口。因此,以太网交换机实质上就是一个多接口的网桥,可见交换机工作在数据链路层。此外,以太网交换机的每个接口都直接与一个单个主机或另一个集线器相连。如下图:

数据链路层

交换机特点:

1. 以太网交换机的每个接口都直接与主机相连,并且一般都工作在全双工方式。

2. 交换机能同时连通许多对的接口,使每一对相互通信的主机都能像独占通信媒体进行无碰撞地传输数据。 解决了冲突域的问题。

3. 数据的发送不在进行广播发送,保证了数据的安全性。

3. 以太网交换机由于使用了专用的交换结构芯片,其交换速率就较高。

(关于交换机相关知识,后面会详细介绍,现代局域网都是使用交换机组网。)


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (3)or分享 (0)
关于作者:

您必须 登录 才能发表评论!