IP协议格式
IPv4 头部字段总长度可变(最小 20 字节,最大 60 字节),各字段按顺序定义如下:
1. 4 位 版本号(version)
- 作用:指定 IP 协议的版本
- 取值:对于 IPv4,固定为4
2. 4 位 头部长度(header length)
- 单位:32bit(4 字节)
- 计算:实际头部长度 = 该字段值 × 4 字节
- 限制:4bit 最大表示 15,因此 IP 头部最大长度为15×4=60 字节
- 说明:最小为 5(对应 20 字节,无选项字段)
3. 8 位 服务类型(Type Of Service, TOS)
- 结构:3 位 优先权字段(已弃用) + 4 位 TOS 字段 + 1 位 保留字段(必须置 0)
- 4 位 TOS 字段(四者互斥,仅能选其一):
- 最小延时:适用于 ssh、telnet 等交互型应用
- 最大吞吐量:适用于 ftp 等大文件传输应用
- 最高可靠性:适用于对数据完整性要求高的应用
- 最小成本:适用于对网络费用敏感的应用
4. 16 位 总长度(total length)
- 作用:表示整个 IP 数据报(头部 + 数据)的总字节数
- 限制:16bit 最大表示 65535,因此 IP 数据报最大长度为 65535 字节
5. 16 位 标识(id)
- 作用:唯一标识主机发送的单个 IP 报文
- 分片规则:若 IP 报文在数据链路层被分片,所有分片片的 id 均相同,用于接收端重组
6. 3 位 标志字段(Flags)
- 位 1:保留位(未使用,置 0)
- 位 2:禁止分片位(DF)
- 置 1:禁止分片,若报文长度超过 MTU(Maximum Transmission Unit,最大传输单元),IP 模块直接丢弃报文
- 置 0:允许分片
- 位 3:更多分片位(MF)
- 置 1:表示后续还有分片
- 置 0:表示当前是最后一个分片(结束标记)
7. 13 位 分片偏移(fragment offset)
- 作用:表示当前分片在原始 IP 报文中的位置偏移
- 计算:实际偏移字节数 = 该字段值 × 8 字节
- 限制:除最后一个分片外,其他分片的长度必须是8 的整数倍,保证报文连续
8. 8 位 生存时间(Time To Live, TTL)
- 作用:限制数据报的最大路由跳数,防止路由循环
- 默认值:通常为64
- 规则:每经过一个路由器,TTL 减 1;若 TTL 减至 0 仍未到达目标,则丢弃报文
9. 8 位 协议(Protocol)
- 作用:标识 IP 上层所使用的协议类型
- 常见取值:TCP(6)、UDP(17)、ICMP(1)等
10. 16 位 头部校验和(Header Checksum)
- 作用:校验 IP 头部的完整性,鉴别头部是否损坏
- 算法:使用CRC 校验,仅校验头部,不校验数据部分
11. 32 位 源地址 + 32 位 目标地址
- 作用:分别表示发送端和接收端的IPv4 地址
- 特点:固定 32 位,占 4 字节 each
12. 选项字段(Options)
- 长度:不定长,最多 40 字节
- 作用:用于扩展 IP 功能(如记录路由、时间戳等)
- 说明:无特殊需求时可省略,此时头部长度为 20 字节
网段划分
网段划分的核心目的
如果所有网络设备的 IP 地址都没有规则,就像城市里的房子没有街道和门牌号 —— 既无法区分不同区域,也无法高效找到目标主机。
网段划分的作用就是给 IP 地址 “分区域、编门牌号”,实现两个核心目标:
- 区分不同网络:通过网络号保证相互连接的网段有唯一标识(类似 “街道名”);
- 区分同一网络内的主机:通过主机号保证同一网段内的主机有唯一标识(类似 “门牌号”);
网段划分的工具:子网掩码
网络号(Network ID)
- 作用:标识主机所在的网段,同一网段内的所有主机,网络号必须完全相同;
- 特点:不同网段的网络号必须不同,否则会导致网络冲突(无法区分两个网段)。
主机号(Host ID)
- 作用:标识网段内的具体主机,同一网段内的所有主机,主机号必须完全不同;
- 特点:主机号不能全为 0(表示网段本身,如
192.168.1.0),也不能全为 1(表示网段广播地址,如192.168.1.255),一般也不是1,1默认代表网关。
怎么区分一个 IP 地址的哪部分是网络号,哪部分是主机号?答案是子网掩码—— 它是一个和 IP 地址长度相同的 32 位二进制数,通过 “按位与” 运算,提取 IP 地址的网络号。
如何判断两台主机是否在同一网段?
- 主机 A:
192.168.1.10,子网掩码255.255.255.0 - 主机 B:
192.168.1.20,子网掩码255.255.255.0 - 主机 C:
192.168.2.10,子网掩码255.255.255.0
步骤 1:将 IP 和子网掩码转换为二进制,做按位与运算,得到网络号。
- 主机 A 网络号:
192.168.1.0 - 主机 B 网络号:
192.168.1.0 - 主机 C 网络号:
192.168.2.0
步骤 2:比较网络号:
- 主机 A 和 B 网络号相同 →同一网段,可以直接通信;
- 主机 A 和 C 网络号不同 →不同网段,需要路由器转发才能通信。
子网的核心规则
同一子网内:
所有主机的网络号必须相同;
所有主机的主机号必须唯一;
主机之间可以直接通信(无需路由器)。
不同子网之间:
网络号必须不同;
主机之间无法直接通信,必须通过路由器转发(路由器负责不同网段的数据包交换)。
DHCP
手动管理子网内的 IP 是相当麻烦的事情, 手动分配不仅效率低,还容易出现 IP 重复(冲突)。
DHCP 的核心作用
DHCP(动态主机配置协议)是一种自动分配 IP 地址的技术,它可以为子网内的新增主机自动分配:
- 唯一的 IP 地址(避免重复);
- 子网掩码;
- 网关(路由器 IP);
- DNS 服务器 IP 等。
DHCP 的常见部署场景
- 路由器内置 DHCP:家用或小型办公网络中,路由器默认开启 DHCP 功能,作为DHCP 服务器;
- 独立 DHCP 服务器:大型企业网络中,会部署专门的 DHCP 服务器,管理多个子网的 IP 分配。
DHCP 的工作流程
- 新增主机(如你的电脑)启动后,广播发送DHCP 请求:“谁能给我分配一个 IP 地址?”
- 子网内的 DHCP 服务器(路由器)收到请求后,从IP 地址池中选择一个未分配的 IP,回复DHCP 应答;
- 主机收到应答后,使用该 IP 地址,完成网络配置。
有限的IPV4
| 地址类别 | 二进制前缀 | 网络号位数 | 主机号位数 | 地址范围(点分十进制) | 核心用途 |
|---|---|---|---|---|---|
| A 类 | 0 | 7 位 | 24 位 | 0.0.0.0 ~ 127.255.255.255 | 大型网络(如早期大型机构、运营商) |
| B 类 | 10 | 14 位 | 16 位 | 128.0.0.0 ~ 191.255.255.255 | 中型网络(如企业级网络) |
| C 类 | 110 | 21 位 | 8 位 | 192.0.0.0 ~ 223.255.255.255 | 小型网络(如家庭、小型办公网络) |
| D 类 | 1110 | -(无网络 / 主机号) | 28 位(多播组号) | 224.0.0.0 ~ 239.255.255.255 | 多播通信(如组播数据传输) |
| E 类 | 11110 | -(保留) | 27 位(保留) | 240.0.0.0 ~ 247.255.255.255 | 科研、实验等特殊用途(未广泛商用) |
这一分类是 IPv4 早期的地址分配方式,其核心问题是地址浪费严重(例如 A 类地址仅 7 位网络号,却包含约 1677 万主机位,多数大型网络用不完)。
解决方案1:CIDR
CIDR(无类域间路由)取代了传统的 A/B/C 类有类地址划分,通过灵活的子网掩码自由划分网络号和主机号(比如可以通过掩码把一个 C 类地址划分为多个小子网),大幅提高了 IP 地址的利用率,减少了 “大网段用不完、小网段不够用” 的浪费问题。
但CIDR 没有增加 IPv4 地址的绝对总数,依旧是42 亿的上限,无法从根本上解决地址枯竭问题。
解决方案2:NAT技术
NAT(Network Address Translation) 是一种运行在路由器(或网关)上的技术,它可以将内网私有 IP 地址和公网 IP 地址进行双向转换,实现内网主机通过公网 IP 访问互联网。
(1)静态 NAT(一对一映射)
- 规则:将一个固定的内网私有 IP永久映射到一个固定的公网 IP。
- 工作流程:
- 内网主机 A(192.168.1.10)需要访问外网服务器(203.0.113.1);
- 路由器收到请求后,将源 IP 从 192.168.1.10 转换为固定公网 IP(120.79.1.1);
- 外网服务器返回数据时,目标 IP 为 120.79.1.1,路由器再将其转换为 192.168.1.10,转发给内网主机。
- 适用场景:需要让外网主机主动访问内网服务的场景(如内网的 Web 服务器、FTP 服务器),通过静态 NAT 可以让外网用户通过固定公网 IP 访问内网服务器。
- 缺点:需要为每个内网服务主机分配一个公网 IP,依然消耗公网地址,无法大规模节省。
(2)动态 NAT(多对多映射)
- 规则:路由器维护一个公网 IP 地址池,当内网主机需要访问外网时,从地址池中动态分配一个未被使用的公网 IP进行映射,主机断开连接后,公网 IP 被释放回地址池。
- 工作流程:
- 路由器有公网 IP 池:120.79.1.1 ~ 120.79.1.10;
- 内网主机 A(192.168.1.10)访问外网,路由器分配 120.79.1.1;
- 内网主机 B(192.168.1.20)访问外网,路由器分配 120.79.1.2;
- 主机 A 断开连接后,120.79.1.1 被释放,可分配给其他内网主机。
- 适用场景:内网主机数量多于公网 IP 数量,但又需要同时访问外网的场景。
- 缺点:公网 IP 池的大小决定了同时访问外网的内网主机最大数量,依然需要一定数量的公网 IP。
解决方案3:NTPT
NAPT(Network Address and Port Translation) 是NAT 的扩展版本,是目前家庭、企业网络中最常用的方案。它不仅转换IP 地址,还转换传输层的端口号,实现多个内网主机共享一个公网 IP访问互联网。
TCP/UDP 协议的端口号(16 位,范围 0~65535) 可以标识主机上的不同应用程序。NAPT 通过 **“公网 IP + 公网端口号”** 与 **“内网 IP + 内网端口号”** 的一一映射,区分不同内网主机的请求。
工作流程(以家庭路由器为例)
- 路由器公网 IP:120.79.1.1;
- 内网主机 A:192.168.1.10,使用端口 50000 访问外网服务器(203.0.113.1,端口 80);
- 内网主机 B:192.168.1.20,使用端口 60000 访问同一外网服务器(端口 80)。
步骤 1:内网主机发送请求
- 主机 A 发送的数据包:源 IP=192.168.1.10,源端口 = 50000;目标 IP=203.0.113.1,目标端口 = 80;
- 主机 B 发送的数据包:源 IP=192.168.1.20,源端口 = 60000;目标 IP=203.0.113.1,目标端口 = 80。
步骤 2:路由器做 NAPT 转换
路由器维护一个NAPT 映射表,为每个内网请求分配一个唯一的公网端口号:
| 内网 IP: 端口 | 公网 IP: 端口 | 目标 IP: 端口 |
|---|---|---|
| 192.168.1.10:50000 | 120.79.1.1:30000 | 203.0.113.1:80 |
| 192.168.1.20:60000 | 120.79.1.1:30001 | 203.0.113.1:80 |
- 主机 A 的数据包被转换为:源 IP=120.79.1.1,源端口 = 30000;目标 IP 和端口不变;
- 主机 B 的数据包被转换为:源 IP=120.79.1.1,源端口 = 30001;目标 IP 和端口不变。
步骤 3:外网服务器返回数据
外网服务器返回的数据包:
- 给主机 A 的:源 IP=203.0.113.1:80,目标 IP=120.79.1.1:30000;
- 给主机 B 的:源 IP=203.0.113.1:80,目标 IP=120.79.1.1:30001。
步骤 4:路由器反向转换并转发
路由器根据 NAPT 映射表,将目标 IP 和端口转换回内网 IP 和端口:
- 目标 30000 → 转发给 192.168.1.10:50000;
- 目标 30001 → 转发给 192.168.1.20:60000。
NAPT 的核心优势
- 极致节省公网 IP:一个公网 IP 理论上可以支持65535 个内网主机(通过不同端口号区分),完全满足家庭、小型企业的需求;
- 隐藏内网结构:外网主机只能看到路由器的公网 IP,无法直接访问内网主机,提高了内网安全性。
终极方案:IPV6
IPv6 是为彻底解决IPv4 地址枯竭问题而设计的新一代互联网协议,同时优化了 IPv4 的诸多缺陷,是互联网的长远发展方向。
IPv6 地址是128 位的二进制数,其理论地址总数为:2128≈3.4×1038这个数量级相当于 “给地球上每一粒沙子分配数万亿个 IP 地址”,彻底解决了地址不足的问题。
IPv6 地址不再使用 IPv4 的 “点分十进制”,而是采用冒分十六进制表示(将 128 位分为 8 组,每组 4 位十六进制数,组间用冒号分隔)。
例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334
为了简化冗长的地址,IPv6 支持两种压缩方式:
- 规则 1:每组前导零可省略(但至少保留 1 位)例:
0db8→db8,0000→0 - 规则 2:连续的全零组可替换为
::(仅能使用一次)例:2001:0db8:85a3:0000:0000:8a2e:0370:7334→ 压缩为2001:db8:85a3::8a2e:370:7334
错误示例:2001::db8::7334(::使用了两次,无法确定全零组的数量,是非法地址)
目前 IPv6 处于逐步普及、与 IPv4 共存的阶段:
私有IP与公网IP
IP 地址按 “是否能在互联网上直接路由” 分为两类:
| 类型 | 核心特点 | 用途 |
|---|---|---|
| 私有 IP 地址 | 仅用于局域网内部通信,无法在互联网(公网)上直接路由;不同局域网内可重复使用 | 家庭、企业等局域网的主机地址 |
| 公网 IP 地址 | 由互联网分配机构(ICANN)统一分配,全球唯一,可在互联网上直接路由 | 互联网设备(如服务器、运营商路由器)的地址 |
私有 IP 地址范围
为了规范局域网的 IP 使用,RFC 1918(互联网标准文档)规定了 3 个私有 IP 地址段,所有局域网均从这 3 段中选择地址:
| 私有 IP 段 | 网络号长度 | 地址范围 | 可用地址数量 | 典型场景 |
|---|---|---|---|---|
| 10.* | 8 位(前 8 位固定为 10) | 10.0.0.0 ~ 10.255.255.255 | 约 1677 万 | 大型企业局域网 |
| 172.16.* ~ 172.31.* | 12 位(前 12 位固定为 172.16) | 172.16.0.0 ~ 172.31.255.255 | 约 104 万 | 中型企业局域网 |
| 192.168.* | 16 位(前 16 位固定为 192.168) | 192.168.0.0 ~ 192.168.255.255 | 约 6.5 万 | 家庭、小型办公局域网 |
- 同一局域网内的私有 IP 必须唯一(避免内网冲突);
- 不同局域网内的私有 IP 可以完全重复(因为彼此处于独立子网,不互通)。
路由器的WAN 口与LAN 口
家用 / 企业路由器是 “连接内网与外网” 的核心设备,它会同时配置两个 IP 地址,分别对应不同的网络:
LAN 口 IP(局域网 IP)
类型:私有 IP(通常是 192.168.1.1、192.168.0.1 等);
作用:作为内网网关,是局域网内所有主机的 “出口”;
特点:同一路由器下的所有内网主机,必须与 LAN 口 IP 处于同一子网(如 LAN 口是 192.168.1.1,主机 IP 需是 192.168.1.x)。
WAN 口 IP(广域网 IP)
类型:可能是公网 IP,也可能是上级路由器的私有 IP(取决于网络层级);
作用:是路由器在 “上级网络” 中的身份标识,用于与外网通信;
示例:
若你家是光纤直连,WAN 口 IP 可能是运营商分配的公网 IP(如 120.79.1.1);
若你家是小区共享网络,WAN 口 IP 可能是小区路由器分配的私有 IP(如 10.100.2.3)。
子网的层级结构:从家庭到运营商
实际网络是多层子网嵌套的结构,私有 IP 与公网 IP 通过层级逐步衔接:
家庭子网:
- 路由器 LAN 口 IP(192.168.1.1)是网关,手机、电脑的 IP 是 192.168.1.2、192.168.1.3(私有 IP);
- 路由器 WAN 口 IP 是小区路由器分配的私有 IP(如 10.100.2.3)。
小区子网:
- 小区路由器的 LAN 口 IP 是 10.100.2.1(私有 IP),管理多个家庭路由器;
- 小区路由器的 WAN 口 IP 是运营商区域路由器分配的 IP(如 202.103.1.5)。
运营商核心网络:
- 最外层的运营商核心路由器,WAN 口 IP 是公网 IP(直接在互联网上可路由)。
核心逻辑:每一层路由器都将 “下级子网” 封装为自己的一个节点,最终通过最外层的公网 IP 接入互联网。
为什么需要公网 IP 服务器?
如果想让自己的程序(如 Web 服务器)被互联网上的用户访问,必须满足一个条件:程序所在的主机拥有公网 IP。原因是:互联网上的用户只能通过 “全球唯一的公网 IP” 找到目标设备,而私有 IP 仅能在局域网内被识别。
家庭 / 企业内网的主机(用私有 IP)无法直接被公网访问,因此通常将程序部署在云服务器上, 云服务器会被分配一个固定公网 IP,可直接在互联网上被访问到。