数据链路层
数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
数据链路层以帧为单位传输和处理数据。
为网络层提供服务
对网络层而言,数据链路层的基本任务是将源机器中来自网络层的数据传输到目标机器的网络层。数据链路层通常可为网络层提供如下服务:
(1)无确认的无连接服务
源机器发送数据帧时不需先建立链路连接,目的机器收到数据帧时不需发回确认。对丢失的帧,数据链路层不负责重发而交给上层处理。适用于实时通信或误码率较低的通信信道,如以太网。
(2)有确认的无连接服务
源机器发送数据帧时不需先建立链路连接,但目的机器收到数据帧时必须发回确认。源机器在所规定的时间内未收到确定信号时,就重传丢失的帧,以提高传输的可靠性。该服务适用于误码率较高的通信信道,如无线通信。
(3)有确认的面向连接服务
帧传输过程分为三个阶段:建立数据链路、传输帧、释放数据链路。目的机器对收到的每一帧都要给出确认,源机器收到确认后才能发送下一帧,因而该服务的可靠性最高。该服务适用于通信要求(可靠性、实时性)较高的场合。
注意⚠️:有连接就一定要有确认,即不存在无确认的面向连接的服务。
数据链路层需要解决的问题,例如:
( 1 )使用广播信道的数据链路层,可能会存在数据碰撞的情况,使用CSMA/CD(以太网的媒体接入控制协议)来解决这个问题。
( 2 )无线局域网802.11避免数据碰撞,使用CSMA/CA协议解决这个问题。
( 3 )交换式局域网使用点对点链路和链路层交换机有效解决了这一问题,且其已在有线领域已完全取代了共享式局域网。
数据链路层功能:
功能一:为网络提供服务:无确定无连接服务,有确定无连接服务,有确定面向连接服务。
注意:有连接一定有确认!!!,因为对方主机必须确认才可建立连接,即不存在无确认的有连接服务。
功能二:链路管理,即连接的建立、维持、释放(用于面向连接的服务)
链路两端的结点要进行通信,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接,在传输过程中则要能维持连接,而在传输完毕后要释放该连接。在多个站点共享同一物理信道的情况下(如在局域网中)如何在要求通信的站点间分配和管理信道也属于数据链路层管理的范畴。
功能三:组帧,封装数据报构成数据帧,加首部和尾部;帧同步。
功能四:流量控制,较高的发送速度和较低的接收能力的不匹配,会造成传输出错。
功能五:差错控制(帧错/位错),用于使接收方确定接收到的数据就是由发送方发送的数据。
由于信道噪声等各种原因,帧在传输过程中可能会出现错误。用以使发送方确定接收方是否正确收到由其发送的数据的方法称为差错控制。通常,这些错误可分为位错和帧错。
帧错:帧错指帧的丢失、重复或失序等错误。在数据链路层引入定时器和编号机制,能保证每一帧最终都能有且仅有一次正确地交付给目的结点。
比特差错(位错):位错指帧中某些位出现了差错。实际通信链路都不是理想的,比特在传输过程中可能会产生差错,1可能会变成0,0也可能会变成1,这就是比特差错,比特差错是传输差错中的一种。
使用点对点信道的数据链路层
存在三个重要问题:封装成帧、差错检测、可靠传输。
1.封装成帧:
在一段数据(这个数据是从网络层下来的数据报)的前后分别添加首部和尾部,这样就构成了一个帧。
接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
帧的首部和尾部还包含了许多必要的控制信息。
最大传送单元MTU:每一种链路层协议都规定了所能传送的帧的数据部分长度上限(但是为了提高传输效率,协议数据单元长度应该大于帧头帧尾长度,有效利用资源)
帧头和帧尾的作用之一是给帧定界:
假设发送方发送的是PPP帧,标志即为帧定界标志:
注意⚠️:并不是每一种数据链路层协议的帧都包含帧定界标志,例如以太网2的MAC帧:
以太网2的MAC帧并没有包含帧定界标志,其交付给物理层后,物理层会在帧的前面添加一个前导码,前导码包含7字节前同步码和1字节的帧开始定界符,前者作用是使接收方的时钟同步,后者作用是让接收方知道帧开始定界符后面紧跟着的就是MAC帧。
以太网还规定了帧间间隔为96比特的发送时间。
透明传输
指对于发送者和接收者来说,不知道中间曾经增加过转义字符(比如说传输数据单元中存在帧头或帧尾时但不是真正的帧定界,这时候就在前面加个转移字符,使得接收方知道这是数据单元)(不管所传数据是什么样的比特组合,都应当能够在链路上传送。)
( 1 )面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。
即在控制字符前面加上转义字符ESC 。
( 2 )面向比特的物理链路使用比特填充的方法实现透明传输。
比如在每五个1之后加上一个0。
2.差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错。这称为比特差错。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率(BER)。
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
注意⚠️:以下只是讲述了比特差错的检测方法,还有其它传输错误:分组(帧)丢失,分组乱序,分组重复,而一般在数据链路层出现的错误是比特差错。
差错检测码(FCS)如下所示:
差错检测码(FCS)作用:让接收方的数据链路层检查帧在传输过程中是否产生误码。
下面介绍两种差错检测方法:
奇偶校验
在待发送数据后面添加一位奇偶校验位,使数据中“1”的个数为奇数(奇校验)或偶数(偶校验)。奇偶校验的方式漏检率较大。
循环冗余校验(CRC)
首先,收发双方约定好一个生成多项式。
然后,发送方计算出差错检测码(冗余码)并将其添加到待传输数据的后面一起传输。
最后,接收方计算余数,为0则无误码。
循环冗余校验的计算:
( 1 )被除数为要发送的信息或接受到的信息。
( 2 )除数为生成多项式各系数构成的比特串。
( 3 )做除法(异或运算)
( 4 )检查余数。
计算余数(冗余码):
(这里的除法是异或操作)
注意⚠️:循环冗余检验CRC 和 帧检验序列FCS 并不是同一个概念。CRC 是一种检错方法,而FCS是添加在数据后面的冗余码。
循环冗余码(CRC)具有很好的检错能力,也同样具有纠错功能的,只是数据链路层仅使用了它的检错功能,检测到帧出错直接丢弃还是纠正差错取决于数据链路层向上提供的是可靠传输还是不可靠传输。
3.可靠传输
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做。
可靠传输服务:想办法实现发送方发送什么,接收方就能收到什么。例如,接收方可以给发送方发送一个通知帧,告诉它之前发送的帧产生了误码,请重发。发送方接收后,重发之前产生了误码的那个帧即可。
一般情况,有线链路误码率低,不要求数据链路层向上提供可靠传输服务。而无线链路要求数据链路层向上层提供可靠传输服务。
接下来介绍三种可靠传输实现机制:三种可靠传输实现机制的基本原理并不仅限于数据链路层,而是可以应用到计算机网络体系结构的各层协议中。
1.停止—等待协议
确认与否认:发送方发送data数据给接收方,接收方确认数据无误后返回ACK分组,发送方接受ACK分组后再发送下一个data数据。如果data数据有误码,接收方将这一数据丢弃后返回NAK分组,发送方接受到NAK分组后,重新发送一份data数据给接收方,无误后接收方返回ACK分组。。。
·超时重传:为了避免发送方一直处于等待确认的状态中,设置一个超时计数器,超过规定时间没有等到确认分组就进行重传(重传时间一般略大于从发送方到接收方的平均往返时间)
·确认丢失:为了让接收方能够判断所收到的数据分组是否是重复的,给数据分组编号。
·确认迟到:为了让发送方能够判断所收到的ACK分组是否是重复的,给ACK分组编号。
停止—等待协议的信道利用率
当往返时间RTT远大于数据帧发送时延TD时(使用卫星链路),信道利用率非常低
为了克服信道利用率很低的缺点,就产生了另外两种协议,回退N帧协议GBN和选择重传协议SR
回退N帧协议GBN
回退N帧协议GBN的本质是将一组数据分别用比特编码,一般采用3个比特编码,序号为0~7,然后设定一个窗口(本质上算是一组,长度为1~8),将发送窗口内的 一组 数据一起发送给接收方,接受方有个接收窗口(长度只能为1),接收确认无误码后再返回ACK组,反之有误码就返回NAK组。(建议结合视频理解)
注意⚠️:接收窗口只能为1,因此接收方只能按序接收数据分组。接收方只接收序号落在接收窗口内且无误码的数据分组,并且将接收窗口向前滑动一个位置,与此同时给发送方发回相应的确认分组。
注意⚠️:为了减少开销,接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定)对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收,此时即使确认分组有丢失情况,也可以不必重传。
但是,回退N帧协议的接收窗口尺寸=1,接收方只能按序接收正确到达的数据分组。而一个数据分组的误码就会导致其后续多个正常数据分组不能被接收方按序接收而丢弃,这会造成发送方对这些数据分组的超时重传,对通信资源的极大浪费。
为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸WR应大于1,以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层(此时就不能再使用累计确认)。这就是选择重传协议。
选择重传协议SR
与回退N帧协议GBN不同的是,接收窗口的长度和发送窗口一致,这里拿一个例子说明:
如果发送的是序号为0,1,2,3的数据,其中序号1的数据单元在传输过程中丢失,那么接收方只能接受到0,2,3 。接收方接收后返回给发送方序号为0,2,3的ACK分组,发送方收到后,发送窗口只能从原来的0,1,2,3移动到1,2,3,4,同时标记2,3不可重复发送(不标记的话就会超时发送)这个时候发送方没有接受到序号1的 ACK分组,那么1就会超时重传,同时发送窗口此时包含了新的数据单元4,那么发送方就会发送数据单元4给接收方,这样子效率就提升了。
注意⚠️:如果Wt窗口长度过长,在数据传输丢失的问题中,接收方无法辨认新、旧数据分组。比如丢失了序号0,发送方超时重传序号0,此时接收方的窗口右移后,接收窗口里又有序号0的新数据分组。
例如:
PPP点对点协议 是用户计算机和ISP进行通信时所使用的数据链路层协议
媒体接入控制
在实际工作中,经常会遇到多个用户(计算机或终端)要同时与一个主机 相连。若每个用户都用独立的信道与主机相连,则往往要消耗很多的通 信线路资源。因此,只要有可能,就应尽量采用信道共享。信道共享可以提高 信道资源的利用率。然而,共享信道需要考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即 媒体接入控制MAC。
不过,当前的有线局域网早已用 点对点链路(PPP协议)和链路层交换机的交换式局域网 取代了共享媒体技术,但是由于无线信道的广播天性,无线局域网仍采用 共享媒体技术。
以下为 媒体接入控制MAC 的分类及其细分。
1.静态划分信道
信道划分(也叫信道复用)的实质就是通过分时、分频、分码等方法把原来的一条广播信道,逻辑上分为几条用于两个结点之间通信的互不干扰的子信道(利用信道的带宽),实际上就是把广播信道转变为点对点信道。
信道划分控制有以下四种方式:
( 1 )频分多路复用 FDM
信道发送端有一个复用器,其功能是将发送的多路信号调制为不同子频带的载波信号,在实际应用中,为了防止子信道之间的干扰,相邻信道之间需要加入隔离频带。接收端有 分用器,通过滤波将各路信号分开,将合成的复用信号恢复成原始的多路信号。
频分复用实现了多用户数据的同时传输,但在同一时间,不同用户占用不同的信道带宽频率,那就会造成不同用户使用的信道频率有高有低,各用户间的宽带使用体验也是不同的,高频段用户使用的速度更快,低频段用户使用的速度会慢一些,不是一个平衡的状态。
( 2 )时分复用TDM
将一条物理信道按时间分成若干时间片(有周期性),轮流地分配给多个信号使用。每个时间片由复用的一个信号占用,这样利用每个信号在时间上交叉,就可在一条物理信道上传输多个信号。
两个以上的信号或数据流可以同时在一条通信线路上传输,其表现为同一通信信道的子信道。但在物理上来看,信号还是轮流占用物理信道的。
( 3 )波分复用WDM
波分复用其实就是光的频分复用。
( 4 )码分复用CDM(码分多址CDMA)
码分多路复用是采用不同的编码来区分各路原始信号的一种复用方式。综合FDM与TDM特点,它既共享信道的频率,又共享时间。
借用一个例子来更好的理解和区分以上四个方式:
假设 A 站要向 C 站运输黄豆, B 站要向 C 站运输绿豆, A 与 C 、 B 与 C 之间有一条公共的道路,可以类比为广播信道。
在频分复用方式下,公共道路被划分为两个车道,分别提供给 A 到 C 的车和 B 到 C 的车行走,两类车可以同时行走,但只分到了公共车道的一半,因此频分复用(波分复用也一样)共享时间而不共享空间。
在时分复用方式下,先让 A 到 C 的车走一趟,再让 B 到 C 的车走一趟,两类车交替地占用公共车道。公共车道没有划分,因此两车共享了空间,但不共享时间。
码分复用与另外两种信道划分方式大为不同,在码分复用情况下,黄豆与绿豆放在同一辆车上运送,到达 C 后,由 C 站负责把车上的黄豆和绿豆分开。
因此,黄豆和绿豆的运送,在码分复用的情况下,既共享了空间,也共享了时间。
2.动态媒体接入控制(多点接入)
信道并非在用户通信时固定分配给用户。
- 随机接入:
所有用户可随机地发送信息。但如果恰巧有两个或更多地用户通信同一时刻发送信息,那么在共享媒体上产生碰撞(发生冲突)。(以太网) - 受控接入:
用户不能随机的发送信息而必须服从一定的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路探询,也称为轮询。
MAC地址、IP地址以及ARP协议
1.MAC地址
MAC地址是以太网的MAC子网所使用的地址。当多个主机连接在一条广播信道上,想要实现两台主机的通信,每个主机就必须有一个唯一的标识,就是数据链路层地址。所以在主机发送的帧中必须携带标识发送主机和接受主机的地址,由于这类地址属于媒体接入控制MAC,因此这类地址被称为MAC地址(物理地址、硬件地址)。
注:MAC地址一般被固化在网卡的可编程只读存储器EEPROM中。严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
2.IP地址(网络层,不是数据链路层)
IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络。
- 主机编号:标识同一网络上的不同主机。(或路由器各接口)
IP地址:是计算机在网络中的唯一身份ID,与现实世界中快递的配送需要有具体的住宅地址是一个道理。
IP地址 = 网络地址(前三个十进制数) + 主机地址(第四个十进制数)(又称:主机号和网络号组成)
各个层都不需要看懂上层发送下来的东西,只需要添加自身所在层的 首部 即可
MAC地址和IP地址的区别和联系:
当计算机在局域网内通信时,需要使用MAC地址来定位目标计算机,而当计算机在互联网上通信时,需要使用IP地址来定位目标计算机。在局域网内,计算机通常采用ARP协议(地址解析协议)将IP地址转换为MAC地址,从而实现通信。在互联网上,数据包需要经过多个路由器转发,IP地址可以帮助数据包找到目标计算机所在的网络,从而实现通信。
总的来说,IP地址用于标识计算机在网络上的位置,用于定位目标计算机;MAC地址用于标识网络中的设备,在局域网内用于定位目标计算机。
3.ARP协议
地址解析协议(Address Resolution Protocol,ARP):ARP协议可以将IPv4地址(一种逻辑地址)转换为各种网络所需的硬件地址(一种物理地址)。换句话说,所谓的地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv4协议,IPv6使用邻居发现协议(NDP)替代。
ARP协议目前最广泛应用于寻找32位IPv4地址与以太网的48位MAC地址之间的映射。
我们再区分一下物理地址和逻辑地址:
物理地址:物理地址对于主机就类似身份证对于人类。对于每个网络适配器,设置制造商都会给定一个永久的物理地址,将其存储在设备的永久性内存中。就像身份证一样,物理地址就是网络适配器的ID。注意,物理地址是和网络适配器绑定的,如果主机更换了网络适配器,那么它的物理地址也会相应改变。
逻辑地址:逻辑地址就是我们常说的IP地址,因为IP地址是由软件实现的,所以把它称为逻辑地址。IP地址是不固定的,它通常从某个网络的IP地址池中获得,改变网络环境,IP地址就会改变。
在TCP/IP分层体系结构中,数据链路层和物理层使用的地址是物理地址。而网络层、传输层和应用层使用的地址是IP地址(逻辑地址)。
那么ARP协议具体怎么样执行的呢:
ARP协议 是根据IP地址获取物理地址的一个TCP/IP协议 ,主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
集线器和交换机
集线器和交换机是实现网络互连,扩大网络规模的重要物理设备。
集线器工作在OSI模型的物理层,只对信号提供简单的再生整形放大和转发,不对信号进行编码。交换机工作在OSI模型的数据链路层,具有MAC地址寻址和数据处理的功能。
比如说,主机A要传递消息给主机C,那么此时集线器会把消息发送给各个主机,而交换机是直接将消息传递给主机C。所以,交换机比集线器更有优势
交换机:
在日常生活中,网络是很复杂的,一个交换机连上计算机称为一个网段,计算机可以查看一个网段上其他计算机的共享资源,而一个网段称为一个局域网。随着交换式以太网规模的扩大,广播域相应扩大,巨大的广播域会带来很多弊端:广播风暴、难以维护和管理、潜在的安全问题等。而解决这一类问题的有效方法是分离广播域。
分离广播域可以采用两个方法:使用路由器(工作在网络层)和采用虚拟局域网VLAN技术(工作在数据链路层和网络层)。
路由器可以将一个局域网分成两个局域网。
虚拟局域网VLAN技术
通过在交换机上部署VLAN,可以将一个规模较大的广播域在逻辑上划分成若干个不同的、规模较小的广播域,由此可以有效地提升网络的安全性,同时减少垃圾流量,节约网络资源。一个VLAN就是一个广播域,所以在同一个VLAN内部,计算机可以直接进行二层通信;而不同VLAN内的计算机,无法直接进行二层通信,只能进行三层通信来传递信息,即广播报文被限制在一个VLAN内。同时VLAN的划分不受地域的限制