数据链路

数据链路

数据链路的作用

数据链路, 指OSI参考模型中的数据链路层, 有时也指以太网、 无线局域网等通信手段。

TCP/IP中对于OSI参考模型的数据链路层及以下部分(物理层) 未作定义。 因为TCP/IP以这两层的功能是透明的为前提。 然而, 数据链路的知识对于深入理解TCP/IP与网络起着至关重要的作用。

数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范。 通信媒介包括双绞线电缆、 同轴电缆、 光纤、 电波以及红外线等介质。 此外, 各个设备之间有时也会通过交换机、 网桥、 中继器等中转数据。

实际上, 各个设备之间在数据传输时, 数据链路层和物理层都是必不可少的。 众所周知, 计算机以二进制0、 1来表示信息, 然而实际的通信媒介之间处理的却是电压的高低、 光的闪灭以及电波的强弱等信号。把这些信号与二进制的0、 1进行转换正是物理层 的责任。 数据链路层处理的数据也不是单纯的0、 1序列, 该层把它们集合为一个叫做“帧”的块, 然后再进行传输。

数据链路相关技术

MAC地址

MAC地址用于识别数据链路中互连的节点(如图3.4) 。 以太网或FDDI中, 根据IEEE802.3 的规范使用MAC地址。 其他诸如无线LAN(IEEE802.11a/b/g/n等) 、 蓝牙等设备中也是用相同规格的MAC地址。

MAC地址长48比特, 结构如图3.5所示。 在使用网卡(NIC) 的情况下, MAC地址一般会被烧入到ROM中。 因此, 任何一个网卡的MAC地址都是唯一的, 在全世界都不会有重复。

数据链路

MAC地址中3~24位(比特位) 表示厂商识别码, 每个NIC厂商都有特定唯一的识别数字。 25~48位是厂商内部为识别每个网卡而用。 因此, 可以保证全世界不会有相同MAC地址的网卡。

IEEE802.3制定MAC地址规范时没有限定数据链路的类型, 即不论哪种数据链路的网络(以太网、 FDDI、 ATM、 无线LAN、 蓝牙等) ,都不会有相同的MAC地址出现。

共享介质型网络

从通信介质(通信, 介质) 的使用方法上看, 网络可分为共享介质型和非共享介质型。

共享介质型网络指由多个设备共享一个通信介质的一种网络。 最早的以太网和FDDI就是介质共享型网络。 在这种方式下, 设备之间使用同一个载波信道进行发送和接收。 为此, 基本上采用半双工通信方式, 并有必要对介质进行访问控制。

共享介质型网络中有两种介质访问控制方式: 一种是争用方式, 另一种是令牌传递方式。

  • 争用方式

    争用方式(Contention) 是指争夺获取数据传输的权力, 也叫CSMA(载波监听多路访问) 。 这种方法通常令网络中的各个站(数据链路中很多情况下称节点为“站” 。 ) 采用先到先得的方式占用信道发送数据, 如果多个站同时发送帧, 则会产生冲突现象。 也因此会导致网络拥堵与性能下降。

    在一部分以太网当中, 采用了改良CSMA的另一种方式——CSMA/CD(Carrier Sense Multiple Access with Collision Detection) 方式。 CSMA/CD要求每个站提前检查冲突, 一旦发生冲突, 则尽早释放信道。 其具体工作原理如下:

    • 如果载波信道上没有数据流动, 则任何站都可以发送数据。
    • 检查是否会发生冲突。 一旦发生冲突时, 放弃发送数据(实际上会发送一个32位特别的信号, 在阻塞报文以后再停止发送。 接收端通过发生冲突时帧的FCS , 判断出该帧不正确从而丢弃帧。 ) , 同时立即释放载波信道。
    • 放弃发送以后, 随机延时一段时间, 再重新争用介质, 重新发送帧。

    CSMA/CD具体工作原理请参考图3.7。

    数据链路

  • 令牌传递方式

    令牌传递方式是沿着令牌环发送一种叫做“令牌”的特殊报文, 是控制传输的一种方式。 只有获得令牌的站才能发送数据。 这种方式有两个特点: 一是不会有冲突, 二是每个站都有通过平等循环获得令牌的机会。 因此, 即使网络拥堵也不会导致性能下降。

    当然, 这种方式中, 一个站在没有收到令牌前不能发送数据帧, 因此在网络不太拥堵的情况下数据链路的利用率也就达不到100%。 为此, 衍生了多种令牌传递的技术。 例如, 早期令牌释放、 令牌追加(不等待接收方的数据到达确认就将令牌发送给下一个站。 ) 等方式以及多个令牌同时循环等方式。 这些方式的目的都是为了尽可能地提高网络性能。

    数据链路

非共享介质网络

非共享介质网络是指不共享介质, 是对介质采取专用的一种传输控制方式。 在这种方式下, 网络中的每个站直连交换机, 由交换机负责转发数据帧。 此方式下, 发送端与接收端并不共享通信介质, 因此很多情况下采用全双工通信方式。

不仅ATM采用这种传输控制方式, 最近它也成为了以太网的主流方式。 通过以太网交换机构建网络, 从而使计算机与交换机端口之间形成一对一的连接, 即可实现全双工通信。 在这种一对一连接全双工通信的方式下不会发生冲突, 因此不需要CSMA/CD的机制就可以实现更高效的通信。

该方式还可以根据交换机的高级特性构建虚拟局域网(VLAN,Virtual LAN)、进行流量控制等。 当然, 这种方式也有一个致命的弱点, 那就是一旦交换机发生故障, 与之相连的所有计算机之间都将无法通信。

数据链路

■ 半双工与全双工通信

半双工是指, 只发送或只接收的通信方式。 它类似于无线电收发器, 若两端同时说话, 是听不见对方说的话的。 而全双工不同, 它允许在同一时间既可以发送数据也可以接收数据。 类似于电话, 接打双方可以同时说话。

根据MAC地址转发

以太网交换机就是持有多个端口(计算机设备的外部接口都称做端口。 必须注意TCP或UDP等传输层协议中的“端口” 另有其他含义。 )的网桥。 它们根据数据链路层中每个帧的目标MAC地址, 决定从哪个网络接口发送数据。 这时所参考的、 用以记录发送接口的表就叫做转发表(Forwarding Table) 。

这种转发表的内容不需要使用者在每个终端或交换机上手工设置,而是可以自动生成。 数据链路层的每个通过点在接到包时, 会从中将源MAC地址以及曾经接收该地址发送的数据包的接口作为对应关系记录到转发表中。 以某个MAC地址作为源地址的包由某一接口接收, 实质上可以理解为该MAC地址就是该接口的目标。 因此也可以说, 以该MAC地址作为目标地址的包, 经由该接口送出即可。 这一过程也叫自学过程。

数据链路

由于MAC地址没有层次性 , 转发表中的入口个数与整个数据链路中所有网络设备的数量有关。 当设备数量增加时, 转发表也会随之变大, 检索转发表所用的时间也就越来越长。 当连接多个终端时, 有必要将网络分成多个数据链路, 采用类似于网络层的IP地址一样对地址进行分层管理。

■ 交换机转发方式

交换机转发方式有两种, 一种叫存储转发, 另一种叫直通转发。

存储转发方式检查以太网数据帧末尾的FCS 位后再进行转发。 因此, 可以避免发送由于冲突而被破坏的帧或噪声导致的错误帧。

直通转发方式中不需要将整个帧全部接收下来以后再进行转发。只需要得知目标地址即可开始转发。 因此, 它具有延迟较短的优势。但同时也不可避免地有发送错误帧的可能性。

环路检测技术

通过网桥连接网络时, 一旦出现环路该如何处理? 这与网络的拓扑结构和所使用的网桥种类有直接关系。 最坏的情况下, 数据帧会在环路中被一而再再而三地持续转发。 而一旦这种数据帧越积越多将会导致网络瘫痪。 (是指由于异常的数据帧遍布网络, 造成无法正常通信的状态。 很多情况下只有关掉网络设备的电源或断开网络才能恢复。 )

为此, 有必要解决网络中的环路问题。 具体有生成树与源路由两种方式。 如果使用具有这些功能的网桥, 那么即使构建了一个带有环路的网络, 也不会造成那么严重的问题。 只要搭建合适的环路, 就能分散网络流量, 在发生某一处路由故障时选择绕行, 可以提高容灾能力 。

■ 生成树方式

该方法由IEEE802.1D定义。 每个网桥必须在每1~10秒内相互交换BPDU(Bridge Protocol Data Unit) 包, 从而判断哪些端口使用哪些不使用, 以便消除环路。 一旦发生故障, 则自动切换通信线路, 利用那些没有被使用的端口继续进行传输。

生成树法其实与计算机和路由器的功能没有关系, 但是只要有生成树的功能就足以消除环路。

IEEE802.1D中所定义的生成树方法有一个弊端, 就是在发生故障切换网络时需要几十秒的时间。 为了解决这个用时过长的问题, 在IEEE802.1W中定义了一个叫RSTP(Rapid Spanning Tree Protocol) 的方法。 该方法能将发生问题时的恢复时间缩短到几秒以内。

■ 源路由法

源路由法最早由IBM提出, 以解决令牌环网络的问题。 该方式可以判断发送数据的源地址是通过哪个网桥实现传输的, 并将帧写入RIF(Routing Information Field) 。 网桥则根据这个RIF信息发送帧给目标地址。 因此, 即使网桥中出现了环路, 数据帧也不会被反复转发, 可成功地发送到目标地址。在这种机制中发送端本身必须具备源路由的功能。

VLAN

进行网络管理的时候, 时常会遇到分散网络负载、 变换部署网络设备的位置等情况。 而有时管理员在做这些操作时, 不得不修改网络的拓扑结构, 这也就意味着必须进行硬件线路的改造。 然而, 如果采用带有VLAN技术的网桥, 就不用实际修改网络布线, 只需修改网络的结构即可。 VLAN技术附加到网桥/2层交换机 上, 就可以切断所有VLAN之间的所有通信。 因此, 相比一般的网桥/2层交换机, VLAN可以过滤多余的包, 提高网络的承载效率。

那么VLAN究竟是什么? 如图3.15所示, 该交换机按照其端口区分了多个网段, 从而区分了广播数据传播的范围、 减少了网络负载并提高了网络的安全性。 然而异构的两个网段之间, 就需要利用具有路由功能的交换机(如3层交换机) , 或在各段中间通过路由器的连接才能实现通信。

数据链路

对这种VLAN进行了扩展, 又定义了IEEE802.1Q的标准(也叫TAG VLAN) , 该标准允许包含跨越异构交换机的网段。 TAG VLAN中对每个网段都用一个VLAN ID的标签进行唯一标识。 在交换机中传输帧时,在以太网首部加入这个VID 标签, 根据这个值决定将数据帧发送给哪个网段。 各个交换机之间流动的数据帧的格式请参考图3.21中的帧格式。

随着VLAN技术的应用, 不必再重新修改布线, 只要修改网段即可。 当然, 有时物理网络结构与逻辑网络结构也可能会出现不一致的情况, 导致不易管理。 为此, 应该加强对网段构成及网络运行等的管理。

以太网

以太网连接形式

在以太网普及之初, 一般采用多台终端使用同一根同轴电缆的共享介质型连接方式。

而现在, 随着互连设备的处理能力以及传输速度的提高, 一般都采用终端与交换机之间独占电缆的方式实现以太网通信。

以太网的分类

数据链路

以太网帧格式

以太网帧前端有一个叫做前导码(Preamble) 的部分, 它由0、 1数字交替组合而成, 表示一个以太网帧的开始, 也是对端网卡能够确保与其同步的标志。 如图3.19所示。 前导码末尾是一个叫做SFD(Start Frame Delimiter) 的域, 它的值是“11”。 在这个域之后就是以太网帧的本体(图3.20) 。 前导码与SFD合起来占8个字节 。

数据链路

以太网帧本体的前端是以太网的首部, 它总共占14个字节。 分别是6个字节的目标MAC地址、 6个字节的源MAC地址以及2个字节的上层协议类型。

数据链路

紧随帧头后面的是数据。 一个数据帧所能容纳的最大数据范围是46~1500个字节。 帧尾是一个叫做FCS(Frame Check Sequence, 帧检验序列) 的4个字节。

在目标MAC地址中存放了目标工作站的物理地址。 源MAC地址中则存放构造以太网帧的发送端工作站的物理地址。

类型通常跟数据一起传送, 它包含用以标识协议类型的编号, 即表明以太网的再上一层网络协议的类型。 在这个字段的后面, 则是该类型所标识的协议首部及其数据。 关于主要的协议类型请参考表3.2。

数据链路

帧尾最后出现的是FCS(Frame Check Sequence) 。 用它可以检查帧是否有所损坏。 在通信传输过程中如果出现电子噪声的干扰, 可能会影响发送数据导致乱码位的出现。 因此, 通过检查这个FCS字段的值可以将那些受到噪声干扰的错误帧丢弃。

FCS中保存着整个帧除以生成多项式的余数(只是这时计算余数时, 除了减法还会使用异或运算)。在接收端也用同样的方式计算, 如果得到FCS的值相同, 就判定所接收的帧没有差错(FCS具有较强的检错能力, 能够检测出大量突发错误) 。

IEEE802.3 Ethernet与一般的以太网在帧的首部上稍有区别。 一般以太网帧中表示类型的字段, 在IEEE802.3以太网中却表示帧的长度。 此外, 数据部分的前端还有LLC和SNAP等字段。 而标识上一层协议类型的字段就出现在这个SNAP中。 不过SNAP中指定的协议类型与一般以太网协议类型的意思基本相同。

VLAN中, 帧的格式又会有所变化

数据链路

无线通信

数据链路

数据链路

PPP

PPP定义

PPP(Point-to-Point Protocol) 是指点对点, 即1对1连接计算机的协议。 PPP相当于位于OSI参考模型第2层的数据链路层。

PPP不像以太网和FDDI。 后两者不仅与OSI参考模型的数据链路层有关, 还与第1层的物理层有关。 具体来讲, 以太网使用同轴电缆或双绞线电缆, 它可以决定其中的0、 1该被解释为何种电子信号。 与之相比, PPP属于纯粹的数据链路层, 与物理层没有任何关系。 换句话说,仅有PPP无法实现通信, 还需要有物理层的支持。

PPP可以使用电话线或ISDN、 专线、 ATM线路。 此外, 近些年人们更多是在用ADSL或有线电视通过PPPoE(PPP over Ethernet) 实现互联网接入。 PPPoE是在以太网的数据中加入PPP帧进行传输的一种方式。

LCP与NCP

在开始进行数据传输前, 要先建立一个PPP级的连接(在使用电话线的情况下, 首先要保证电话线物理层面的连接以后才能在它之上建立PPP连接。 ) 。 当这个连接建立以后就可以进行身份认证、 压缩与加密。

在PPP的主要功能中包括两个协议: 一个是不依赖上层的LCP协议(Link Control Protocol) , 另一个是依赖上层的NCP协议(Network Control Protocol) 。如果上层为IP, 此时的NCP也叫做IPCP(IP Control Protocol) 。

  • LCP主要负责建立和断开连接、 设置最大接收单元(MRU,Maximum Receive Unit) 、 设置验证协议(PAP或CHAP) 以及设置是否进行通信质量的监控。
  • 而IPCP则负责IP地址设置以及是否进行TCP/IP首部压缩等设备(设备之间的这种交互也叫协商(Negotiation) 。 ) 。

通过PPP连接时, 通常需要进行用户名密码的验证, 并且对通信两端进行双方向的验证(通过ISP接入互联网时, 一般对ISP端不验证。 )。 其验证协议有两种,分别为PAP(Password Authentication Protocol)和CHAP(Challenge Handshake Authentication Protocol) 。

  • PAP是PPP连接建立时, 通过两次握手进行用户名和密码验证。 其中密码以明文方式传输。 因此一般用于安全要求并不很高的环境, 否则会有窃听或盗用连接的危险。
  • CHAP则使用一次性密码OTP(One Time Password) , 可以有效防止窃听。 此外, 在建立连接后还可以进行定期的密码交换, 用来检验对端是否中途被替换。

PPP的帧格式

PPP的数据帧格式如图3.26所示。 其中标志码用来区分每个帧。 这一点与HDLC(HDLC High Level Data Link Control Procedure, 高级数据链路控制。 ) 协议非常相似, 因为PPP本身就是基于HDLC制定出来的一种协议。

HDLC就是在每个帧的前后加上一个8位字节“01111110”用来区分帧。 这一个8位字节叫做标志码。 在两个标志码中间不允许出现连续6个以上的“1”。 因此, 在发送帧的时候, 当出现连续5个“1”时后面必须插入一个0。 而当接收端在接收帧时, 如果收到连续的5个“1”且后面跟着的是0, 就必须删除。 由于最多只会出现5个连续的“1”, 就可以比较容易地通过标志码区分帧的起始与终止。 而PPP标准帧格式与此完全相同。

数据链路

另外, 在通过电脑进行拨号时, PPP已在软件中实现。 因此, 那些插入或删除“0”的操作或FCS计算都交由电脑的CPU去处理。 这也是为什么人们常说PPP这种方式会给计算机带来大量负荷的原因所在。

PPPoE

有些互联网接入服务商在以太网上利用PPPoE(PPP over Ethernet)提供PPP功能。

在这种互联网接入服务中, 通信线路由以太网模拟。 由于以太网越来越普及, 在加上它的网络设备与相应的NIC价格比较便宜, 因而ISP能够提供一个单价更低的互联网接入服务。

单纯的以太网没有验证功能, 也没有建立和断开连接的处理, 因此无法按时计费。 而如果采用PPPoE管理以太网连接, 就可以利用PPP的验证等功能使各家ISP可以有效地管理终端用户的使用。

数据链路

其他数据链路

数据链路

上一篇:CubeMX生成代码


下一篇:嵌入式系统:应用层