【计网】数据链路层

220 阅读15分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

重点概览

5.1 data transmission services
data link layer : between adjacent nodes over a link

5.2 Error detection and correction
CRC: how to generate frame with CRC and how to detect the error by CRC

5.3 Multiple access protocols
Two types of “links”: point-to-point & broadcast
Collision of broadcast channel
Data link layer is divided into two sub-layers: LLC and MAC
Multiple access protocol-three broad classes
Channel Partitioning: TDMA 、FDMA、 ……
Random Access: ALOHA、CSMA、 CSMA\CD、……
“Taking turns”:Tokening Ring

5.4 Link-Layer Addressing
MAC address :assigned at manufacturing time

ARP
ARP: IP address -> MAC address
encapsulated in a link-layer broadcast frame
process of ARP query and ARP addressing routing to another LAN

5.6 Link-layer switches
Switch- link-layer device:
Feathers of Switch and creation of Switch table : self-learning

1 introduction, services
2 error detection, correction
3 multiple access protocols
4 LANs
addressing, ARP
Ethernet
switches
VLANS

1.introduction, services

数据链路层和物理层常常合并成数据接入层

一些术语(terminology):

  • 主机和路由器是节点 nodes
  • 沿通信路径连接相邻节点的通信通道是链路links
    • 有线链路
    • 无线链路
    • 局域网
  • 第 2 层packet是一个帧frame,封装(encapsulate)数据报成帧(framing)

数据链路层负责 从一个node传输数据报,通过link到相邻node

提供的服务:

  • framing成帧
  • 链路接入:(Medium Access Control,MAC)媒体访问控制协议
  • 可靠交付:保证无差错地经链路层移动每个网络层数据报
  • 流量控制 flow control: 相邻发送和接收节点之间的步调
  • 错误检测 error detection: 信号衰减、噪声引起的误差;接收器检测到是否存在错误:
  • 纠错 error correction:接收器识别并纠正位错误,不一定重传
  • 半双工和全双工 half-duplex and full-duplex: 使用半双工,链路两端的节点不能同时传输

实现:主体部分在网络适配器(Network Adapter),也叫网络接口卡(Network Interface Card,NIC)中实现

2.error detection, correction

EDC(Error Detection and Correction bits) = 错误检测和校正位(冗余)(并不完全可靠),EDC字段越大可靠性越大
D = 受错误检查保护的数据,可能包括header字段
接收节点收到D'和EDC',要检验发出节点的D和EDC是否和接收节点收到的D'和EDC'相同

接收方检测和纠正差错的能力称为前向纠错(Forward Error Correction,FEC)

2.1 Parity(奇偶校验)

只能检测单bit错误
偶校验:加一个bit,使1的总数为偶数
奇校验:加一个bit,使1的总数为奇数
二维三维奇偶校验:二维奇偶校验有行校验列校验,每一行每一列都有一个附加bit

image.png

2.2 Checksumming(校验和方法)

回顾:

  • 数据的字节作为16bit整数对待并求和,和的反码形成携带在报文段首部的因特网检验和,接收方对接受的数据(包括检验和)取反码,检测结果是否全1bit来检测检验和,
  • TCP和UDP对所有字段(包括首部和数据字段)都计算Internet Checksum,但运输层软件实现的差错保护较简单,相对弱。

2.3 Cyclic Redundancy Check CRC(循环冗余检测)

也称为多项式编码(polynomial code),把发送的bit串看作系数为0或1的多项式

  • 将数据位 D 视为二进制数,长度d bits
  • 选择 r+1 位模式(Generator),表示为G
  • 目标:选择r bit个CRC位,表示为R,使得
    • <D,R> 完全可被 G 整除(模 2)
    • 接收器知道G,除以<D,R>除以G。 如果余数不为零:检测到错误!
    • 可以检测所有小于 r+1 位的突发错误

image.png

计算CRC位R的操作如下:
要求D2rXORR=nGD·2^r\enspace XOR\enspace R = nG 两边同时取XOR,则
D2r=nGXORRD·2^r = nG\enspace XOR\enspace R
得出R=remainder(D2r/G) R = remainder(D·2^r/G) 因此把D看成多项式,乘2r2^r左移r位就后面加r个0,然后除以G

  • 中间是异或运算,也可看作没有借位操作的减法,最后得出校验码
  • 因为取模五位数G(r+1=5)的余数最多四位数(r=4),所以后面先加4个0(d+r bit模式)
  • 无限空间数据在有限空间的映射,映射的标签是唯一的 image.png

3. Multiple Access protocols 多路访问协议

两种“links”:

  • 点对点 point-to-point(PPP)
    • 用于拨号访问的 PPP
    • 以太网交换机和主机之间的点对点链路 HDLC(high-level data link control)
  • 广播 broadcast(共享线或介质)
    • 老式以太网
    • upstream HFC
    • 802.11 无线局域网(LAN)

广播信道:

  • 多个节点可以通过单个共享广播信道通信
  • 多个节点可能会同时传输帧:会被干扰
    • 如果节点同时接收两个或多个信号,则会在接收方发生碰撞(collision)
  • Multiple Access protocols 一种分布式算法,确定节点如何共享通道,即确定节点何时可以传输

三种类型的多路访问划分:

  • 信号划分 Channel Partitioning
    • 将通道划分为更小的“片段”(时隙、频率、代码),将片段分配到节点以供独占使用
  • 随机接入 Random Access
    • 通道未分类,允许冲突,有冲突再恢复
  • 轮流 Taking turns
    • 节点轮流,但要发送更多节点可能需要更长的轮次,有点类似轮流拿锁

3.1 Channel Partitioning 信道划分协议

TDMA(time division multiple access):时分多址(时间切片)

  • TDM将时间划分为时间帧(time frame),把每个时间帧划分为N个时隙(slot)
  • 每个station在每轮时间帧中获得固定长度的时隙(长度= pkt转换时间)
  • 未使用的slot空闲
  • 示例:6-station 局域网,1,3,4 个有 pkt,插槽 2,5,6 空闲

image.png

FDMA(frequency division multiple access):频分多址

  • 划分为频段的信道频谱
  • 每个station分配固定频段
  • 频带中未使用的传输时间进入空闲状态
  • 示例:6 站 LAN,1,3,4 具有 pkt,频段 2,5,6 空闲

image.png

CDMA(Code Division Multiple Access)码分多址

3.2 Random Access Protocols 随机接入协议

  • 当节点有数据包要发送时
    • 以全通道数据速率R传输。
    • 节点之间没有先验协调
  • 两个或多个传输节点 ➜ “碰撞”
  • 随机访问 MAC 协议指定:
    • 如何检测碰撞
    • 如何从冲突中恢复(如通过延迟的重传)
  • 随机访问 MAC 协议的示例:
    • ALOHA and slotted ALOHA
    • CSMA, CSMA/CD(D,detection), CSMA/CA(A,avoidence)

Carrier Sense Multiple Access (CSMA) 载波监听多路访问

  • 在传输之前先侦听:
    • 如果通道感测到空闲:传输整个帧
    • 如果检测到通道繁忙,推迟传输
  • collision(碰撞)仍可能发生:
    • 两个节点可能没有侦听到彼此的传播(一方发送的还在途中,如下图t1时刻另一边发送,而t0时刻发送的还在节点B进行传输)
    • 注意: 距离和传播延迟在确定碰撞概率中的作用

CSMA with Collision Detection(CSMA/CD)具有碰撞检测的载波多路监听访问

在短时间内检测到碰撞,碰撞传播中止,减少通道浪费

先听再讲--载波监听 边讲边听—进行检测 冲突处理--发送站检测到冲突后立即停止帧的发送,并且发一个简短的堵塞信号(称强化冲突信号,Jamming signal),通知网上各站已经发生冲突,本站及网上所有站都等待一段随机分布的时间,然后再按CSMA/CD方式重发该帧。

image.png

节点中的适配器(网卡NIC)角度:

  1. NIC从网络层接收数据报,创建帧
  2. 如果 NIC 感应通道空闲,则开始帧传输。如果 NIC 检测到通道繁忙,则等到通道空闲,然后传输。
  3. 如果 NIC 传输整个帧而没有检测到另一个传输,则 NIC 使用帧完成
  4. 如果网卡在传输时检测到另一个传输,则中止并发送干扰信号
  5. 中止后,NIC等待一个时间量,这个时间量由二进制指数避让决定

二进制指数退让(Binary Exponential Backoff)算法:

  • 第 m 次碰撞后,NIC 从 {0,1,2, ..., 2m12^m-1} 中随机选择 K。
  • 网卡等待 K·512 bit时间,返回到步骤 2 退避间隔更长,碰撞更多

指数退避举例 Exponential Backoff:

  • 第一次碰撞:从 {0,1} 中选择 K; 延迟为K·512 bit时间
  • 第二次碰撞后:从 {0,1,2,3}...
  • 在十次碰撞后,从 {0,1,2,3,4,...,1023} 中选择 K
  • 经过十六次碰撞,放弃传输。

4.LANs(Local Area Network 局域网)

4.1 MAC地址和ARP

4.1.1 MAC地址

  • 32 位 IP 地址:
    • 接口的网络层地址
    • 用于第 3 层(网络层)转发
  • MAC(或局域网或物理或以太网)地址:
    • 函数:用于“本地”获取从一个接口到另一个物理连接的接口的帧(相同的网络,在IP寻址意义上)
    • 48 位 MAC 地址(对于大多数 LAN)在 NIC ROM 中刻录,有时也可由软件设置
    • 例如: 1A-2F-BB-76-09-AD

手机有两个MAC地址,一个用于数据流量、一个用于WIFI

LAN 上的每个适配器(网卡)有唯一的 LAN 地址

4.1.2 ARP(Address Resolution Protocol)地址解析协议

知道主机的ip地址怎么找主机的MAC地址

局域网上的每个 IP 节点(主机、路由器)都有 ARP 表

  • ARP 表: 某些局域网节点的 IP/MAC 地址映射字段 <IP 地址;MAC 地址;TTL>
    • TTL(Time to Live生存时间):之后将忘记地址映射的时间(通常为 20 分钟)
  • ARP是“即插即用”(plug-and-play)的: 节点无需网络管理员干预即可创建其 ARP 表

发送到同一子网内主机过程:

  • A 想要将数据报发送到 B,而 B 的 MAC 地址不在 A 的 ARP 表中。
  • A 广播 ARP 查询帧,其中包含 B 的 IP 地址
    • dest MAC address = FF-FF-FF-FF-FF-FF-FF-FF (这是ARP固定的MAC广播地址)
    • 既包含网络层地址又包含链路层地址
    • 局域网上的所有计算机都接收 ARP 查询
  • B 接收 ARP 数据包,使用B 的 MAC 地址回复 A
  • 帧发送到 A 的 MAC 地址(单播 unicast )
  • 在其 ARP 表中缓存(保存)IP 到 MAC 地址对,直到信息变旧(超时)

发送到子网以外的过程:

  • 路由器的每一个接口都有一个IP地址、一个ARP模块和一个适配器, 所以每一个接口都有一个MAC地址
  • 假设A发送到B,经过路由器R
    • A网络层封装IP,含有源IP地址(A的IP地址)和目的IP地址(B的IP地址)
    • 链路层广播ARP查询帧,子网上的路由器返回其端口的MAC地址
    • A链路层封装数据报成帧,加上了源MAC(A的MAC)和目的MAC(R输入端口的MAC)
    • 传输到R,R输入端口提取数据报,传到网络层
    • R通过ARP获取到B的MAC地址,转发数据报
    • 输出端口封装成帧,源MAC为输出端口MAC,目的MAC为B的MAC

image.png

4.2 以太网 Ethernet

星型拓扑替代总线型拓扑
交换机替代集线器(hub)

发送适配器将 IP 数据报(或其他网络层协议数据包)封装在以太网帧中

4.2.1 以太网帧结构

  • 前同步码 Preamble(8个字节):前7个字节都是10101010用来唤醒接收适配器,最后一个字节10101011用来表示“大的要来了”
  • 目的地址(6字节)
  • 源地址(6字节)
  • 类型(2字节):表明网络层协议类型,ARP的类型编号也在这个字段中
  • 数据字段(46~1500字节):就是IP数据报
  • CRC循环冗余检测(4字节) image.png

4.2.2 以太网特点

  • 无连接(connectionless):发送和接收 NIC 之间无握手
  • 不可靠(unreliable):接收 NIC 不会向发送 NIC 发送 ACK 或 NACK
    • 传递到网络层的数据报流可能存在gaps(缺少数据报,因为不通过CRC校验就直接丢弃帧,里面的数据报也被丢了)
    • 如果应用程序使用TCP,则将填补gaps
    • 否则应用层将看到gaps

以太网的 MAC 协议:unslotted CSMA/CD

4.2.3 小结

  • 链路层寻址
  • 链路层流量
    • 在同一子网内
    • 跨子网
  • 局域网技术
    • 以太网、无连接且不可靠的服务
      • 帧结构(承载IP数据报作为有效载荷)
      • CSMA/SD,当节点与集线器连接时,共享广播链路

4.2.4 扩展知识

许多不同的以太网标准 :

  • 常见的 MAC 协议和帧格式
  • 不同的速度: 2 Mbps, 10 Mbps, 100 Mbps, 1Gbps, 10G bps
  • 不同的物理层介质:光纤、电缆

image.png

Manchester encoding:
因为高低电平转换不可能不需要时间,所以在中间就进行改变

image.png

  • 用于 10BaseT 每个位都有一个过渡
  • 允许发送和接收节点中的时钟彼此同步
  • 无需在节点之间使用集中式全局时钟

4.3 链路层交换机

二层交换机(工作在物理层、链路层)
三层交换机(物理层、链路层、网络层)

hubs(集线器):
物理层(没有协议的一层,是“dumb”的)中继器:

  • 一个bit进入接口,hub重新生成bit并向其他接口传输
  • 连接到集线器的所有节点都可能相互碰撞
  • 无帧缓冲
  • 集线器上没有 CSMA/CD:主机网卡检测到冲突要重传

链路层设备:比集线器更智能,发挥积极作用

  • 存储,转发以太网帧
  • 检查传入帧的 MAC 地址,在要转发帧时有选择地将帧转发到一个或多个传出链路
  • 透明 主机不知道交换机的存在
  • 即插即用,自学(plug-and-play, self-learning),交换机无需配置 image.png

交换机:允许多路同时传输

  • 交换机缓存数据包
  • 消除碰撞:每个传入链路上使用以太网协议,但没有冲突;A 到 A' 和 B 到 B' 同时切换,无碰撞
  • 全双工
  • 异质的链路:链路彼此隔离,速率介质可能不同
  • 管理

4.3.1 自学习(self-learning)

  • Q:交换机如何知道 A' 可通过接口 4 访问,B' 可通过接口 5 访问?

  • A:每个交换机都有一个交换机表,每个条目: <主机的MAC地址,到达该MAC的交换机接口,时间戳>,从时间戳开始,一段时间后(老化期aging time)会过期

  • Q:如何在交换机表中创建和维护条目? 类似于路由协议?

  • A:self-learning(自学习)

    • switch 了解哪些主机可以通过哪些接口访问
    • 收到帧时,交换机learn发送方的位置:传入LAN段
    • 在交换机表中记录发送方/位置对

4.3.2 交换机过滤和转发 frame filtering/forwarding

过滤表示应不应该转发,转发代表应该被转发到哪里

交换机收到frame时:

  1. 记录与发送主机相关联的链接
  2. 索引切换表采用MAC dest地址
  3. if在交换机表找到目的地的条目
    then {
    if dest 在帧到达的段上(因为不需要转发回局域网)
    then 丢弃frame (即过滤)
    else 在指定的接口上转发帧
    }
    else(frame目的地未知) flood(广播风暴:交换机广播该frame,向所有接口前面的输出缓存转发该帧的副本,然后依旧找不到,不断广播)

4.3.3 交换和路由

存储和转发设备

  • 路由器:网络层设备(检查网络层header)
    • 路由器维护路由表,实现路由算法
  • 交换机:链路层设备
    • 交换机维护开关表,实现过滤,学习算法

image.png

4.4 VLANs(Virtual Local Area Network)

支持 VLAN 功能的交换机可以配置为在单个物理 LAN 基础结构上定义多个虚拟 LAN(比如交换机1-8端口配成一个VLAN,9-16端口又能配成一个VLAN)

基于端口的VLAN:将交换机端口分组(按交换机管理软件)使单个物理交换机作为多个虚拟交换机使用

  • 需求和特点:流量隔离、避免交换机端口浪费、管理用户
    • 流量隔离:与端口 1-8 之间的帧只能到达端口 1-8
    • 还可以根据端点的 MAC 地址而不是交换机端口来定义 VLAN
    • 管理用户:动态成员资格:可以在 VLAN 之间动态分配端口
    • VLAN 之间的转发:通过路由完成(就像使用单独的交换机一样),供应商常常组合销售交换机和路由器

中继端口(trunk port):在通过多个物理交换机定义的 VLAN 之间传输帧

  • 交换机之间在 VLAN 内转发的帧不能是普通 802.1 帧(必须携带 VLAN ID 信息)
  • 802.1q 协议添加/删除了在中继端口之间转发的帧的附加标头字段
  • 初始以太网帧和802.1Q标签以太网VLAN帧的对比:

image.png

Trunk(干线)可以在下列情形下使用:

  • 交换机之间的连接
  • 路由器和交换机之间的连接
  • 服务器和交换机之间的连接

5. 总结

  • 数据链路层服务背后的原则:
    • 错误检测、纠正
    • 共享广播频道:多路访问
    • 链路层寻址
  • 各种链路层技术的实例化和实现
    • 以太网
    • 交换局域网、VLAN