网络层IP

IP协议报头格式

4位版本
  • 作用:标识 IP 协议的版本,用于区分 IPv4 和 IPv6。
  • 取值 :IPv4 固定为 0100(二进制),即十进制 4;IPv6 为 0110(十进制 6)。
  • 核心逻辑:路由器 / 主机收到报文后,先读取该字段,确认按对应版本的协议规则解析。
4位首部长度
  • 作用 :标识 IP 首部的总长度,单位是 4 字节(32 位)
  • 取值范围
    • 最小值 5(二进制0101):对应 5×4=20字节(无选项的标准首部)
    • 最大值 15(二进制1111):对应 15×4=60字节(最大可选长度)
  • 核心逻辑 :因为首部长度不固定(有选项时变长),该字段用于定位数据部分的起始位置(首部长度 + 数据 = 完整 IP 报文)
8位服务类型

作用 :用于QoS(服务质量)控制,让报文获得不同的转发优先级、延迟、吞吐量、可靠性。

字段 作用
0-2 优先级(Precedence) 定义报文转发优先级(0-7,7 最高,如网络控制报文)
3 延迟(D) 1 = 要求低延迟,0 = 正常
4 吞吐量(T) 1 = 要求高吞吐量,0 = 正常
5 可靠性(R) 1 = 要求高可靠性,0 = 正常
6-7 保留 未使用

现代扩展 :现在更多被 DSCP(差分服务代码点,6 位)+ ECN(显式拥塞通知,2 位) 替代,用于更精细的流量分类和拥塞控制。

16位总长度
  • 作用 :标识 ** 整个 IP 报文(首部 + 数据)** 的总长度,单位是 字节
  • 取值范围0~65535(2¹⁶-1),因此 IPv4 单个报文最大长度为 65535 字节。
  • 核心逻辑
    • 数据部分长度 = 总长度 - 首部长度(IHL×4)
    • 链路层(如以太网 MTU=1500 字节)会限制最大传输单元,超过则需要分片(后续标识 / 标志 / 片偏移字段用于分片重组)。
16位标识
  • 作用 :唯一标识源主机发送的 IP 报文,用于分片后的重组
  • 核心逻辑
    • 当报文被分片时,所有分片的标识值完全相同,接收方通过该字段将不同分片归属于同一个原始报文。
    • 源主机每发送一个 IP 报文,标识值递增 1。
3位标志位

作用:控制报文的分片行为,仅 3 位有效,第 1 位保留(必须为 0)。

名称 作用
0 保留 必须为 0
1 DF(Don't Fragment) 1 = 禁止分片,0 = 允许分片;若 DF=1 且报文超过 MTU,路由器会丢弃报文并返回 ICMP 错误
2 MF(More Fragment) 1 = 后续还有分片,0 = 最后一个分片(或未分片)
13位片偏移
  • 作用 :标识当前分片在原始报文中的位置 ,单位是 8 字节
  • 核心逻辑
    • 未分片的报文,片偏移 = 0。
    • 分片时,除最后一个分片外,所有分片的数据长度必须是 8 的倍数(保证偏移量为整数)。
    • 接收方通过「标识 + MF + 片偏移」完成分片重组:按片偏移顺序拼接数据,MF=0 时完成重组。
  • 最大偏移(2¹³-1)×8 = 8188×8 = 65504字节,配合总长度 65535 字节,满足最大报文分片需求。
8位生存时间
  • 作用:限制 IP 报文在网络中的最大转发次数,防止报文无限循环(如路由环路)。
  • 取值规则
    • 源主机发送时设置初始值(常见为 64、128、255,不同操作系统默认值不同)。
    • 每经过一个路由器,TTL 值减 1;当 TTL=0 时,路由器丢弃报文,并向源主机发送 ICMP「超时」错误。
  • 补充:TTL 本质是「跳数限制」,而非时间,只是最初设计为每秒减 1,现在统一为每跳减 1。
8位协议

作用 :标识 IP 报文的数据部分承载的上层协议类型,让主机将数据交给对应协议处理。

十进制值 协议 说明
1 ICMP 互联网控制报文协议
6 TCP 传输控制协议
17 UDP 用户数据报协议
89 OSPF 开放最短路径优先(路由协议)

核心逻辑:主机收到 IP 报文后,根据该字段将数据部分交给 TCP/UDP/ICMP 等上层协议处理。

16位首部校验和
  • 作用 :校验 IP 首部的完整性,防止首部在传输中出错(仅校验首部,不校验数据)。
  • 计算规则
    • 源主机将首部分为 16 位的块,用二进制反码求和,结果取反后填入该字段。
    • 路由器 / 主机收到报文后,重新计算首部校验和,若结果不为 0,说明首部出错,直接丢弃报文。
    • 因为 TTL 等字段每跳会变化,路由器转发时必须重新计算并更新校验和
源目的ip

1. 源 IP 地址(Source IP Address,32 位)

  • 作用 :标识发送该 IP 报文的源主机的 IPv4 地址(4 字节,如192.168.1.1)。
  • 核心逻辑:用于接收方回复报文,以及网络中的路由溯源、访问控制等。

2. 目的 IP 地址(Destination IP Address,32 位)

  • 作用:标识该 IP 报文的目标主机的 IPv4 地址。
  • 核心逻辑:路由器根据该地址进行路由转发,最终将报文交付给目标主机。

首部核心字段速查表

字段 长度 核心作用 关键取值
版本 4 位 区分 IPv4/IPv6 IPv4=4
首部长度 4 位 定位数据起始位置 5=20 字节(默认)
服务类型 8 位 QoS 优先级控制 DSCP/ECN 现代替代
总长度 16 位 标识报文总大小 最大 65535 字节
标识 16 位 分片重组标识 源主机递增
标志 3 位 分片控制 DF = 禁止分片,MF = 后续分片
片偏移 13 位 分片位置标识 单位 8 字节
TTL 8 位 防路由环路 每跳减 1,0 则丢弃
协议 8 位 上层协议标识 TCP=6,UDP=17,ICMP=1
首部校验和 16 位 首部完整性校验 仅校验首部
源 IP / 目的 IP 32 位 ×2 收发方地址标识 4 字节 IPv4 地址
选项 0-40 字节 扩展功能 可选,4 字节对齐

IPv4和IPv6首部核心差异

特性 IPv4 首部 IPv6 首部
长度 可变(20-60 字节) 固定 40 字节
校验和 有(首部校验和) 无(由链路层 / 上层保障)
分片 路由器可分片 仅源主机分片,路由器不处理
选项 独立字段 扩展首部,更灵活
地址 32 位 IPv4 128 位 IPv6

IP地址的网段划分

IPv4 地址本质

32 位二进制,分成 4 段 8 位,点分十进制:

plaintext

复制代码
11000000 . 10101000 . 00000001 . 00000001
  192    .   168    .    1     .    1

一个 IP 永远由两部分组成:

  • 网络位(Net ID):标识哪个网段
  • 主机位(Host ID):标识网段内哪台设备

子网掩码(Subnet Mask) 的作用:规定哪部分是网络位,哪部分是主机位

子网掩码的规则

  • 子网掩码 必须是连续的 1 + 连续的 0
  • 1 = 网络位
  • 0 = 主机位

例:

复制代码
255.255.255.0
→ 11111111 11111111 11111111 00000000

前 24 位网络位,后 8 位主机位 简写:/24

主机位能划分多少 IP?

公式:总 IP 数 = 2^ 主机位数 可用主机数 = 2^ 主机位数 - 2

减 2 是因为:

  1. 网络地址(主机位全 0)→ 网段标识
  2. 广播地址(主机位全 1)→ 不能给设备用

例:/24(8 位主机)总 IP = 2⁸ = 256 可用 = 254

把大网段,借主机位当网络位,切成多个小网段。

一句话:向主机位借位 = 划分子网

192.168.1.0/24 划分 4 个子网

步骤 1:原网段

192.168.1.0 /24网络位 24,主机位 8

步骤 2:要分 4 个子网,需要借几位?

2ⁿ ≥ 子网数2²=4 → 借 2 位

步骤 3:新掩码

原 24 + 借 2 = /26 子网掩码:255.255.255.192

二进制:11111111 11111111 11111111 11000000

步骤 4:每个子网大小

主机位剩下 6 位 → 每个子网 64 个 IP

步骤 5:4 个子网完整结果

  1. 192.168.1.0/26网络:0广播:63可用:1~62

  2. 192.168.1.64/26网络:64广播:127可用:65~126

  3. 192.168.1.128/26网络:128广播:191可用:129~190

  4. 192.168.1.192/26网络:192广播:255可用:193~254

掩码 前缀 子网大小 可用主机
255.255.255.0 /24 256 254
255.255.255.128 /25 128 126
255.255.255.192 /26 64 62
255.255.255.224 /27 32 30
255.255.255.240 /28 16 14
255.255.255.248 /29 8 6
255.255.255.252 /30 4 2

ip地址的CIDR划分规则

抛弃 A/B/C 类固定划分,允许任意长度的网络位,用 / 前缀(如 /24)表示子网掩码。

CIDR 最核心 3 条铁律

  1. IPv4 总共 32 位
  2. 子网掩码 = 连续的 1 + 连续的 0(不能中间穿插)
  3. 前缀长度 /n = 前 n 位是网络位,剩下 32−n 位是主机位

CIDR 表示法:IP 地址 / 前缀 例:192.168.10.5/24

CIDR 与老式 A/B/C 类的区别

老式分类(Classful,已淘汰)

  • A 类:/8 网络 8 位,主机 24 位
  • B 类:/16 网络 16 位,主机 16 位
  • C 类:/24 网络 24 位,主机 8 位

死板、浪费 IP 极大。

CIDR(现代)

前缀可以是 0~32 任意数字 /8、/12、/17、/22、/27、/30...... 都行自由划分子网,完全灵活。

CIDR 4 个万能公式

设前缀 = /n

  1. 主机位数 = 32 − n
  2. 网段总 IP 数 = 2^(32−n)
  3. 可用主机 IP = 2^(32−n) − 2(减网络地址 + 广播地址)
  4. 块大小(步长)= 256 − 掩码最后一段(快速算网段)

IP地址的数量限制的解决方法

动态分配IP地址

早期 IP 是静态分配:一台设备永久占用一个 IP,不用也占着。大量设备同时在线时,IP 很快不够。

原理

使用 DHCP 协议

  • 有一台 DHCP 服务器统一管理地址池
  • 设备上线时临时申请 IP
  • 设备下线、超时、关机后 IP 自动回收
  • 给下一台设备重复使用
核心作用

提高 IPv4 地址利用率,让 "一批 IP 供多批设备轮流使用"。

优点
  • 减少闲置 IP 浪费
  • 自动配置,不用手动设置
  • 同一网段可支持远多于 IP 数量的设备(不同时在线)
缺点
  • 只是提高利用率不增加总 IP 数量
  • 只能缓解,不能根本解决

NAT网络地址转换

1. 出现原因

公网 IPv4 太少,不可能给每台设备一个公网 IP

2. 原理
  • 内部使用 私有 IP(RFC1918)
    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • 路由器执行 NAT:网络地址转换
  • 内网多台设备 共享同一个公网 IP
  • 端口号区分不同内网主机(NAPT 端口多路复用)
3. 核心作用

1 个公网 IP 可以支撑数百、数千台内网设备。 从根本上大幅减少公网 IP 需求

4. 优点
  • 极大节省公网 IPv4
  • 隐藏内网结构,安全
  • 几乎所有家庭、企业都在用
5. 缺点
  • 破坏端到端透明
  • 外部无法主动访问内网设备
  • P2P、游戏、视频通话困难
  • 多层 NAT 会导致卡顿
6. 关键结论

NAT 是 IPv4 能活到今天的最大功臣

IPv6

1. 出现原因

动态分配 + NAT 都只是延缓枯竭 ,不能增加地址总量。必须扩大地址空间

2. 原理
  • IPv6 地址长度:128 位
  • 总数量:2¹²⁸ ≈ 3.4×10³⁸ 个
  • 为地球上每一粒沙子、每一个设备都分配公网 IP 都足够
3. 核心作用

从根本上消除 IP 地址数量限制。

4. 优点
  • 地址近乎无限,永远不会不够
  • 不需要 NAT,真正端到端通信
  • 自动配置 SLAAC,即插即用
  • 更快路由、支持移动设备、内置 IPSec
  • 支持物联网、海量设备
5. 缺点
  • 与 IPv4 不兼容
  • 需要改造设备、路由器、服务器、运营商网络
  • 过渡周期长
6. 关键结论

IPv6 是唯一能彻底解决 IP 地址不够的技术。

私有IP地址和公网IP地址

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连接到internet上,理论上使用任意的IP地址都可以,但是RFC 1918规定,用于组建局域网的私有IP地址

  • 10.*:前8位是网络号,共16777216个地址
  • 172.16.*到172.31.*:前12位是网络号,共1048576个地址
  • 192.168.*,前16位是网络号,共65535个地址

包含在这个范围内的,都成为私有IP,其余的则为公网IP

主机A给主机B发送报文,报文路由的详细全过程!

大前提:

主机A想要和主机B聊天,必须有服务器在中间搭桥,我们使用的软件中默认包含服务器的IP和端口号,主机A连接服务器,主机B连接服务器,服务器把主机A的IP和端口号给主机B,服务器把主机B的IP和端口号给主机A,

注意这里给的IP是,主机A和主机B所处的运营商路由器的子网IP,通过端口号找到具体的家用路由器

同时这里的端口号不同于应用层的端口号

问题一:

图中主机A和主机B通信,以主机A给主机B发送报文为例,这个报文经过哪些路由器,经过了哪些网络,以及报文中的源主机IP和目的主机IP如何变化

先明确拓扑结构与关键设备

1. 核心设备与地址

设备 内网(LAN)子网 IP WAN 口 IP 公网 IP
主机 A 192.168.1.201/24(左侧家用路由器 LAN 侧) - -
左侧家用路由器 192.168.1.1/24 10.1.1.2/24 -
左侧运营商路由器 10.1.1.1/24 122.77.241.4/24 -
核心公网路由器 - - 122.77.241.3/24(广域网入口)
右侧运营商路由器 10.1.1.1/24 122.77.241.5/24 -
右侧家用路由器 192.168.1.1/24 10.1.1.2/24 -
主机 B 192.168.1.201/24(右侧家用路由器 LAN 侧) - -

2. 网络分层

  • 内网 1(主机 A 侧)192.168.1.0/24(私有网段,家用路由器 LAN)
  • 运营商内网 110.1.1.0/24(运营商私网,家用路由器 WAN→运营商路由器 LAN)
  • 广域网(公网)122.77.241.0/24(运营商公网,核心路由器→运营商路由器 WAN)
  • 运营商内网 210.1.1.0/24(右侧运营商私网,对称左侧)
  • 内网 2(主机 B 侧)192.168.1.0/24(右侧家用路由器 LAN,私有网段)

主机 A → 主机 B(全程 IP + 端口变化)

1. 主机 A 发送

源 IP:192.168.1.201 源端口:10001 目的 IP:122.77.241.5(B 的公网 IP) 目的端口:50001

2. 左侧家用路由器 NAT(仅改源)

源 IP:10.1.1.2 源端口:20001目的 IP:**122.77.241.5(不变)**目的端口:50001

3. 左侧运营商路由器 NAT(仅改源)

源 IP:122.77.241.4 源端口:50001目的 IP:**122.77.241.5(不变)**目的端口:50001

4. 公网传输(全程不变)

源:122.77.241.4:50001目的:122.77.241.5:50001

5. 右侧运营商路由器(第一次改目的 IP)

查表:目的端口 50001 → 家庭 10.1.1.2 目的 IP 改为:10.1.1.2

6. 右侧家用路由器(第二次改目的 IP)

查表:端口 → 主机 B 192.168.1.201 目的 IP 改为:192.168.1.201

7. 到达主机 B

问题二:

** 报文到达 B 所在运营商路由器后,

运营商怎么知道发给哪一个家用路由器?

如果有 1000 个家用路由器,怎么区分?**

超级关键知识点:

** 每个家用路由器,在运营商那边都有一个唯一的标识:

【运营商分配给它的私网 IP(10.x.x.x)】**

看你图:

  • 左侧家用路由器 WAN 口:10.1.1.2
  • 右侧家用路由器 WAN 口:10.1.1.2(图里画的,但真实中绝对不可能重复!

真实世界规则:

运营商给每个家庭路由器分配的 10.x.x.x IP 绝对唯一!

  • 家庭 1:10.1.1.2
  • 家庭 2:10.1.1.3
  • 家庭 3:10.1.1.4
  • ......

运营商路由器内部有一张表:

家庭私网 IP (WAN) 对应出口公网 IP + 端口
10.1.1.2 122.77.241.5:50001
10.1.1.3 122.77.241.5:50002
10.1.1.4 122.77.241.5:50003

所以:

** 公网报文来到运营商路由器,

它看【目的公网 IP + 端口】,

立刻查表知道:要转发给哪个 10.x.x.x 的家庭路由器!**

第三个关键问题

** 如果报文目的 IP 只是运营商路由器的公网 IP,

它怎么知道发给哪个家用路由器?**

答案:

** 靠端口!!!

不是靠 IP!是靠【端口号】区分家庭!**

这就是 NAPT(端口多路复用),整个互联网赖以生存的技术。

举例(同一个公网 IP 带 1000 个家庭)

公网 IP:122.77.241.5

  • 端口 50001 → 家庭 A(10.1.1.2)
  • 端口 50002 → 家庭 B(10.1.1.3)
  • 端口 50003 → 家庭 C(10.1.1.4)
  • ......

报文到达运营商路由器:

目的 IP:122.77.241.5(运营商公网 IP) 目的端口:50001

路由器查表:

50001 → 10.1.1.2(某个家庭路由器)

然后:

把目的 IP 从 122.77.241.5 改成 10.1.1.2 转发给对应的家用路由器

第四个关键问题:

到达家用路由器后,怎么知道发给主机 B?

家用路由器也有 NAT 表

表格

外部端口 内部主机 IP + 端口
10001 192.168.1.201:80

报文到达:目的端口 10001→ 转发给 192.168.1.201

** 主机 A 从服务器获取的,不是主机 B 的私有 IP,
而是 B 的【公网 IP + 端口号】,两者缺一不可。
服务器必须同时把 IP 和端口都发给 A,A 才能正确发送报文。**

问题五:这里的端口号和应用侧的端口号的区别

NAT 里用的端口号 ≠ 应用层端口号(TCP/UDP 端口)!

虽然名字都叫 "端口",但作用、层级、意义完全不同!

第一层:应用层端口(TCP/UDP 端口)

位置:传输层(TCP/UDP 头部)

作用:区分同一台主机里的不同应用(进程)

  • 80 = HTTP
  • 443 = HTTPS
  • 22 = SSH
  • 游戏端口、QQ 端口、浏览器端口...

作用: 一台主机同时开浏览器、游戏、QQ→ 靠端口号区分不同软件

特点:

  • 端到端(主机到主机)
  • 内网私有 IP 上使用
  • 不会直接暴露到公网

第二层:NAT 端口(NAT 映射端口)

位置:NAT 设备(路由器 / 网关)内部使用

作用:区分同一个公网 IP 后面的不同内网主机 / 连接

这是路由器自己临时分配、自己维护的端口 不是应用层的端口!

路由器的逻辑:

  • 内网主机 1: 192.168.1.201:1000 → 映射为 公网端口 50001
  • 内网主机 2: 192.168.1.202:2000 → 映射为 公网端口 50002

作用:

让公网区分:这个端口对应哪台内网设备

特点:

  • 只在NAT 设备内部有效
  • 公网只认识这个NAT 端口
  • 对应用层完全透明(应用根本不知道)

最核心区别

  1. 应用层端口(TCP/UDP)

区分:同一台主机的不同应用

  1. NAT 映射端口(路由器分配)

区分:同一公网 IP 后的不同内网主机 / 连接

相关推荐
米饭不加菜2 小时前
PLC编程基础知识
运维·服务器
Soari2 小时前
Ziggo-Device软件构建(On device)教程
运维·服务器·bash·tsn 交换机
爱喝水的鱼丶2 小时前
SAP-ABAP: 深入浅出 SAP 经典可执行程序:从零开始掌握
运维·服务器·数据库·sap·abap·开发交流
星辰_mya2 小时前
进程状态转换
linux·运维·服务器
凯强同学2 小时前
不上班,想裸辞,可以不可以?
服务器·前端·javascript
孙同学_2 小时前
【项目篇】高并发服务器 - Reactor模型详解
运维·服务器
凤年徐2 小时前
Linux常用命令详解
java·linux·服务器
SilentSamsara2 小时前
Linux 管道与重定向:命令行精髓的结构性解析
linux·运维·服务器·c++·云原生
the sun342 小时前
NFS 配置全指南 —— 从踩坑到手动挂载的完整落地
linux·运维·服务器·ubuntu