"我们已经说过了物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异来传输比特流,这样能使物理层上面的数据链路层感觉不到这些差异。
数据链路层和它下面的物理层其实本质作用都是一样的,就是用来构建进行网络通信、访问的通道,只不过物理层构建的是一条物理通道,而数据链路层构建的是真正用于数据传输的逻辑通道。"
链路(link)其实就是指从一个结点到相邻结点的一段物理线路(有线或无线),中间没有任何其他的交换结点。可知,一条链路只是一条通路的一个组成部分。
数据链路(data link)则是另一个概念,我们应该知道在一条线路上传输数据,仅有物理线路还不够,还需要一些必要的通信协议来控制这些数据的传输。若把实现这些协议的硬件加软件加到链路上,就构成了数据链路。(PS:现在最常用的是使用网络适配器即网卡(硬件+软件)来实现这些协议,所以一般的网络适配器都包括了数据链路层和物理层这两层的功能。)
透明传输是指要使在数据链路层上所传输的数据在内容、格式及编码上都没有限制,也就是要使一些本来用于特殊用途的控制字符也能像正常的数据一样传输,使接收端不要误认为这些字符为控制字符。
可靠传输是使数据从发送端无差错地在数据链路层上传送到目的接受端。
数据链路层的主要功能有四个方面:
- 数据链路管理
- 封装成帧
- 透明传输
- 差错控制(循环冗余检验)
数据链路层结构:
逻辑链路控制子层(Logical Link Control,LLC)
逻辑链路就是物理层信道中的物理链路在通过LLC子层协议作用后形成的虚拟链路。
LLC负责包括逻辑链路的建立和释放,控制信号交换,数据流量控制,解释上层通信协议传来的命令并且产生响应,以及克服数据在传送的过程当中所可能发生的种种问题,如数据发生错误、重复收到相同的数据、接收数据的顺序与传送的顺序不一致等。
数据链路层中与传输介质访问无关的问题都集中在LLC子层来解决,主要功能包括逻辑链路的建立和释放、提供与网络层交互的接口、数据传输差错控制、给数据帧加上传输序列等。
介质访问控制子层(Medium Access Control,MAC)
MAC主要负责控制与连接物理层的物理介质,包括介质访问时的寻址,以及解决可能发生的介质访问冲突。
MAC子层的主要功能包括数据帧的封装/卸装,帧的寻址和识别,帧的接收与发送,帧的差错控制等,MAC子层的存在屏蔽了不同物理链路种类的差异性。
点对点协议PPP
PPP协议的特点
- 简单、封装成帧、透明性、多种网络层协议(能够在同一条物理链路上同时支持多种网络层协议)。
- 多种类型链路(能够在多种类型的链路上运行)。
- 差错检测(能够对接收端收到的帧进行检测,并立即丢弃有差错的帧)。
- 检测连接状态(能够及时自动检测出链路是否处于正常工作状态)。
- 最大传送单元(必须对每一种类型的点对点链路设置最大传送单元 MTU 的标准默认值,促进各种实现之间的互操作性)。
- 网络层地址协商(必须提供一种机制使通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址)。
- 数据压缩协商(必须提供一种方法来协商使用数据压缩算法)。
PPP协议的组成和帧格式
- 一个将 IP 数据报封装到串行链路的方法(PPP帧格式)
- 链路控制协议 LCP (Link Control Protocol)
- 网络控制协议 NCP (Network Control Protocol)
PPP协议面向字节的,所有PPP帧的长度都是整数字节。
PPP帧的首部和尾部分别为4个字段和2个字段。标志字段F=0X7E(帧的定界符),地址字段A=0xFF,控制字段通常=0x003,协议字段为2个字节:若为 0x0021,则信息字段就是 IP 数据报。 若为 0x8021,则信息字段是网络控制数据。 若为 0xC021,则信息字段是 PPP 链路控制数据。 若为 0xC023,则信息字段是鉴别数据。尾部的第一个字段(2个字节)是使用CRC的帧检验序列。
问题:那么具体在PPP协议中,透明传输中信息字段和标志字段的比特组合一样,又该如何处理呢?
这要分情况讨论,当PPP使用异步传输时,就要使用一种特殊的字节填充法(规定转义符定义为0x7E):将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列 (0x7D, 0x5E)。 若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列 (0x7D, 0x5D)。 若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变。
当PPP使用同步传输时(用在SONET/SDH链路),就要采用零比特填充法来实现透明传输:在发送端,只要发现有 5 个连续 1,则立即填入一个 0。 接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
PPP协议的工作状态
用户使用拨号电话线接入互联网时, 用户计算机和 ISP(Internet Service Provider) 进行通信时所使用的数据链路层协议就是 PPP 协议。
用户计算机和ISP之间建立通信连接的:
当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。 PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。 这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。
由此可见,PPP协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
CSMA(载波监听多路访问)
退避算法
- 非——坚持算法
各站点不连续监听总线介质是否空闲,即在发现介质忙时,先停止侦听,等过一段时间再来侦听。
- 1——坚持算法
发现总线介质忙时一直持续不间断侦听,直到发现介质处于闲状态,在侦听到介质处于空闲状态后一定发送数据。
- P——坚持算法
P指侦听到介质空闲时发送数据的概率,就是指站点在发现介质空闲时可以立即发送数据的概率为P。也是在侦听到介质处于忙状态时持续侦听。
CSMA/CD(载波监听多路访问/碰撞检测):
- "多点接入"表示许多计算机以多点接入的方式连接在一根总线上。
- "载波监听"是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
- "碰撞检测"就是计算机边发送数据边检测信道上的信号电压大小。 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。
在使用CSMA/CD协议时,一个站不可能同时进行发送和接受(但必须边发送边监听信道),所以使用CSMA/CD的以太网进行的是半双工通信。
以太网MAC帧
常用的以太网MAC帧格式有两种标准:
- DIX Ethernet V2 标准
- IEEE 的 802.3 标准
最常用的 MAC 帧是以太网 V2 的格式:
无效的MAC帧
- 数据字段的长度与长度字段的值不一致
- 帧的长度不是整数个字节
- 用收到的帧检验序列 FCS 查出有差错
- 数据字段的长度不在 46 ~ 1500 字节之间
- 有效的 MAC 帧长度为 64 ~ 1518 字节之间
- 对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧
CSMA/CA(载波监听多路访问/碰撞避免)
虽然CSMA/CD协议已成功地应用于使用有线连接的局域网,但无线局域网能不能也使用CSMA/CD协议呢?
显然,这个协议的前一部分CSMA能够使用。在无线局域网中,在发送数据之前先对媒体进行载波监听。如发现有其他站在发送数据,就推迟发送以免发生碰撞。这样做是合理的。但问题是"碰撞检测"(CD)在无线环境下却不能使用。理由如下:
- "碰撞检测"要求一个站点在发送本站数据的同时,还必须不间断地检测信道。一旦检测到碰撞,就立即停止发送。但由于无线信道的传输条件特殊,其信号强度的动态范围非常大,因此在802.11适配器上接收到的信号强度往往会远远小于发送信号的强度(信号强度可能相差百万倍)。如要在无线局域网的适配器上实现检测到碰撞,在硬件上需要的花费就会过大。
- 即使我们能够在硬件上实现无线局域网的碰撞检测功能,我们仍然无法避免碰撞的发生。这就表明,无线局域网不需要进行碰撞检测。
CSMA/CD有两个要点,一是发送前先检测信道,信道空闲就立即发送,信道忙就随机推迟发送;二是边发送边检测信道,一发现碰撞就立即停止发送。因此,偶尔发生的碰撞并不会使局域网的运行效率降低很多。但无线局域网不能使用碰撞检测,只要开始发送数据,就一定把整个帧发送完毕。由此可见,如果在无线局域网的发送过程中,一旦发生了碰撞,那么整个信道资源在这段时间就白白浪费了。因此,无线局域网应当尽量减少碰撞的发生。为此,802.11局域网就使用CSMA/CA协议。
802.1 I局域网在使用CSMA/CA的同时,还使用停止等待协议。这是因为无线信道的通信质量远不如有线信道的,因此无线站点每通过无线局域网发送完一帧后,要等到收到对方的确认帧后才能继续发送下一帧。这叫做链路层确认。
帧间间隔IFS
为了尽量避免碰撞,802. 11规定,所有的站在完成发送后,必须再等待一段很短的时间(继续监听)才能发送下一帧。这段时间通称为帧间间隔IFS (InterFrame Space)。帧间间隔的长短取决于该站要发送的帧的类型。高优先级帧需要等待的时间较短,因此可优先获得发送权,但低优先级帧就必须等待较长的时间。若低优先级帧还没来得及发送而其他站的高优先级帧已发送到媒体,则媒体变为忙态,那么低优先级帧就只能再推迟发送了,这样就减少了发生碰撞的机会。至于各种帧间间隔的具体长度,则取决于所使用的物理层特性。
- SIFS,即短(Short)帧间间隔,长度为28 us。 SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧。在这段时间内,一个站应当能够从发送方式切换到接收方式。使用SIFS的帧类型有:ACK帧等。
- DIFS,即分布协调功能帧间间隔,它比SIFS的帧间间隔要长得多,长度为128 us。
退避机制
802.11标准还采用了一种叫做虚拟载波监听(Virtual Carrier Sense)的机制,这就是让源站把它要占用信道的时间(包括目的站发回确认帧所需的时间)及时通知给所有其他站,以便使其他所有站在这一段时间都停止发送数据,这样就大大减少了碰撞的机会。"虚拟载波监听"是表示其他站并没有监听信道,而是由于其他站收到了“源站的通知”才不发送数据。这种效果好像是其他站都监听了信道。所谓“源站的通知”就是源站在其MAC帧首部中的第二个字段"持续时间"中,填入了在本帧结束后还将要占用信道多少时间(以微秒为单位),包括目的站发送确认帧所需的时间。
因此,某个站认为信道处于忙态就有两种可能,一种可能是由于其物理层的载波监听检测到信道忙,另一种可能就是由于MAC层的虚拟载波监听机制指出了信道忙。
当信道从忙态变为空闲时,任何一个站要发送数据帧时一,只要不是要发送的第一个帧,不仅都必须等待一个DIFS的间隔,而且还要进入争用窗口,并计算随机退避时间,以便再次重新试图接入到信道。请读者注意,在以太网的CSMA/CD协议中,要发送数据的站,在监听到信道变为空闲就立即发送数据,同时进行碰撞检测。如果发生了碰撞,就执行退避算法。但在802.11标准的CSMA/CA协议中,因为没有像以太网那样的碰撞检测机制,所以,在信道从忙态转为空闲时,各站就要执行退避算法。
当某个要发送数据的站,使用退避算法选择了争用窗口中的某个时隙后,就根据该时隙的位置设置一个退避计时器(backoff timer)当退避计时器的时间减小到零时,就开始发送数据。也可能当退避计时器的时间还未减小到零时而信道又转变为忙态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器(从剩下的时间开始)。这种规定有利于继续启动退避计时器的站更早地接入到信道中。
图9-7表示当A正在发送数据时,B, C和D都有数据要发送(用向上的箭头表示)。由于这三个站都检测到信道忙,因此都要执行退避算法,各自随机退避一段时间再发送数据。
图中可以看出C的退避计时器最先减到零,于是C立即把整个数据帧发送出去。请注意,A发送完数据后信道就变为空闲。C的退避计时器一直在倒计时。当C在发送数据的过程中,B和D检测到信道忙,就冻结各自的退避计时器的数值,重新期待信道变为空闲。正在这时E也想发送数据。由于E检测到信道忙,因此E就执行退避算法和设置退避计时器。
当C发送完数据并经过了时间DIFS后,B和D的退避计时器又从各自的剩余时间开始倒计时。现在争用信道的除B和D外,还有E。D的退避计时器最先减到零,于是D得到了发送权。在D发送数据时,B和E都冻结其退避计时器。以后
E的退避计时器比B先减少到零。当E发送数据时,B再次冻结其退避计时器。等到E发送完数据并经过时间DIFS后,B的退避计时器才继续工作,一直到把最后剩余的时间用完,然后就发送数据。
应当指出,当一个站要发送数据帧时,仅在下面的情况下才不使用退避算法:检测到信道是空闲的,并且这个数据帧是它想发送的第一个数据帧。除此以外的所有情况,都必须使用退避算法。具体来说,以下几种情况都必须使用退避算法:
- 在发送第一个帧之前检测到信道处于忙态。
- 每一次的重传。
- 每一次的成功发送后再要发送下一帧。
参考:CSMA/CA协议详解