目录
[3.1.3子网掩码与 CIDR(无类别域间路由)](#3.1.3子网掩码与 CIDR(无类别域间路由))
[3.2公网 IP 与私有 IP](#3.2公网 IP 与私有 IP)
[(5)私有IP vs 公网IP](#(5)私有IP vs 公网IP)
1.IP协议的核心定位
IP协议是TCP/IP协议栈中的指南针---它定义了数据报的格式、编址方式(IP地址)和路由转发机制 ,负责将数据从源主机"尽力而为"地送到目标主机,但不保证送达、顺序或完整性
IP协议位于网络层**,** 负责将数据从源主机跨网络送达目标主机,提供无连接、不可靠的数据报传输服务
- **无连接:**发送前不建立连接,每个数据报独立处理、走不同路径
- 不可靠(尽力而为):不保证不丢包、不乱序、不重复。丢包后不重传,错误检测(首部校验和)只保证首部正确,数据错误则直接丢弃
与传输层关系:IP协议负责主机到主机的可达性,TCP协议负责进程到进程(端到端)的可靠性与策略(端口号、流量控制、拥塞控制等),二者结合,向用户提供可靠通信能力
- IP层(主机到主机):解决"怎么找到对方主机"的问题。就像快递只送到你所在的小区。
- TCP协议(进程到进程):解决"找到主机后,交给哪个应用程序"以及"怎么保证可靠"的问题。就像小区快递员把包裹送到你家门口,并签字确认。
- 可靠通信能力是 IP + TCP组合后的结果。如果使用UDP,则依然不可靠
2.IP报文格式(IPv4)

| 字段 | 长度 | 说明 |
|---|---|---|
| 版本 | 4 bit | IPv4固定为4 |
| 首部长度 | 4 bit | 以 4 字节为单位,范围 5~15(20~60 字节) |
| 服务类型 | 8 bit | 前3位为优先级(已废弃),后5位为DSCP(差分服务码点),用于QoS |
| 总长度 | 16 bit | IP 报文总字节数(首部 + 数据),最大65535字节 |
| 标识 | 16 bit | 用于分片重组,分片时同一原始报文的标识相同 |
| 标志 | 3 bit | 第1位保留置为0 第二位 DF(Don't Fragment)位 = 1 表示禁止分片 第三位 MF(More Fragments)位 = 1 表示后续还有分片 |
| 片偏移 | 13 bit | 以 8 字节为单位,指明本分片数据在原始报文中的位置 |
| 生存时间(TTL) | 8 bit | 实质是一个计数器,表示最大跳数,每经过一个路由器减1,为0时丢弃。防止环路 |
| 协议 | 8 bit | 标识上层协议(6=TCP,17=UDP,1=ICMP 等) |
| 首部校验和 | 16 bit | 仅校验IP报头(不含数据),每跳重新计算 |
| 源/目的 IP | 各 32 bit | 主机标识 |
| 选项(Options) | 可变 | 可选,最长40字节,很少使用 |
(0)IP报头中的8位服务类型字段(了解):
- 早期定义(RFC 791):3位优先级 + 4位独立标志(延迟/吞吐/可靠/成本)+ 1位保留,一次只能请求一种服务质量
- 现代定义(RFC 2474):前6位为DSCP(区分服务码点) 用于 QoS,标记数据包优先级,后2位为**ECN(显式拥塞通知)**用于在不丢包的情况下通知拥塞,路由器根据DSCP值执行队列调度与丢包策略
- 路由器行为:根据发送端标记的DSCP值进行差异化处理
(1)报头与有效载荷分离
分离原理 = 固定偏移 + 自描述字段
- **固定偏移:**IP报头前20字节是固定结构,协议栈知道从哪里开始读
自描述字段:
- **4位首部长度:**告诉内核报头实际长度(20~60字节),从而找到数据起始位置
- **16位总长度:**知道整个IP报文长度,减去报头长度即得有效载荷长度
(2)向上层交付
- 依据:8位协议字段
- 流程:IP层解析完报头后,根据协议号(如6→TCP),将有效载荷交给对应的上层层协议处理
(3)TTL的作用
TTL 是 IP 报文的防环计数器,每经过一个网络层转发节点(包括源主机和路由器),TTL 减 1
| 作用 | 说明 |
|---|---|
| 防止路由环路 | 当网络中出现错误路由(如 A→B→C→A),报文会在环路中永远绕行 TTL 确保它在最多进行255跳后被丢弃 |
| 实现 traceroute | traceroute 工具利用 TTL 机制:连续发送 TTL=1,2,3... 的探测包,强制沿途路由器返回 ICMP 超时报文,从而逐跳发现路径。 |
丢弃是 指内核主动调用kfree_skb()释放 该报文占用的sk_buff和数据缓冲区内存,将其归还给内存池以供后续其他报文或内核模块复用
(4)重要设计思想
| 设计点 | 含义 |
|---|---|
| IP层提供完整报文 | 通过总长度字段,IP层能识别出一个个完整的IP报文,不存在"粘包/拆包"问题(注意:TCP粘包是TCP层行为,非IP层缺陷)。 |
| 面向字节流 vs 面向数据报 | 传输层面向应用层的概念:TCP无边界,UDP有边界。IP层的有边界是底层实现细节,上层的边界特性是服务抽象,二者不矛盾。 |
| 点分十进制转4字节 | 如192.168.1.1 → 0xC0A80101,便于内核高效填充IP报头。 |
| 路由转发中无传输层介入 | 原则上,中间路由器只处理网络层(查IP报头做转发),不解析端口。这是端到端设计原则 的体现。**例外:**防火墙/ACL可能检查端口做安全过滤;NAT因地址短缺需改写端口(IPv6因地址充足,不再需要NAT) |
- TCP:应用层下发的是无边界字节流,由TCP自行分段,再交给IP层封装成有边界的IP包
- UDP:应用层下发的是有边界数据报,UDP报文直接作为IP包的数据部分发送
(5)各层级标识对比
| 层次 | 核心标识 | 作用 | 填充 / 解析方 |
|---|---|---|---|
| 应用层 | 套接字(IP + 端口) | 唯一标识端到端的进程通信 | 应用 API 指定,内核负责封装 |
| 传输层 | 端口号 | 标识同一台主机上的不同进程 | 操作系统内核(TCP/UDP 首部) |
| 网络层 | IP 地址 | 标识网络中的一台主机 | 操作系统内核(IP 首部) |
(6)与TCP/UDP报头的对比
| 对比项 | IP报头 | TCP报头 | UDP报头 |
|---|---|---|---|
| 首部长度 | 20~60字节 | 20~60字节 | 8字节(固定) |
| 校验和范围 | 仅报头 | 伪首部+TCP报头+数据 | 伪首部+UDP报头+数据 |
| 长度字段 | 有(总长度) | 无(依赖IP总长度) | 有(UDP长度) |
| 分片 | 支持(标识符+标志+片偏移) | 不支持(由IP层处理) | 不支持 |
伪首部不是真实报文的一部分,而是计算校验和时临时拼凑的12字节结构:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 源IP地址(32位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目的IP地址(32位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 | 协议(8位) | TCP/UDP报文长度(16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 字段 | 长度 | 说明 |
|---|---|---|
| 源IP地址 | 32bit | 来自IP报头 |
| 目的IP地址 | 32bit | 来自IP报头 |
| 保留位 | 8bit | 固定为0 |
| 协议号 | 8bit | 6=TCP,17=UDP,来自IP报头 |
| TCP/UDP长度 | 16bit | TCP/UDP报头+数据的长度(单位:字节) |
3.IP地址
3.1 IP地址结构

IP地址由 网络号 和 主机号 两部分构成(通过子网掩码划分边界)
- 网络号:标识一个物理或逻辑子网
- 主机号:标识子网内的具体设备
报文跨网络传输原理 :路由器根据网络号 逐跳转发报文到目标网络,到达目标网络后再根据主机号交付给具体主机
3.1.2IP地址的有限性与早期问题
(1)数量有限
IPv4共2的32次方个地址,约为四十二亿九千万,但
随着入网设备爆炸式增长、保留地址、广播地址等消耗,无法为每台设备分配唯一的公网IP
(2)分类划分法
早期采用固定网络号长度的分类(A/B/C/D/E类),但这存在严重的IP浪费问题
例如:给一个只有200台主机的公司分配一个B类网络(可容纳65534个主机地址),造成大量地址闲置
(3)地址分配机制
-
IP地址由ICANN、区域互联网注册机构(如APNIC)协调分配给国家、运营商、组织
-
IP本身不直接赚钱,入网用户越多 → 网络价值越大 → 经济指标驱动竞争与合作
(4)解决方案
- 动态IP分配(DHCP):不固定占用IP,上线分配,下线回收
- 子网掩码 / CIDR:打破固定分类,灵活划分网络号长度,减少分配浪费
- NAT技术:让多个私有IP共享一个公网IP,缓解公网地址短缺
- IPv6:128位地址空间,从根本上解决地址耗尽问题,与 IPv4 不兼容,中国 IPv6 部署较积极,但普及受限于存量设备和应用生态
3.1.3子网掩码与 CIDR(无类别域间路由)
CIDR 决定网络号有多长,子网掩码把那个长度"翻译"成路由器能读懂的格式
| CIDR写法 | 意思 | 对应的子网掩码 |
|---|---|---|
/24 |
前24位是网络号 | 255.255.255.0 |
/25 |
前25位是网络号 | 255.255.255.128 |
/26 |
前26位是网络号 | 255.255.255.192 |
/16 |
前16位是网络号 | 255.255.0.0 |
(1)子网掩码的作用
子网掩码是一个 32 位二进制数 ,与 IP 地址按位与运算 ,得到网络号
网络号在前,主机号在后
1 表示对应位属于网络号,0 表示对应位属于主机号
| 表示法 | 示例 | 适用场景 |
|---|---|---|
| 点分十进制 | 255.255.255.0 |
设备配置(Windows/Linux) |
| CIDR前缀长度 | /24 |
路由表、网络规划文档 |
- IP:192.168.1.100
- 子网掩码:255.255.255.0(即 /24)
- → 网络号 = 192.168.1.0,主机号 = 100
子网掩码不是网络自带的 ,而是管理员配置的
没有子网掩码,IP 地址本身无法区分网络号和主机号
(2)特殊地址
- **网络号:**子网中主机位全0的地址,用于标识整个局域网,不能分配给任何主机
- **广播地址:**子网中主机位全1的地址,用于向同一链路中的所有主机发送数据包,不能分配给任何主机
- **环回地址(127.*):**127.0.0.1 是最常用的一个,用于本机自测试,数据包永远不会离开本机
(3)CIDR(无类别域间路由)
CIDR(无类别域间路由) 彻底放弃固定分类,允许任意前缀长度
表示法:IP地址/前缀长度n
含义:前n位为网络号,后(32-n)位为主机号

| 需求 | 分类法 | CIDR |
|---|---|---|
| 200 台主机 | C类(254 地址)勉强够,无扩展空间 | 分配 /23(512 地址)或 /24(254 地址) |
| 5000 台主机 | B类(65534 地址),严重浪费 | 分配 /19(8190 地址)或 /20(4094 地址) |
| 1000 万台主机 | A类(1600万地址),可能浪费 | 分配 /8 或更细粒度 /9//10 |
(4)路由聚合(CIDR 聚合)
多个连续的小网络可以合并为一条路由转发信息,减小路由器路由表
条件:被聚合的网络必须连续且前缀对齐
192.168.0.0/24
192.168.1.0/24
192.168.2.0/24
192.168.3.0/24
→ 聚合为:192.168.0.0/22
3.2公网 IP 与私有 IP
(1)私有IP地址范围
| 类 | 范围 | CIDR |
|---|---|---|
| A | 10.0.0.0 -- 10.255.255.255 | 10.0.0.0/8 |
| B | 172.16.0.0 -- 172.31.255.255 | 172.16.0.0/12 |
| C | 192.168.0.0 -- 192.168.255.255 | 192.168.0.0/16 |
(2)私有IP特点
- 只能在局域网内使用
- 不同局域网可以重复使用相同私有IP
- 必须经过NAT才能访问公网,外网不能访问私有IP
局域网设备使用私有IP通信,出网时NAT将源IP替换为公网IP,回包时再转换回来
(3)公网IP特点
- 全球唯一,可直接路由:可以在互联网上被唯一识别和直接访问
- 需要申请:必须向运营商或注册机构申请,不能随意使用
- 需付费使用:通常需要按年或按月付费,IPv4地址紧缺,成本较高
- 数量有限:这是导致IPv4地址枯竭的直接原因
(4)日常体验说明
- 绝大多数用户(电脑、手机、智能家居)始终使用私有IP
- 第一次接触公网IP的常见场景:购买云服务器(阿里云/腾讯云/AWS等)
- 云服务器会分配一个公网IP(弹性公网IP)
(5)私有IP vs 公网IP
| 特性 | 私有IP地址 | 公网IP地址 |
|---|---|---|
| 全局唯一性 | 仅在当前局域网内唯一 | 全球唯一 |
| 可路由性 | 不可直接路由 | 可直接路由 |
| 访问权限 | 需经NAT转换才能访问公网 | 可直接访问互联网 |
| 外网访问 | 外网无法主动直接访问 | 外网可随时直接访问 |
| 分配方式 | 自由使用,无需申请 | 需向运营商或注册机构申请、付费 |
| 典型用途 | 家庭、企业内部网络 | 网站服务器、网络设备出口 |
| 例子 | 192.168.1.1, 10.0.0.1 |
8.8.8.8, 1.1.1.1 |
私有IP是为了"节省"和"管理",公网IP是为了"唯一"和"可达"
两者通过NAT技术协同工作,构成了互联网
| 方向 | 是否能直接通信 | 原因 |
|---|---|---|
| 私网 → 公网 | 可以(通过NAT) | 路由器将私源IP映射成公网IP后发出,响应包再转换回来 |
| 公网 → 私网(主动连接) | 不可以 | 公网路由器没有到私网的路由;除非配置了端口映射(DNAT) |
3.3路由VS转发
| 概念 | 核心任务 | 时间尺度 |
|---|---|---|
| 路由 | 建立路由表(通过路由协议计算路径) | 较慢 |
| 转发 | 查表+送包(把包从出接口发出去) | 极快 |
路由是建立和维护路由表的过程
转发是路由器根据已建立的路由表,对每个到达的数据包执行"查目的IP → 找下一跳 → 从出接口发出"的动作
问:路由器转发时,修改的是IP报文的哪个字段?
- TTL(生存时间):每跳减1,防止循环
- 首部校验和:因为TTL变了,需要重新计算
- 数据链路层的MAC地址:源MAC地址和目的MAC地址在每一跳都会重新封装
IP地址(源IP/目的IP)在转发过程中通常不变(除非是NAT场景)