链路层
1. 链路层服务
适配器/接口控制器/接口卡(Network Interface Card,NIC):实现链路层的硬件
- 成帧:链路层将网络层的数据报封装成帧,添加必要的首部信息,然后在物理层进行传输
- 链路接入:管理多个设备如何共享同一物理链路,确保数据的有效发送和接收
- 差错检测和纠正:检测并纠正传输过程中可能出现的错误
2. 差错检测和纠正
2.1 EDC
差错检测的方法:通过错误检测码(Error Detection Code, EDC),即在数据中添加额外的冗余信息,使得接收方能够验证数据的完整性
差错控制的方法:
- 自动重传请求(Automatic Repeat reQuest, ARQ):接收方检测到差错后,设法通知发送方重传
- 前向错误纠正(Forward Error Correction,FEC):接收方检测到错误后,可以自己定位到错误位置并进行修复
这些都是技术统称,而不是指某一个具体策略
2.2 奇偶校验码
单位奇偶校验:给d位数据附加1个奇偶校验位用于检测差错,只能进行奇数位错误检测,并且无法进行错误纠正
- 奇校验:d+1个比特中1的总数是奇数
- 偶校验:d+1个比特中1的总数是偶数
偶数个比特差错可能导致误判:考虑10101变成11001,依旧是奇数个1,而且差错经常是以突发的方式聚集在一起,测量表明单个奇偶校验位的检测准确度只有50%
二维奇偶校验:d位比特被划分为i行j列,每行每列都有1个奇偶校验位,此外用于校验的比特还拥有1个奇偶校验位
只能实现简单的错误定位和纠正,稍微复杂一点的还是无能为力
2.2 校验和
【检验和流程】
- 发送方对数据进行求和运算得到sum
- 发送方对sum进行取反生成checksum
- 接收方对数据进行求和运算:sum+checksum
- 如果和的任何比特是0,代表检测出错误
2.3 循环冗余码
基础
- 生成多项式:双方约定好的二进制多项式(最高位和最低位都是1)
- 二进制多项式:n位位串可以视为阶数为n-1的多项式,如1101表示
- 模2减运算:按位进行异或运算
- 模2除运算:余数小于除数则商0,否则商1
CRC-4:生成多项式是1001,代表
CRC-5:生成多项式是10010,代表
CRC-8:生成多项式是100000111,代表
CRC-16:生成多项式是11000000000000101,代表
流程
- 如果规定的生成多项式阶为r,则在d位数据后面加上r个零用于计算
- 将数据模2除生成多项式,得到的r位余数作为CRC冗余码
- 将r位余数替换先前的r个零
- 接收方将数据(原始d位数据+r位检验码)与相同的生成多项式进行模2除法
- 如果余数非零,代表检测出错误
CRC可以实现复杂错误的检测,但无法实现错误纠正
2.4 比较
| 方法 | 奇偶校验 | 检验和 | 循环冗余 |
|---|---|---|---|
| 能力 | 只能检测奇数位错误 | 可以检测任意数量错误 | 可以检测各种类型的错误 |
| 适用场景 | 简单低速通信 | 运输层 | 链路层 |
| 算法基础 | 二进制奇偶 | 二进制加法 | 二进制除法 |
3. 多路访问协议
3.1 信道与碰撞
信道(channel):用于传输数据的媒介或路径,可以是物理的(电缆、光纤)或无线的(无线电波)
碰撞(collide):在共享信道中多个节点同时传输帧,会导致信号干扰,造成数据丢失
多路访问协议(multiple access protocol)/ 介质访问控制协议(media access control protocol):用于解决多个设备共享同一通信信道时如何高效、公平地分配信道资源的协议,目的是提高信道利用率并减少碰撞机率,从而提高数据传输的效率
信道传输效率:假设有大量活跃节点且每个节点总有帧要发送,单个时隙成功传输的概率
效率
- 当传播时延接近0时,效率接近1,因为信号瞬时到达,所以不会发生碰撞
- 当传输时延接近无穷大时,效率接近1,因为在当前数据传输的过程中足以完成其他数据的全部传播,所以不会发生碰撞
| 协议 | 碰撞处理 | 吞吐量 |
|---|---|---|
| 信道划分协议 | 将一个信道划分为多个信道 | 限制在R/N |
| 随机接入协议 | 重传帧前需要等待一个随机时延 | 只有一个节点活跃时是R,但是如果有多个节点活跃时吞吐量会很低(甚至低于R/N) |
| 轮流协议 | 一次只让一个节点发送帧 | R,但是引入了轮流时延和等待时延 |
3.2 信道划分协议
| 信道划分协议 | 作用 |
|---|---|
| 时分多路复用(TDM) | 将信道按时间划分为多个时隙,每个设备在固定的时隙内发送数据 |
| 频分多路复用(FDM) | 将信道按频率划分为多个子信道,每个设备使用不同的频率 |
| 码分多址(CDM) | 每个设备使用唯一的编码序列发送数据,接收方通过解码来分离不同设备的信号 |
3.3 随机接入协议
3.3.1 纯 ALOHA
节点可以在任意时刻传输帧,如果检测到碰撞,就等待一个随机的时间量来重传
- 节点传输成功的前提是在上一个帧传播时间和下一个帧传播时间都没有其他节点传输
- 节点之间的重传是独立的
假设有N个节点且每个节点都有帧要发送
- 节点在当前时隙成功传输的概率是
- 当前时隙有节点成功传输的概率为
- 信道传输效率最大为
当N趋于无穷大时,最大效率,即纯ALOHA的效率是时隙ALOHA的一半
3.3.2 时隙 ALOHA
节点只能在时隙起点传输帧,如果检测到碰撞,就以概率p在后续每个时隙重传该帧
- 时隙必须大于帧传播时间,一般来说时隙时间 = 2 x 帧传播时间
- 当节点有新帧发送时,它会等到下一个时隙的起点才延迟发送
- 可以确保节点在时隙结束之前检测到碰撞,且只要发生了碰撞,就认为该时隙就没有传输任何有效数据
- 节点之间的重传是独立的
假设有N个节点且每个节点都有帧要发送
- 节点在当前时隙成功传输的概率是
- 当前时隙有节点成功传输的概率为
- 信道传输效率最大为
3.3.3 CSMA/CA
- 节点侦听信道,如果信道忙,推迟发送
- 如果信道空闲,节点随机选择一个退避时间,开启定时器
- 如果退避时间侦听到有节点发送,暂停定时器
- 定时器到时,节点开始发送数据
性质
- 做不到完全避免,因为信道被占用的信息可能需要经过信道传播时延才能传输到全部节点,而在该时延内其他节点并不知道信道忙碌,因此可能在这段时延中仍然会传输帧导致碰撞
- 随机退避时间确保所有站点有平等的机会竞争信道,避免某些站点总是优先发送数据
3.3.4 CSMA/CD
- 节点侦听信道,如果信道忙,推迟发送
- 如果信道空闲,节点立即发送数据
- 节点在发送时持续侦听信道,检测冲突
- 如果检测到冲突,节点停止发送
- 节点根据二进制指数退避算法选择重传等待时间
二进制指数退避算法:如果当前数据经历了n次碰撞,即需要第n次重传时,节点会等概率地从中选择一个值K,然后等待Kx时隙时间后重传
- 重传等待时间不能是固定时间量,否则两个信号将发生周期性碰撞,从而导致永远无法正确传输
- 重传等待时间不能太小,否则当碰撞帧较多且传输时间较长时,会不断积累碰撞
随着碰撞次数的变多,可供选择的K呈指数级增长,从而保证了碰撞次数和等待时间的平衡,假设时隙时间=512bit
- 第一次碰撞,节点从{0,1}等概率选择到K=1,然后等待512比特时间
- 第二次碰撞,节点从{0,1,2,3}等概率选择到K=3,然后等待1536比特时间
- 第三次碰撞,节点从{0,1,2,3,4,5,6,7}等概率选择到K=5,然后等待3072比特时间
- 以此类推直到没有碰撞发生
3.4 轮流协议
| 协议 | 描述 | 缺点 |
|---|---|---|
| 轮询(polling) | 其中一个节点被指定为主节点,以循环的方式轮询每个节点,以确定哪个节点可以发送帧以及发送多少帧 | 引入了轮询时延,主节点单点故障会导致整个信道不可用 |
| 令牌传递(token-passing) | 一个称为令牌的特殊帧在节点之间以某种顺序进行交换,只有持有令牌的节点可以发送帧,并且在发送完帧或无帧可发时立即将令牌传递给下一个节点 | 引入了令牌传递时延,令牌丢失或令牌传递失效导致信道不可用 |
4. LAN
4.1 MAC 地址
MAC 地址是网络设备的唯一硬件标识符,专用于数据链路层的通信
- 唯一性:全球唯一,由IEEE和设备制造商统一决定
- 永久性:通常固化在硬件中,无法轻易更改,但可通过软件临时修改
不能说每个设备都有一个 MAC 地址,而是他们的适配器/网络接口卡具有一个 MAC 地址
| 地址 | 对象 | 存在 | 意义 |
|---|---|---|---|
| IP地址 | 适配器,接口卡 | 逻辑的,可以随时随地更改 | 网络层寻址,不同局域网的设备互联 |
| MAC地址 | 接口 | 物理的,永久的 | 链路层寻址,同一局域网内的设备互联 |
格式:一共有48位,分为6个字节,每个字节用十六进制表示,用冒号(:)或连字符(-)分隔
- 广播地址(全1):FF-FF-FF-FF-FF-FF
- MAC 地址没有类似于 IP 地址中 0.0.0.0 的特殊地址,因为 MAC 地址是人为分配的
4.2 ARP
地址解析协议(Address Resolution Protocol, ARP):用于将 IP 地址解析为 MAC 地址的网络层协议,ARP 映射关系会缓存在设备的 ARP 表中
DNS和ARP非常相似,DNS将域名映射到IP地址,ARP将IP地址映射到MAC地址,只不过DNS的作用域是互联网,而ARP的作用域是局域网
流程
- ARP请求:如果当前设备的ARP表没有目的IP地址的映射记录,则设备会广播一个 ARP 请求,并将自己 MAC 地址作为源 MAC 地址
- 目标设备收到 ARP 请求后,会回复一个 ARP 响应,将自己的 MAC 地址作为源 MAC 地址
- 发送方收到 ARP 响应后,会将 IP 地址和 MAC 地址的映射关系存储到本地的 ARP 缓存表中
ARP是即插即用的,自学习的,因为ARP表是自动建立的,不需要管理员来配置
跨子网通信
- 设备检查检查目标 IP 地址发现不在同一子网中
- 设备解析网关路由器的 MAC 地址
- 设备使用网关路由器的 MAC 地址封装数据帧,并将数据发送给网关路由器
- 网关路由器负责将数据转发到目标子网
4.3 Ethernet
以太网:是一种广泛使用的局域网技术,定义了数据在局域网中如何格式化、传输以及在设备间进行通信,使用 CSAM/CD 协议处理碰撞
- 无连接:发送方和接收方不会进行握手和挥手
- 不可靠:接收方会进行CRC校验,但如果发现数据帧出错,只是丢弃该帧
- 无意识:以太网并不知道正在传输的是一个新帧,还是一个重传帧
以太网在局域网的重要性相当于因特网在广域网的重要性
以太网帧结构
| 字段 | 长度/字节 | 描述 |
|---|---|---|
| 前同步码 | 8 | 用于同步传输,确保数据帧的正确传输 |
| 目的地址 | 6 | 目标设备的MAC地址 |
| 源地址 | 6 | 源设备的MAC地址 |
| 类型 | 2 | 指示上层协议 |
| CRC | 4 | 用于检测数据帧中的错误 |
| 数据 | 46-1500 | 数据帧的有效载荷 |
5. 交换机
5.1 功能
转发表:记录了每个设备的 MAC 地址与其连接的交换机接口的映射关系
- 交换机只会从源接口学习 MAC 地址
- 每个条目都有一个生存时间
核心功能:缓存、过滤、转发
- 不存在源 MAC 地址:记录 MAC 地址与接口的映射关系
- 不存在目标 MAC 地址:向所有接口广播该帧
- 出接口等于入接口:丢弃该帧
- 出接口不等于入接口:转发该帧
- 老化期内没有接收到以该MAC地址作为目的的帧:删除缓存表项
交换机毒化:是一种对抗交换机的攻击,攻击者向交换机发送大量具有不同伪造MAC地址的帧,从而使得交换机表充斥这些伪造的MAC地址表项,没有为合法主机留下表空间
5.2 意义
主机和路由器根本意识不到交换机的存在,始终是对另一个主机或路由器寻址,而不是对交换机寻址
交换机的必要性
| 原因 | 没有交换机 | 有交换机 |
|---|---|---|
| 消除碰撞 | 所有数据都需要通过广播信道传播,所有接口共享同一个冲突域,容易发生冲突和碰撞,导致数据包丢失和重传 | 交换机使得每个接口都有独立的冲突域 |
| 数据泄露 | 所有设备都能接收到所有的数据帧,增加了数据泄露的风险 | 交换机通过学习和转发MAC地址,确保只有目标设备接收到相应的数据帧 |
| 管理困难 | 集线器只负责传输,没有过滤、转发等任何功能 | 交换机可以自学习,支持VLAN划分广播域 |
| 异质链路 | 集线器只支持相同类型的链路,难以适应不同的网络环境和需求 | 交换机可以转发到不同媒介的链路,从而实现链路隔离,提高整体带宽 |
对比三个网络核心设备
| 设备 | 层次 | 对象 | 地址 | 作用域 |
|---|---|---|---|---|
| 集线器(Hub) | 物理层 | 比特流(bit) | 物理地址 | 物理互连的设备 |
| 交换机(Switch) | 链路层 | 数据帧(frame) | MAC地址 | 局域网内设备互连 |
| 路由器(Router) | 网络层 | 数据报(datagram) | IP地址 | 广域网内设备互连 |
5.3 VLAN
传统交换局域网的局限性
- 泛洪现象:所有端口置于同一广播域,广播流量会传遍整个网络,导致带宽浪费和性能下降
- 缺乏灵活性:只使用一个交换机无法根据部门或功能划分局域网
- 安全性不足:所有设备在同一广播域中,容易发生数据泄露或未经授权的访问
虚拟局域网(Virtual Local Area Network, VLAN):将单一的局域网划分为多个逻辑局域网,每个逻辑局域网具有一个 VLAN 区域编号
- 交换机指定端口或设备所属的 VLAN 区域
- 使用 Trunk 链路在交换机间传输多个 VLAN 的流量
- 通过路由器或三层交换机实现不同 VLAN 间的通信
6. MPLS
多协议标签交换(Multiple Protocol Label Switching, MPLS):是一种高效的网络数据传输技术,通过在数据包前添加标签来简化转发过程,提升网络性能和灵活性
- 高效转发:标签查找和替换速度快于传统IP路由
- 路由灵活:允许网络管理员根据需求设置标签和接口的映射关系,从而指定更精细和灵活的路由
- 支持流量工程:可以利用实验字段实现流量分类和优先级处理
| 字段 | 长度/bit | 作用 |
|---|---|---|
| 标签 | 20 | 用于标识流量,是MPLS的核心 |
| 实验 | 3 | 用于流量工程中的优先级控制 |
| S | 1 | 表示该标签是否为栈中的最后一个标签 |
| TTL | 8 | 用于防止数据包在网络中无限循环 |
MPLS的工作原理
- 标签分配:入口路由器根据目的地址分配标签并添加到数据包
- 标签交换:中间路由器根据标签转发表进行转发,替换旧标签为新标签
- 标签移除:出口路由器移除标签,按IP地址转发数据包
6. 数据中心网络
数据中心的作用
- 为用户提供网页、搜索结果、电子邮件和流媒体视频等网络内容
- 用于特定数据处理任务的大规模并行计算基础设施
- 为企业和用户提供云计算服务
| 组件 | 描述 | 作用 |
|---|---|---|
| 刀片(blade) | 是数据中心中的主机/服务器 | 相当于蜂巢的工蜂,负责一切计算工作,运行应用程序和处理数据 |
| 机架(rack) | 是一组刀片的集合,主机被堆叠在机架上 | 为刀片提供电源、冷却和物理支撑 |
| 机架顶部交换机(Top of Rack,TOR) | 位于机架顶部的交换机,与机架上每个主机互连,与上层交换机互连 | 负责当前机架上网络流量的管理和转发 |
| 层次交换机(switch) | 与高层和底层交换机互联 | 用于机架间数据流转发,实施流量管理 |
| 边界路由器(border router) | 将数据中心网络与因特网相连 | 处理进出数据中心的流量,确保数据在内部网络和外部网络之间的有效传递 |
| 接入路由器(access router) | 与边界路由器互联,与层级交换机互联 | 划分数据中心网络为多个子网/局域网 |
| 负载均衡器(load balancer) | 位于单个局域网的入口点 | 通过计算,将用户请求分发到不同的服务器上,以实现负载均衡和高可用性 |
| 问题 | 描述 | 解决 |
|---|---|---|
| 扩展性问题 | 大企业的主机规模可能需要扩展到几万甚至几十万台 | 利用等级体系,高层设备可以连接多个低层设备,低层设备也可以连接多个高层设备 |
| 带宽问题 | 高层链路通常作为瓶颈链路,导致传播速率低、传播时延高, | 部署速度更快的交换机和路由器,将相关服务和数据放在尽可能近的地方,增加聚合容量 |
7. Web页面请求全过程
- Bob电脑在试图连网时,操作系统先生成一个DHCP请求报文,然后将这个报文封装在目的端口为67(DHCP服务器),源端口为68(DHCP客户)的UDP报文段中,接着又将这个报文段封装在具有广播目的IP地址
255.255.255.255和本地源IP地址0.0.0.0的IP数据报中,最后封装在具有广播目的MAC地址FF-FF-FF-FF-FF-FF和电脑源MAC地址00-16-D3-23-68-8A的以太网帧中 - 交换机接收到帧后,向所有出端口广播
- 当DHCP服务器接收到帧后,分解数据包获取到DHCP请求报文,DHCP服务器管理的CIDR地址块为
68.85.2.0/24,因此DHCP服务器分配空闲IP地址68.85.2.0.101给Bob电脑 - DHCP服务器生成包含这个IP地址和网络掩码以及DNS服务器的IP地址
68.87.71.226和网关路由器的IP地址68.85.2.1的DHCP ACK报文段,同上,依次被封装在UDP报文段、IP数据报和以太网帧中 - 由于交换机是自学习的,包含DHCP ACK的以太网帧的目的MAC地址是Bob电脑的源MAC地址,因此交换机知道从哪个端口转发该帧
- Bob电脑接收到帧后抽取得到DHCP ACK报文,电脑上的DHCP客户程序记录下本机的IP地址以及DNS服务器的IP地址,并在其IP转发表中添加了网关路由器的IP地址
- Dasi将谷歌的URL
www.google.com键入其Web浏览器的搜索栏,然后按下回车 - 操作系统生成一个DNS查询报文,将URL字符串放入DNS查询报文的问题字段中,然后封装在目的端口为53(DNS服务器)的UDP报文段中,接着又封装进目的IP地址为
68.87.71.226的IP数据报中 - 操作系统在进行上一步的同时,还生成了一个ARP查询报文,先封装进目的IP地址为
68.85.2.1的IP数据报中,再封装进具有广播目的MAC地址FF-FF-FF-FF-FF-FF的以太网帧中 - 网关路由器接收到包含ARP查询的帧,发现目的IP地址匹配到自身IP地址,因此生成了一个ARP回答报文,指示自己的MAC地址为
00-22-6B-45-1F-1B - Bob电脑得到默认网关路由器的MAC地址后,再将第8步得到的IP数据报封装成以太网帧(注意这里的目的IP地址是DNS服务器的,但是目的MAC地址是网关路由器的)
- 网关路由器接收到该帧后,抽取IP目的地址,然后根据其转发表和BGP协议决定转发到Comcast网络中的网关路由器,该路由器收到后再一次检查IP目的地址,根据其转发表决定转发到DNS服务器
- DNS服务器此时终于接收到DNS查询报文,然后在它的DNS数据库中查找名字
www.google.com对应的IP地址64.233.169.105,并生成一个DNS回答报文 - Bob电脑从DNS回答报文中抽取出谷歌服务器的IP地址,然后浏览器程序生成TCP套接字,与谷歌服务器中的TCP进行三次握手,先生成一个具有目的端口80(HTTP服务)的SYN报文段,封装进目的IP地址为
64.233.169.105的IP数据报,再封装进MAC地址为00-22-6B-45-1F-1Bd的以太网帧 - 由BGP协议和AS协议实现域间和域内路由,谷歌服务器分解得到与端口80相连的欢迎套接字,随后也生成一个TCP套接字,并封装进一个SYN-ACK报文段返回
- Bob电脑接收到SYN-ACK报文段并分解得到TCP套接字,从而进入连接状态
- Bob电脑借助TCP套接字,生成并发送包含要获取URL的HTTP GET报文,封装进一个TCP报文段
- 谷歌中的HTTP服务器从TCP套接字中读取到了HTTP GET报文,并生成一个HTTP响应报文,将Web页的字节内容放入HTTP响应报文的有效载荷中,最后发送进TCP套接字中
- Bob电脑上的浏览器程序获得了HTTP响应报文,抽取有效载荷中关于Web网页的html、css等数据,开始渲染,最后呈现一个Web网页在屏幕上
总结为以下步骤:
- 利用DHCP协议获取主机IP地址(1-6)
- 利用DNS协议获取域名服务器的IP地址,利用ARP协议获取网关路由器的MAC地址(7-10)
- 利用DNS协议获取目标服务器的IP地址(11-13)
- 利用BGP协议,AS协议和TCP协议建立TCP连接(14-16)
- 利用HTTP协议获取网页内容(17-19)



























