计算机网络 之 【IP协议】(IPv4报文格式、IP地址、公网IP VS 私网IP、路由VS转发)

目录

1.IP协议的核心定位

2.IP报文格式(IPv4)

(3)TTL的作用

(4)重要设计思想

(5)各层级标识对比

3.IP地址

[3.1.3子网掩码与 CIDR(无类别域间路由)](#3.1.3子网掩码与 CIDR(无类别域间路由))

[3.2公网 IP 与私有 IP](#3.2公网 IP 与私有 IP)

[(5)私有IP vs 公网IP](#(5)私有IP vs 公网IP)

3.3路由VS转发


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.10xC0A80101,便于内核高效填充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.110.0.0.1 8.8.8.81.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场景)

相关推荐
大数据新鸟4 小时前
NIO 三大核心组件
服务器·网络·nio
头疼的程序员4 小时前
计算机网络:自顶向下方法(第七版)第九章 学习分享(一)
学习·计算机网络
添砖java‘’4 小时前
网络层IP
网络·网络协议·tcp/ip·ip
芯智工坊5 小时前
第19章 Mosquitto完整项目实战
网络·人工智能·mqtt·开源
灰子学技术6 小时前
Envoy 底层 TCP 交互、UDS 和事件驱动技术文档
网络·网络协议·tcp/ip
wifi chicken6 小时前
wifi漫游(Roaming)802.11kvr 全协议梳理
网络·wifi·内核开发·wifi 漫游
MAXrxc6 小时前
VRRP初体验
网络
qq_260241237 小时前
将盾CDN:移动网络环境下的安全接入技术
网络·安全
咖喱o7 小时前
策略路由
网络