跳转至

计算机网络课程笔记

U1 计算机网络概述

  • 分类
    • 按传输技术:
      • 广播式网络
      • 单播、组播、广播
      • 点对点网络
    • 按分布范围
      • PAN:个人局域网(Personal Area Network)
      • LAN:局域网
      • 以太网(Ethernet)
      • 无线局域网(WLAN)
      • MAN:城域网
      • WAN:广域网
      • GAN:全球网
    • 按拓扑结构
      • 总线型
      • 星型
      • 环型
      • 网状型
  • 性能指标

    • 速率:bit/s or bps
    • 带宽 (Bandwidth):最大数据传输速率
    • 吞吐量 (Throughput):实际传输速率
    • 时延 (Delay)
      • 发送/传输时延:分组长度 / 发送速率
      • 传播时延:信道长度 / 电磁波在信道中的传播速度
      • 处理时延
      • 排队时延
    • 时延带宽积 (Delay-Bandwidth Product)
    • 抖动 (Jitter)
    • 可用率 (Availability)
    • 可靠性 (Reliability)
  • 对等层

    • PDU (Protocol Data Unit):对等层之间交换的数据单元
      • SDU (Service Data Unit):对等层向上一层提供的服务数据单元
        • 第n层实体向第n+1层实体提供服务
      • PCI (Protocol Control Information):协议控制信息
      • 分层分类:
        • 物理层:比特流
        • 数据链路层:帧
        • 网络层:数据报
        • 传输层:报文段
        • 应用层:消息
  • 协议:仅限对等层通信
  • 接口:同节点相邻层之间通信的逻辑接口,叫作服务器访问点 (SAP, Service Access Point)
  • 服务
    • 只有能够被上一层使用的功能才是服务
    • 服务原语:服务请求、指示、响应、确认(OSI模型)
    • 服务类型
      • 无连接服务 vs 面向连接服务
        • 无:IP, UDP,尽最大努力交付
        • 面向连接:TCP
      • 不可靠服务 vs 可靠服务
        • 正确性
      • 有应答服务 vs 无应答服务

U2 物理层

  • 奈奎斯特公式(无噪声信道):
    • 最大信号传输速率 \(C = 2H \log_2 N\)
      • \(H\):信道带宽(Hz)
      • \(N\):信号电平数,比如二进制信号\(N=2\)
      • 单位:bps
  • 香农公式(有噪声信道):
    • 最大信号传输速率 \(C = H \log_2 (1 + S/N)\)
      • \(S/N\):信噪比(Signal to Noise Ratio),使用分贝表示时:\(\text{SNR(dB)} = 10 \log_{10}(S/N)\)
  • 比特率:单位时间内传输的二进制位数,单位 bps
  • 波特率:单位时间内传输的码元(信号状态)个数,单位 baud
  • 比特率 = 波特率 × log2(N),其中N为每个码元的状态数

U3 数据链路层

  • 基本流程:
    • 发送端:从网络层接收数据包(通常称为IP数据报),将其封装成一种称为“帧”(Frame)的结构化数据单元,然后将帧转换为比特流,交由物理层通过传输介质发送
    • 接收端:从物理层接收比特流,将其重新组装成帧,进行必要的检查,最后提取出网络层数据包并向上传递。
  • 基本问题
    • 封装成帧:将物理层连续的比特流划分为离散的帧
    • 透明传输:屏蔽底层物理传输的差异性,向网络层提供统一的服务接口
    • 差错控制
    • 流量控制
  • 链路
    • 类型
      • 物理链路:节点到节点的实际传输介质
      • 逻辑链路:物理链路+实现通信协议的硬件和软件
    • 信道类型
      • 点对点链路
      • 广播信道:多个节点共享同一个通信介质,需要介质访问控制
  • 帧 (Frame):数据链路层的数据传输单元,是第二层的协议数据单元(PDU)

    • 帧头 (Header):源和目的地址等控制信息
    • 帧尾 (Trailer):错误检测校验序列
    • 数据字段 (Data Field)
  • 数据链路层服务

    • 无确认的无连接服务:“尽力而为”,错误交给上层处理
      • 实时应用、低误码率环境
    • 有确认的无连接服务:尽可能在最低的层次解决问题,不在网络层重传
      • 不可靠信道
      • ACK确认帧回传
    • 有确认的面向连接服务:建立连接、数据传输、断开连接
      • 长距离且不可靠的链路

差错控制

  • 错误类型
    • 随机错误:单个比特随机出错
    • 突发错误:差错成片出现,影响连续的一批比特
  • 差错码类型
    • 检错码
      • 奇偶校验码
        • 只能检测出所有单个比特错误,偶数不行
        • 突发错漏检率约为50%
      • 循环冗余校验码 (CRC)
        • 数据链路层只使用了CRC的检错功能
    • 纠错码
      • 海明码
  • 差错控制策略
    • 自动请求重传 (Automatic Repeat reQuest, ARQ):检测到错误后请求重传
      • 适合误码率不高、且双向通信延迟可接受的信道
    • 前向纠错 (Forward Error Correction, FEC):发送冗余信息以便接收方纠正错误
      • 冗余信息足够,适合高误码率或单向通信信道

协议描述

协议1:乌托邦式的单工协议 (Utopia)

  • 信道完全理想,不丢包,不错包。
  • 接收方处理速度无限快,缓冲区无限大。
  • 数据单向传输(单工)

协议2:无错信道上的单工停-等协议 (Stop-and-Wait)

  • 接收方的处理速度有限,缓冲区有限。

协议3:有错信道上的单工停-等协议 (Stop-and-Wait ARQ)

  • 信道利用率:
    • \(U = \frac{T_f}{T_f + 2T_{prop}}\)
      • \(T_f\):帧传输时间
      • \(T_{prop}\):单程传播延迟
    • 平均重传次数:
      • \(E[A] = \frac{1}{1-P_f}\)
      • \(P_f\):帧出错概率

协议4:1比特滑动窗口协议(停-等协议的变体)

  • 捎带确认:发送的数据帧中捎带对之前收到的数据帧的确认信息,节省了单独发送确认帧的开销
  • 发送方策略:发送帧0,启动定时器。只有收到对帧0的确认后,才发送帧1。
  • 接收方策略:期待帧0。如果收到帧0,发送ACK0(期待帧1),并将接收窗口向前滑动。

  • 问题:“同时发送”场景下容易出现死锁

    • 发送方和接收方同时发送帧0,导致双方都在等待对方的确认
    • 超时重发、多次传输会降低信道利用率

协议5:回退N帧(Go-Back-N)

  • 发送窗口 (\(W_T\)):允许发送但未被确认的帧的最大数量。对于n比特的序号,发送窗口尺寸必须满足 \(W_T \le 2^n - 1\)
    • 为什么不能是 \(2^n\)? 如果 \(W_T = 2^n\)(例如3比特序号,窗口为8),发送方发送0-7号帧后,如果所有ACK丢失,发送方超时重发0号帧。此时接收方(已正确接收0-7,期望新的0号帧)无法区分这个重发的“旧0”是“新0”还是“旧0”,导致接收错误数据。
  • 接收窗口 (\(W_R\)):\(W_R = 1\)。这意味着接收方只接收按序到达的帧。任何乱序帧(即使是正确的)都会被直接丢弃。

  • 在误码率较高的链路上效率极低,因为一个坏帧会导致大量后续正确帧被丢弃重传。

协议6:选择重传(Selective Repeat)

  • \(W_T + W_R \le 2^n\)
    • 在通常实现中,取 \(W_T = W_R = 2^{n-1}\)
  • 否定确认(NAK):接收方对每个正确接收的帧发送独立确认ACK,对于丢失或损坏的帧发送NAK,通知发送方重传该帧

    • 对于同一个丢失帧,发送方只会被请求重传一次,避免了不仅浪费带宽还可能导致发送方多次重传同一帧的低效行为
  • 接受逻辑:

    • 如果是期望的帧(seq == frame_expected):上交网络层,并检查缓冲区中是否已有后续帧,一并上交,滑动接收窗口。
    • 如果是窗口内的乱序帧(between(...)):存入缓冲区 in_buf,标记 arrived 为真。
    • 如果是早于窗口的帧(重复帧):发送ACK(为了让发送方推进窗口),但丢弃数据。

协议验证

  • 有限状态机 (Finite State Machine, FSM)
  • Petri网模型

U4 介质访问子层

排队论

假设一个信道系统符合 M/M/1 排队模型:

  • M (Markovian Arrivals): 数据帧的到达服从泊松分布,意味着到达间隔服从指数分布。设平均到达率为 \(\lambda\)(帧/秒)。
  • M (Markovian Service Times): 数据帧的服务时间(即传输时间)也服从指数分布。设每帧平均长度为 \(1/\mu\)(比特/帧)。
  • 1: 系统中只有一个服务器,即信道一次只能传输一个数据帧。

设信道总容量为 \(C\)(bps),那么信道的服务率(处理能力)为 \(\mu C\)(帧/秒),一个数据帧在系统中的平均时延 \(T\)(包含在队列中的等待时间 + 数据发送时间)为:$\(T = \frac{1}{\mu C - \lambda}\)$

例如,FDM(频分多路复用)的子信道时延 \(T_{FDM}\):$$T_{FDM} = \frac{1}{\mu \frac{C}{N} - \lambda / N} = \frac{N}{\mu C - \lambda} = N \times T $$,为动态共享单信道模式的 N 倍。这表明,在 动态分配 中,如果只有 1 个用户有数据发送,它可以占用全部带宽 \(C\),从而以最快速度完成传输。

信道划分协议

  • 静态分配:用户之间互不干扰,但资源利用率低
    • 频分多路访问(FDMA)
    • 时分多路访问(TDMA)
    • 码分多路访问(CDMA)
  • 动态分配:用户竞争信道,资源利用率高,但可能发生冲突
    • 随机访问协议(竞争)
    • 受控访问协议(无竞争)

随机访问协议(竞争)

  • ALOHA

    • 纯ALOHA:想发就发
      • 冲突窗口:2倍帧时长 \(2T_0\),即帧开始发送前后各 \(T_0\) 时间内若有其他帧开始发送则发生冲突
      • 碰撞时双方均需随机等待一段时间再重传
      • 吞吐量: \(S = G e^{-2G}\),最大值 \(S_{max} = \frac{1}{2e} \approx 0.184\),发生在 \(G=0.5\)
    • 时隙ALOHA
      • 时间划分为离散时隙,时隙长度等于一个帧时 \(T_0\)。规定站点只能在时隙的开始时刻发送数据
      • 冲突窗口:1个时隙 \(T_0\)
      • 吞吐量: \(S = G e^{-G}\),最大值 \(S_{max} = \frac{1}{e} \approx 0.368\),发生在 \(G=1\)
  • 载波监听多路访问(CSMA, Carrier Sense Multiple Access):“先听后说” (Listen Before Talk)

    • 1-坚持式:信道忙则持续监听,直到空闲
      • 信道空闲瞬间容易引发冲突
    • 非坚持式:信道忙则等待随机时间后重试
      • 可能增加信道空闲时间
    • p-坚持式:信道闲,则以概率p发送,1-p等待;信道忙,则持续监听
      • 避免信道空闲时大量节点同时发送

还有:

  • CSMA/CD(冲突检测):发送数据时监听信道,检测到冲突立即停止发送
  • CSMA/CA(冲突避免):通过信道预约(RTS/CTS)避免冲突,常用于无线网络

CSMA/CD(CSMA with Collision Detection)

“边说边听” (Listen While Talk)

工作原理
  1. 发送前侦听: 使用 1-坚持算法侦听信道。
  2. 边发边听: 在发送数据的同时,检测信道上的电压变化。如果信号电压超过阈值(两波叠加),说明发生了冲突。
  3. 冲突停止: 一旦检测到冲突,立即停止发送数据
  4. 强化干扰(Jamming): 发送人为干扰信号(Jam Signal,通常 32-48 比特),确保网络上所有站点(包括远端站点)都能检测到冲突发生。
  5. 指数退避: 执行二进制指数退避算法,等待随机时间后重试。
争用期与最小帧长 (2τ)

CSMA/CD 有一个物理限制:发送站必须在发送完一帧之前检测到冲突。如果帧太短,发送站可能在冲突信号传回之前就已经认为发送成功了。

\(\tau\) 为单程传播时延。最坏情况是:

  • \(t=0\):A 站发送。
  • \(t=\tau - \epsilon\):信号即将到达 B 站,B 站尚未检测到,于是 B 站也开始发送。
  • \(t=\tau\):冲突在 B 处发生。
  • \(t=2\tau - \epsilon\):冲突信号传回 A 站。

因此,A 站必须至少发送 \(2\tau\) 时间的数据,才能保证检测到所有的冲突。\(2\tau\) 被称为争用期孔径时间。最小帧长 = 数据传输率 × \(2\tau\)

二进制指数退避算法
  1. 确定基本退避时间为 \(2\tau\)
  2. 定义重传次数 \(k\)\(k = \min(\text{重传次数}, 10)\)
  3. 从整数集合 \([0, 1, \dots, 2^k - 1]\) 中随机取一个数 \(r\)
  4. 等待时间 \(= r \times 2\tau\)
  5. 若重传达 16 次仍不成功,丢弃该帧并报错。

随着冲突次数增加,随机选择的范围指数级扩大(\(2, 4, 8, \dots, 1024\))。这种机制能自适应地分散高负载下的流量,具有极强的鲁棒性。

信道利用率与问题

信道利用率:$\(S = \frac{1}{1 + 2e \cdot a}\)$

其中,\(a = \frac{\tau}{T_{frame}}\)\(\tau\) 为单程传播时延,\(T_{frame}\) 为帧传输时延。

  • CSMA/CD适合有线局域网,不适合长距离或超高带宽的网络环境,比如WLAN(无线局域网)
    • 无法检测冲突: 无线网卡通常是半双工的,发送时信号太强,无法检测到远端的微弱冲突信号
    • 暴露站问题:某些站点接收到其他站点的发送信号,导致自身因可能的冲突(实际不冲突)“不敢”发送信号
    • 隐蔽站问题:某些站点无法听到其他站点的信号,可能在共同的接受节点发生冲突

MACA(Multiple Access with Collision Avoidance)

提出用 RTS/CTS 握手协议解决问题。

  • RTS/CTS机制:预约
    • RTS(Request to Send):A 向 B 发送短帧 RTS,包含预计传输数据的时间长度
    • CTS(Clear to Send):B 接收到 RTS 后,向 A 发送短帧 CTS,表示同意传输
    • 尽可能避免冲突,站发送完成后需要等待一个短暂的时间间隔(InterFrame Space, IFS),但是RTS 帧本身仍可能冲突

受控访问协议(无竞争)

  • 位图协议:竞争期分为 \(N\) 个时隙(\(N\) 为站点数)。如果站点 \(j\) 想发送,就在第 \(j\) 个时隙填入 '1'。一轮过后,所有人都知道谁要发送,然后按顺序传输
  • 二进制倒计数协议:直接利用站点的二进制地址进行仲裁,每一轮比较地址的一个比特位,直到决出胜负
  • 令牌传递:数据帧随着令牌在节点间循环传递
  • 自适应树遍历(结合ALOHA和位图)
    • 将有冲突的站点划分为子组,分别进行竞争,直到决出胜负
      • 时隙 0: 根节点下的所有站点(全网)尝试发送。
      • 时隙 1: 若时隙 0 冲突,则仅允许左子树的站点发送
        • 若依然冲突,则递归左子树

以太网(Ethernet)

构建规则:5-4-3

  • 5:最大允许连接的中继器数
  • 4:最大允许连接的网段数
  • 3:允许连接的有信号源网段数

以太网帧格式

  • DIX V2
    • 前导码(8字节):7字节 10101010 + 1字节 10101011,最后1字节表示帧开始定界符
    • 帧头(14字节)
      • 目的MAC地址(6字节)
      • 源MAC地址(6字节)
      • 类型字段(2字节):表示上层协议类型,如 IPv4 (0x0800)、ARP (0x0806)、IPv6 (0x86DD) 等
    • 数据字段(46-1500字节):用户数据
      • 以太网规定最短有效帧长为64字节(不含前导码),扣除帧头和帧尾后,数据字段最小为46字节
      • 如果数据不足46字节,则需要填充
    • 帧尾(4字节):循环冗余校验码 (CRC)
  • IEEE 802.3
    • 帧头没有“类型”字段,使用数据字段的前几个字节封装LLC头
  • 网卡区分DIX和802.3帧:检查帧头第13、14字节的值
    • 小于等于1500表示802.3帧,为长度字段
    • 大于1536表示DIX帧,为类型字段
    • 中间的值保留备用

以太网分代

  • 标准以太网 (10Base-T)
    • IEEE 802.3 标准 -> 10 Mbps
    • 半双工模式下使用 CSMA/CD 介质访问控制
  • 快速以太网 (100Base-T)
    • IEEE 802.3u 标准 -> 100 Mbps
    • 帧格式不变,位时间100ns->10ns
  • 千兆以太网 (Gigabit Ethernet)
    • IEEE 802.3z + IEEE 802.3ab 标准 -> 1 Gbps
    • 半双工模式下引入的机制
      • 载波扩展:保持最小逻辑帧长为64字节不变(为了兼容软件),但将物理发送的“载波事件”强行延长到512字节(4096位时间)
      • 帧突发:允许站点连续发送多个帧以提高效率
    • 全双工模式下CSMA/CD、载波扩展和帧突发都被禁用
  • 10千兆以太网 (10 Gigabit Ethernet)
    • IEEE 802.3ae 标准 -> 10 Gbps
    • 全双工模式,禁用CSMA/CD

交换式以太网

  • 共享式以太网的局限性
    • 冲突域扩大
    • 半双工限制:设备不能同时发送和接收数据
    • 安全性差:数据在共享介质上广播
    • 不支持多速率
  • 网络互连设备
    • 中继器/集线器(Hub):物理层设备,信号放大转发
      • 扩大了冲突域,设备共享带宽,效率低
    • 网桥/交换机(Switch):数据链路层设备,基于MAC地址转发帧
      • 将每个端口隔离为一个独立的冲突域,但所有端口仍属于同一个广播域
    • 路由器(Router):网络层设备,基于IP地址转发数据包
      • 每个端口都是一个独立的广播域

网桥/交换机(Switch)

交换机的每个端口都是一个独立的冲突域。

  • 站表(MAC Address Table):MAC地址到端口的映射表
  • 逆向学习:交换机通过检查收到的帧的源MAC地址,学习并更新站表,如(A, Port X, Timestamp)
  • 转发决策:
    • 单播:如果目的MAC地址在站表中且不在入端口,则转发到对应端口
    • 泛播:如果目的MAC地址为广播地址或多播地址,或者目的MAC地址不在站表中,则转发到除入端口外的所有端口
    • 丢弃:如果目的MAC地址在站表中且在入端口,则丢弃该帧
  • 交换方式
    • 存储-转发:接收完整帧后进行FCS(帧校验序列)校验,错误帧丢弃
    • 直通式:读到目的MAC地址(前6字节)就立即转发,降低延迟,但无法检测错误
    • 无碎片直通法:接受前64字节后开始转发,因为大多数冲突发生在前64字节内

IEEE 802.1D 生成树协议 (STP)

为了提高可靠性,网络设计通常会有冗余链路(环路),但是交换网络中的环路会导致广播风暴(广播帧在环路中无限循环)和MAC地址表震荡(同一个源MAC地址不断从不同端口出现,导致交换机无法稳定学习)。

  • 算法步骤
    • 选举根桥(Root Bridge):所有交换机通过交换BPDU(桥协议数据单元)选举出一个具有最低桥ID的交换机作为根桥
    • 选举根端口(Root Port):每个非根桥选择一条到根桥的最短路径作为其根端口
    • 选举指定端口(Designated Port):每个网络段选择一个离根桥最近的交换机端口作为指定端口,负责转发该段的流量
    • 阻塞冗余端口:非根端口和非指定端口进入阻塞状态,不转发数据帧,只监听控制帧
    • 一旦主链路断开,STP会重新计算,激活备份端口

无线局域网 (WLAN, IEEE 802.11)

物理拓扑与组件

  • 站点(Station, STA):任何具有802.11无线接口的设备,是无线网络的原子单元
    • 比如:笔记本电脑、智能手机、平板电脑、无线网卡等
  • 接入点(Access Point, AP):连接有线网络的无线站点,充当桥接器
    • 比如:无线路由器中的无线AP

网络连接模式

  • 无线路由器模式:家庭
    • 无线路由器(集成)
      • 无线AP:Wi-Fi接入
      • 以太网交换机:有线LAN口
      • 路由器:WAN口,连接宽带调制解调器(Modem),执行NAT(网络地址转换)、DHCP(动态主机配置协议)服务器、DNS代理等网络层功能
  • 无线AP + 无线控制器(AC)模式:校园、企业
    • POE交换机
    • 无线控制器

802.11 标准的发展

无线网络与有线网络有着本质的区别。在无线环境中,信号在开放空间传播,衰减严重,且无法实现全双工的碰撞检测。

  • 802.11b: 2.4GHz, 最高11 Mbps, 使用HR-DSSS。
  • 802.11a: 5GHz, 最高54 Mbps, 引入了OFDM (正交频分复用) 技术,大大提高了频谱利用率。
  • 802.11g: 2.4GHz, 最高54 Mbps, 兼容11b,但在2.4GHz频段使用了OFDM。
  • 802.11n (Wi-Fi 4): 2.4/5GHz, 最高600 Mbps, 引入了 MIMO (多入多出) 技术,利用多天线同时传输数据流。
  • 802.11ax (Wi-Fi 6): 引入了 OFDMA(将信道切分为更小的资源单元RU,支持多用户并发)和 BSS Coloring(BSS着色,解决高密度部署下的同频干扰问题)。

802.11 的服务体系

  • 站点服务(Station Services):在所有802.11设备(包括STA和AP)上运行,主要处理点对点的通信安全与控制
    • 身份确认服务
    • 取消身份确认服务
    • 隐秘性服务
    • 数据传输,使用CSMA/CA
  • 分布式系统服务(Distributed System Services):用于管理STA在扩展服务集(ESS)中的移动性和连接状态,通常由AP和DS协同提供

    • 连接服务(STA-AP连接)
    • 重连接服务
    • 取消连接服务
    • 分布服务
    • 集成服务
  • 网络拓扑结构

    • 基本服务集(BSS):由一个AP和若干关联的STA组成,是WLAN的最小构建块
    • 扩展服务集(ESS):由多个BSS通过有线分布系统(DS)连接而成,允许STA在不同BSS间漫游(自由移动而不改变其IP地址)

802.11 MAC层的CSMA/CA (载波监听多路访问/冲突避免)

无线环境中,无线网卡的发送功率远大于接收灵敏度,发送信号会淹没接收信号,导致无法实现碰撞检测(CD),即CSMA/CD不可行。

  • 核心机制
    • 帧间间隔 (IFS, InterFrame Space):SIFS < PIFS < DIFS
      • 站点必须先监听信道空闲达到DIFS时间,才能准备发送;
      • 如果只需要等待SIFS(如回ACK),则肯定能抢在等待DIFS的站点之前
    • 随机退避
      • 退避执行时机:信道忙/刚发完1帧后
      • 信道空闲->开始计时;信道忙->暂停计时
    • 虚拟载波监听 (Virtual Carrier Sensing)与 网络分配向量 (NAV, Network Allocation Vector)
      • 每个数据帧的MAC头部都有一个 Duration (持续时间) 字段,声明“我要占用信道多久”(包含后续的ACK时间)
      • 接收方收到帧后,更新自己的NAV,在 NAV 指定的时间内不发送数据
    • RTS/CTS

802.11 帧结构的特殊性:4个地址字段

To DS From DS 地址1 (接收端 RA) 地址2 (发送端 TA) 地址3 (目的地址/源地址/BSSID) 地址4 (源地址/目的地址(仅WDS)) 应用场景
0 0 DA (目的) SA (源) BSSID N/A Ad-hoc网络或管理帧。直接通信。
0 1 DA (目的) BSSID (AP) SA (源) N/A 下行: AP发给手机。TA是AP,但SA是发数据的服务器。
1 0 BSSID (AP) SA (源) DA (目的) N/A 上行: 手机发给AP。RA是AP,但DA是目标服务器。
1 1 RA (接收AP) TA (发送AP) DA SA WDS (无线桥接): 两个AP之间传输数据。需要同时保留原始源SA、最终目的DA、以及当前跳的收发AP地址。

总结:

  1. 在有线侧,从CSMA/CD的复杂冲突检测到全双工交换的演变,速度不断突破物理极限,通过载波扩展等技术解决光速带来的延迟限制。
  2. 在无线侧,受限于物理环境,协议变得更加复杂。CSMA/CA、NAV虚拟载波监听、RTS/CTS握手以及四地址格式,都是为了在不可靠、半双工的无线介质上构建可靠链路而做出的精巧设计。

虚拟局域网 (VLAN)

  • 控制广播风暴:广播帧被限制在VLAN内部,不会扩散到整个物理网络
  • 增强安全性:不同VLAN之间的部门无法直接二层通信,必须通过路由器(三层设备)并在其上实施访问控制列表(ACL)
  • 灵活管理:员工搬到另一楼层,只需更改交换机配置将其端口划入原VLAN,无需重新布线

  • 划分方法

    • 基于端口:管理员指定交换机端口所属VLAN,用户无法通过改ip混入不同VLAN,但是用户换端口需要重新配置交换机
    • 基于MAC地址:交换机维护MAC-VLAN映射表,自动识别用户并划分正确VLAN,但可能降低交换机转发性能
    • 基于IP/协议:效率最低,因为交换机需要解包检查三层头部,侵占了路由器的功能

IEEE 802.1Q 帧标记

当VLAN跨越多个交换机时,交换机之间必须通过标签化的VLAN帧进行通信。

  • 方法:在源MAC地址和类型/长度字段之间插入4字节的VLAN标签(Tag)
    • 最大以太网帧长:1518->1522字节
    • Tag格式
      • TPID (Tag Protocol Identifier, 2字节):固定为0x8100,表示这是一个802.1Q VLAN标签
      • TCI (Tag Control Information, 2字节)
        • Priority (3位):帧优先级,用于QoS
        • CFI (1位):规范标志,0表示以太网帧,1表示令牌环帧
        • VLAN ID (12位):VLAN标识符,范围0-4095

端口行为

  • Access端口:连接终端设备,发出的帧不带标签
    • 交换机在接收PC帧时打上Tag(Ingress),在发给PC时剥离Tag(Egress)
  • Trunk端口:连接交换机之间,传输多个VLAN的帧,Trunk帧通过时保留Tag(Ingress)

U5 网络层

  • 屏蔽底层异构物理网络(如以太网、光纤、无线局域网等)的差异
  • 向传输层提供统一、通用的服务接口
  • 在复杂的网络拓扑中计算出从源主机到目的主机的最佳路径

服务模型

  • 无连接服务(数据报网络)
    • 独立路由,乱序到达,尽力而为
  • 面向连接服务(虚电路网络)
    • 建立连接,按序到达,可靠传输
特性 数据报网络 (Datagram Network) 虚电路网络 (Virtual-Circuit Network)
连接建立 不需要。随时可以直接发送数据。 必须。通信前需三次握手建立虚电路。
寻址方式 每个分组包含全长的源和目的地址。 每个分组仅包含短小的虚电路号 (VC ID)。
状态信息 路由器不保留连接状态,无记忆。 路由器必须为每个连接维护状态表项。
路由选择 每个分组独立路由,路径可能动态变化。 连接建立时选定路径,后续所有分组沿此路径传输。
故障影响 故障路由器仅影响其缓冲区内的分组,后续分组自动改道,影响小。 经过故障路由器的所有虚电路中断,连接必须重建。
服务质量 难以保证 (Best-Effort)。 易于保证,可预留资源。
拥塞控制 较难,需依靠端系统配合。 较易,可通过准入控制 (Admission Control) 防止过载。

路由选择算法

  • 代价:跳数(Hop Count)、链路带宽的倒数、传播时延、链路的可靠性
  • 最优化原则:如果路由器 \(J\) 位于从路由器 \(I\) 到路由器 \(K\) 的最优路径上,那么从 \(J\)\(K\) 的最优路径也必然是这条路径的一部分。
  • 汇集树(Sink Tree):对于网络中的任意目的节点,从所有其他节点出发到达该目的节点的最优路径集合,构成了一棵以该目的节点为根的树
    • 无环

最短路径算法(Dijkstra)

收敛快,全局最优,需要完整网络拓扑信息。

距离矢量路由算法 (Distance Vector Routing)

基于Bellman-Ford方程的分布式算法,也是RIP协议的基础。每个路由器仅与直接相连的邻居交换路由信息。

  • 路由表维护
    • 距离(Metric):到达目标的最小代价(如跳数)
    • 下一跳(Next Hop):到达目标的下一跳路由器
    • 更新:\(D_{self}(Z) = \min { C(self, X) + D_X(Z) }\)
  • 问题:无穷计算,“好消息传得快,坏消息传得慢”
    • 可能形成路由环路,互相欺骗导致计数到无穷
  • 解决:
    • 水平分割(Split Horizon):禁止路由器将从某邻居学到的路由信息再发回该邻居
    • 毒性逆转(Poisoned Reverse):将从某邻居学到的路由信息发回该邻居,但将距离设置为无穷大

为解决DV收敛慢和路由环路问题而设计。在OSPF和IS-IS协议中被广泛使用。

  • 每个路由器维护完整的网络拓扑图,通过泛洪(flooding)方式将链路状态信息传播给所有路由器
  • 步骤
    • 发现邻居,测量代价
    • 构造LSP(Link State Packet):每个路由器构造一个包含自己ID、邻居列表及链路代价的分组
    • 泛洪:通过序列号(Sequence Number)和生存时间(Age)机制,确保LSP能够无环、可靠地传播到全网每一个路由器
    • 计算最短路径:每个路由器使用Dijkstra算法计算以自己为根节点的汇集树

大规模网络路由与特殊路由技术

层次路由(Hierarchical Routing)

  • 将网络划分为多个自治系统(Autonomous System, AS),包括区域、簇、区等
  • AS之间使用边界网关协议(BGP, Border Gateway Protocol)进行路由信息交换
  • 优点:减少路由表规模,降低路由更新开销
  • 缺点:可能导致次优路径选择,增加路由复杂性
  • 最佳层数:对于 \(N\) 个节点的网络,最优的层级数是 \(\ln N\),此时每个路由器的路由表项数约为 \(e \cdot \ln N\)
  • 现实互联网的分层挑战
    • 策略控制:路由选择不再仅仅基于“最短路径”或“最大带宽”,而是必须服从复杂的策略规则(例如,“尽量不经过竞争对手的AS”)
    • 信息隐藏:出于安全和商业隐私的考虑,AS不愿意向外部透露其内部网络的详细拓扑结构

广播与组播路由

  • 广播路由:将分组发送给网络中所有节点
    • 逆向路径转发(RPF, Reverse Path Forwarding):
      • 每个路由器检查收到的广播分组的源地址,判断该分组是否是通过到源地址的最短路径到达的
      • 如果是,则将分组转发给所有其他接口;否则丢弃
  • 组播路由:将分组发送给一组特定的节点
    • 生成树构建

移动主机路由(Mobile Routing)

打破了“IP地址对应固定地理位置”的假设。

  • 移动IP(Mobile IP)
    • 主要组件
      • 家乡代理(Home Agent, HA):位于移动主机的家乡网络,负责维护移动主机的当前位置
      • 外地代理(Foreign Agent, FA):位于移动主机当前所在的外地网络,协助移动主机接收数据
        • 转交地址(Care-of Address, CoA):移动主机在外地网络的临时IP地址
    • 工作原理:CN -> HA -> MN -> CN 三角通信
      • 移动主机在家乡网络注册其CoA给HA
      • HA接收到通信对端(CN)发往移动主机的分组后,将其封装(tunneling)并转发到FA(即CoA)
      • FA接收到封装分组后,解封装并交付给移动主机
    • 问题:即使CN和MN在同一个房间(但连接不同网络),数据也要绕回HA(可能在地球另一端)
    • 优化:通过“路由优化”,HA可以告知CN移动主机的当前CoA,后续CN可直接向CoA发送隧道封装的数据,从而“打通”三角形的底边。

Ad Hoc网络路由(AODV, Ad hoc On-Demand Distance Vector)

在没有固定基础设施的Ad Hoc网络(MANET)中,所有节点都是移动的路由器。

  • 路由协议分类
    • 按路由建立时机
      • 按需路由:只有当源节点需要发送数据时才建立路由,如AODV、DSR
      • 表驱动路由:节点定期维护到所有节点的路由表,适合小规模网络,如DSDV
      • 混合路由:结合按需和表驱动的优点
    • 按路由信息维护方式
      • 源路由:数据包携带完整路径信息
      • 跳数路由:每个节点仅知道下一跳节点的信息
  • 特点:分布式、自组织、动态拓扑、多跳转发、能耗敏感

拥塞控制与服务质量(QoS)

拥塞控制算法

  • 尾部丢弃:路由器队列满时丢弃新到达的分组
    • 简单,但可能导致TCP全局同步拥塞,导致链路利用率震荡
  • 抑制分组:路由器监测输出线路的利用率或队列长度,超出阈值则向上游节点发送拥塞通知
    • 问题:长延迟,抑制分组到达源端时可能已经发出大量进一步拥塞数据
  • 逐跳后压:拥塞信号不是发回源端,而是发给上一跳路由器,让其减缓发送速率,可递归进行
  • 随机早期检测:路由器监测平均队列长度,若在最小和最大阈值之间则以一定概率丢弃新到达的分组;超过最大阈值则全部丢弃

服务质量(QoS)

对于多媒体应用,带宽并不是唯一指标,抖动(Jitter)和延迟同样关键。

  • 流量整形(Traffic Shaping):控制数据流的发送速率和模式,减少突发流量对网络的冲击

    • 漏桶算法(Leaky Bucket):漏桶以恒定的速率“漏出”数据(发送),多余的数据被丢弃或缓冲,平滑流量
      • 问题:完全平滑的流量可能造成不必要的时延
    • 令牌桶算法(Token Bucket):系统以恒定速率 \(R\) 向桶中放入令牌,桶容量为 \(B\),1字节数据需要1个令牌才能发送。
      • 如果数据包到达时令牌不足,则必须等待(整形)或被标记/丢弃(监管)
      • 突发持续时间T:
        • 假设主机以物理线路的峰值速率 \(M\) 发送数据
        • \(\text{Total Data} = B + (R \times T) = M \times T\)
        • \(\implies T = \frac{B}{M - R}\)
    • 令牌桶 + 漏桶:通过漏桶降低最大输出速率\(M\),通过令牌桶控制平均速率\(R\)和突发大小\(B\),实现更灵活的流量整形
  • 分组调度:决定路由器在拥塞时如何选择分组的发送顺序

    • 先入先出(FIFO)
      • 问题:队头阻塞:一个恶意的UDP高带宽流可能填满缓冲区
    • 公平队列(Fair Queuing, FQ):轮流从每个非空队列中发送一个数据包
      • 大数据包可能占用过多带宽
    • 加权公平队列(Weighted Fair Queuing, WFQ)
      • 现实中可能希望给某些流更高的优先级(如视频流)
      • 虚拟完成时间\(F_i\):在理想的逐比特系统中,该包何时发送完毕
        • \(F_i = \max(A_i, F_{i-1}) + \frac{L_i}{W}\)
          • \(A_i\):包\(i\)到达时间
          • \(L_i\):包\(i\)长度(比特)
          • \(W\):流的权重
        • \(F_i\)越小,优先级越高
  • 综合服务

    • 集成服务(IntServ):为每个流预留资源,保证QoS
      • RSVP协议:资源预留协议,端系统发送PATH报文,沿路径分配资源;目的端发送RESV报文确认资源
      • 问题:状态维护开销大,难以扩展
    • 差分服务(DiffServ):对流进行分类,给予不同的服务等级
      • 在IP头的TOS字段中使用DSCP(区分服务码点)标记分组
      • 路由器根据DSCP值应用不同的PHB(每跳行为),如优先转发、加速转发等
      • 问题:QoS保证较弱,无法为每个流提供严格的端到端保障

网络互连技术

网络互连层(Internetworking Layer)的核心任务是将不同的物理网络(如以太网、ATM、无线局域网)连接成一个逻辑上的虚拟网络。

隧道

当两个相同类型的网络(如IPv6网络)需要通过一个异构网络(如IPv4网络)通信时使用。

  • IPv6 over IPv4 Tunneling
    • 将整个IPv6数据报作为IPv4数据报的“数据载荷(Payload)”进行封装。IPv4路由器只看到IPv4头部,而不知道载荷内封装了另一个IP包

MTU

  • 最大传输单元(MTU, Maximum Transmission Unit):物理网络能够传输的最大数据报大小,如以太网1500字节,FDDI 4352字节
  • 路径MTU发现:反复尝试找出全路径最小MTU
    • 发送端在IP头中设置 DF(Don't Fragment) 标志位
    • 若包大于MTU且DF位置1,则路由器丢弃该包并发送ICMP "Fragmentation Needed" (Type 3, Code 4) 差错报文
    • 发送端收到后,降低发送包的大小,直至找到全路径的最小MTU

分片

  • 原因:不同网络支持的最大传输单元(MTU)不同。当大包进入小MTU网络时,必须分片
  • 类型
    • 透明分片
      • 入口路由器分片,出口路由器重组。对端主机不知道分片发生过
      • 问题:所有分片必须经过同一个出口路由器,破坏了动态路由的灵活性
    • 非透明分片(IPv4采用)
      • 路由器只负责分片,重组由最终的目的主机完成
      • 问题:增加端系统的负担,提高重传代价
        • 分片放大效应:IP层没有重传机制,而上层(如TCP层)不知道分片的细节,所以其中一个分片丢失就只能全部重传

IPv4

IPv4 首部

20字节。

  • 版本(4bit):4/6
  • 首部长度(IHL, 4bit):单位为32位字(4字节),最小值5(20字节),最大值15(60字节)
  • 区分服务(TOS/DiffServ, 8bit):QoS,前6位为DSCP,后2位为ECN
    • 早期:传统服务类型(TOS)
      • 优先级:占据前3位(0-2位),确保关键指令在网络拥塞时能够抢占带宽
      • TOS比特位:占据中间4位(3-6位),定义服务特性
      • 保留位:最后1位(7位),未使用,置0
    • 现代:区分服务(DiffServ)
      • 区分服务码点(DSCP, Differentiated Services Code Point):前6位,定义不同的PHB(Per-Hop Behavior),共64种
        • PHB:默认转发、加速转发、确保转发
        • DSCP的设计巧妙地保持了与旧IP优先级的向后兼容性
      • 显式拥塞通知(ECN, Explicit Congestion Notification):后2位,通过“标记”数据包指示网络拥塞
  • 总长度(Total Length, 16bit):首部+数据的总字节数,最大65535字节
  • 标识(Identification, 16bit):用于分片重组,同一原始数据报的所有分片具有相同的ID
    • 计数器,由发送主机维持。每产生一个数据报,计数器加1
  • 标志(Flags, 3bit):
    • Bit 0:保留,置0
    • Bit 1 (DF, Don't Fragment):置1则禁止分片
    • Bit 2 (MF, More Fragments):置1表示后面还有分片,最后一个分片该位为0
  • 片偏移(Fragment Offset, 13bit):指示本分片在原始数据报中的相对位置,以8字节为单位计算
    • 这意味着除了最后一个分片外,所有分片的数据长度都必须是8字节的倍数
  • 生存时间(Time to Live, TTL, 8bit):跳数限制,每经过一个路由器减1,减到0丢弃,并向发送端返回ICMP超时报文
    • 网络诊断:traceroute通过发送TTL依次递增(1, 2, 3...)的数据包,诱发沿途路由器返回ICMP超时报文,从而探测出从源到目的的路径上的所有路由器IP
  • 协议(Protocol, 8bit):指示上层协议类型,如TCP=6, UDP=17, ICMP=1, OSPF=89
  • 首部校验和(Header Checksum, 16bit):仅校验首部,不校验数据
    • 数据部分的完整性由上层协议(如TCP或UDP)的校验和来保证
    • 方法:反码算术求和
      • 将首部看作一系列16位字,所有字相加(溢出部分回卷加到低位)
      • 取反得到校验和
    • 每跳都需要重新计算首部校验和(因为TTL变了)
      • 开销大,因此IPv6取消首部校验和
  • 源/目的 IP地址(32bit each):发送方和接收方的逻辑地址

IP 编址技术

  • 传统分类编址
    • A类:0开头,/8
    • B类:10开头,/16
    • C类:110开头,/24
    • D类:1110开头,多播地址
    • E类:1111开头,保留地址
  • CIDR(无分类域间路由,Classless Inter-Domain Routing):消除了传统的类概念,使用斜线记法(/n)表示网络前缀长度
    • 路由聚合:将多个连续的网络前缀合并为一个更大的前缀,减少路由表项数量
    • 最长前缀匹配:路由器在转发数据报时,选择与目的IP地址匹配的最长前缀的路由表项
  • 网络地址转换(NAT):端口号复用,节省IPv4地址
    • 静态NAT:一对一映射
    • 动态NAT:多对多映射,从一个地址池中分配
    • 端口地址转换(PAT, Port Address Translation):多对一映射,通过端口号区分不同的内部主机

路由选择原理与转发表构建

路由表构建

  • 下一跳路由选择
  • 特定网络路由:路由表项指向一个网络而非主机
  • 特定主机路由:优先级最高,但会增加路由表的规模
  • 默认路由:当没有匹配的路由表项时使用,通常为0.0.0.0/0(连接ISP的路由器)

IP数据报转发

  • 最长前缀匹配
    • 直接交付检查:将IP与直连网络的子网掩码进行与运算,如果目的IP在本地子网内则直接通过ARP解析MAC地址发送到目的主机
    • 特定主机路由匹配:检查路由表中是否有与目的IP完全匹配的主机路由
    • 特定网络路由匹配:将IP与路由表中每一行的子网掩码进行与运算,选择匹配前缀最长的路由表项
    • 默认路由匹配:如果没有任何匹配,则使用默认路由
    • 丢弃与报错:如果没有默认路由,则丢弃数据报并发送ICMP不可达报文给源主机

路由表项的标志位

  • U (Up):路由可用
  • G (Gateway):该路由指向一个网关(路由器),即间接交付,否则为直接交付
  • H (Host):该路由是一个特定主机路由,否则为特定网络路由

互联网控制报文协议 (ICMP, Internet Control Message Protocol)

ICMP不仅用于报告差错,还用于网络探测。它虽然被封装在IP数据报中(协议号为1),但在逻辑上被视为网络层协议的一部分。

差错报告机制

  • 报文:类型(Type)、代码(Code)和校验和(Checksum)
  • 差错报告报文
    • 终点不可达 (Destination Unreachable, Type 3)
    • 源点抑制 (Source Quench, Type 4)
      • 现在网络已被弃用,因为TCP有自己的拥塞控制机制
    • 超时 (Time Exceeded, Type 11)
    • 参数问题:IP首部中存在语义错误(如非法的选项字段),导致路由器无法处理
  • 查询报文
    • 改变路由 (Redirect, Type 5):告知源主机有一个更好的下一跳路由器

应用

  • PING (Packet Internet Groper)
  • 时间戳请求与应答 (Type 13/14)

地址解析与动态配置(ARP & DHCP)

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

ARP: 已知IP地址,求MAC地址。

  • ARP请求:广播形式发送,询问“谁拥有IP地址X?”
  • ARP广播:主机启动时广播查询自己IP地址
    • 目的1(冲突检测):如果收到回复,说明局域网内已有其他机器使用了该IP,系统会报错并禁用该IP
    • 目的2(更新缓存):通知网内其他主机(或网关)更新关于本机IP的MAC地址映射
    • 隐患:ARP欺骗攻击(ARP Spoofing)
      • ARP:无状态且缺乏验证
      • 攻击者发送伪造的ARP回复,将自己的MAC地址映射到另一个合法IP地址,比如网关
      • 可能导致中间人攻击(MITM),窃听或篡改通信内容

动态主机配置协议 (DHCP, Dynamic Host Configuration Protocol)

DHCP(RFC 2131)允许主机自动获取IP地址、子网掩码、默认网关、DNS服务器等信息,极大地简化了网络管理 。

  • DHCP交互
    • DHCP发现 (DHCP Discover):客户端广播查询可用的DHCP服务器
      • (DHCPDISCOVER, 0.0.0.0 -> 255.255.255.255)
    • DHCP提供 (DHCP Offer):服务器响应,提供一个可用的Offer,包含IP、掩码、租期等
      • (DHCPOFFER, Server IP -> Client MAC)
    • DHCP请求 (DHCP Request):客户端选择多个服务器发来的Offer中其中一个,并请求使用该配置
      • (DHCPREQUEST, Client MAC -> Server IP)
    • DHCP确认 (DHCP Ack):服务器确认分配,客户端开始使用配置
      • (DHCPACK, Server IP -> Client MAC)
  • 租约管理
    • T1 定时器(续约计时器):默认为租期的50%,当T1到期时,客户端向分配它IP地址的DHCP服务器发送DHCPREQUEST请求续约
    • T2 定时器(重新绑定计时器):默认为租期的87.5%,当T2到期时,客户端向任何可用的DHCP服务器发送DHCPREQUEST请求续约
  • 中继代理 (Relay Agent)
    • 当客户端和DHCP服务器不在同一子网时,DHCP中继代理(通常是路由器)会转发DHCP消息
    • 客户端发送的广播消息被中继代理转换为单播消息发送到DHCP服务器,服务器的响应再被中继代理转发回客户端

内部网关协议——开放最短路径优先 (OSPF, Open Shortest Path First)

解决“怎么走最快”的问题。

  • 使用链路状态路由算法与数据库同步
    • 开销:参考带宽除以接口带宽
  • 区域划分:解决LSDB过大、SPF计算复杂的问题
    • 主干区域 (Area 0):所有区域必须直接或间接连接到主干区域
    • 边界路由器 (ABR, Area Border Router):连接不同区域的路由器
      • 虚链路 (Virtual Link):当某个区域无法直接连接到主干区域时,通过中间区域(Transit Area)建立逻辑隧道,将孤立区域“虚拟”地连接到骨干区域
    • 自治系统边界路由器 (ASBR, Autonomous System Boundary Router):连接不同自治系统的路由器
  • 报文类型
    • Hello (Type 1)
    • 数据库描述 (DBD, Database Description, Type 2)
    • 链路状态请求 (LSR, Link State Request, Type 3):如果发现邻居有自己没有的(或更新的)LSA,路由器发送LSR请求该LSA的详细内容
    • 链路状态更新 (LSU, Link State Update, Type 4):路由器响应LSR请求,发送所需的LSA
    • 链路状态确认 (LSAck, Link State Acknowledgment, Type 5):确认收到LSU报文

外部网关协议——边界网关协议 (BGP, Border Gateway Protocol)

BGP使用TCP端口179。解决“怎么走符合规则”的问题。目前互联网使用的版本是BGP-4。

  • 路径向量算法:
    • 每个BGP路由器维护一个路径向量表,记录到达每个目的网络的完整路径(AS_PATH列表)
    • 避免路由环路:如果收到的路由信息中包含自己的AS号,则丢弃该路由
  • 路径属性
    • 公认必遵(Well-known Mandatory): 所有 BGP 路由器都必须识别,且必须包含在 UPDATE 报文中
    • 公认任意(Well-known Discretionary): 必须识别,但不一定包含
    • 可选过渡(Optional Transitive): 如果路由器不识别,应将其转发给邻居
  • 选路算法

    • Highest Weight(最高权重): Cisco 专有,仅在本地路由器有效
    • Highest Local Preference(最高本地优先级):在同一AS内传播,控制出站流量
    • Lowest AS Path(最短AS路径):选择经过最少AS的路径
    • Lowest Origin Type(最低起源类型):IGP < EGP < Incomplete
    • Lowest MED(最低多出口判别符): 用于建议邻居 AS 如何进入本 AS(控制入站流量)
    • eBGP over iBGP:优先选择从外部对等体学到的路由
    • Lowest IGP Metric to BGP Next Hop(到BGP下一跳的最低IGP度量值):优先选择离自己最近的边界路由器
  • BGP下AS的商业关系

    • 客户-提供商关系 (Customer-Provider):客户AS向提供商AS支付费用以获得互联网连接
    • 对等关系 (Peer-Peer):两个AS互相免费交换流量,但不会中转其他AS的流量
    • 多宿主关系 (Multi-homing):一个AS连接多个ISP以提高可靠性和性能
  • iBGP 与 eBGP 的协同
    • eBGP 用于不同AS之间的路由交换,iBGP 用于同一AS内部的路由传播

IP组播 (IP Multicast)

网络多媒体传输的基础。源主机只发送一份数据包,网络中的路由器负责在合适的分叉点复制数据包,并将其转发给通过 IGMP 明确请求该数据的接收者。

  • 组播地址架构 (D类地址,224.0.0.0 ~ 239.255.255.255)
    • 组播地址只能作为目的地址,源地址永远是单播 IP 地址
  • 组播地址分类
    • 永久组地址
      • 224.0.0.1:本子网上所有参与组播的主机和路由器。
      • 224.0.0.2:本子网上所有组播路由器。
      • 224.0.0.5 / 224.0.0.6:OSPF 协议专用
    • 公网组播地址
    • 私有/管理范围地址(Administratively Scoped):239.0.0.0/8。类似于私有 IP(192.168.x.x)
  • 互联网组管理协议 (IGMP):主机与本地路由器之间交互的协议,用于管理主机的入组与离组行为
    • 解决了主机到路由器的“最后一公里”问题
  • 组播路由协议
    • 距离矢量多播路由协议 (DVMRP, Distance Vector Multicast Routing Protocol):基于距离矢量算法,使用反向路径转发(RPF)构建组播树
    • 协议无关组播 (PIM, Protocol Independent Multicast)
      • PIM-SM (Sparse Mode):适用于组成员分布稀疏的场景,使用共享树和源树相结合的方式
      • PIM-DM (Dense Mode):适用于组成员分布密集的场景,使用泛洪和修剪机制

IPv6 协议

  • IPv4地址耗尽:IPv4地址空间仅有约43亿个地址,虽然 CIDR(无类别域间路由)和 NAT(网络地址转换)延缓了危机,但 NAT 破坏了互联网“端到端”通信的原则,且增加了网络复杂性。

  • 首部

    • 基本首部 (Base Header):40字节固定长度,去除校验和、分片
      • Version(4bit)
      • Traffic Class(8bit)
      • Flow Label(20bit):用于标识数据流,支持实时应用的特殊处理
      • Payload Length(16bit,表示基本首部后的所有内容长度)
      • Next Header(8bit):指示紧随基本首部之后的扩展首部或上层协议类型
      • Hop Limit(8bit)
      • 源地址(128bit)
      • 目的地址(128bit)
    • 扩展首部 (Extension Headers):可选,支持分片、路由、认证等功能
      • 菊花链:基本首部 -> 扩展首部1(如路由首部,指定数据包必须经过的中间节点列表)-> 扩展首部2(如分片首部:IPv6 路由器不进行分片。如果包太大,路由器直接丢弃并回发 ICMPv6 消息)-> 上层协议首部(如TCP/UDP)
  • 地址体系
    • 地址表示:2001:0DB8:0000:0000:0000:0000:1428:57AB,连续的 0000 组可以用双冒号 :: 代替,但一个地址中只能使用一次:2001:DB8::1428:57AB
    • 地址类型
      • 单播地址 (Unicast Address)
      • 组播地址 (Multicast Address)
      • 任播地址 (Anycast Address):多个服务器共享同一个任播地址,数据包发送到拓扑距离最近的那一台
  • 4->6 过渡机制
    • 双协议栈 (Dual Stack):根据 DNS 返回决定协议栈
    • 隧道技术 (Tunneling):将 IPv6 数据包封装在 IPv4 头部中,穿越 IPv4 网络
    • 地址转换 (Translation):在网关处将 IPv6 头部重写为 IPv4 头部

多协议标签交换 (MPLS, Multi-Protocol Label Switching)

略。

U6 传输层

  • 网络层(Network Layer, Layer 3):解决主机到主机(Host-to-Host)的通信
  • 传输层(Layer 4):解决端到端(End-to-End)的逻辑通信,即进程到进程的数据传输

传输协议要素

  • 寻址机制

    • NSAP (Network Service Access Point): 网络服务访问点,即IP地址
    • TSAP (Transport Service Access Point): 传输服务访问点,即端口
      • 约定端口
      • 端口映射器:以Unix为例,服务器“端口映射器”进程固定监听端口111,客户端通过该端口查询某服务对应的动态端口号
      • 初始连接协议:按需创建服务
  • 连接建立:

    • 问题:“幽灵连接”,由于网络延迟,旧连接的延迟报文可能在新连接建立后到达,导致误解
    • 解决:使用初始序列号(ISN, Initial Sequence Number)来区分不同连接实例
    • 三次握手
      • 第一步(SYN):客户端发送SYN报文,并选择初始序列号x
      • 第二步(SYN-ACK):服务器收到SYN后,回复SYN-ACK报文,确认号为x+1,并选择自己的初始序列号y
      • 第三步(ACK):客户端收到SYN-ACK后,发送ACK报文,确认号为y+1
  • 连接释放
    • 非对称释放:任何一方发送断开请求(FIN)
    • 对称释放:双方都发送断开请求(FIN)
    • “两军问题”:无法确保对方收到断开请求,可能导致资源泄漏
    • 解决:四次挥手
      • 第一步(FIN):一方发送FIN报文,请求断开连接
      • 第二步(ACK):另一方收到FIN后,发送ACK报文确认
      • 第三步(FIN):另一方准备好断开时,发送FIN报文
      • 第四步(ACK):第一方收到FIN后,发送ACK报文确认
      • 如果一方在发送最后确认后等待一段时间(TIME-WAIT状态,通常为2MSL)仍未收到对方的重传请求,就默认对方已正确关闭
  • 流量控制与缓冲
    • 与数据链路层不同,传输层采用动态缓冲区管理,根据实际流量调整缓冲区大小
  • 崩溃恢复
  • 拥塞控制:拥塞控制是全局性的,解决网络核心(路由器、链路)负载过重的问题。
    • 控制算法:AIMD(加性增大,乘性减小)
      • 加法递增 (Additive Increase): 当网络没有拥塞(收到ACK)时,线性地增加发送窗口(例如每个RTT增加1个MSS)。这是为了试探网络的可用带宽
      • 乘法递减 (Multiplicative Decrease): 当检测到拥塞(发生丢包)时,指数级地减少发送窗口(例如减半)。这是为了迅速消除拥塞

UDP (User Datagram Protocol, 用户数据报协议)

UDP是一个简单的无连接不可靠传输协议。它几乎只是IP协议的简单包装,增加了复用/分用功能和简单的错误校验。

  • 应用:实时应用、简单查询、多播/广播
  • 远程过程调用 (RPC, Remote Procedure Call)
  • 实时传输协议 (RTP, Real-time Transport Protocol)

TCP (Transmission Control Protocol, 传输控制协议)

TCP是互联网的基石,提供面向连接、可靠、全双工的字节流服务。TCP不保留消息边界,应用层发出的多次写操作可能会被合并成一个TCP段(Segment)发送,或者一个大写操作被切分成多个段。

TCP头部格式 (至少20字节)

  • 源端口 (16bit)
  • 目的端口 (16bit)
  • 序列号 (32bit):字节流中第一个字节的序号
  • 确认号 (32bit):期望收到的下一个字节的序号
  • 数据偏移 (4bit):TCP头部长度,单位为32位字(4字节)
  • 保留 (6bit):置0
  • 控制位 (6bit):
    • URG:紧急指针有效
    • ACK:确认号有效
    • PSH:接收方应立即将数据推送给应用层
    • RST:重置连接
    • SYN:同步序列号,用于建立连接
    • FIN:发送方完成发送任务
  • 窗口大小 (16bit):接收方的缓冲区大小,以字节为单位
  • 校验和 (16bit):覆盖整个TCP段(头部+数据)
  • 紧急指针 (16bit):指示紧急数据的结束位置
  • 选项 (可变长度):如最大报文段长度(MSS)、窗口扩大因子等
  • 填充 (可变长度):使TCP头部长度为32位字的整数倍

TCP连接管理

  • 建立连接 (3次握手)
    • Client --> SYN=1, Seq=x --> Server
      • Client --> SYN_SENT
    • Server --> SYN=1, ACK=1, Seq=y, Ack=x+1 --> Client
      • Server --> SYN_RCVD
    • Client --> ACK=1, Seq=x+1, Ack=y+1 --> Server
      • Client --> ESTABLISHED
    • Server --> ESTABLISHED
  • 释放连接 (4次挥手)
    • Client --> FIN=1 --> Server
      • Client --> FIN_WAIT_1
    • Server --> ACK=1 --> Client
      • Client --> FIN_WAIT_2(只能收不能发)
      • Server --> CLOSE_WAIT
    • Server --> FIN=1 --> Client
      • Server --> LAST_ACK
    • Client --> ACK=1 --> Server
      • Client --> TIME_WAIT (等待2MSL,通常2分钟)
      • Server --> CLOSED
      • Client --> CLOSED

TCP差错控制

  • 带重传的肯定确认 (PAR)
    • 重传计时器 (RTO): 发送段后启动计时器,超时未收到ACK则重传
    • RTT估计(往返时间): 网络延迟波动大,RTO不能固定。TCP动态测量RTT,计算平滑RTT (SRTT) 和偏差 (RTTVAR),公式为 \(RTO = SRTT + 4 \times RTTVAR\)
    • 每次收到ACK后更新SRTT和RTTVAR,调整RTO
  • 流程
    • 发送方发送数据段,启动定时器
    • 接收方收到后校验和正确则发送ACK,否则丢弃
    • 若发送方超时未收到ACK或收到3个重复ACK,则重传数据段
    • 接收方对乱序或重复数据进行排序和去重,保证数据可靠、有序到达

TCP拥塞控制

  1. 慢开始 (Slow Start):
    • 连接刚建立时,拥塞窗口 cwnd 初始化为1个MSS(最大报文段长度)。
    • 每收到一个ACK,cwnd 加 1 MSS。
    • 效果:每经过一个RTT,窗口大小翻倍(1, 2, 4, 8...),呈指数增长。旨在快速占满可用带宽。
    • cwnd 达到慢开始门限 ssthresh 时,切换到拥塞避免阶段。
  2. 拥塞避免 (Congestion Avoidance):
    • 每经过一个RTT,cwnd 增加 1 MSS(加法递增)。
    • 公式:每收到一个ACK,cwnd += MSS * MSS / cwnd
    • 效果:线性增长,小心翼翼地试探网络上限。
  3. 快重传 (Fast Retransmit):
    • 如果发送方连续收到3个重复的ACK(Duplicate ACKs),说明中间有一个包丢了,但后续的包到了。这通常意味着轻度拥塞或误码,而不是网络彻底堵死。
    • 动作: 立即重传丢失的包,不需要等待RTO超时
  4. 快恢复 (Fast Recovery - TCP Reno):
    • 发生快重传后,不进入慢开始(不把cwnd降为1)。
    • 而是将 ssthresh 设为当前 cwnd 的一半。
    • cwnd 设为新的 ssthresh,然后直接进入拥塞避免阶段。
    • 逻辑:既然还能收到重复ACK,说明数据还在流动(“飞轮”还在转),没必要完全停车重启。

TCP与无线网络

TCP将所有丢包都视为拥塞。但在无线网络中,丢包常由信号干扰引起。TCP错误地降低发送速率导致性能低下。

  • 解决方案
    • 链路层重传:无线链路层实现ARQ,隐藏无线误码对TCP的影响
    • TCP分离:在无线边界处使用代理,将无线链路上的丢包与有线网络隔离