5 链路层

5 链路层

5.1 概述

节点(node):运行链路层协议的设备(主机、路由器、交换机、WiFi接入点)

链路(link):沿着通信路径连接相邻节点的通信信道

数据链路层(data link layer) :将数据报封装在链路层**帧(frame)**中通过通信链路从一个节点传输到另一个节点

链路层提供的服务

  • 成帧
  • 链路接入:介质访问(Medium Access Control,MAC)协议 规定了帧在链路上传输的规则。
    • 广播链路(broadcast link) :**多路访问协议(multiple access protocol)**用于协调多个发送和接收节点对一个共享广播信道的访问。
    • 点对点链路(point-to-point link):无论何时链路空闲,发送方都能够发送帧(不存在MAC协议)。
  • 可靠交付:通常用于易于产生高差错率的链路(如无线链路),许多有线的链路层协议不提供可靠交付服务。
  • 差错检测和纠正

实现

  • 链路层在称为网络适配器的芯片上实现,有时也称为网络接口控制器(NIC)。
  • 大部分链路层在硬件中实现,也有部分链路层在运行于主机CPU上的软件中实现,是协议栈软件与硬件交接的地方。

5.2 差错检测和纠正技术

5.2.1 奇偶校验

一维奇偶校验:数据 + 奇偶校验位,检1位错

  • 奇校验:1的总数为奇数
  • 偶校验:1的总数为偶数

二维奇偶校验:检2位错,纠1位错

二维偶校验示例:

5.2.2 检验和

运输层的TCP和UDP协议使用了因特网检验和,对所有字段(首部+数据)计算检验和

5.2.3 循环冗余检测

链路层使用循环冗余检测(Cyclic Redundancy Check,CRC)

运输层差错检测用软件实现,应采用简单而快速如检验和这样的差错检测方案;链路层的差错检测在适配器中用专用的硬件实现,可以快速执行更复杂的CRC操作。

CRC编码 /多项式编码:D+R 可以被 G 整除,检 r 位错

  • 数据D:d位
  • 附加比特R:r位,是 D*2^r / G 的余数(所有的加减运算都是模2运算,等价于异或运算)
  • 生成多项式G:r+1位

5.3 多路访问协议

协调多个发送和接收节点对一个共享广播信道的访问

5.3.1 信道划分协议(channel partitioning protocol)

时分多路复用(TDM) :将时间划分为时间帧(time frame) ,每个时间帧划分为N个时隙(slot),时隙长度应使一个时隙内能够传输单个分组,每个节点获得了专用的传输速率 R/N bps(R为信道传输速率)。

频分多路复用(FDM):将信道划分为不同的频段,每个频段具有 R/N bps 的带宽,并把每个频段分配给N给节点中的一个。

码分多址(Code Division Multiple Access,CDMA):CDMA划分编码空间,对每个节点分配一个不同的编码,节点要发送的每个比特都要乘以它唯一的编码的比特。

5.3.2 随机接入协议(random access protocol)

随机接入协议中,所有节点总是以信道的全部速率进行发送,产生碰撞时,碰撞的每个节点都要随机地重发当前帧,直到无碰撞为止。

时隙ALOHA协议

假设:

  • 所有帧等长,均为L bit
  • 时间被划分为等长的时隙,均为L/R s(R为信道带宽)
  • 节点只在时隙起点开始传输帧
  • 节点是同步的,它们都知道时隙何时开始
  • 发生碰撞时,所有碰撞的节点都能在该时隙结束前检测到碰撞事件

操作:

  • 当节点要发送一个新帧时,它等到下一个时隙开始并在该时隙传输整个帧
  • 若无碰撞,则成功传输
  • 若有碰撞,则节点以概率 p 在后续每个时隙中重传此帧,直到无碰撞

性能:

  • N个节点,概率均为p,某个节点成功传输的概率是 p(1 - p)^(N - 1),任意节点成功传输的概率是 Np(1 - p)^(N - 1)
  • 效率是 Np(1 - p)^(N - 1),最大效率是1/e = 0.37

ALOHA协议

操作:

  • 立即传输,碰撞后立即以概率p重传

性能:

  • N个节点,概率均为p,某个节点成功传输的概率是 p(1 - p)^[1]^
  • 最大效率是1/(2e)

干扰传输:

载波侦听多路访问(CSMA)

  • 载波侦听(carrier sensing):一个节点在传输前先检测信道,若有其他节点在传输,该节点则等待直到检测到一小段时间没有传输再开始传输。

具有碰撞检测的CSMA(CSMA/CD)

  • 碰撞检测(collision detection):一个传输节点在传输数据时一直侦听信道,若有其他节点开始传输,该节点则立即停止传输,在等待一段随机时间之后开始载波侦听。
  • 随机时间的选择:二进制指数后退算法(节点经历n次碰撞,则随机从 [0, 1, 2, ... , 2^n - 1]中选择一个值,因此一个节点经历的碰撞次数越多,越有可能选择到更长的随机时间)

具有碰撞避免的CSMA(CSMA/CA)

  • 碰撞避免(collision avoidance):一个节点在传输前先检测信道,若有其他节点在传输,该节点则选取一个随机回退值,并在侦听到信道空闲时递减该值,侦听到信道忙时保持不变,当该值减为零时,该节点发送整个帧并等待确认。若没收到确认,则从一个更大的范围内选取随机值重复上述过程,直到收到确认完成传输。

5.3.3 轮流协议(taking-turns protocol)

轮询协议(polling protocol)

指定一个主节点,主节点以循环的方式轮询每个节点

令牌传递协议(token-passing protocol)

令牌在节点间以一定顺序传递,持有令牌的节点才能发送帧

5.4 交换局域网

5.4.1 链路层寻址和ARP

链路层地址 /LAN地址 /物理地址 /MAC地址:适配器(网络接口)的唯一地址,具有扁平结构(对应于层次结构的IP地址),共6字节,使用16进制表示,如 1A-23-F9-CD-06-9B,MAC广播地址是 FF-FF-FF-FF-FF-FF。

地址解析协议(Address Resolution Protocol,ARP):实现网络层地址和链路层地址的转换

  • 每台主机和路由器在其内存中具有一个ARP表,包含IP地址到MAC地址的映射关系,表项中还包括寿命(TTL)值。
  • 若发送方要向子网内 的主机发送一个IP数据报且ARP表中没有给定的IP地址,则要向适配器传递一个ARP查询分组 ,并指示适配器使用MAC广播地址 发送该分组;子网中的其他适配器若收到查询分组且本地的ARP表中有给定的IP地址,则会发送一个ARP响应分组(不广播);发送方接收到响应分组后,更新ARP表,并发送IP数据报。
  • 若发送方要向子网外的主机发送一个IP数据报,则目的MAC地址应该是子网内的路由器的一个适配器的MAC地址,该路由器通过查询转发表将数据报转发到正确的链路,(若已经到达对应子网)再用ARP获取目的IP地址对应的MAC地址。
  • ARP分组中既包含链路层地址又包含网络层地址,因此ARP协议是跨越链路层和网络层边界的协议。
  • ARP表可以自动建立,ARP是即插即用的。

5.4.2 以太网

总线拓扑:是广播链路

基于集线器的星形拓扑:是广播链路

基于交换机的星形拓扑:是点对点链路

以太网技术向网络层提供无连接不可靠服务。

以太网帧结构:

(注:前同步码Preamble字段共8个字节,前7个字节相同,均为10101010,用于"唤醒"接收适配器,并且将它们的时钟和发送方的时钟同步,第8个字节为10101011,用于"警告"接收适配器,"重要的内容"就要来了)

5.4.3 链路层交换机

链路层交换机对子网中的主机和路由器是透明的。

功能

  • 过滤(filtering):决定一个帧应该被转发到某个接口还是应当丢弃
  • 转发(forwarding):决定一个帧应被导向哪个接口,并把帧移动到那个接口

交换机表(switch table):表项中包括MAC地址、通向该地址的交换机接口、表项放置在表中的时间

  • 对于一个到达的帧,若交换机表中没有该帧目的MAC地址的表项,则广播该帧(转发到除到达接口外的所有接口)
  • 若交换机表中该帧目的MAC地址对应的接口为到达接口,则丢弃该帧
  • 若交换机表中该帧目的MAC地址对应的接口为其他接口,则转发该帧到该接口

自学习(self-learning) :交换机表是自动建立的,交换机是即插即用设备

  • 初始交换机表为空
  • 对于每个接口接收到的每个入帧,交换机在表中存储:该帧源MAC地址、该帧到达接口、当前时间
  • 一段时间(老化期)后,若交换机没有接收到以该地址作为源地址的帧,则删除该表项

特点

  • 交换机是即插即用设备。
  • 交换机是双工的,每个交换机接口能够同时发送和接收。
  • 交换机消除了碰撞
  • 交换机具有异质的链路:交换机将链路彼此隔离,不同链路速率可以不同、媒介可以不同。
  • 交换机易于管理。
  • 为了防止广播帧的循环,交换网络的活跃拓扑限制为一棵生成树
  • 交换机对广播风暴没有保护措施。

5.4.4 虚拟局域网

虚拟局域网(Virtual Local Area Network,VLAN):在一个基于端口的VLAN中,交换机的端口由网络管理员划分成组,每个组构成一个VLAN,每个VLAN中的端口形成一个广播域(一个端口的广播流量仅能到达域内的其他端口)

  • 解决问题:缺乏流量隔离、交换机的无效使用(较小的组用不完交换机的接口)、用户管理(必须改变物理布线)
  • 实现方法:在交换机中维护一张端口到VLAN的映射表,交换机软件仅在VLAN相同的端口之间交付帧
  • 扩展:VLAN干线连接(VLAN trunking) ,通过交换机上一个特殊端口(干线端口)互联两台交换机,跨越VLAN干线的帧中加入了**VLAN标签(VLAN tag)**字段

以太网帧结构与扩展后的帧结构对比

ACCESS端口:主要连接终端设备和交换机,只属于一个VLAN,发送和接收的帧不带有VLAN标签,帧进入交换机时打上VLAN标签,发出时判定端口与VLAN标签是否匹配,匹配则去掉标签后发送该帧,否则丢弃该帧

TRUNK端口:主要连接交换机之间的链路(VLAN干线),允许多个VLAN的帧通过,发送和接收的帧带有VLAN标签


  1. 2(N - 1) ↩︎