简介
数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
基本功能
数据链路层主要功能有 :帧编码(封装成帧)、透明传输、误差纠正控制(差错控制)。
封装成帧
帧编码意味着定义一个包含信息频率、位同步、源地址、目标地址以及其他控制信息的数据包。数据链路层协议又被分为两个子层 :逻辑链路控制(LLC)协议和媒体访问控制(MAC)协议。
透明传输
是指向该层用户提供透明的和可靠的数据传送。透明性是指该层上传输的数据的内容、格式及编码没有限制,也没有必要解释信息结构的意义。
差错控制
差错校验是指在物理层中信息丢失、信息干扰及顺序不正确情况发生后,在数据链路层中必须用纠错码来检错与纠错。例如在传输过程中可能会产生比特差错:1 可能会变成 0 ,0 也可能变成 1。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate) 。误码率与信噪比有很大的关系。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施(循环冗余检验CRC)。使差错被控制在所能允许的尽可能小的范围内,这就是差错控制过程。
CRC: 是一种常用的检错方法;
FSC: 是添加在数据后面的冗余码,FSC可以用CRC得出,而CRC并非是得出FSC的唯一途径;
对差错编码(如奇偶校验码,检查和或CRC)的检查,可以判定一帧在传输过程中是否发生了错误。一旦发现错误,一般可以采用序号和确认重发进行可靠传输等方法来纠正。这就要求接收方收完一帧后,向发送方反馈一个接收是否正确的信息,使发送方所在此作出是不需要重新发送的决定,也即发送方仅当收到接收方已正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需要重新发送直至正确为止。物理信道的突发噪声可能完全“淹没”一帧,即使得整个数据帧或反馈信息帧丢失,这将导致发送方永远收不到接收方发来的反馈信息,从而使传输过程停滞.为了避免出现这种情况,通常引入计时器(Timer)来限定接收方发回反馈信息的时间间隔,当发送方发送一帧的同时也启动计时器,若在限定时间间隔内未能收到接收方的反馈信息,即计时器超时(Timeout),则可认为传的帧已出错或丢失,继而要重新发送。由于同一帧数据可能被重复发送多次。为了防止发生这种危险,可以采用对发送的帧编号的方法,即赋予每帧一个信号,从而使接收方能从该序号来区分是新发送来的帧还是已经接收但又重新发送来的帧,以此来确定要不要将接收到的帧递交给网络层。数据链路层通过使用计数器和序号来保证每帧最终都被正确地递交给目标网络层一次。
两种情况下的数据链路层
使用点对点信道的数据链路层
现在全世界使用最多的数据链路层协议就是ppp协议,用户使用拨号电话线接入因特网时,一般就是点到点协议;
| ppp协议应该满足的要求 | ppp协议不需要满足的要求 |
|---|---|
| 封装成帧 透明性 多种网络层协议 多种类型链路 差错检验 检测连接状态 最大传送单元 网络层地址协商 数据压缩协商 |
纠错 流量控制 序号 多点线路 半双工或单工链路 |
ppp协议的组成:
1.数据链路层协议可以用于异步串行或同步串行介质;
2.它使用LCP(链路控制协议)建立并维护数据链路连接;
3.网络控制协议(NCP)允许点到点连接上使用多种网络协议;
ppp协议帧格式:
首部中的标志字段F(Flag),规定为0x7E(符号0x表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110),标志字段表示一个帧的开始。
首部中的地址字段A规定为0xFF(即11111111)。
首部中的控制字段C规定为0x03(即00000011)。
首部中的2字节的协议字段:
(1)当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。
(2)当协议字段为0xC021时,PPP帧的信息字段就是PPP链路控制协议LCP的数据。
(3)当协议字段为0x8021时,PPP帧的信息字段就是网络层的控制数据。
PPP帧的信息字段部分,信息字段的长度是可变的,不超过1500字节。
PPP帧的尾部
尾部中的第一个字段(2个字节)是使用CRC的帧检验序列FCS。
尾部中的标志字段F(Flag),规定为0x7E(符号0x表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110),标志字段表示一个帧的结束。
注:标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段。如果连续出现两个标志字段,就表示这是一个空帧,应当丢弃。
PPP协议中的透明传输的实现方式
当信息字段中出现和标志字段一样的比特(0x7E)组合时,就必须采取一些措施使这种形式上和标志字段一言的比特组合不出现在信息字段中。
1 字节填充——PPP使用异步传输
当PPP使用异步传输时,它把转移符定义为0x7D,并使用字节填充。
RFC1662规定了如下填充方法:
(1)把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)。
(2)若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把转义字符0x7D转变为2字节序列(0x7D,0x5D)。
(3)若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要把它转变为2字节序列的(0x7D,0x31)。
由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数。但接收端在接收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息。
2 零比特填充——PPP使用同步传输
当PPP使用同步传输时,使用零比特填充。
零比特填充的具体方法:
(1)在发送端先扫描整个信息字段(通常使用硬件实现,但也可以用软件实现,但是会慢一些)。
(2)只要发现有5个连续的1,则立即填入一个0。
(3)接收端在收到一个帧时,先找到标志字段F以确定帧的边界,接着再用硬件对其中的比特流进行扫描,每当发现5个连续1时,就把5个连续1后的一个0删除,以还原成原来的信息比特流。
因此通过这种零比特填充后的数据,就可以保证在信息字段中不会出现连续6个1。
使用广播信道的数据链路层
- 广播信道在局域网的数据链路层中使用
局域网的拓扑类型有 总线型,环形,星型
局域网的共享信道的方式为总线型网络为多点接入
分为以下两种
随机接入:也就是说信道不是固定的分配给某一个主机而是每个主机都可以随时的发送信息,但是这里的问题是如果同时有多个用户发送信息的话,就会造成碰撞,这样就都会失败,所以说必须要有解决碰撞的协议
受控接入:受控接入的特点是用户不能够随时的发送信息,而是受到一定的控制,比如说给每个用户一个令牌,或者说轮询
2. 适配器
适配器又称为网卡,通过I/O总线与cpu相连接,适配器中包含着计算机的唯一标示Mac地址。
现在的适配器功能都比较强大,发送和接收帧都可以自己实现而不用cpu这样就节省了cpu的时间。另外适配器还可以进行差错检测。
适配器拥有过滤功能,能够将不属于本站的收下,不属于本站的帧丢弃
通常局域网中有三种帧
1 单播帧(一对一),收到的帧的mac地址与本机的硬件地址相同
2 广播帧(一对全体),发送给本局域网的所有帧(地址全是1)
3 多播帧(一对多),发送给局域网的一部分主机
适配器还可以设置为混杂方式工作,即接收局域网上的所有帧,这样就可以监听别人的信息,这种方式是不好滴
3. CSMA/CD协议
以太网是总线型结构,所以说当一台计算机发送信心的时候,所有的计算机都能都监听到,所以说需要有mac地址来知名目的地址。
只有mac地址与数据帧首部的mac地址相同的时候才会接收其他情况下丢弃。
为了简便通信以太网采用了无连接工作方式,也就是说发送信息的时候不必要建立连接,差错重传之类的交给高层协议比如说TCP。
CSMA/CD协议的主要内容
多点接入:说明是总线型网络
载波监听:因为每个计算机随时都可以发送信息,所以说为了防止信息失效就采用载波监听,如果说信道中有其他计算机正在传送信息自己就不发送
碰撞检测:也就是边发送边检测,载波监听的时候会有时间差,也就是说当一个主机发送的时候,传播的其他主机是需要时间的,所以说如果一个主机发送的时候,其他主机并没有检测到(因为时间差),那么其他的主机也有可能发送
这样的话就会有可能造成碰撞。所以说需要碰撞检测,如果发生碰撞的话就会停止发送,然后等待一段时间重新发送。
