计算机网络课程笔记¶
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):协议控制信息
- 分层分类:
- 物理层:比特流
- 数据链路层:帧
- 网络层:数据报
- 传输层:报文段
- 应用层:消息
- SDU (Service Data Unit):对等层向上一层提供的服务数据单元
- PDU (Protocol Data Unit):对等层之间交换的数据单元
- 协议:仅限对等层通信
- 接口:同节点相邻层之间通信的逻辑接口,叫作服务器访问点 (SAP, Service Access Point)
- 服务
- 只有能够被上一层使用的功能才是服务
- 服务原语:服务请求、指示、响应、确认(OSI模型)
- 服务类型
- 无连接服务 vs 面向连接服务
- 无:IP, UDP,尽最大努力交付
- 面向连接:TCP
- 不可靠服务 vs 可靠服务
- 正确性
- 有应答服务 vs 无应答服务
- 无连接服务 vs 面向连接服务
U2 物理层¶
- 奈奎斯特公式(无噪声信道):
- 最大信号传输速率 \(C = 2H \log_2 N\)
- \(H\):信道带宽(Hz)
- \(N\):信号电平数,比如二进制信号\(N=2\)
- 单位:bps
- 最大信号传输速率 \(C = 2H \log_2 N\)
- 香农公式(有噪声信道):
- 最大信号传输速率 \(C = H \log_2 (1 + S/N)\)
- \(S/N\):信噪比(Signal to Noise Ratio),使用分贝表示时:\(\text{SNR(dB)} = 10 \log_{10}(S/N)\)
- 最大信号传输速率 \(C = H \log_2 (1 + 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):发送冗余信息以便接收方纠正错误
- 冗余信息足够,适合高误码率或单向通信信道
- 自动请求重传 (Automatic Repeat reQuest, ARQ):检测到错误后请求重传
协议描述¶
协议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\):帧出错概率
- \(U = \frac{T_f}{T_f + 2T_{prop}}\)
协议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\) 时
- 纯ALOHA:想发就发
-
载波监听多路访问(CSMA, Carrier Sense Multiple Access):“先听后说” (Listen Before Talk)
- 1-坚持式:信道忙则持续监听,直到空闲
- 信道空闲瞬间容易引发冲突
- 非坚持式:信道忙则等待随机时间后重试
- 可能增加信道空闲时间
- p-坚持式:信道闲,则以概率p发送,1-p等待;信道忙,则持续监听
- 避免信道空闲时大量节点同时发送
- 1-坚持式:信道忙则持续监听,直到空闲
还有:
- CSMA/CD(冲突检测):发送数据时监听信道,检测到冲突立即停止发送
- CSMA/CA(冲突避免):通过信道预约(RTS/CTS)避免冲突,常用于无线网络
CSMA/CD(CSMA with Collision Detection)¶
“边说边听” (Listen While Talk)
工作原理¶
- 发送前侦听: 使用 1-坚持算法侦听信道。
- 边发边听: 在发送数据的同时,检测信道上的电压变化。如果信号电压超过阈值(两波叠加),说明发生了冲突。
- 冲突停止: 一旦检测到冲突,立即停止发送数据。
- 强化干扰(Jamming): 发送人为干扰信号(Jam Signal,通常 32-48 比特),确保网络上所有站点(包括远端站点)都能检测到冲突发生。
- 指数退避: 执行二进制指数退避算法,等待随机时间后重试。
争用期与最小帧长 (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\)。
二进制指数退避算法¶
- 确定基本退避时间为 \(2\tau\)。
- 定义重传次数 \(k\)。\(k = \min(\text{重传次数}, 10)\)。
- 从整数集合 \([0, 1, \dots, 2^k - 1]\) 中随机取一个数 \(r\)。
- 等待时间 \(= r \times 2\tau\)。
- 若重传达 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地址转发数据包
- 每个端口都是一个独立的广播域
- 中继器/集线器(Hub):物理层设备,信号放大转发
网桥/交换机(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
- 帧间间隔 (IFS, InterFrame Space):SIFS < PIFS < DIFS
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地址。 |
总结:
- 在有线侧,从CSMA/CD的复杂冲突检测到全双工交换的演变,速度不断突破物理极限,通过载波扩展等技术解决光速带来的延迟限制。
- 在无线侧,受限于物理环境,协议变得更加复杂。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):将从某邻居学到的路由信息发回该邻居,但将距离设置为无穷大
链路状态路由算法(Link State)¶
为解决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):
- 每个路由器检查收到的广播分组的源地址,判断该分组是否是通过到源地址的最短路径到达的
- 如果是,则将分组转发给所有其他接口;否则丢弃
- 逆向路径转发(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\),实现更灵活的流量整形
- 漏桶算法(Leaky Bucket):漏桶以恒定的速率“漏出”数据(发送),多余的数据被丢弃或缓冲,平滑流量
-
分组调度:决定路由器在拥塞时如何选择分组的发送顺序
- 先入先出(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\)越小,优先级越高
- \(F_i = \max(A_i, F_{i-1}) + \frac{L_i}{W}\)
- 先入先出(FIFO)
-
综合服务
- 集成服务(IntServ):为每个流预留资源,保证QoS
- RSVP协议:资源预留协议,端系统发送PATH报文,沿路径分配资源;目的端发送RESV报文确认资源
- 问题:状态维护开销大,难以扩展
- 差分服务(DiffServ):对流进行分类,给予不同的服务等级
- 在IP头的TOS字段中使用DSCP(区分服务码点)标记分组
- 路由器根据DSCP值应用不同的PHB(每跳行为),如优先转发、加速转发等
- 问题:QoS保证较弱,无法为每个流提供严格的端到端保障
- 集成服务(IntServ):为每个流预留资源,保证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
- 发送端在IP头中设置
分片¶
- 原因:不同网络支持的最大传输单元(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位,通过“标记”数据包指示网络拥塞
- 区分服务码点(DSCP, Differentiated Services Code Point):前6位,定义不同的PHB(Per-Hop Behavior),共64种
- 早期:传统服务类型(TOS)
- 总长度(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开头,保留地址
- A类:0开头,
- 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)
- (
- DHCP发现 (DHCP Discover):客户端广播查询可用的DHCP服务器
- 租约管理
- T1 定时器(续约计时器):默认为租期的50%,当T1到期时,客户端向分配它IP地址的DHCP服务器发送
DHCPREQUEST请求续约 - T2 定时器(重新绑定计时器):默认为租期的87.5%,当T2到期时,客户端向任何可用的DHCP服务器发送
DHCPREQUEST请求续约
- T1 定时器(续约计时器):默认为租期的50%,当T1到期时,客户端向分配它IP地址的DHCP服务器发送
- 中继代理 (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号,则丢弃该路由
- 每个BGP路由器维护一个路径向量表,记录到达每个目的网络的完整路径(
- 路径属性
- 公认必遵(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)
- 基本首部 (Base Header):40字节固定长度,去除校验和、分片
- 地址体系
- 地址表示:
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): 当检测到拥塞(发生丢包)时,指数级地减少发送窗口(例如减半)。这是为了迅速消除拥塞
- 控制算法:AIMD(加性增大,乘性减小)
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-->ServerClient-->SYN_SENT
Server-->SYN=1, ACK=1, Seq=y, Ack=x+1-->ClientServer-->SYN_RCVD
Client-->ACK=1, Seq=x+1, Ack=y+1-->ServerClient-->ESTABLISHED
Server-->ESTABLISHED
- 释放连接 (4次挥手)
Client-->FIN=1-->ServerClient-->FIN_WAIT_1
Server-->ACK=1-->ClientClient-->FIN_WAIT_2(只能收不能发)Server-->CLOSE_WAIT
Server-->FIN=1-->ClientServer-->LAST_ACK
Client-->ACK=1-->ServerClient-->TIME_WAIT(等待2MSL,通常2分钟)Server-->CLOSEDClient-->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拥塞控制¶
- 慢开始 (Slow Start):
- 连接刚建立时,拥塞窗口
cwnd初始化为1个MSS(最大报文段长度)。 - 每收到一个ACK,
cwnd加 1 MSS。 - 效果:每经过一个RTT,窗口大小翻倍(1, 2, 4, 8...),呈指数增长。旨在快速占满可用带宽。
- 当
cwnd达到慢开始门限ssthresh时,切换到拥塞避免阶段。
- 连接刚建立时,拥塞窗口
- 拥塞避免 (Congestion Avoidance):
- 每经过一个RTT,
cwnd增加 1 MSS(加法递增)。 - 公式:每收到一个ACK,
cwnd += MSS * MSS / cwnd。 - 效果:线性增长,小心翼翼地试探网络上限。
- 每经过一个RTT,
- 快重传 (Fast Retransmit):
- 如果发送方连续收到3个重复的ACK(Duplicate ACKs),说明中间有一个包丢了,但后续的包到了。这通常意味着轻度拥塞或误码,而不是网络彻底堵死。
- 动作: 立即重传丢失的包,不需要等待RTO超时。
- 快恢复 (Fast Recovery - TCP Reno):
- 发生快重传后,不进入慢开始(不把
cwnd降为1)。 - 而是将
ssthresh设为当前cwnd的一半。 - 将
cwnd设为新的ssthresh,然后直接进入拥塞避免阶段。 - 逻辑:既然还能收到重复ACK,说明数据还在流动(“飞轮”还在转),没必要完全停车重启。
- 发生快重传后,不进入慢开始(不把
TCP与无线网络¶
TCP将所有丢包都视为拥塞。但在无线网络中,丢包常由信号干扰引起。TCP错误地降低发送速率导致性能低下。
- 解决方案
- 链路层重传:无线链路层实现ARQ,隐藏无线误码对TCP的影响
- TCP分离:在无线边界处使用代理,将无线链路上的丢包与有线网络隔离