计算机网络 - 数据链路层

937 阅读6分钟

一、数据链路层提供的服务


  • 封装成帧
  • 透明传输
  • 差错检测

二、封装成帧


数据包在数据链路上传输时,发送端的数据链路层需要给每个从网络层得到的包加上开始和结束的标记,接收端端根据标记把数据解析成不同的数据包递交给网络层。数据包经过网络层封装之后称为一个数据帧,结构如下:

帧头 源物理地址 目标物理地址 数据包协议类型 数据包 帧检验序列 帧尾

三、透明传输


上面提到的帧头和帧尾,实际上是在网络协议中约定好的一些特殊字节作为标识符(例如01111110)。如果数据包中的数据也包含这与帧头和帧尾相同的字节该如何处理呢?为了解决这些问题,数据层在封装数据包的时候如果发现包中有存在跟帧头帧尾相同的字节,会在这些特殊体特前面再加上一些特殊的填充字节用于提示接收端这并不是帧头和帧尾,这很像编程语言中转义字符"\"。接收端在接收的时候会去掉这些"转义字符",把数据包原样递交给上层。这整个过程对于数据链路层之上的数据层是完全无感知的,所以称为透明传输。

假如帧头和帧尾的标识符是01111110,也可以采用0比特填充法,来避免数据中出现标识符。只要数据中有5个连续的1比特,就在后面填充一个0,接收端如果发现有5个连续的1比特,切后面跟着0bit,就把这个0bit去掉,以此来实现透明传输。

四、差错检测


数据在物理介质上传输的时候收的时候,由于信道噪声的存在,一定会出现错误的比特。传输错误的比特占所传输比特总数的比率称为误码率。检测和纠正传输中的错误比特的功能是在数据链路层来实现的。

差错检测和纠正是通过在数据帧中封装上帧检验序列(冗余码)来实现的,冗余码在数据帧中的位置是在数据包之后帧尾之前。一般是使用循环冗余校验CRC。接收端根据检测算法来判断是否有错误的比特。这个算法只能知道是否存在错误的比特,但是无法知道哪一个比特出错,发现错误后只能丢弃数据帧,进一步就需要传输层的排序和重传机制来保证传输的可靠性。

另外,还有一些带有纠错能力的差错检测编码,与上面类似也是在数据帧中附加帧检验序列,这种编码有一定的概率可以检测到具体是哪个比特在传输中出现了错误,以减少数据链路层对数据帧的丢弃。以太网协议没有实现纠错,由传输层来保证传输的可靠性。

由于数据链路层不能保证它上面的协议层的可靠性传输,可以不实现接收确认机制,由高层来实现可靠性传输。例如TCP/IP协议中传输层的可靠性传输服务。

五、两种类型的数据链路层


  • 使用点对点信道特性的数据链路层
  • 使用广播信道的数据链路层

六、使用点到点协议PPP(Point-to-Point Protocol)

广域网采用点到点通信机制。

用户使用拨号电话线接入因特网(ADSL)时,一般使用PPP协议。PPP协议除了前面介绍的数据链路层功能之外,还包含了链路控制协议(可用于用户身份验证和计费)、网络控制协议(如协商分配IP地址等)等细分的协议层。

七、使用广播信道的数据链路层

局域网采用广播机制 - 以太网协议,以太网协议组中主要包含MAC协议,一个数据帧也可以称为一个MAC帧。

共享通信媒体接入:

  • 静态划分网络(一般不采用,加入新的机器需要重新划分资源)

    • 频分复用
    • 时分复用
    • 码分复用
    • ... ...
  • 动态接入:

    • 随机接入(以太网多采用此方式)
    • 受控接入,polling和轮询等(现在基本已被淘汰)

以太网:

  • 一台机器发送数据,会广播给局域网内的所有联网设备,接收端的网卡不处理不是发送给自己的地址的数据
  • CSMA/CD(载波监听多点接入/碰撞检测)协议:多个机器可以接入一个总线,发送前需要先检测总线上有没有多个设备正在发送产生了碰撞。总线空闲的时候才能进行数据发送。两个设备都检测到总线空闲并发送时,信号在总线上叠加,就会检测到碰撞,检测到碰撞后设备会随机等待一段时间,再继续发送。只能进行半双工通信,同时收发,信号会在总线上发生碰撞。
  • 由于存在传播时延,多个设备同时发送,信号叠加并被检测到需要一定的时间。所以以太网的发送速率要小于理论值。
  • 信道利用率 最大值:发送时间/(发送时间+传播时延)
  • MAC层:48位二进制组成全球唯一的MAC地址(前24位代表网卡的生产厂家,后24位厂家自己指定)。根据MAC地址,接收设备可以接收三种帧:1. 广播帧 2. 单播帧 3. 组播帧 (这里的广播指的是需要局域网内所有设备接收的帧,不是指信号是广播发送,以太网内所有的信号都是广播的)
  • 以太网通过基带(数字)信号来通信。
  • 目前的以太网一般采用星型拓步结构,通过集线器(集线器工作在物理层)来连接不同的设备。

优化的以太网:

前面提到多个设备同时发送数据时,信号会在总线上产生碰撞。如果使用交换机组网,交换机可以根据mac地址转发数据,信号不会扩散到网络内的其他设备,所以多个设备可以同时发送数据,而且支持全双工通信。目前交换机是主流的以太网组网设备。