背景
数据链路层属于计算机网络的低层,数据链路层使用的信道主要有:点对点信道和广播信道。
局域网虽然是个网络,但不经过路由器的转发,从整个互联网来看,局域网仍属于数据链路层的范围。
下面看一下两台主机通过互联网通信时数据链路层所处的地位:
其中,H1和H2代表主机,R1、R2和R3代表路由器,从数据链路层看,H1到H2的通信可以分为4段:H1->R1,R1->R2 ...这四段可能采用不同的数据链路协议。
一、点对点信道的数据链路层
数据链路和帧
- 数据链路:链路就是从一个结点到相邻的结点的一段物理线路,中间没有任何其他可以交换的结点,数据链路是在链路上还要加上一些必要的通信协议来控制数据传输。
- 帧:协议数据单元,数据链路层把网络层交下来的数据构成帧发送到链路,以及 把接受到的帧中的数据取出并交给网络层,在网际层叫Ip数据报(简称数据报、包或分组)
- 点对点信道通信步骤:结点A的数据链层把网络层交下来的ip数据报添加首部和尾部封装成帧,然后发送给结点B,结点B数据链路层收到的帧无差错,则从帧中取出IP数据报交给上面的网络层,否则丢弃这个帧
- 数据链路层不必考虑物理层如何实现比特流传输细节,可以简单设想为沿着数据链路层水平传输。
封装成帧
- 首部和尾部的一个重要的作用就是帧定界
- 各种数据链路层协议对首部和尾部都有明确的规定
- 每一种协议都规定了能传送的帧的数据部分长度上限--最大传送单元MTU
- 帧定界符:开始符SOH(00000001)和EOT(00000100)用来确定是否是一个完整的帧
透明传输
由于真的开始和结束符使用专门指明的控制字符,因此,当传输的数据中有相同的比特编码,那么就会出现错误
- 透明:某一个实际存在的事物看起来却好像不存在一样
- 解决办法:在SOH和EOT前面插入一个转义字符ESC(00011011),而在接受端的数据链路层需要在发送到网络层之前要删除这个转义字符,称为字节填充或字符填充。
差错检测
现实的通信线路是不理想的,可能会出现比特差错,就是将1变成0(误码率),为了保证数据传输的可靠性,在计算机传输数据时,必须采用各种差错检测措施。
循环冗余检查CRC
- 步骤:在发送前,把数据化为组,设每组k个比特,如传送的数据M=101001(k=6),在M的后面添加n位的冗余码,然后构成一个帧发送出去。一共发送k+n位,虽然增加了传输的开销,但是代价确实值得的。
- 冗余码生成:用二进制的模2运算进行2次n幂 乘M运算(相当与在M后面加n个0),然后再除以一个事先商量好的n+1为的除数P,得到商Q(并没有什么用)和余数(n位,作为冗余吗)称为帧检验序列FCS
- 发送的帧为:M + FCS,在接受端收到的数据以帧为单位进行CRC检验,也是除以P,如果没有差错,那么余数R那么一定为0
- 在数据链路层使用CRC可以实现无比特差错,但不是可靠传输,因为还有一些复杂的情况,如帧丢失、帧重复和帧失序。
二、点对点协议PPP
我们知道,互联网用户需要连接到某一个ISP才能接入到互联网,PPP协议就是用户计算机和ISP进行通信时使用的数据链路层协议
PPP应该满足的需求
- 简单
- 封装成帧
- 透明性
- 多种网络层协议
- 多种类型链路:如PPPoE 是为宽带上网的主机使用的链路层协议
- 差错检测
- 检测连接状态
- 最大传送单元
- 网络层地址协商
- 数据压缩协商
PPP协议
- 协议帧格式
- 字节填充
- 零比特填充
PPP协议的工作状态
- 链路静止
- 链路建立
- 鉴别
- 链路打开
- 链路终止
使用广播信道的数据链路层
一对多的通信,局域网使用就是广播信道
局域网的数据链路层
- 按拓扑分类:星形网(配集线器)、环形网、总线网(匹配电阻)
- 共享信道:如果使众多用户能够合理而方便地共享通信媒体资源
- 静态划分信道:如时分复用、频分复用等,但不适合于互联网
- 动态接入:又称多点接入,有随机接入(需解决碰撞)和受控接入(令牌环局域网和集中控制的多点线路探询)。
以太网的2个标准
- DIX ethernet V2 和 IEEE的802.3
- IEEE 802 把局域网的数据链路层分为2个子层:逻辑链路控制LLC 和媒体接入控制 MAC
- 适配器:计算机于外界局域网的连接是通过适配器进行的,是一块网络接口板或称为网卡
- 适配器和计算机之间的通信是通过计算机主板上的I/O总线并行传输进行的,而适配器和局域网是通过电缆和双绞线串行传输进行的,速率不匹配因此在适配器中还有缓存的存储芯片