数据链路层应用的信道次要有一下两种类型
点对点信道
这种信道应用一对一的点对点通信形式。
播送信道
这种信道次要是用一对多的播送通信形式。
局域网尽管是个网咯,但咱们并不把局域网放到互联网上思考。在本章中咱们钻研的是在同一个局域网中,分组怎么从一个主机传送到另一台主机,但并不通过路由器转发,从整个互联网上来看,局域网中依然属于数据链路层的范畴。
本章最次要的知识点
- 熟路链路层的点对点信道和播送信道的特点,以及这两种信道应用的协定PPP协定和CSMA/CD协定的特点
- 数据链路层的三个根本问题:封装成帧,通明传输,过错检测。
- 以太网MAC层的硬件地址
- 适配器,转发器,集线器,网桥,以太网交换机的作用以及应用场合。
咱们察看一下两台主机通过互联网进行通信时数据链路层所处的位置
图3-1(a)示意主机H1通过电话线上网,两头通过三个路由器(R1,R2,R3)连贯到近程主机H2,所通过的网络是多种的,如电话网,局域网,广域网等。当主机H1向主机H2发送数据时,从协定的档次上来看,数据流动如图3-2(b)所示,主机H1和主机H2都有残缺的五层协定栈,单路由器在转发分组时应用的协定栈只有上面三层。数据进入路由器后要先从物理层上到网络层,在转发表中找到下一跳地址后,再下到物理层转发进来。当咱们专一于钻研数据链路层的问题时,咱们能够这样钻研:H1的链路层->R1的链路层->R2的链路层->R3的链路层->H2的链路层。
应用点对点信道的数据链路层
数据链路和帧
链路指的是从一个结点到相邻结点的一段物理线路(有线或无线),而两头并没有任何其余的替换结点。在进行数据通信时,两台计算机之间的通信门路往往要通过很多段这样的链路。可见链路只是门路的一部分。
数据链路:当在一条线路上传输数据时,除了必须要有一条物理线路外,还必须要有一些必要的通信协议来控制数据的传输,若把实现这些协定的硬件和软件加到链路上,就形成了数据链路。当初最罕用的就是网络适配器(既有软件,也有硬件)来实现这些协定。个别的适配器都包含了数据链路层和物理层这两层的性能。
点对点信道的数据链路层的协定数据单元:帧:
数据链路层把网络层交下来的数据形成帧发送到链路上,以及把接管到的帧中的数据取出并上交给网络层。在网络层中,网络层协定数据单元就是IP数据报,也叫分组或者包。
数据链路层通信图
点对点信道的数据链路层在进行通信时的次要步骤如下:
- 结点A的数据链路层把网络层交下来的IP数据报文增加首部和尾部封装成帧。
- 结点A把封装好的帧发送给结点B的数据链路层。
- 若结点B的数据链路层接管到的帧无差错则从接管到的帧提取出IP数据报上交给下面的网络层;否则抛弃这个帧。
三个根本问题:封装成帧,通明传输,过错检测
封装成帧
封装成帧是在一段数据的前后别离加上首部和尾部,这样就形成了一个帧。接收端在接管到物理层上交的比特流后,就能依据手部和尾部的标记,会从比特流中辨认到帧的开始和帧的完结。如图就是一个增加帧首和帧尾封装成帧
咱们晓得,分组替换的的一个重要概念就是:所有在互联网上传送的数据都是以IP数据报文为传送单位,网络层的IP数据报传送到数据链路层就成为了帧的数据局部。在帧的数据局部的前部和后部别离加上首部和尾部,就形成了一个残缺的帧。这样的帧就是数据链路层的数据传送单元。
一个帧的长度等于数据局部的长度+帧首+帧尾的长度,首部和尾部的重要作用就是帧定界(确定帧的界线)。
在发送帧的时候,是从帧的首部开始送的。各种数据链路层协定都要对帧首部和帧尾部的格局都有明确的规定。为了进步帧的传输效率,应该使帧的数据局部尽可能的大于帧的首部和尾部的长度。然而呢,每一种数据链路层协定都规定了所能传送的帧的数据局部长度下限-----最大传送单元MTU(Maximum Transfer Unit)。如图给出了MTU与帧的数据局部和帧的首部和尾部的关系。
帧首部应用SOH(start of head)十六进制编码01作为帧的开始控制字符,帧尾部应用EOT(end of transmission)十六进制编码04作为帧的完结控制字符。
通明传输
因为帧的开始和完结标记会用专门的控制字符,因而,所传输的数据中的任何8比特组合肯定不容许应用作为帧定界的控制字符比特编码一样,否则会呈现帧定界谬误。
当传送的帧应用文本文件组成的时候(文本文件中的字符是从键盘上输出的),其数据局部显然不会呈现SOH和EOT这样的帧定界控制字符。不论在键盘上输出什么字符都能够放单帧上传输,因而这样的传输就是通明传输。
然而当数据局部并不是键盘上一般的ASCII码时候,而是例如像二进制代码或者图像,音乐等数据流时,状况就有可能变得不一样,如果数据中的某个字节的二进制比特刚好和帧定界符的控制字符SOH(01)或者EOT(04)重合,如图,数据链路层可能会谬误的找到帧界定符。数据链路层会谬误的找到帧定界符号,把局部帧接管下(误认为是个残缺的帧)这样的谬误传输状况显然并不是通明传输。
为了解决通明传输问题,就必须设法使数据中可能呈现的控制字符SOH,EOT在接收端不被解释为控制字符,具体的办法是:发送端的数据链路层如果在数据传输中呈现SOH或者EOT,就在后面插入一个转义字符ESC(十六进制编码为1B),而且在接收端删除这个转义字符,这样的办法称之为字节填充或者是字符填充。,如果转义字符也呈现在数据当中,那么解决办法依然是在转义字符的后面再加上一个转义字符,因而,当接收端间断的接管到两个转义字符的时候,就删除后面其中一个。如图为用字节串书法解决通明传输问题:
过错检测
事实中的通信链路都是不现实的。也就是说,比特在传输的过程当中,可能1会变成0,0或者变成1,这就叫做比特过错,在一段时间内,传输谬误的比特总数占传输所有比特总数的比值,称之为误码率(BER),
误码率与信噪比有着很大的关系,如果设法进步信噪比,就能够使误码率缩小。理论的通信链路并非是现实的,它不能使误码率升高到0,因而呢,在计算机网络传输数据的时候,必须采纳各种校验,目前在数据链路层宽泛的采纳了CRC循环冗余测验的检错技术。上面咱们通过一个简略的例子来阐明CRC循环冗余测验的原理:
- 在发送端,先把数据划分为组,假如每组k个比特。先假如待传送的数据M=101001(k=6),CRC运算就是在数据M的前面增加供过错检测应用的n为冗余码,而后形成一个帧发送进来,一共发送(k+n)位。在所要发送的数据前面减少n为的冗余码,尽管增大了数据传输的开销,然而却能够进行过错检测,当传输可能呈现过错时,付出这种代价往往是很值得的。
- 这n位冗余码能够用以下办法得出:用二进制的模2运算(二进制加法不进位)进行2^n乘M运算,这相当于在M前面增加n个0,失去的(k+n)位的数除以收发单方当时约定的长度(n+1)位的除数p,得出商是Q余数是R(n位,比P少一位),例如:假设除数为P=1101,通过模2除法运算后的后果是:商Q为110101,余数R为001。这个余数R就能够当作循环冗余码拼接到数据M的前面发送进来,这种为了将检错而减少的冗余码成为帧测验序列FCS,因而加上FCS后发送的帧为101001001(即$x^{2}$M+FCS),共有(k+n)位。
顺便说一下,循环冗余码CRC是一种检错形式,而FCS是增加在数据前面的冗余码。
在接收端把接管到的数据以帧为单位进行CRC测验,把收到的每一个帧都除以雷同的除数P(模2运算)。
如果在传输过程中没有过错,那么通过CRC测验后失去的余数R为0,
在接收端对收到的每一帧通过CRC测验,会有以下两种状况
- 若得出余数为0,就断定这个帧没有呈现过错,就承受。
- 若失去余数不为0,则判断这个帧有过错(然而并不知道哪里错了),抛弃
在数据链路层,发送端帧检测序列FCS的生成和接收端的CRC测验都是硬件实现的,因而处理速度很快并不会影响数据的传输。
数据链路层不应用确认和重传机制,也就是不要求数据链路层向上册提供牢靠服务,如果在数据链路层传输数据呈现了谬误,那么交给下层去解决,数据链路层都是不牢靠的传输协定。