前言

正在学习计算机网络这门课程,顺便做个笔记,记录一下知识点。

参考资料:

中科大郑烇老师全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程:https://www.bilibili.com/video/BV1JV411t7ow?p=1

《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》


第六章:链路层

网络层解决了分组如何从一个网络到达另一个网络的路由问题(以子网为单位),但是分组如何在子网内部的相邻节点之间传输,链路层解决了这个问题。

网络节点的连接方式:

  • 点到点连接

    一般用于广域网(距离远)。举例:海底电缆将中国与其他国家的路由节点连接在一起。

    点到点链路的链路层服务实现非常简单,封装和解封装

  • 多点连接

    一般用于局域网(距离近)。举例:在局域网中通过交换机将不同的多个节点连接起来。

    那么这就会产生一个问题,如果多方同时发送分组,就会产生碰撞(存在多点接入的问题)。后续我们会详细讨论。

导论

在开始前先规范一些术语:

术语 解释
nodes(节点) 主机、路由器、网桥和交换机都是节点
links(链路) 沿着通信路径,连接相邻节点通信信道的是链路(包括:有线链路、无线链路、局域网(共享性链路))
frame(帧) 链路层的数据单元(PDU)

链路层负责从一个节点通过链路将(帧中的)数据报发送到相邻的物理节点。

下面我们举一个比较贴切的例子来分析分组在链路层的传输过程:

假设博主要从普林斯顿洛桑,其中具体的路程规划如下:

  1. 先坐轿车到肯尼迪国际机场
  2. 再乘坐飞机飞往日内瓦
  3. 最后乘火车到洛桑

其中:

  • 博主本人 = 数据报/分组
  • 交通段 = 通信链路(communication link)
  • 交通模式 = 链路层协议(protocol)
  • 票务代理 = 路由算法(routing algorithm)
  • 数据报/分组在不同的链路上以不同的链路协议传送
  • 不同的链路协议提供不同的服务

链路层提供的服务

  • 成帧,链路接入:

    • 将数据报封装在帧中,加上帧头、帧尾部
    • 如果采用的是共享性介质,信道接入获得信道访问权
    • 在帧头部使用“MAC”(物理)地址来标示源和目的(注意:不同于IP地址)
  • 在相邻两个节点(一个网络内)完成可靠数据传递

    • 在低出错率的链路上(光纤和双绞线电缆)很少使用

    • 在无线链路经常使用:出错率高

      注意:链路层也可以实现一定的可靠性

      在无线链路的网络上,出错率高,如果在链路层不做差错控制工作,漏出去的错误比较高;到了上层如果需要可靠控制的数据传输代价会很大

      • 一般化的链路层服务,不是所有的链路层都提供这些服务
      • 一个特定的链路层只是提供其中一部分的服务
  • 流量控制

    使得相邻的发送和接收方节点的速度匹配

  • 错误检测

    • 差错由信号衰减和噪声引起
    • 当接收方检测出错误时,通知发送端进行重传或丢弃帧
  • 差错纠正

    接收端检查和纠正bit错误,不通过重传来纠正错误

  • 半双工和全双工

    • 半双工:链路可以双向传输,但一次只有一个方向
    • 全双工:两个方向可以同时收发

链路层的实现位置

  • 在每一个主机上

    • 包括路由器
    • 交换机的每个端口
  • 链路层功能在“适配器”上实现(aka network interface card NIC))或者在一个芯片组上

    • 以太网卡,802.11 网卡; 以太网芯片组

    • 实现链路层和相应的物理层功能

      适配器通信

      • 发送方
        • 在帧中封装数据报
        • 借助于物理层,把每个bit发送出去
        • 加上差错控制编码,实现rdt(也可能不实现)和流量控制功能等
      • 接收方
        • 把物理信号还原为数字信号,还原帧头、帧尾
        • 检查有无出错,执行rdt和流量控制功能等
        • 解封装数据报,将至交给上层
  • 接到主机的系统总线上

  • 硬件、软件和固件的综合体

差错检测和纠正

错误检测

说明:

  • EDC:差错检测和纠正位(冗余位)
  • D:数据由差错检测保护,可以包含头部字段

在数据传输的过程中数据有可能发生错误,这时接收方会检查EDC’以及D’是否符合约定的差错控制编码关系,如果不符合关系,那么数据一定出错。

此外,还存在一种情况,即EDC’以及D’都出错,且恰好又通过校验,这种情况被称为残存错误

  • 错误检测不是100%可靠的
  • 编码越长,残存错误越低。(更长的EDC字段可以得到更好的检测和纠正效果)

奇偶校验

  • 单bit奇偶校验

    • 检测单个bit级错误(容易理解)
  • 二维奇偶校验

    • 检测和纠正单个bit错误
    • 不仅可以检测出错误,还可以检测出错误的位置
    • 无法检测出对偶错误

Checksum(校验和)

目标: 检测在传输报文段时的错误(如位翻转),(仅仅用在传输层)

具体可以看传输层章节,这里不再赘述

CRC(循环冗余校验)

  • 强大的差错检测码

  • (直接放一个过程,具体怎么操作自行搜索)

    D:数据bit

    G:生成多项式:双方协商r+1位模式(r次方)

    目标:求R

  • CRC性能分析

    • 能够检查出所有的1bit错误
    • 能够检查出所有的双bit错误
    • 能够检查出所有长度小于等于r位的错误
    • 出现长度为 r+1的突发错误,检查不出的概率是1/2r-1
    • 出现长度大于r+1的突发错误,检查不出的概率是1/2r

多点访问协议