4.1 网络层提供的两种服务
网络层负责主机到主机的分组交付,核心工作可以概括为三件事:编址(IP)、转发(查表)、路由(选路)。在整个协议栈中,它是唯一「不可靠、无连接」的一层。
围绕「可靠性由谁保证」这个问题,网络层在设计上分化出两种截然不同的服务模型。
| 思路 | 仿照电话,先建连接 | 每个分组独立选路 |
| 可靠性 | 网络保证 | 由端系统(TCP)保证 |
| 顺序 | 保证 | 不保证 |
| 结点故障 | 所有经过的虚电路中断 | 可绕行 |
| 代表 | ATM、X.25 | IP |
Internet 的设计哲学非常明确:网络层尽最大努力交付,把复杂性放到端系统。路由器只做「查表 + 转发」,既不维护连接状态,也不重传丢失的分组。这样做的代价是网络层本身不可靠,收益则是网络核心足够简单、易于扩展——这正是 Internet 能从几十个节点成长为今天规模的根本原因。
两种服务模型的取舍可以用一张图概括:
#mermaid-svg-lXX805NhXkgBTfM9{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lXX805NhXkgBTfM9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lXX805NhXkgBTfM9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lXX805NhXkgBTfM9 .error-icon{fill:#552222;}#mermaid-svg-lXX805NhXkgBTfM9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lXX805NhXkgBTfM9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lXX805NhXkgBTfM9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lXX805NhXkgBTfM9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lXX805NhXkgBTfM9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lXX805NhXkgBTfM9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lXX805NhXkgBTfM9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lXX805NhXkgBTfM9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lXX805NhXkgBTfM9 .marker.cross{stroke:#333333;}#mermaid-svg-lXX805NhXkgBTfM9 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lXX805NhXkgBTfM9 p{margin:0;}#mermaid-svg-lXX805NhXkgBTfM9 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-lXX805NhXkgBTfM9 .cluster-label text{fill:#333;}#mermaid-svg-lXX805NhXkgBTfM9 .cluster-label span{color:#333;}#mermaid-svg-lXX805NhXkgBTfM9 .cluster-label span p{background-color:transparent;}#mermaid-svg-lXX805NhXkgBTfM9 .label text,#mermaid-svg-lXX805NhXkgBTfM9 span{fill:#333;color:#333;}#mermaid-svg-lXX805NhXkgBTfM9 .node rect,#mermaid-svg-lXX805NhXkgBTfM9 .node circle,#mermaid-svg-lXX805NhXkgBTfM9 .node ellipse,#mermaid-svg-lXX805NhXkgBTfM9 .node polygon,#mermaid-svg-lXX805NhXkgBTfM9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lXX805NhXkgBTfM9 .rough-node .label text,#mermaid-svg-lXX805NhXkgBTfM9 .node .label text,#mermaid-svg-lXX805NhXkgBTfM9 .image-shape .label,#mermaid-svg-lXX805NhXkgBTfM9 .icon-shape .label{text-anchor:middle;}#mermaid-svg-lXX805NhXkgBTfM9 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lXX805NhXkgBTfM9 .rough-node .label,#mermaid-svg-lXX805NhXkgBTfM9 .node .label,#mermaid-svg-lXX805NhXkgBTfM9 .image-shape .label,#mermaid-svg-lXX805NhXkgBTfM9 .icon-shape .label{text-align:center;}#mermaid-svg-lXX805NhXkgBTfM9 .node.clickable{cursor:pointer;}#mermaid-svg-lXX805NhXkgBTfM9 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lXX805NhXkgBTfM9 .arrowheadPath{fill:#333333;}#mermaid-svg-lXX805NhXkgBTfM9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lXX805NhXkgBTfM9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lXX805NhXkgBTfM9 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lXX805NhXkgBTfM9 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lXX805NhXkgBTfM9 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lXX805NhXkgBTfM9 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lXX805NhXkgBTfM9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lXX805NhXkgBTfM9 .cluster text{fill:#333;}#mermaid-svg-lXX805NhXkgBTfM9 .cluster span{color:#333;}#mermaid-svg-lXX805NhXkgBTfM9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lXX805NhXkgBTfM9 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lXX805NhXkgBTfM9 rect.text{fill:none;stroke-width:0;}#mermaid-svg-lXX805NhXkgBTfM9 .icon-shape,#mermaid-svg-lXX805NhXkgBTfM9 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lXX805NhXkgBTfM9 .icon-shape p,#mermaid-svg-lXX805NhXkgBTfM9 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lXX805NhXkgBTfM9 .icon-shape .label rect,#mermaid-svg-lXX805NhXkgBTfM9 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lXX805NhXkgBTfM9 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lXX805NhXkgBTfM9 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lXX805NhXkgBTfM9 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
数据报服务(Internet)
每个分组独立选路
路由器只查表转发
可靠性交给端系统 TCP
虚电路服务
先建立连接
按固定路径传输
网络保证可靠与顺序
设计取舍:核心简单 vs 端系统复杂
4.2 IP 地址
IP 地址是网络层的编址基础,它标识的是接口而非主机,一个主机若有多块网卡就有多个 IP 地址。
4.2.1 分类地址
早期 IPv4 采用分类编址,用地址的最高几位区分网络号长度。
| A | 0 | 8 | 1.0.0.0–126.255.255.255 | 255.0.0.0 |
| B | 10 | 16 | 128.0.0.0–191.255.255.255 | 255.255.0.0 |
| C | 110 | 24 | 192.0.0.0–223.255.255.255 | 255.255.255.0 |
| D | 1110 | — | 224.0.0.0–239.255.255.255 | 组播 |
| E | 1111 | — | 240.0.0.0– | 保留 |
分类地址的问题在于粒度太粗:一个 B 类网络可容纳 6 万多台主机,很多单位用不完却占着整块地址,造成大量浪费。这也是后来引入子网划分与 CIDR 的直接动因。
4.2.2 特殊地址
| 0.0.0.0 | 本网络本主机(DHCP 请求源地址) |
| 255.255.255.255 | 受限广播 |
| 127.0.0.0/8 | 环回地址 |
| 网络号全 0 | 本网络 |
| 主机号全 1 | 本网络广播 |
| 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 | 私有地址 |
私有地址不会在公网上被路由,只能在内部网络中使用,出网时必须经过 NAT 转换。
4.2.3 子网划分
子网划分的思路是从主机号中借出若干位作为子网号,再用子网掩码标识哪些位属于网络部分。
- 子网数 =2n=2^n=2n,其中 nnn 为借用的位数;
- 每个子网可用主机数 =2m−2=2^m – 2=2m−2,其中 mmm 为剩余主机位数,减 2 是去掉网络地址与广播地址。
例:把 192.168.1.0/24 划分为 4 个子网,需要借 2 位,掩码变为 255.255.255.192,每个子网可用主机数为 26−2=622^6 – 2 = 6226−2=62 台。
子网划分的推导过程可以这样理解:
#mermaid-svg-bCaA7ZSZTG7X0Kk7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .error-icon{fill:#552222;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .marker.cross{stroke:#333333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 p{margin:0;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .cluster-label text{fill:#333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .cluster-label span{color:#333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .cluster-label span p{background-color:transparent;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .label text,#mermaid-svg-bCaA7ZSZTG7X0Kk7 span{fill:#333;color:#333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .node rect,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .node circle,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .node ellipse,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .node polygon,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .rough-node .label text,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .node .label text,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .image-shape .label,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .rough-node .label,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .node .label,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .image-shape .label,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .icon-shape .label{text-align:center;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .node.clickable{cursor:pointer;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .arrowheadPath{fill:#333333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .cluster text{fill:#333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .cluster span{color:#333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .icon-shape,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .icon-shape p,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .icon-shape .label rect,#mermaid-svg-bCaA7ZSZTG7X0Kk7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bCaA7ZSZTG7X0Kk7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
192.168.1.0/24 掩码 255.255.255.0
从主机号借 2 位作子网号
新掩码 255.255.255.192(/26)
子网数 = 2^2 = 4
每子网主机位 m = 6
可用主机数 = 2^6 – 2 = 62
4 个子网:.0 / .64 / .128 / .192
4.2.4 CIDR 与路由聚合
CIDR 用 a.b.c.d/n 的记法直接给出网络前缀长度,彻底取消了分类的概念,使地址分配可以按实际需求精确到任意 2 的幂。
- 路由聚合(超网):把多个连续前缀合并为更短前缀。
例:192.168.0.0/24 与 192.168.1.0/24 → 192.168.0.0/23。 - 最长前缀匹配:转发表中选与目的地址匹配的最长前缀。
[!tip] 计算套路
4.3 IP 数据报格式
IPv4 数据报首部固定 20 B,加上可选字段最长 60 B。
| 版本 | 4 b | IPv4/IPv6 |
| 首部长度 | 4 b | 单位 4 B,最小 5(20 B) |
| 区分服务 | 8 b | QoS |
| 总长度 | 16 b | 首部 + 数据,单位字节,最大 65535 |
| 标识 | 16b | 同一数据报的所有分片相同 |
| 标志 | 3b | DF(禁止分片)、MF(还有分片) |
| 片偏移 | 13b | 单位 8B |
| 生存时间 TTL | 8b | 每经一个路由器减 1,为 0 丢弃 |
| 协议 | 8b | 6=TCP,17=UDP,1=ICMP,89=OSPF |
| 首部检验和 | 16b | 只检验首部 |
| 源/目的地址 | 各 32b | — |
| 可选字段 | 可变 | 填充至 4B 对齐 |
分片计算
当数据报长度超过链路 MTU 时必须分片。这里有两个容易踩坑的细节:片偏移的单位是 8 字节,因此除最后一片外,每片的数据长度必须是 8 的倍数。
例:数据报 4000B(20B 首部 + 3980B 数据),MTU 1500 → 每片数据 ≤1480B。
- 片 1:1480B,偏移 0,MF=1
- 片 2:1480B,偏移 185(1480/8),MF=1
- 片 3:1020B,偏移 370,MF=0
注意每片都要重新加上 20B 首部,所以实际在链路上传输的长度是 1500B、1500B、1040B。
分片过程与偏移关系如下:
#mermaid-svg-3EMh3uD4vgDcHKxb{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-3EMh3uD4vgDcHKxb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-3EMh3uD4vgDcHKxb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-3EMh3uD4vgDcHKxb .error-icon{fill:#552222;}#mermaid-svg-3EMh3uD4vgDcHKxb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3EMh3uD4vgDcHKxb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-3EMh3uD4vgDcHKxb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3EMh3uD4vgDcHKxb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3EMh3uD4vgDcHKxb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-3EMh3uD4vgDcHKxb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3EMh3uD4vgDcHKxb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3EMh3uD4vgDcHKxb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3EMh3uD4vgDcHKxb .marker.cross{stroke:#333333;}#mermaid-svg-3EMh3uD4vgDcHKxb svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3EMh3uD4vgDcHKxb p{margin:0;}#mermaid-svg-3EMh3uD4vgDcHKxb .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-3EMh3uD4vgDcHKxb .cluster-label text{fill:#333;}#mermaid-svg-3EMh3uD4vgDcHKxb .cluster-label span{color:#333;}#mermaid-svg-3EMh3uD4vgDcHKxb .cluster-label span p{background-color:transparent;}#mermaid-svg-3EMh3uD4vgDcHKxb .label text,#mermaid-svg-3EMh3uD4vgDcHKxb span{fill:#333;color:#333;}#mermaid-svg-3EMh3uD4vgDcHKxb .node rect,#mermaid-svg-3EMh3uD4vgDcHKxb .node circle,#mermaid-svg-3EMh3uD4vgDcHKxb .node ellipse,#mermaid-svg-3EMh3uD4vgDcHKxb .node polygon,#mermaid-svg-3EMh3uD4vgDcHKxb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3EMh3uD4vgDcHKxb .rough-node .label text,#mermaid-svg-3EMh3uD4vgDcHKxb .node .label text,#mermaid-svg-3EMh3uD4vgDcHKxb .image-shape .label,#mermaid-svg-3EMh3uD4vgDcHKxb .icon-shape .label{text-anchor:middle;}#mermaid-svg-3EMh3uD4vgDcHKxb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-3EMh3uD4vgDcHKxb .rough-node .label,#mermaid-svg-3EMh3uD4vgDcHKxb .node .label,#mermaid-svg-3EMh3uD4vgDcHKxb .image-shape .label,#mermaid-svg-3EMh3uD4vgDcHKxb .icon-shape .label{text-align:center;}#mermaid-svg-3EMh3uD4vgDcHKxb .node.clickable{cursor:pointer;}#mermaid-svg-3EMh3uD4vgDcHKxb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-3EMh3uD4vgDcHKxb .arrowheadPath{fill:#333333;}#mermaid-svg-3EMh3uD4vgDcHKxb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3EMh3uD4vgDcHKxb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3EMh3uD4vgDcHKxb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3EMh3uD4vgDcHKxb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-3EMh3uD4vgDcHKxb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3EMh3uD4vgDcHKxb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-3EMh3uD4vgDcHKxb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3EMh3uD4vgDcHKxb .cluster text{fill:#333;}#mermaid-svg-3EMh3uD4vgDcHKxb .cluster span{color:#333;}#mermaid-svg-3EMh3uD4vgDcHKxb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3EMh3uD4vgDcHKxb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-3EMh3uD4vgDcHKxb rect.text{fill:none;stroke-width:0;}#mermaid-svg-3EMh3uD4vgDcHKxb .icon-shape,#mermaid-svg-3EMh3uD4vgDcHKxb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3EMh3uD4vgDcHKxb .icon-shape p,#mermaid-svg-3EMh3uD4vgDcHKxb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-3EMh3uD4vgDcHKxb .icon-shape .label rect,#mermaid-svg-3EMh3uD4vgDcHKxb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3EMh3uD4vgDcHKxb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-3EMh3uD4vgDcHKxb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-3EMh3uD4vgDcHKxb :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
原始数据报 4000B首部 20B + 数据 3980B
MTU 1500B每片数据 ≤ 1480B
片 1:数据 1480B偏移 0,MF=1
片 2:数据 1480B偏移 185,MF=1
片 3:数据 1020B偏移 370,MF=0
链路长度 1500B
链路长度 1500B
链路长度 1040B
4.4 地址解析协议 ARP
ARP 解决的问题是:已知 IP 地址,求同一局域网内的 MAC 地址。
过程分四步:查 ARP 高速缓存 → 未命中则广播 ARP 请求 → 目标单播应答 → 写入缓存(有生存时间)。
关键点在于:跨网段通信时,ARP 解析的是默认网关的 MAC 地址,而非最终目的主机的 MAC 地址。因为帧只能在本地链路内传输,目的 IP 地址始终不变,但目的 MAC 地址会逐跳改变。
四种典型情况:同网段主机、跨网段主机、路由器转发、路由器到主机。
ARP 解析的完整时序:
"目标主机/网关""本地局域网(广播)""ARP 高速缓存""源主机""目标主机/网关""本地局域网(广播)""ARP 高速缓存""源主机"#mermaid-svg-CcnpDpAMjsyyPSU3{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CcnpDpAMjsyyPSU3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CcnpDpAMjsyyPSU3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CcnpDpAMjsyyPSU3 .error-icon{fill:#552222;}#mermaid-svg-CcnpDpAMjsyyPSU3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CcnpDpAMjsyyPSU3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CcnpDpAMjsyyPSU3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CcnpDpAMjsyyPSU3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CcnpDpAMjsyyPSU3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CcnpDpAMjsyyPSU3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CcnpDpAMjsyyPSU3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CcnpDpAMjsyyPSU3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CcnpDpAMjsyyPSU3 .marker.cross{stroke:#333333;}#mermaid-svg-CcnpDpAMjsyyPSU3 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CcnpDpAMjsyyPSU3 p{margin:0;}#mermaid-svg-CcnpDpAMjsyyPSU3 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-CcnpDpAMjsyyPSU3 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-CcnpDpAMjsyyPSU3 .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-CcnpDpAMjsyyPSU3 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-CcnpDpAMjsyyPSU3 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-CcnpDpAMjsyyPSU3 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-CcnpDpAMjsyyPSU3 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-CcnpDpAMjsyyPSU3 .sequenceNumber{fill:white;}#mermaid-svg-CcnpDpAMjsyyPSU3 #sequencenumber{fill:#333;}#mermaid-svg-CcnpDpAMjsyyPSU3 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-CcnpDpAMjsyyPSU3 .messageText{fill:#333;stroke:none;}#mermaid-svg-CcnpDpAMjsyyPSU3 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-CcnpDpAMjsyyPSU3 .labelText,#mermaid-svg-CcnpDpAMjsyyPSU3 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-CcnpDpAMjsyyPSU3 .loopText,#mermaid-svg-CcnpDpAMjsyyPSU3 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-CcnpDpAMjsyyPSU3 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-CcnpDpAMjsyyPSU3 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-CcnpDpAMjsyyPSU3 .noteText,#mermaid-svg-CcnpDpAMjsyyPSU3 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-CcnpDpAMjsyyPSU3 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-CcnpDpAMjsyyPSU3 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-CcnpDpAMjsyyPSU3 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-CcnpDpAMjsyyPSU3 .actorPopupMenu{position:absolute;}#mermaid-svg-CcnpDpAMjsyyPSU3 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-CcnpDpAMjsyyPSU3 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-CcnpDpAMjsyyPSU3 .actor-man circle,#mermaid-svg-CcnpDpAMjsyyPSU3 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-CcnpDpAMjsyyPSU3 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}alt[缓存命中][缓存未命中]查询目的 IP 对应的 MAC直接返回 MAC广播 ARP 请求(目的 IP)请求送达单播 ARP 应答(自身 MAC)写入缓存(带生存时间)
[!warning] ARP 欺骗
ARP 无认证,攻击者可伪造应答实现中间人攻击,需配合静态绑定或 DAI。
4.5 IP 层转发流程
一个分组到达路由器后,转发过程可以拆成五步:
#mermaid-svg-S9tuFMniffOt0Joe{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-S9tuFMniffOt0Joe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-S9tuFMniffOt0Joe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-S9tuFMniffOt0Joe .error-icon{fill:#552222;}#mermaid-svg-S9tuFMniffOt0Joe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-S9tuFMniffOt0Joe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-S9tuFMniffOt0Joe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-S9tuFMniffOt0Joe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-S9tuFMniffOt0Joe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-S9tuFMniffOt0Joe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-S9tuFMniffOt0Joe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-S9tuFMniffOt0Joe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-S9tuFMniffOt0Joe .marker.cross{stroke:#333333;}#mermaid-svg-S9tuFMniffOt0Joe svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-S9tuFMniffOt0Joe p{margin:0;}#mermaid-svg-S9tuFMniffOt0Joe .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-S9tuFMniffOt0Joe .cluster-label text{fill:#333;}#mermaid-svg-S9tuFMniffOt0Joe .cluster-label span{color:#333;}#mermaid-svg-S9tuFMniffOt0Joe .cluster-label span p{background-color:transparent;}#mermaid-svg-S9tuFMniffOt0Joe .label text,#mermaid-svg-S9tuFMniffOt0Joe span{fill:#333;color:#333;}#mermaid-svg-S9tuFMniffOt0Joe .node rect,#mermaid-svg-S9tuFMniffOt0Joe .node circle,#mermaid-svg-S9tuFMniffOt0Joe .node ellipse,#mermaid-svg-S9tuFMniffOt0Joe .node polygon,#mermaid-svg-S9tuFMniffOt0Joe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-S9tuFMniffOt0Joe .rough-node .label text,#mermaid-svg-S9tuFMniffOt0Joe .node .label text,#mermaid-svg-S9tuFMniffOt0Joe .image-shape .label,#mermaid-svg-S9tuFMniffOt0Joe .icon-shape .label{text-anchor:middle;}#mermaid-svg-S9tuFMniffOt0Joe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-S9tuFMniffOt0Joe .rough-node .label,#mermaid-svg-S9tuFMniffOt0Joe .node .label,#mermaid-svg-S9tuFMniffOt0Joe .image-shape .label,#mermaid-svg-S9tuFMniffOt0Joe .icon-shape .label{text-align:center;}#mermaid-svg-S9tuFMniffOt0Joe .node.clickable{cursor:pointer;}#mermaid-svg-S9tuFMniffOt0Joe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-S9tuFMniffOt0Joe .arrowheadPath{fill:#333333;}#mermaid-svg-S9tuFMniffOt0Joe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-S9tuFMniffOt0Joe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-S9tuFMniffOt0Joe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-S9tuFMniffOt0Joe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-S9tuFMniffOt0Joe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-S9tuFMniffOt0Joe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-S9tuFMniffOt0Joe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-S9tuFMniffOt0Joe .cluster text{fill:#333;}#mermaid-svg-S9tuFMniffOt0Joe .cluster span{color:#333;}#mermaid-svg-S9tuFMniffOt0Joe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-S9tuFMniffOt0Joe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-S9tuFMniffOt0Joe rect.text{fill:none;stroke-width:0;}#mermaid-svg-S9tuFMniffOt0Joe .icon-shape,#mermaid-svg-S9tuFMniffOt0Joe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-S9tuFMniffOt0Joe .icon-shape p,#mermaid-svg-S9tuFMniffOt0Joe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-S9tuFMniffOt0Joe .icon-shape .label rect,#mermaid-svg-S9tuFMniffOt0Joe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-S9tuFMniffOt0Joe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-S9tuFMniffOt0Joe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-S9tuFMniffOt0Joe :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
是
否
收到分组
提取目的 IP
同网段?
ARP 解析目的主机 MAC
查路由表最长前缀匹配
ARP 解析下一跳 MAC
TTL 减 1 并重算检验和
封装成帧发出
4.6 路由选择协议
路由协议分为自治系统内部与自治系统之间两大类。
| RIP | 内部网关协议 IGP | 距离向量(Bellman-Ford) | 自治系统内 | 跳数度量,最大 15 跳,30s 周期广播,收敛慢(坏消息传得慢) |
| OSPF | 内部网关协议 | 链路状态(Dijkstra) | 自治系统内 | 洪泛链路状态,分区域(骨干区 0),收敛快,支持等价负载均衡 |
| BGP | 外部网关协议 EGP | 路径向量 | 自治系统之间 | 基于策略,TCP 179 端口,传的是可达性而非最优路径 |
RIP 距离向量更新规则:收到邻居路由表后,所有距离 +1;若下一跳相同则无条件更新,否则仅当距离更小时更新。
OSPF 五种分组:问候(Hello)、数据库描述、链路状态请求、链路状态更新、链路状态确认。
三类路由协议的定位关系:
#mermaid-svg-FDx2t2PSGguEmWCE{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-FDx2t2PSGguEmWCE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-FDx2t2PSGguEmWCE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-FDx2t2PSGguEmWCE .error-icon{fill:#552222;}#mermaid-svg-FDx2t2PSGguEmWCE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-FDx2t2PSGguEmWCE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-FDx2t2PSGguEmWCE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-FDx2t2PSGguEmWCE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-FDx2t2PSGguEmWCE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-FDx2t2PSGguEmWCE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-FDx2t2PSGguEmWCE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-FDx2t2PSGguEmWCE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-FDx2t2PSGguEmWCE .marker.cross{stroke:#333333;}#mermaid-svg-FDx2t2PSGguEmWCE svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-FDx2t2PSGguEmWCE p{margin:0;}#mermaid-svg-FDx2t2PSGguEmWCE .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-FDx2t2PSGguEmWCE .cluster-label text{fill:#333;}#mermaid-svg-FDx2t2PSGguEmWCE .cluster-label span{color:#333;}#mermaid-svg-FDx2t2PSGguEmWCE .cluster-label span p{background-color:transparent;}#mermaid-svg-FDx2t2PSGguEmWCE .label text,#mermaid-svg-FDx2t2PSGguEmWCE span{fill:#333;color:#333;}#mermaid-svg-FDx2t2PSGguEmWCE .node rect,#mermaid-svg-FDx2t2PSGguEmWCE .node circle,#mermaid-svg-FDx2t2PSGguEmWCE .node ellipse,#mermaid-svg-FDx2t2PSGguEmWCE .node polygon,#mermaid-svg-FDx2t2PSGguEmWCE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-FDx2t2PSGguEmWCE .rough-node .label text,#mermaid-svg-FDx2t2PSGguEmWCE .node .label text,#mermaid-svg-FDx2t2PSGguEmWCE .image-shape .label,#mermaid-svg-FDx2t2PSGguEmWCE .icon-shape .label{text-anchor:middle;}#mermaid-svg-FDx2t2PSGguEmWCE .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-FDx2t2PSGguEmWCE .rough-node .label,#mermaid-svg-FDx2t2PSGguEmWCE .node .label,#mermaid-svg-FDx2t2PSGguEmWCE .image-shape .label,#mermaid-svg-FDx2t2PSGguEmWCE .icon-shape .label{text-align:center;}#mermaid-svg-FDx2t2PSGguEmWCE .node.clickable{cursor:pointer;}#mermaid-svg-FDx2t2PSGguEmWCE .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-FDx2t2PSGguEmWCE .arrowheadPath{fill:#333333;}#mermaid-svg-FDx2t2PSGguEmWCE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-FDx2t2PSGguEmWCE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-FDx2t2PSGguEmWCE .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FDx2t2PSGguEmWCE .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-FDx2t2PSGguEmWCE .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FDx2t2PSGguEmWCE .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-FDx2t2PSGguEmWCE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-FDx2t2PSGguEmWCE .cluster text{fill:#333;}#mermaid-svg-FDx2t2PSGguEmWCE .cluster span{color:#333;}#mermaid-svg-FDx2t2PSGguEmWCE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-FDx2t2PSGguEmWCE .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-FDx2t2PSGguEmWCE rect.text{fill:none;stroke-width:0;}#mermaid-svg-FDx2t2PSGguEmWCE .icon-shape,#mermaid-svg-FDx2t2PSGguEmWCE .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FDx2t2PSGguEmWCE .icon-shape p,#mermaid-svg-FDx2t2PSGguEmWCE .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-FDx2t2PSGguEmWCE .icon-shape .label rect,#mermaid-svg-FDx2t2PSGguEmWCE .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FDx2t2PSGguEmWCE .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-FDx2t2PSGguEmWCE .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-FDx2t2PSGguEmWCE :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
路由选择协议
自治系统内部 IGP
自治系统之间 EGP
RIP距离向量 Bellman-Ford最大 15 跳
OSPF链路状态 Dijkstra分区域,收敛快
BGP路径向量,基于策略TCP 179
4.7 路由器结构
| 输入端口 | 物理层接收、数据链路层解帧、查转发表 |
| 交换结构 | 把分组从输入端口送到输出端口(内存/总线/交换网络) |
| 输出端口 | 缓存、排队、发送 |
| 路由处理器 | 运行路由协议,维护路由表(控制平面) |
控制平面与数据平面分离是 SDN 的核心思想:转发表由远程控制器下发,路由器本身退化为纯粹的转发设备。
4.8 IPv6
| 地址长度 | 32 位 | 128 位 |
| 首部 | 20B 固定 + 可选 | 40B 固定,扩展首部 |
| 分片 | 路由器可分片 | 只在源端分片 |
| 检验和 | 有 | 取消(依赖上下层) |
| 地址记法 | 点分十进制 | 冒号十六进制,:: 压缩连续 0 |
过渡技术:双协议栈、隧道技术(IPv6 封装在 IPv4 中)、NAT64。
4.9 组播、VPN 与 NAT
- IP 组播:D 类地址,IGMP 管理组成员,组播路由协议(DVMRP、PIM)。
- VPN:利用公网建立专用通道,隧道技术 + 加密(IPsec)。
- NAT:私有地址与公网地址转换,NAPT 用端口区分内网主机;缓解 IPv4 地址枯竭。
本章考点
[!tip] 必会
关联
- 上级:[[计算机网络总纲]]
- 上一章:[[第3章 数据链路层]]
- 下一章:[[第5章 运输层]]



