Appearance
体系结构:OSI 七层与 TCP/IP 模型
概念
网络体系结构(network architecture)= 分层 + 各层协议的集合。它是"计算机网络怎么组织"的顶层设计,与具体实现(用什么芯片、什么操作系统)无关。
一句话说清它是什么:网络体系结构就是"把'很多台机器怎么通信'这个巨大的问题,切成七个(或五个)小问题,每个小问题交给一层去解决"。
分层的两条基本规则:
text
① 每一层只做自己那一件事, 并向上提供服务 (上层是下层的"用户")
② 第 n 层只与"对方的第 n 层"对话 (对等通信)
实际数据不横着飞, 而是一层层往下走, 到最底下才真正传出去⚠️ 最容易搞混的一点:"第 n 层与对方的第 n 层通信"是逻辑上的——真实的数据流是"发送方自上而下逐层封装 → 物理介质 → 接收方自下而上逐层解封装"。 "对等层对话"是抽象的,这句话的严谨说法叫"对等通信(peer-to-peer communication)"。
原理
一、OSI 七层:逐层解决什么
OSI(Open Systems Interconnection,开放系统互连参考模型)把通信过程切成七层,从下往上:
| 层号 | 名称 | 一句话职责 | PDU 名 | 典型协议 | 典型设备 |
|---|---|---|---|---|---|
| 7 | 应用层 | 直接为用户程序服务(文件传输、邮件、网页) | 报文 | HTTP、FTP、SMTP、DNS、DHCP | 网关 |
| 6 | 表示层 | 数据格式转换 / 加密解密 / 压缩解压 | 报文 | (无独立协议) | — |
| 5 | 会话层 | 建立、管理、同步会话(哪边先说话、断点续传) | 报文 | (无独立协议) | — |
| 4 | 传输层 | 端到端(进程到进程)的通信、可靠性与流量控制 | 报文段(TCP) / 用户数据报(UDP) | TCP、UDP | — |
| 3 | 网络层 | 分组从源主机经若干网络送到目的主机(路由与转发) | 数据报 / 分组 | IP、ICMP、OSPF、RIP、BGP | 路由器 |
| 2 | 数据链路层 | 相邻结点之间的无差错传输(成帧、差错控制、介质访问) | 帧 | 以太网、PPP、HDLC | 网桥、交换机、网卡 |
| 1 | 物理层 | 在传输介质上透明地传输"比特流" | 比特 | (RS-232、RJ-45 等接口标准) | 中继器、集线器 |
记忆口诀(自下而上):物、链、网、传、会、表、应——"物链网传会表应"。
七层的"分组记忆法":
text
① 底下三层管"怎么把数据送到对方主机" 物理层 / 数据链路层 / 网络层
② 第 4 层管"送到对方哪个进程" 传输层
③ 顶上三层管"送到的数据怎么被用" 会话层 / 表示层 / 应用层二、TCP/IP 四层与五层折中模型
TCP/IP 模型是实际在用的那套——它把 OSI 的"会话层 + 表示层"并进了"应用层",把 OSI 的"物理层 + 数据链路层"合成了"网络接口层":
text
OSI 七层 TCP/IP 四层 教学用"五层"
┌──────────┐
│ 应用层 │ ┐
├──────────┤ │
│ 表示层 │ ├─── 合并 ─────────> ┌──────────┐ ┌──────────┐
├──────────┤ │ │ 应用层 │ │ 应用层 │
│ 会话层 │ ┘ ├──────────┤ ├──────────┤
├──────────┤ │ 传输层 │ │ 传输层 │
│ 传输层 │ ───────────────────> ├──────────┤ ├──────────┤
├──────────┤ │ 网际层 │ │ 网络层 │
│ 网络层 │ ───────────────────> ├──────────┤ ├──────────┤
├──────────┤ │ 网络接口 │ ┌────> │ 数据链路 │
│ 数据链路 │ ┐ │ 层 │ ─┘ ├──────────┤
├──────────┤ ├─── 合并 ─────────> └──────────┘ │ 物理层 │
│ 物理层 │ ┘ └──────────┘
└──────────┘| 对照点 | OSI 七层 | TCP/IP 四层 | 五层(教学用) |
|---|---|---|---|
| 层数 | 7 | 4 | 5 |
| 顶层 | 应用层(+ 会话 + 表示) | 应用层(三层合一) | 应用层 |
| 底层 | 物理层 + 数据链路层 | 网络接口层(两层合一) | 物理层 + 数据链路层(分开) |
| 性质 | 法定(国际标准) | 事实(先有协议后有模型) | 便于教学 |
| 是否过时 | 未真正流行 | 实际在用 | 考试与教材常用 |
⚠️ "四层 vs 五层"是同一个东西的两种讲法:考试若说"TCP/IP 四层",就写"网络接口层";若说"五层结构",就把"物理层 + 数据链路层"分开写。 写之前先看题目用的是哪套,别混着写。
三、协议三要素与几个必须分清的名词
协议(protocol)= 通信双方必须共同遵守的规则,它由三要素构成:
| 要素 | 含义 | 类比 |
|---|---|---|
| 语法 | 数据与控制信息的结构或格式 | "怎么摆"(字段顺序、位宽) |
| 语义 | 需要发出何种控制信息、完成何种动作、做出何种响应 | "什么意思" |
| 时序(同步) | 事件实现顺序的详细说明 | "按什么顺序" |
四个容易混的名词:
| 名词 | 全称 | 含义 |
|---|---|---|
| PDU | 协议数据单元 | 对等层之间传递的数据单位(第 n 层的 PDU) |
| SDU | 服务数据单元 | 上层交给下层的"数据"(被服务的对象) |
| SAP | 服务访问点 | 上层访问下层服务的位置(层间的"门") |
| PCI | 协议控制信息 | 本层加的首部(PDU = SDU + PCI) |
⚠️ 三者的关系一句话:第
层的 SDU 加上第 层的 PCI,就是第 层的 PDU——而这个 PDU 又是第 层的 SDU。 "上层的整个包 = 下层的载荷",这就是封装的全部含义。
四、封装与解封装:数据的名字逐层变化
text
发送方(自上而下, 逐层加首部) 接收方(自下而上, 逐层剥首部)
应用层 [ 报文(Message) ] 应用层
↓ 加 TCP 首部 ↑ 剥掉 TCP 首部
传输层 [TCP| 报文段(Segment) ] 传输层
↓ 加 IP 首部 ↑ 剥掉 IP 首部
网络层 [IP |TCP| 数据报(Datagram) ] 网络层
↓ 加以太网首部 + 尾部 ↑ 剥掉首尾
链路层 [MAC|IP |TCP| 帧(Frame) |FCS] 链路层
↓ 转成电/光信号 ↑ 转回比特
物理层 0101010101010101 (比特流) 物理层
│
└────── 真实传输的只有这一段 ──────┘各层数据单元的名称(必背,考试常在这里设错):
| 层 | 数据单元名 |
|---|---|
| 应用层 | 报文(message) |
| 传输层 | 报文段(segment,TCP)/ 用户数据报(user datagram,UDP) |
| 网络层 | 数据报 / 分组(datagram / packet) |
| 数据链路层 | 帧(frame) |
| 物理层 | 比特(bit) |
⚠️ "分组"和"帧"别混:网络层的叫"分组",链路层的叫"帧"——同一个数据在不同层有不同的名字,这就是"分层"在术语上的体现。 考试里出现"某设备的缓存里装着帧",那它工作在链路层。
五、各层设备:一个设备"处理到哪一层"
text
设备 处理到 放大的/识别的
─────────────────────────────────────────────────────────
中继器 / 集线器 物理层 只放大信号, 不懂帧结构
网桥 / 交换机 / 网卡 数据链路层 认 MAC 地址, 按帧转发
路由器 网络层 认 IP 地址, 按分组转发
网关 应用层(最高) 做协议转换, 能一路看懂到应用层⚠️ 一句话判据:"设备处理到哪一层,就看它能看懂哪种地址"。
- 集线器只懂电信号(所以它是"共享带宽"的:一个口发,所有口都能收到)。
- 交换机懂 MAC 地址(能按 MAC 选口转发,所以每个口独享带宽)。
- 路由器懂 IP 地址(能跨网段选路)。 这也解释了"为什么交换机不能隔离广播域、路由器可以"——广播帧是链路层概念,路由器根本不看链路层。
六、分层的代价:每层都要加首部
分层不是免费的:每层都要在自己的数据前面加一个首部(有时还有尾部)——层数越多,有效载荷率越低。
以"应用层 1000 B 数据经过 TCP/IP/以太网"为例(本章锚点):
| 层次 | 加的东西 | 长度 | 封装后 |
|---|---|---|---|
| 应用层 | 数据 | — | 1000 B |
| 传输层 | TCP 首部 | 20 B | 1020 B(报文段) |
| 网络层 | IP 首部 | 20 B | 1040 B(分组) |
| 链路层 | 以太网首部 | 14 B | 1054 B |
| 链路层 | 帧尾 FCS | 4 B | 1058 B(帧) |
但载荷越小,开销率越吓人:
| 应用层载荷 | 帧长 | 开销 | 效率 |
|---|---|---|---|
| 1 B | 59 B | 58 B | 1.69% |
| 20 B | 78 B | 58 B | 25.64% |
| 100 B | 158 B | 58 B | 63.29% |
| 536 B | 594 B | 58 B | 90.24% |
| 1460 B | 1518 B | 58 B | 96.18% |
⚠️ 两个必须记的数字:
- "58 B 的固定开销"就是分层的税——发 1 字节要配 58 字节的首尾,效率不到 2%。
- MTU = 1500 B 指的是"IP 层载荷(IP 首部 + 数据)",不含以太网首尾——所以以太网最大帧 = 1500 + 14 + 4 = 1518 B(不带 VLAN 标签时)。"MTU 1500 = 帧 1500"是最常见的错。这就是"为什么网络层要分片、传输层要有 MSS"的由来——帧装不下就得拆,见
net/30-ip.md与net/41-tcp.md。
示例
例 1:C 实现——逐层封装与开销计算
参数:应用数据 1000 B;TCP 首部 20 B、IP 首部 20 B、以太网首部 14 B、帧尾 FCS 4 B;MTU 1500 B。
#include <stdio.h>
#define APP 1000 /* 应用层数据长度(字节) */
int main(void) {
int tcp = 20, ip = 20, eth = 14, fcs = 4;
int payload[5] = {1, 20, 100, 536, 1460};
int cur, i;
cur = APP;
printf("应用数据 %d B, 逐层封装:\n", APP);
printf(" 应用层 数据 %4d B\n", cur);
cur += tcp;
printf(" + TCP 首部 %4d B -> 段 %d B\n", tcp, cur);
cur += ip;
printf(" + IP 首部 %4d B -> 分组 %d B\n", ip, cur);
cur += eth;
printf(" + 以太网首部 %4d B -> 帧 %d B\n", eth, cur);
cur += fcs;
printf(" + 帧尾 FCS %4d B -> 帧 %d B\n", fcs, cur);
printf("\n");
printf("开销 = %d B, 开销率 = %.2f%%, 有效载荷率 = %.2f%%\n",
cur - APP, (cur - APP) * 100.0 / cur, APP * 100.0 / cur);
printf("\nMTU 1500 B 下, 载荷不同时的帧效率:\n");
for (i = 0; i < 5; i++) {
int f = payload[i] + tcp + ip + eth + fcs;
printf(" 载荷 %4d B -> 帧 %4d B, 开销 58 B, 效率 %6.2f%%\n",
payload[i], f, payload[i] * 100.0 / f);
}
return 0;
}
c 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
预期输出:
应用数据 1000 B, 逐层封装:
应用层 数据 1000 B
+ TCP 首部 20 B -> 段 1020 B
+ IP 首部 20 B -> 分组 1040 B
+ 以太网首部 14 B -> 帧 1054 B
+ 帧尾 FCS 4 B -> 帧 1058 B
开销 = 58 B, 开销率 = 5.48%, 有效载荷率 = 94.52%
MTU 1500 B 下, 载荷不同时的帧效率:
载荷 1 B -> 帧 59 B, 开销 58 B, 效率 1.69%
载荷 20 B -> 帧 78 B, 开销 58 B, 效率 25.64%
载荷 100 B -> 帧 158 B, 开销 58 B, 效率 63.29%
载荷 536 B -> 帧 594 B, 开销 58 B, 效率 90.24%
载荷 1460 B -> 帧 1518 B, 开销 58 B, 效率 96.18%⚠️ 三点说明:
- 中文标签一律不用宽度说明符(
%4d只用在数字上)——C 的printf对中文按"字节"补宽度,%-8s对中文必然错位。每行靠手工对齐"半角空格"补位。 (cur - APP) * 100.0 / cur里的100.0不能写成100——整数除法会把 5.48 直接截成 5。- 本机无 C 编译器:此段代码逐行人工审查,并用等价的 Python 实现实跑核对,输出 17 行逐字一致。
例 2:Python——三套模型对照、封装解封装与设备归属
def pad(s, w):
"""按"显示宽度"补空格: 中文算 2 列, 否则终端里对不齐"""
return s + ' ' * max(0, w - sum(2 if ord(c) > 0x2000 else 1 for c in s))
PHY, LINK, NET, TRANS, APP = 0, 1, 2, 3, 4
LAYERS = ['物理层', '数据链路层', '网络层', '传输层', '应用层']
HDR = {APP: 'HTTP 首部', TRANS: 'TCP 首部', NET: 'IP 首部', LINK: '以太网首部'}
print('=== ① 三套模型对照 ===')
print(' ' + pad('OSI 七层', 14) + pad('TCP/IP 四层', 16) + '五层(教学)')
rows = [('应用层', '应用层', '应用层'), ('表示层', '应用层', '应用层'),
('会话层', '应用层', '应用层'), ('传输层', '传输层', '传输层'),
('网络层', '网际层', '网络层'), ('数据链路层', '网络接口层', '数据链路层'),
('物理层', '网络接口层', '物理层')]
for r in rows:
print(' ' + pad(r[0], 14) + pad(r[1], 16) + r[2])
print(' OSI 7 层 / TCP-IP 4 层 / 教学 5 层; "四层"与"五层"只是细分粒度不同')
print()
print('=== ② 各层 PDU 名称与典型协议 ===')
pdu = [('物理层', '比特', '-', '中继器/集线器'),
('数据链路层', '帧', '以太网/PPP/HDLC', '网桥/交换机'),
('网络层', '数据报(分组)', 'IP/ICMP/OSPF/RIP/BGP', '路由器'),
('传输层', '报文段(TCP)/用户数据报(UDP)', 'TCP/UDP', '-'),
('应用层', '报文', 'HTTP/FTP/SMTP/DNS/DHCP', '网关')]
print(' ' + pad('层', 14) + pad('PDU', 28) + pad('典型协议', 26) + '典型设备')
for r in pdu:
print(' ' + pad(r[0], 14) + pad(r[1], 28) + pad(r[2], 26) + r[3])
print()
print('=== ③ 封装: 自上而下每层加一个首部 ===')
frame = 'GET /index.html'
print(' 应用层 报文 : ' + frame)
for L in [TRANS, NET, LINK]:
frame = '[%s]%s' % (HDR[L], frame)
print(' + ' + pad(HDR[L], 12) + '-> ' + pad(LAYERS[L], 14) + ': ' + frame)
raw = frame
print(' 物理层 转成比特流 : 0101...0101 (帧长 %d 字节)' % len(frame))
print()
print('=== ④ 解封装: 接收端自下而上逐层剥掉首部 ===')
cur = raw
for L in [LINK, NET, TRANS]:
tag = '[%s]' % HDR[L]
if cur.startswith(tag):
cur = cur[len(tag):]
print(' ' + pad(LAYERS[L], 14) + '剥掉 ' + pad(HDR[L], 12) + '-> ' + cur)
print(' 应用层 报文 : ' + cur + ' <- 与发送端一致')
print()
print('=== ⑤ 设备"处理到哪一层" ===')
for dev, lv in [('中继器/集线器', PHY), ('网桥/交换机/网卡', LINK),
('路由器', NET), ('网关', APP)]:
print(' ' + pad(dev, 20) + '处理到 ' + pad(LAYERS[lv], 14)
+ '-> 只看得懂: ' + '/'.join(LAYERS[:lv + 1]))
print(' ★ 判据: 设备能看懂哪种地址, 就工作在哪一层')
print()
print('=== ⑥ 分层的代价: 载荷越小, 首部越亏 ===')
OVER = 58
for L in [1, 20, 100, 536, 1460]:
f = L + OVER
print(' 载荷 %4d B -> 帧 %4d B, 开销 %d B, 效率 %6.2f%%' % (L, f, OVER, L * 100.0 / f))
print(' ★ MTU = 1500 指"IP 层载荷"; 以太网最大帧 = 1500 + 14 + 4 = 1518 B')
python 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
输出对照(真实运行结果):
=== ① 三套模型对照 ===
OSI 七层 TCP/IP 四层 五层(教学)
应用层 应用层 应用层
表示层 应用层 应用层
会话层 应用层 应用层
传输层 传输层 传输层
网络层 网际层 网络层
数据链路层 网络接口层 数据链路层
物理层 网络接口层 物理层
OSI 7 层 / TCP-IP 4 层 / 教学 5 层; "四层"与"五层"只是细分粒度不同
=== ② 各层 PDU 名称与典型协议 ===
层 PDU 典型协议 典型设备
物理层 比特 - 中继器/集线器
数据链路层 帧 以太网/PPP/HDLC 网桥/交换机
网络层 数据报(分组) IP/ICMP/OSPF/RIP/BGP 路由器
传输层 报文段(TCP)/用户数据报(UDP) TCP/UDP -
应用层 报文 HTTP/FTP/SMTP/DNS/DHCP 网关
=== ③ 封装: 自上而下每层加一个首部 ===
应用层 报文 : GET /index.html
+ TCP 首部 -> 传输层 : [TCP 首部]GET /index.html
+ IP 首部 -> 网络层 : [IP 首部][TCP 首部]GET /index.html
+ 以太网首部 -> 数据链路层 : [以太网首部][IP 首部][TCP 首部]GET /index.html
物理层 转成比特流 : 0101...0101 (帧长 37 字节)
=== ④ 解封装: 接收端自下而上逐层剥掉首部 ===
数据链路层 剥掉 以太网首部 -> [IP 首部][TCP 首部]GET /index.html
网络层 剥掉 IP 首部 -> [TCP 首部]GET /index.html
传输层 剥掉 TCP 首部 -> GET /index.html
应用层 报文 : GET /index.html <- 与发送端一致
=== ⑤ 设备"处理到哪一层" ===
中继器/集线器 处理到 物理层 -> 只看得懂: 物理层
网桥/交换机/网卡 处理到 数据链路层 -> 只看得懂: 物理层/数据链路层
路由器 处理到 网络层 -> 只看得懂: 物理层/数据链路层/网络层
网关 处理到 应用层 -> 只看得懂: 物理层/数据链路层/网络层/传输层/应用层
★ 判据: 设备能看懂哪种地址, 就工作在哪一层
=== ⑥ 分层的代价: 载荷越小, 首部越亏 ===
载荷 1 B -> 帧 59 B, 开销 58 B, 效率 1.69%
载荷 20 B -> 帧 78 B, 开销 58 B, 效率 25.64%
载荷 100 B -> 帧 158 B, 开销 58 B, 效率 63.29%
载荷 536 B -> 帧 594 B, 开销 58 B, 效率 90.24%
载荷 1460 B -> 帧 1518 B, 开销 58 B, 效率 96.18%
★ MTU = 1500 指"IP 层载荷"; 以太网最大帧 = 1500 + 14 + 4 = 1518 B六条结论:
- 三套模型只是"切的粒度不同":OSI 的"会话层 + 表示层"在 TCP/IP 里被并进应用层;TCP/IP 的"网络接口层"在五层模型里被拆回物理层 + 数据链路层——核心始终是那三层:网络层、传输层、应用层。
- 每层的 PDU 名字不同:比特 / 帧 / 数据报(分组)/ 报文段 / 报文——"帧"出现就说明在链路层,"分组"出现就说明在网络层,这是判层题的第一判据。
- 封装是"逐层加首部",解封装是"逐层剥首部",两者严格对称——脚本里剥完三层后得到的报文与发送端完全一致(
GET /index.html),这就是"对等层通信"能成立的原因。 - 设备归属完全由"能看懂哪种地址"决定:集线器只到物理层(只放大信号)→ 交换机到链路层(认 MAC)→ 路由器到网络层(认 IP)→ 网关到应用层。
- 分层要付"固定 58 B 首部开销"的税:载荷 1460 B 时效率 96.18%、20 B 时只剩 25.64%、1 B 时仅 1.69%——"小包效率低"是网络层的经典结论,也是"多小包会拖垮吞吐"的原因。
- MTU 与帧长的关系必须分清:MTU 1500 是"IP 层载荷上限",加上以太网首尾 18 B 才是"最大帧 1518 B"——题目问"帧能装多少数据"和"IP 分组能装多少数据"是两个不同的数。
考点
考点
1. 必背结论
- 网络体系结构 = 分层 + 各层协议的集合,与具体实现无关。
- 分层两条规则:每层只做一件事并向上提供服务;第
层与对方第 层逻辑上对等通信。 - OSI 七层自下而上:物理层 / 数据链路层 / 网络层 / 传输层 / 会话层 / 表示层 / 应用层(口诀"物链网传会表应")。
- TCP/IP 四层:网络接口层 / 网际层 / 传输层 / 应用层;教学五层 = 物理层 + 数据链路层 + 网络层 + 传输层 + 应用层。
- 每层 PDU 名称:比特(物理)/ 帧(链路)/ 数据报或分组(网络)/ 报文段或用户数据报(传输)/ 报文(应用)。
- OSI 三层分工:底下三层管"送到哪台主机";传输层管"送到哪个进程";顶上三层管"数据怎么被用"。
- 协议三要素:语法(结构格式)/ 语义(含义与动作)/ 时序或同步(顺序)。
- PDU = SDU + PCI(本层 SDU 加本层首部);SDU 是上层交给本层的数据,SAP 是层间服务访问点。
- 设备归属:中继器/集线器(物理层)/ 网桥/交换机/网卡(数据链路层)/ 路由器(网络层)/ 网关(应用层);判据是"能看懂哪种地址"。
- 典型协议归属:应用层 HTTP/FTP/SMTP/DNS/DHCP;传输层 TCP/UDP;网络层 IP/ICMP/OSPF/RIP/BGP;链路层以太网/PPP/HDLC。
- 锚点(本章定死):应用数据 1000 B → 段 1020 B → 分组 1040 B → 帧 1054 B → 帧 1058 B;固定开销 58 B(TCP 20 + IP 20 + 以太网 14 + FCS 4);开销率 5.48%、有效载荷率 94.52%。
- 锚点(载荷 vs 效率):1 B → 1.69%;20 B → 25.64%;100 B → 63.29%;536 B → 90.24%;1460 B → 96.18%。
- MTU 口径:MTU = 1500 B 指"IP 层载荷上限";以太网最大帧 = 1500 + 14 + 4 = 1518 B(不含 VLAN 标签)。
2. 高频陷阱
- 把 OSI 七层与 TCP/IP 四层混着写:错。四层里第 4 层叫"网络接口层"(合了物理 + 链路)、顶层叫"应用层"(合了会话 + 表示 + 应用);五层里物理层与数据链路层是分开的。
- 认为"OSI 是实际在用的模型":错。OSI 是国际标准但未真正流行;实际在用的是 TCP/IP——"事实标准先于模型出现"是这一段的历史事实。
- 说"传输层负责把数据送到目的主机":错。传输层是"端到端 / 进程到进程";"主机到主机"是网络层的职责——这两个"端"的范围不同,是最高频的混淆点。
- 把"分组"和"帧"当成同一个东西:错。网络层叫"分组(数据报)"、链路层叫"帧"——题目说"某设备缓存中存有帧",它就在链路层。
- 把"会话层/表示层"说成"有独立协议":错。**这两层在 TCP/IP 里被并入应用层,没有独立的协议标准——它们是"功能划分",不是"协议归属"。
- 把"ARP"简单归到网络层就完事:不准确。教材常把 ARP 写在网络层,但它实际跨二、三层(ARP 报文直接封装在以太网帧里,没有 IP 首部)——答题时按教材写"网络层",可补一句"实际工作在链路层与网络层之间"。
- 认为"分层越细越好":错。每层都要加首部(本题固定 58 B),层数越多开销越大、处理越慢——这正是 TCP/IP 把七层压成四层的原因之一。
- 算开销时把帧尾 FCS 漏掉:错。以太网首部 14 B + 帧尾 FCS 4 B,两个都要算——漏掉 FCS 会得到 54 B(错),正确是 58 B。
- 认为"MTU 1500 就是帧最大 1500 B":错。MTU 指 IP 层能承载的最大载荷;帧 = 1500 + 14 + 4 = 1518 B。
- 把"集线器"当成链路层设备:错。集线器只是"多端口的中继器",工作在物理层,不认 MAC 地址——所以它"一个口发、所有口收",带宽是共享的。
- 认为"交换机能隔离广播域":错。交换机只隔离"冲突域",广播域要靠路由器(或 VLAN)隔离——广播帧是链路层概念,交换机照样转发。
3. 解题模板("分层与封装题")
① 判"属于哪一层": 看数据单元名字(比特/帧/分组/报文段/报文)或看协议名
应用层: HTTP FTP SMTP DNS DHCP ; 传输层: TCP UDP
网络层: IP ICMP OSPF RIP BGP ; 链路层: 以太网 PPP HDLC
② 判"设备属于哪一层": 看它能看懂哪种地址
只放大信号 -> 物理层(中继器/集线器)
认 MAC -> 链路层(网桥/交换机)
认 IP -> 网络层(路由器)
做协议转换 -> 应用层(网关)
③ 算封装开销: 逐层加上首部(有时加尾部), 累加成帧长
固定开销 = TCP 20 + IP 20 + 以太网 14 + FCS 4 = 58 B
效率 = 应用层载荷 / 帧长
④ 注意 MTU 的口径: MTU = IP 层载荷上限; 帧长 = MTU + 14 + 4
⑤ 若问"四层还是五层": 按题目用词作答, 不要自己改层数4. 与相邻章节的接口
net/10-physical.md(物理层):下一章把最底下那层展开——本层只管"在介质上传比特",具体怎么编码、带宽多少、奈氏与香农极限,都在那一章。net/20-framing.md与net/21-error.md(数据链路层):"成帧"就是本章"封装"在最底层的具体动作;帧尾 FCS 就是差错校验的落点。net/30-ip.md与net/31-subnet.md(网络层):本章的"MTU 1500 / 1518"与"载荷效率"正是 IP 分片与 MSS 的由来——两章在这里直接接上。net/42-handshake.md(TCP 连接管理):"传输层是端到端"这句话的具体体现就是"三次握手建立的是两个进程之间的连接",而"网络层的分组可能是乱序、会丢的"。os/32-io.md(I/O 管理):"分层 + 每层只与上下相邻层交互"与操作系统的"四层 I/O 结构"是同一个设计思想——都是"用层次隔离变化"。lang/24-image.md(装载与协议栈):网络协议栈的"逐层封装"与 ELF 装载的"逐层解析"是同一种"分头处理"的结构。
小结
- 网络体系结构 = 分层 + 协议集合;第
层与对方第 层"对等通信"是逻辑上的,真实数据走"逐层封装 → 介质 → 逐层解封装"。 - OSI 七层(物链网传会表应)/ TCP-IP 四层 / 教学五层——差别只在"会话+表示是否并入应用"和"物理+链路是否合并"。
- 每层 PDU:比特 / 帧 / 数据报(分组)/ 报文段(用户数据报)/ 报文。
- 协议三要素:语法、语义、时序;PDU = SDU + PCI。
- 设备归属看"懂哪种地址":集线器(物理)/ 交换机(链路,认 MAC)/ 路由器(网络,认 IP)/ 网关(应用)。
- 锚点(1000 B 应用数据):1020 → 1040 → 1054 → 1058 B;固定开销 58 B、开销率 5.48%、有效载荷率 94.52%。
- 锚点(载荷 vs 效率):1 B → 1.69%;20 B → 25.64%;100 B → 63.29%;536 B → 90.24%;1460 B → 96.18%。
- MTU 1500 = IP 层载荷上限;以太网最大帧 1518 B(1500 + 14 + 4)。
评论(0)
当前浏览器不允许本地存储,评论无法保存。
还没有评论,来说两句。