Python -- 网络模型 -- 数据链路层基础

数据链路层使用的信道主要有两种类型:

  • 点对点信道,这种信道使用一对一的点对点通信方式。
  • 广播信道。

局域网一般并不在网络层中去讨论,网络层要解决多个网络互连的问题,讨论分组如何通过路由,转发到另一个网络。局域网属于数据链路层的范围,讨论分组如何在一个网络中不经过路由转发,主机进行通信。

Python -- 网络模型 -- 数据链路层基础

路由器在转发分组时和主机不同,有完整的五层协议栈,他们只有三层。

使用点对点信道的数据链路层

链路 (link) 是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。一条链路只是一条通路的一个组成部分。

数据链路 (data link) 除了物理线路外,还有通信协议来控制这些数据的传输。把实现这些协议的硬件和软件加到链路上,就成了数据链路。现在常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层的功能。   Python -- 网络模型 -- 数据链路层基础

点对点信道的数据链路层在通信时主要步骤如下:

  1. 节点 A 的数据链路层把网络层交下来的 IP 数据报添加首部和尾部封装成帧。
  2. A 发给 B 的数据链路层
  3. B 收到后,检查无差错,则提取 IP 数据报交给上面的网络层,否则丢弃。

数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题

  1. 封装成帧
  2. 透明传输
  3. 差错控制

1.  封装成帧

  • 封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。
  • 首部和尾部的一个重要作用就是进行帧定界。 

Python -- 网络模型 -- 数据链路层基础

首部和尾部包含许多必要的控制信息。

其他的功能以后讨论,目前三个问题,重点理解 封装成帧。

点对点协议 PPP

Python -- 网络模型 -- 数据链路层基础

  • 现在全世界使用得最多的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。
  • 用户使用拨号电话线接入因特网时,一般都是使用 PPP 协议。 

PPP 协议有三个组成部分

  • 一个将 IP 数据报封装到串行链路的方法。
  • 链路控制协议 LCP (Link Control Protocol)。
  • 网络控制协议 NCP (Network Control Protocol)。  

PPP 协议的工作状态

  1. 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。
  2. PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。
  3. 这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
  4. 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。
  5. 可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。

 Python -- 网络模型 -- 数据链路层基础

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

局域网最主要的特点是:

  • 网络为一个单位所拥有。
  • 地理范围和站点数目均有限。

局域网具有如下主要优点:

  • 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
  • 系统的优点。

以太网的由来和两个标准:

  • DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约,IEEE 802.3 第一个 IEEE 以太网标准
  • DIX Ethernet V2 标准与 IEEE 802.3 标准只有很小的差别,因此可以将 802.3 局域网简称为“以太网”。
  • 严格说来,“以太网”应当是指符合 DIX Ethernet V2 标准的局域网
  • 为了使数据链路层能更好地适应多种局域网标准IEEE 802 委员会就将局域网的数据链路层拆成两个子层:

    逻辑链路控制 LLC (Logical Link Control)子层; 媒体接入控制 MAC (Medium Access Control)子层。

  • 与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关。

  • 不管采用何种协议的局域网,对 LLC 子层来说都是透明的。

Python -- 网络模型 -- 数据链路层基础

由于 TCP/IP 体系经常使用的局域网是 DIX Ethernet V2 ,因此现在的逻辑链路控制子层 LLC 的作用已经不大了。很多厂商生产的适配器上就仅装有 MAC 协议而没有 LLC 协议。

适配器的作用:

  • 网络接口板又称为通信适配器 (adapter) 网络接口卡 NIC (Network Interface Card),或“网卡”。
  • 适配器的重要功能:进行串行/并行转换。对数据进行缓存。在计算机的操作系统安装设备驱动程序。实现以太网协议
  • 计算机通过适配器和局域网进行通信

Python -- 网络模型 -- 数据链路层基础

CSMA/CD 协议:

  • 最初的以太网是将许多计算机都连接到一根总线上。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。
  • 总线上的每一个工作的计算机都能检测到 B 发送的数据信号。 只有计算机 D 的地址与数据帧首部写入的地址一致,因此只有 D 才接收这个数据帧。 其他所有的丢弃这个数据帧而不能够收下来。在具有广播特性的总线上实现了一对一的通信。 
  • 为了通信的简便,以太网采取了两种重要的措施:(1) 采用较为灵活的无连接的工作方式不必先建立连接就可以直接发送数据。(2) 以太网发送的数据都使用曼彻斯特 (Manchester) 编码
  • 多点接入”表示许多计算机以多点接入的方式连接在一根总线上
  • 载波监听是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,有则暂时不发送数据,以免发生碰撞。
  • 总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号
     

CSMA/CD 重要特性:

  • 使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。
  • 每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
  • 这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。 

以太网的 MAC 层:

如果连接在局域网上的主机或路由器安装有多个适配器,那么这样的主机或路由器就有多个“MAC地址”。更准确些说,这种 48 “地址”应当是某个接口的标识符。

 Python -- 网络模型 -- 数据链路层基础

类比虚拟局域网使用的局域网帧格式:

Python -- 网络模型 -- 数据链路层基础

在数据链路层扩展以太网:

  • 扩展以太网更常用的方法是在数据链路层进行
  • 早期使用网桥,现在使用以太网交换机
  • 以太网交换机实质上就是一个多接口的网桥