深入浅出计算机网络 day.4 第三章 数据链路层 ①

I am not afraid of storms.

        for I am learning how to sail my ship.

我不惧怕风暴,

        因为我在学习如何驾驶风帆

                                                    —— 24.3.​​​23

3.1 数据链路层概述

内容简介

01.数据链路层再网络体系结构中所处的地位

02.链路、数据链路和帧

一、数据链路层再网络体系结构中所处的地位

二、链路、数据链路和帧

链路是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他交换节点

        一般两个主机之间的通信路径由多端链路组成

        通信路径包含中间节点,所以不能称之为链路,只能称之为通信路径

数据链路是基于链路的,当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路

计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能

帧是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU

简单起见,我们不必考虑网络体系结构中的其他各层,可以认为,帧是在通信双方数据链路层的对等实体之间沿水平方向直接传送的

3.2 数据链路层的三个重要问题

内容简介

01.数据链路层的三个重要问题介绍

        ①封装成帧和透明传输

        ②差错检测

        ③可靠传输

一、数据链路层的三个重要问题介绍

1.封装成帧和透明传输

封装成帧

①发送方的应用层将待传输的应用层协议数据单元交付给运输层

②运输层为其添加一个运输层首部,使之封装为运输层协议数据单元,并将运输层协议数据单元交付给网络层

③网络层为其添加一个网络层首部,使之封装为网络层协议数据单元,并将网络层协议数据单元交付给数据链路层

④数据链路层为其添加一个首部和一个尾部使之封装成帧

⑤帧的首部和尾部包含有一些重要的控制信息

在帧首部和尾部之中各有一个标志字段,接收方的数据链路层,在收到物理层交付上来的比特流后,根据帧首部和尾部中的标志字段,就可以从收到的比特流中,识别出帧的开始和结束,也就是帧定界

透明传输

如果存储的数据中也有一个和帧首尾部相同的数据,就会被误认为这个数据是一个帧,则数据链路层的传输就会出现错误,而如果限制不能传输某些数据,则这样的数据链路层就没什么用了

        解决方法就是使得数据链路层对所交付的PDU内容没有任何限制,这样就叫做透明传输

2.差错检测

在数据传输的过程中,表示比特的信号在信道上传输时,不可避免地会出现一些失真、误码,接收方的数据链路层收到该帧后通过差错检测措施才能知道传输来的数据出现了问题

        接收方根据某种差错检测措施通过计算得到一个检错码,帧尾部用来存放检错码的字段称作帧检验序列,英文缩写为FCS,例如:

接收方的数据链路层从帧尾部取出检错码,采用与发送方相同的检错技术,就可以通过检错码,检测出帧在传输过程中是否出现了误码

检错方法有:

①奇偶校验        ②循环冗余校验

3.可靠传输

若数据链路层对齐上层提供的是不可靠的传输服务,则接收方的数据链路层直接丢弃有误码的帧

若数据链路层对齐上层提供的是不可靠的传输服务,则接收方的数据链路层通过某种机制,实现发送方发送什么,接收方最终都能正确收到

二、封装成帧和透明传输

内容简介

01.封装成帧

02.透明传输

1.封装成帧

封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加一个首部和一个尾部,使之称为帧

①帧的首部和尾部中包含有一些重要的控制信息

数据链路层将封装好的帧向下交付给物理层,物理层将其看作是比特流,并转换成相应的电信号发送给接收方

②帧首部和尾部的作用之一就是帧定界

不是每一种数据链路层的帧都包含有帧定界标志

③为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度

④考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上线,即最大传送单元(MTU),例如,以太网的MTU为1500个字节

2.透明传输

透明传输是指数据链路层对上层交付下来的协议数据单元PDU没有任何限制,就好像数据链路层不存在一样

数据链路层对上层交付下来的协议数据单元PDU有限制,即不能包含帧定界符

方法:

①面向字节的物理链路使用字节填充的方法实现透明传输

        在上层交付给数据链路层的数据含有帧定界符,方法是在把帧交付给物理层之前,对帧的数据载荷进行扫描,每出现一个帧定界符或转义字符,就在其之前插入一个转义字符进行标识,转义字符是一种特殊的控制字符,长度为1个字节,十进制值为27,并不是ESC三个字符

②面向比特的物理链路使用比特填充的方法实现透明传输

        发送方当出现与帧相同的比特数值时,在接近却没有相同的一处加上一个比特0,接收方在发现有相同的数字接近帧最后一位却是比特0时,就将最后一位比特0删除,案例:

        解:由于帧定界符是01111110,六个1,所以在发送时先对数据进行扫描,当发现五个连续的1时,由于数据要接近帧定界符了,所以在五个一后添加一个比特0,避免与帧定界符混淆,接收方对数据载荷进行扫描,当发现连续的五个一后存在比特0,则将比特0删去,这样就可以还原出原始的数据载荷

各种数据链路层协议都有其自己的填充方法

3.习题

1.

HDLC采用的是”零比特填充法“,即每五个连续比特1后面插入一个比特0

2.

解析:

A:01000111 B:11100011 转义字符ESC:11100000  帧定界符FLAG:01111110

字符填充法:FLAG A B ESC ESC ESC FLAG FLAG

        01111110 01000111 11100011 11100000 11100000 11100000 01111110 01111110

0比特填充法:FLAG A B ESC FLAG FLAG

        011111010 01000111 110100011 111000000 011111010 01111110

三、差错检验

内容简介

01.误码的相关概念

02.奇偶校验

03.循环冗余校验

1.误码的相关概念

实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(比特差错

        比特1可能变成比特0        比特0可能变成比特1        称为比特差错

比特流在传输过程中,可能受到噪声干扰、传输媒体质量等因素影响,而出现比特差错,或称为误码

在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率,提高链路的信噪比,可以降低误码率,但在实际的通信链路上,不可能使误码率下降为0

接收方的数据链路层从物理层交付的比特流中提取出一个帧后,如何检测这个帧是否存在误码,使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一,例如:

        发送方的数据链路层采用某种检错技术,根据帧的内容计算出一个检错码,将检错码填入帧尾部,接收方的数据链路层从帧尾部取出检错码,采用与发送方相同的检错技术,就可以通过检错码,检测出帧在传输过程中是否出现了误码,帧尾部中用于存放检错码的字段称为帧检验序列FCS,例如:

2.奇偶校验

奇校验是在待发送的数据后面添加一个校验位,使得添加该校验位后的整个数据中比特1的个数奇数

偶校验是在待发送的数据后面添加一个校验位,使得添加该校验位后的整个数据中比特1的个数偶数

奇校验

偶校验

通过上述举例可以分析出:

在所传输的数据中,如果有奇数个位发生误码,则所包含比特1的数量的奇偶性会发生改变,可以检测出误码。
在所传输的数据中,如果有偶数个位发生误码,则所包含比特1的数量的奇偶性不会发生改变,无法检在误码(漏码)

在实际使用时,奇偶校验又可分为垂直奇偶校验、水平奇偶校验以及水平垂直奇偶校验。

3.循环冗余校验

数据链路层广泛使用漏检率极低的循环冗余校验(CRC)检错技术。

循环冗余校验CRC的基本思想:

①收发双方约定好一个生成多项式G(X)

②发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据的后面一起传输

③接收方受到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码

发送方CRC操作:

①进行除法,将待发送的数据作为被除数的一部分,后面添加生成多项式最高次数个0以构成被除数

②生成多项式各项系数构成的比特串作为除数

③进行除法,得到商和余数

④将余数添加到发送数据的后面一起发送

注:商仅作为标记,防止计算过程对错位置,余数的长度应与生成多项式最高次数相同,作为冗余码,这里的除法指二进制模二除法,相当于对应位进行逻辑异或运算

接收方CRC操作:

①接收方也进行除法,与发送方类似,将收到的数据和冗余码作为被除数,生成多项式各项系数构成的比特串作为除数,进行除法,得到商和余数

②如果余数为0,可判断接收无误码

③如果余数部位0,可判断接收有误码

生成多项式举例

CRC举例

1.

2.

4.三种校验方式的对比

①奇偶校验、循环冗余校验等差错检测技术,只能检测出传输过程中出现了差错,但并不能定位错误,因此无法纠正错误

②要想纠正传输中的差错,可以使用冗余信息更多的纠错码(例如海明码)进行前向纠错,但纠错码的开销比较大,在计算机网络中较少使用

③在计算机网络中,通常采用我们后续课程中将要介绍的检错重传方式来纠正传输中的差错,或者仅仅丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务

④循环冗余校验CRC具有很好的检错能力(漏检率极低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-25 05:30:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-25 05:30:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-25 05:30:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-25 05:30:06       18 阅读

热门阅读

  1. 100 天机器学习指南

    2024-03-25 05:30:06       16 阅读
  2. 字符串的冒泡排序 C语言

    2024-03-25 05:30:06       18 阅读
  3. flutter搭建mac开发环境

    2024-03-25 05:30:06       19 阅读
  4. 为什么Rust语言不支持三元表达式?

    2024-03-25 05:30:06       17 阅读
  5. 设计模式,策略模式

    2024-03-25 05:30:06       20 阅读
  6. ElasticSearch插件安装及配置

    2024-03-25 05:30:06       16 阅读
  7. 设计模式--建造者模式(Builder Pattern)

    2024-03-25 05:30:06       20 阅读
  8. P - Beat

    P - Beat

    2024-03-25 05:30:06      18 阅读