重看计算机网络——数据链路层

自用记录,写的不是很详细。

数据链路层

数据链路层属于计算机网络的低层,使用的信道主要有以下两种类型:

(1)点对点信道:使用一对一的点对点通信方式,使用的协议是PPP协议

(2)广播信道:使用一对多的广播通信方式,因此过程比较复杂。采用的协议是以太网协议。

数据链路层解决的问题是:在同一个局域网中,分组怎样从一台主机传送到另一台主机,但并不经过路由器转发。

数据链路层的三个基本问题:封装成帧、透明传输、差错检验。

1、使用点对点信道的数据链路层

基本概念:

  1. 链路:从一个结点到相邻结点的一段物理线路(无线或有线),而中间没有任何其他的交换结点。在进行数据通信时,两台计算机之间的通信路程往往要经过许多段这样的链路。链路只是一个路径的组成部分。
  2. 数据链路:当需要在一条线路上传送数据时,除了必须要有一条物理线路外,还必须要有一些必要的通信协议来控制这些数据的传输。因此数据链路就是链路加通信协议。目前通过网络适配器来实现这些协议。
  3. 帧:数据链路层的协议数据单元。数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。网络层的协议数据单元为IP数据报(简称为数据报、分组或包)。

帧  =  首部+IP数据报+尾部

点对点信道的数据链路层进行通信时的步骤为:

(1)结点A 将网络层交下来的IP数据报添加首部和尾部封装成帧

(2)结点A将帧发送给结点B的数据链路层

(3)若结点B收到的帧无差错,则从收到的帧中提取出IP数据报交给上面的网络层,否则丢弃这个帧。

针对数据链路层的点对点通信的三个基本问题:封装成帧,透明传输和差错检验进行对应处理

(1)封装成帧

封装成帧就是在IP数据报前后加上首部和尾部,因此接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始与结束。

首部和尾部的作用为:帧定界,即确定帧的界限,此外首部和尾部还包括许多必要的控制信息。

首部为控制字符SOH,表示帧的开始,其ASCII码为0x01;尾部为控制字符EOT,其ASCII码为0x04,表示帧的结束。PPP帧中必须同时包括SOH和EOT,否则认为帧不完整,要被丢弃。

帧的组成:

帧开始符SOH + 数据部分 + 帧结束符EOT (其中数据部分有长度上限——最大传输单元MTU)

(2)透明传输

所谓透明传输,指的是无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层,因此对数据而言,这个数据链路层是无妨碍的,也就是透明的。

由于封装成帧时在首部和尾部加控制字符,控制字符决定了一个帧是否完整,如果在数据部分也出现控制字符SOH或EOT,那么会导致接收端错误判断帧的界限,把部分帧收下,而误以为收下的是完整的帧,而把剩下的数据丢弃。

因此规定,如果数据部分的二进制代码中出现SOH或EOT,就在前面加一个转义字符”ESC”,其ASCII码为1B。如果数据部分的二进制代码出现了转义符,那就在这个转义符前再加一个转义符。当接收端接收到帧时,就会把每次出现的第一个转义字符删除。以上的操作称为字符填充或字节填充。

(3)差错检测

比特差错:比特流在传输过程中可能会出现差错,比如0变成1,1变成0.实际的通信链路并非是理想的,比特差错不可避免,目前数据链路层广泛使用的差错检测方法为循环冗余检测(CRC)。

CRC原理:

       在发送端,首先会把数据划分为组,假定每组k个比特。比如现假定待传送的数据M=101001,即k=6。CRC会在数据M后加n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。

       冗余码的获得:首先数据M乘2^n,相当于在M后补了n个0,然后设定一个除数P,P的位数为n+1位,这个P是发送端和接收端共同规定的,则有:

M*2nP=Q….R

       其中,Q为商,没有用,R为余数,R即为要获得的冗余码,称为FCS(帧检验序列)

       M和R进行拼接,就获得了最终PPP帧中的数据部分。

       而在接收端,收到这个帧后,获得数据部分,然后用数据部分的二进制码除以P,若余数为0,则说明没有差错,反之,有差错,这个帧被丢弃。

从上述描述可以发现,CRC只检测是否有差错,而不能知道差错在哪。

差错检测能确保接收端接收到的帧是无差错的,但不能保证数据链路层的可靠传输。因为差错检测只能解决最基本的比特差错,但无法检测帧的差错,比如帧丢失,帧重复和帧失序。

因此数据链路层的CRC检测只能保证无比特差错,但不能保证无传输差错。

对于实现数据链路层的可靠传输,以前的方式是在CRC的基础上增加帧编号、确认和重传机制。由于现在的通信线路的质量大大提高,由通信线路质量不好引起差错的概率大大降低,为了提高效率,互联网采用区别对待的方式:

  1. 对于通信质量良好的有线传输链路,数据链路层协议不使用确认和重传机制。如果在数据链路层传输数据时出现差错,并需要改正时,就由上层(如TCP)来解决。
  2. 对于通信质量较差的无线链路,数据链路层采用确认和重传机制。

PPP协议的帧格式:

(1)封装成帧

       首部四个字段:

       F:0x7E 定界符,表示帧开始或结束

       A:地址字段,默认0xFF,无实际意义

       C:控制字段,默认0x03,无实际意义

       协议:2个字节,表示数据部分属于上层的哪个协议

      

       数据部分:不超过1500字节

      

       尾部:FCS + F(7E),即帧检验序列和定界符

(2)字节填充:解决透明传输问题

PPP协议使用异步传输时,将转义符定为0x7D,并使用字节填充。

  1. 0x7E -> 0x7D,0x5E
  2. 0x7d -> 0x7D,0x5D
  3. 对ASCII码中数值小于0x20的字符,如0x03变为 0x7D,0x23

接收端会对填充后的字节进行反变换获得原始的字节

(3)零比特传输

同步传输时,每发现5个连续的1,就填入一个0,也是为了解决透明传输

PPP协议的工作状态:

PPP协议主要用于用户和ISP(互联网服务供应商)进行通信。

当用户拨号接入ISP,就建立了一条从用户个人电脑到ISP的物理连接,用户个人电脑向ISP发送一系列的的链路控制协议LCP分组(PPP帧的形式发送,控制LCP连接的参数),以便建立LCP连接,然后网络控制协议NCP给个人电脑发一个随机的IP地址,这样个人电脑就成为互联网上一个有IP的主机。用户通信完毕后,NCP释放网络层连接,收回分配的IP地址,然后释放数据链路层连接,最后释放物理层的连接。

2、使用广播信道的数据链路层

主要指局域网的数据链路层。局域网的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。优点:具有广播功能,便于系统扩展和逐渐演变,提高了系统的可靠性,可用性和生存性。

局域网拓扑结构:星形,环形和总线形。星形应用最广,因为有集线器和双绞线的大量应用。

局域网中应用最广泛的是以太网,特点是随机接入,所有的用户可随机地发送信息,但可能会发生碰撞。

计算机如何连接到局域网:通过适配器。

适配器,即网卡,装有处理器和存储器,计算机主板上嵌入适配器以实现和局域网的连接。适配器和局域网之间通过双绞线或电缆以串行传输方式进行,而与计算机之间是通过和主板的I/O接口以并行方式传输,因此适配器要实现串行传输和并行传输的转换,同时两者数据率不同,需要对数据进行缓存。计算机操作系统中也需要装相应的驱动来配合适配器。适配器的ROM中存放了计算机的硬件地址:MAC地址。

MAC地址不能表示计算机在哪,只是给计算机一个在局域网中的名字。计算机换个适配器,MAC地址就改变了。如果有多个适配器,那就有多个MAC地址。

路由器通过适配器连到局域网时,一个接口对应一个适配器,多个接口就要有多个适配器,也就有多个MAC地址。

以太网使用的协议是CSMA/CD,意思是载波监听多点接入/碰撞检测,发送的数据采用曼彻斯特编码,特点是每一个码元分成两个相等的间隔,用电压的突变来表示0或1,1是前高后低,0是先低后高。

星形以太网特点:

(1)使用集线器。但由于集线器使用电子器件来模拟实际电缆线的工作,因此整个系统依然像总现以太网。各站共享逻辑上的总线,使用的还是CSMA/CD协议,同一时刻至多只允许一个站发送数据。

(2)一个集线器有多个接口,通过两对双绞线(一发一收)和计算机上的适配器相连。

(3)集线器工作在物理层,仅简单地转发比特,不进行碰撞检测,若两个接口发生碰撞,那所有接口都收不到正确的帧。

以太网帧(MAC帧)分类:

(1)单播帧,收到的帧中的MAC地址和本站的MAC地址相同。

(2)广播帧,MAC帧中的目的地址全为1,发送给局域网上的所有站点。

(3)多播帧,发给局域网上一部分的站点

MAC帧的格式:

(1)目的地地址:6个字节的MAC地址

(2)源地址:6个字节的源MAC地址

(3)类型:2字节,标志上一层使用的是什么协议

(4)数据:46到1500字节

(5)FCS:4个字节

除此以外,在MAC帧前加了8个字节,其中前7字节是前同步码,目的是让接收端适配器的时钟与到达比特流同步,还有一个字节是帧开始的定界符(其中该字节的前6位依然是同步码,最后两位11表示帧开始)

MAC帧大小最小为64字节:6+6+2+46+4,如果数据不够长,会自动填充,上层的IP协议会记录有用的数据字段的长度,以便接收端把填充字段去掉。

MAC帧没有结束的定界符,因为一是使用曼彻斯特编码,当数据字段未结束时,每一个码元会有一个电压突变,而数据字段结束时电平就不会突变,因此很容易得到数据字段结束的位置(电平不变位置往前4个字节)

二是不同帧之间有间隙。

由于以太网不需要使用帧结束的定界符,因此不需要用字节插入以保证透明传输。

在数据链路层对以太网进行扩展:使用第二层交换机。

结构:星形结构。

第二层交换机又称以太网交换机,是一个多借口的网桥,拥有自学习功能,在主机不断通信的过程中会逐渐记录下局域网中所有主机的MAC地址和相应的交换机接口。

由于不共享总线,也就没有碰撞问题,因此不使用CSMA/CD协议,但帧结构依然是以太网的帧结构,所以仍然叫以太网。

Ps:使用集线器的星形拓扑以太网会发生碰撞,但使用交换机的不会。因为集线器的以太网在逻辑上仍是总线网,各站共享逻辑的总线,但交换机连接的主机,通信时是独占而不是和其他用户共享带宽,因此不会碰撞。集线器是无源器件,而交换机是有源器件。