概述
- 数据链路层属于计算机网络的低层,它使用的信道主要有两种类型:点对点信道,广播信道。
使用点对点信道的数据链路层
数据链路和帧:
链路就是从一个结点到相邻结点的一段物理线路,中间没有其他结点。链路只是一条路径的组成部分。
数据链路除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输。把实现这些协议的硬件和软件加到链路上,就构成了数据链路。一般的适配器都包含了数据链路层和物理层这两层的功能。
物理链路就是上面的链路,逻辑链路就是上面的数据链路,是物理链路加上必要的通信协议。早期的数据通信协议曾叫做规程。数据链路层把网络层交下来的数据构成帧发送到链路上,以及把帧中的数据取出并交给网络层。网络层协议的数据单元就是IP数据报。
点对点信道的数据链路层在进行通信时的主要步骤如下:
结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。
结点A把封装好的帧发送给结点B的数据链路层。
若结点B的数据链路层收到的帧无差错,则从收到的帧中提取IP数据报交给上面的网络层,否则,丢弃这个帧。三个基本问题
封装成帧 透明传输 差错检测封装成帧
就是在一段数据报的前后分别添加首部和尾部,就构成了一个帧。接收端在收到物理层上交的比特流后,能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。一个帧的长度等于帧的数据部分长度加上帧首部和帧尾部的长度。首部和尾部的一个重要作用就是帧定界。此外,首部和尾部中还包含了重要的控制信息。在发送帧时,是从帧首部开始发送的。每一种链路层协议都规定了所能传送的帧的数据部分长度上限—–最大传送单元MTU(Maximum Transfer Unit)。透明传输
由于帧的开始和结束标记使用专门指明的控制字符,因此,所要传输的数据中任何8比特组合一定不允许和使用作为帧定界的控制字符的比特编码一样,否则就会出现帧定界错误。
当传送的帧是用文本文件组成的帧时,其数据部分显然不会像SOH(Start Of Header)或EOT(End Of Transmission)这样的帧定界控制字符。这样的传输叫做透明传输。
透明表示:某一个实际存在的事物看起来好像不存在一样。在数据链路层透明传送数据表示无论什么样的比特组合的数据,都能按照原样没有差错的通过这个数据链路层。
为了解决透明传输的问题,就必须设法使数据中可能出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。具体的方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”前面插入一个转义字符”ESC”,而在接收端的数据链路层再把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充或字符填充。- 差错检测
比特在传输过程中可能会产生差错,1可能会变成0,0可能会变成1,这就叫做比特差错。在一段时间内,传输错误的比特所占传输总比特的比率叫做误码率BER(Bit Error Rate)。误码率与信噪比有很大关系。设法提高信噪比就可以使误码率减小。目前在数据链路层广泛使用的是循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。
循环冗余检验CRC的原理:
在发送端,先把数据划分为组,假定每组k个比特,待传送的数据M = 101001(k=6),CRC运算就是在M的寿面添加供差错检测的n为冗余码,然后构成一个帧发送出去,一共发(k+n)位。
n位冗余码可以通过以下方式得出:
用二进制的模2运算进行2^n乘M运算,相当于在M后面添加n个0。得到的(k+n)位数除以收发双方事先商定的长度为(n+1)位的除数P,得出的商是Q而余数是R(n位,比P少一位)。余数R就作为冗余码拼接在数据M后面发送出去,这种为了进行检错而添加的冗余码常称为帧检错序列FCS(Frame Check Sequence)。
循环冗余码检验CRC是一种检错方法,而帧检错序列FCS是添加在数据后面的冗余码。
总之,在接收端岁收到的每一帧进行CRC检验后,有两种情况:
若得出的余数R为0,则判定这个帧没错,就接受。
若得出的余数R不为0,则判定这个帧出错,就丢弃。
传输差错可分为两大类:
一类就是上面的最基本的比特差错,另一类是收到的帧没有比特差错但出现了帧丢失、帧重复以及帧失序。
总之,无比特差错和无传输差错是两个不同的概念,在数据链路层利用CRC检验,能够实现无比特差错传输,但这依旧不是可靠传输。 点对点协议PPP(Point-to-Point-Protocol)
PPP协议的特点:
PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议。
PPP协议应该满足的需求:
简单(首要的需求)
封装成帧
透明性
多种网络层协议(在同一条物理链路上同时支持多种网络层协议)
多种类型链路
差错检测
检测连接状态
最大传送单元
网络层地址协商
数据压缩协商PPP协议的组成:
一个将IP数据报封装到串行链路的方法。PPP协议既支持异步链路,也支持面向比特的同步链路。
一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol)。
一套网络控制协议NCP(Network Control Protocol)。PPP协议的帧格式:
名字段的意义
PPP帧的首部和尾部分别为四个字段和两个字段。
首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E。标志字段表示一个帧的开始或者结束。因此标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段,如果出现连续两个标志字段,就表示这是一个空帧,应当丢弃。首部的地址字段A规定为0xFF,控制字段C规定为0x03。
PPP首部的第四个字段是两个字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报,若为0xC021时,则信息字段是PPP链路控制协议LCP的数据,0x08021表示这是网络层的控制数据。
信息字段的长度是可变的,不超过1500字节。
尾部的第一个字段(2字节)是使用CRC的帧检验序列FCS。
字节填充
当信息字段中出现和标志字段一样的比特(0x7E)组合时就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。
当PPP协议使用异步传输时,它把转义字符定位0x7ED,并使用字节填充。字节填充的方法如下:
把信息字段中出现的每一个0x7E字节转变成为2字节序列(0x7D,0x5E)
若信息字段中出现一个0x7D的字节,则把0x7D转化为2个字节序列(0x7D,0x5D)。
若信息字段中出现ASCII码的控制字符,则在该字符前面要加入一个0x7D字节,同时将该字符的编码改变。零比特填充
PPP协议用在SONET/SDH链路时,使用同步传输而不是异步传输。此时,PPP协议采用零比特填充的方法实现透明传输。
零比特填充的具体做法是:在发送端先扫描整个信息段,只要发现5个连续1,则立即填入一个0。接收端在收到一个帧时,找到标志字段F以确定一个帧的边界,接着扫描整个比特流,发现5个连续1时,立即删除5个连续1后面的0。PPP协议的工作状态
当用户拨号接入ISP后,就建立了一条从用户个人电脑到ISP的物理连接。这时,用户个人电脑向ISP发送一系列的链路控制协议LCP分组,以便建立LCP连接。接着还要进行网络层配置,网络控制协议NCP给新接入的用户个人电脑分配了一个临时的IP地址,这样用户个人电脑就成为互联网上的一个有IP地址的主机了。
当用户通信完毕时,NCP协议释放网络层连接,收回原来分配的IP地址,接着LCP协议释放数据链路层的连接,最后释放的是物理层的连接。
PPP链路的起始和终止状态永远都是“链路静止”状态,这时在用户个人电脑和ISP的路由之间并不存在物理层的连接。
当用户个人电脑通过调制解调器呼叫路由器时,路由器就能够检测到调制解调器发出的载波信号,在双方建立了物理层连接后PPP就进入了“链路建立”状态,其目的就是建立链路层的LCP连接。
这时LCP开始协商一些配置选项,即发送LCP得配置请求帧。链路的另一端可以发送下面几种响应中的一种: 配置确认帧(所有选项都接受) 配置否认帧(所有选项都理解但不能接受) 配置拒绝帧(所有选项都无法识别或不能接受,需要协商)。
协商结束后就进入了“鉴别”状态,在这一状态,只允许传送LCP协议的分组,鉴别协议的分组以及检测链路质量的分组。若使用口令鉴别协议PAP(Password Authentication Protocol),则需要发起通信的一方发送身份标识符和口令。若鉴别身份失败,转到“链路静止”状态,若成功则进入“网络层协议NCP”状态。
在网络层协议状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。PPP协议两端的网络可以运行不同的网络层协议,但仍然可以使用同一个PPP协议通信。
若在PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块时就要使用NCP中支持IP的协议—-IP控制协议,IPCP(IP Control Protocol)。
当网络层配置完毕后,链路就进入可进行数据通信的“链路打开”状态。链路的两个PPP端点可以彼此向对方发送分组。两个PPP端点还可发送回送请求LCP分组和会送回答LCP分组,以检查链路的状态。
数据传输结束后,可由链路的一端发出终止请求LCP分组和请求终止链路连接,在收到对方发来的终止确认LCP分组后,转到“链路终止”状态。
如果链路出现故障,也会从”链路打开”状态转到“链路终止”状态。当调制解调器的载波停止后,则回到“链路静止”状态。
最后
以上就是要减肥春天为你收集整理的数据链路层(一)的全部内容,希望文章能够帮你解决数据链路层(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复