当前位置: 首页 > news >正文

网络层:从 IP 协议到路由转发

深入理解网络层:从 IP 协议到路由转发,一篇搞定核心知识点

在 TCP/IP 协议栈中,网络层是连接 “局部” 与 “全局” 的关键 —— 它解决了跨网络通信的路径选择问题,让两台身处不同局域网的主机能通过路由器找到彼此。如果把互联网比作 “全球快递网络”,那么网络层就是 “快递调度中心”:IP 协议是包裹的 “地址标签”,路由是 “配送路线规划”,而分片组装则是 “超大包裹拆分与重组”。今天我们就从基础概念到实际流程,彻底吃透网络层的核心知识。

一、先搞懂网络层的 3 个基本角色

在开始复杂的协议细节前,先明确网络中 3 个核心设备的定义 —— 这是理解后续内容的基础:

角色核心特征典型设备
主机有 IP 地址,但不负责 “路径规划”(不路由)你的电脑、手机
路由器有 IP 地址,且能 “规划路径”(核心路由设备)家用路由器、运营商路由器
节点主机和路由器的统称(网络中的 “参与单元”)-

简单说:主机只负责 “发 / 收包裹”,路由器负责 “给包裹指路”,节点则是所有 “能处理包裹” 的设备总称。

二、IP 协议头:数据包的 “身份证 + 说明书”

每个 IP 数据包都带着一个 “头部”(类似快递单),里面记录了数据包的关键信息。我们以IPv4 协议头为例,拆解核心字段(共 20 字节固定部分 + 可选字段):

字段(Field)位数核心作用
版本(Version)4标识 IP 版本(IPv4 填 4,IPv6 填 6)
头部长度(Header Len)4IP 头的长度(单位:32bit),最大 15×4=60 字节(含可选字段)
服务类型(TOS)8优先级(已弃用)+ 4 个服务选项(选 1 个):最小延时(ssh/telnet)、最大吞吐量(ftp)等
总长度(Total Len)16IP 数据包总大小(头部 + 数据),最大 65535 字节
标识(ID)16唯一标识一个数据包(分片后,所有分片的 ID 相同)
标志(Flags)31 位保留 + 1 位 DF(禁止分片,超 MTU 则丢弃)+1 位 MF(更多分片,最后一片置 0)
片偏移(Fragment Offset)13分片在原数据包中的位置(单位:8 字节),确保组装顺序
TTL(生存时间)8数据包最大 “跳数”(每过一个路由器减 1,到 0 丢弃),防止路由循环(默认 64)
协议(Protocol)8指示上层协议(TCP=6,UDP=17,ICMP=1)
首部校验和(Checksum)16校验 IP 头部是否损坏(用 CRC 算法)
源 IP 地址(Source IP)32数据包的 “出发地” IP
目的 IP 地址(Dest IP)32数据包的 “目的地” IP

这些字段里,TTL、标识、标志、片偏移是后续 “路由” 和 “分片” 的关键,一定要记牢 —— 比如 TTL 能避免数据包在 “路由器环路” 里无限循环,片偏移能让分片后的数据包正确重组。

三、网段划分:从 “浪费” 到 “精打细算” 的进化

IP 地址是 32 位整数(比如 192.168.1.1),但它不是 “一个整体”—— 而是分成网络号(哪个小区)和主机号(哪个住户)两部分。网段划分的核心,就是 “合理切分这两部分”,避免 IP 地址浪费。

1. 传统分类:简单但浪费的 “一刀切”

早期 IP 地址按 “首段数字” 分成 5 类,每类的网络号 / 主机号位数固定:

类别首段范围网络号位数主机号位数最大主机数(减 2:网络号 / 广播号)问题
A 类0.0.0.0~127.255.255.25572416777214(约 1600 万)主机数太多,多数场景浪费
B 类128.0.0.0~191.255.255.255141665534(约 6 万)企业常用,但很快分配完
C 类192.0.0.0~223.255.255.255218254(约 200)主机数太少,不够用
D 类224.0.0.0~239.255.255.255--多播地址(不分配给主机)-
E 类240.0.0.0~247.255.255.255--保留(未使用)-

比如一个企业申请 B 类地址,理论能连 6 万台主机,但实际最多用几千台 —— 大量 IP 地址被浪费,最终导致 B 类地址很快耗尽。

2. CIDR:灵活划分的 “救星”

为解决浪费问题,无类域间路由(CIDR) 应运而生。它的核心是用子网掩码(32 位整数,比如 255.255.255.0)来 “自定义” 网络号位数,不再受 A/B/C 类限制。

关键规则:
  1. 子网掩码的 “1” 对应 IP 地址的 “网络号”,“0” 对应 “主机号”;

  2. IP 地址与子网掩码做按位与运算,结果就是 “网络号”;

  3. 简化表示:IP地址/网络号位数(比如 140.252.20.68/24,代表前 24 位是网络号)。

举个例子(文档中的实际案例):
场景IP 地址子网掩码网络号(按位与结果)地址范围(主机号 0~ 全 1)
例子 1140.252.20.68255.255.255.0140.252.20.0140.252.20.0~140.252.20.255
例子 2140.252.20.68255.255.255.240140.252.20.64140.252.20.64~140.252.20.79

比如例子 2 中,子网掩码 255.255.255.240(二进制 11111111.11111111.11111111.11110000),前 28 位是网络号,后 4 位是主机号 —— 所以主机数只有 16 个(2^4),刚好满足小团队使用,避免浪费。

四、特殊 IP 地址:这些 “特殊用途” 要记牢

不是所有 IP 地址都能分配给主机,有些有固定用途,常见的有 3 类:

  1. 网络号:主机号全为 0 的 IP(比如 192.168.1.0/24),代表 “整个网段”,不能分配给主机;

  2. 广播地址:主机号全为 1 的 IP(比如 192.168.1.255/24),发往这个地址的数据包,网段内所有主机都能收到;

  3. 环回地址:127.* 开头的 IP(常用 127.0.0.1),用于 “本机测试”(比如 ping 127.0.0.1,能检测本机 IP 协议是否正常)。

五、私有 IP 与 NAT:解决 “公网 IP 不够用” 的难题

IPv4 只有约 43 亿个地址,而全球设备远超这个数 —— 怎么解决?答案是 “私有 IP+NAT” 组合。

1. 私有 IP:内网专用的 “临时地址”

RFC 1918 规定了 3 段 “私有 IP 地址”,只能在局域网内使用,不能直接连公网(运营商不会路由这些地址):

  • 10.0.0.0~10.255.255.255(10.*,约 1677 万个地址);

  • 172.16.0.0~172.31.255.255(172.16-31.*,约 104 万个地址);

  • 192.168.0.0~192.168.255.255(192.168.*,约 6 万个地址)。

比如你家的路由器,给手机、电脑分配的都是 192.168.1.* 这样的私有 IP—— 这些地址在其他家庭的局域网里可能重复,但没关系,因为它们只在 “内网生效”。

2. NAT:私有 IP 转公网 IP 的 “翻译官”

内网主机要访问公网(比如刷抖音),需要把 “私有 IP” 换成 “公网 IP”—— 这个过程就是网络地址转换(NAT),由路由器完成:

  1. 你手机(192.168.1.200)发数据包到抖音服务器(公网 IP);

  2. 家用路由器把数据包的 “源 IP” 换成自己的 “WAN 口公网 IP”(比如 122.77.241.3);

  3. 抖音服务器的响应数据包,先发给路由器的公网 IP;

  4. 路由器再把 “目的 IP” 换回你手机的私有 IP,发给你。

通过 NAT,一个公网 IP 能让整个局域网的设备共享上网 —— 极大缓解了公网 IP 不足的问题。

六、路由:数据包的 “导航系统”

当数据包从源主机出发,要到达千里之外的目的主机,靠的就是 “路由”—— 路由器通过 “路由表”,决定每一步该发给哪个下一跳设备。

1. 路由表:路由器的 “地图”

每个路由器 / 主机都有一张 “路由表”,记录了 “到某个网段,该走哪条路”。我们看一张实际的路由表示例(用route命令查看):

目的网络(Destination)网关(Gateway)子网掩码(Genmask)接口(Iface)标志(Flags)
192.168.10.00.0.0.0255.255.255.0eth0U
192.168.56.00.0.0.0255.255.255.0eth1U
127.0.0.00.0.0.0255.0.0.0loU
default(0.0.0.0)192.168.10.10.0.0.0eth0UG
字段解读:
  • 目的网络:要去的 “网段”(比如 192.168.56.0/24);

  • 网关:下一跳设备的 IP(0.0.0.0 表示 “直接连接”,不用经过其他路由器);

  • 标志:U = 该条目有效,G = 下一跳是路由器;

  • default:缺省路由(“找不到具体路线时,默认走这里”)。

2. 路由转发过程:跟着 “地图” 走

我们用两个例子,看数据包怎么 “导航”:

例子 1:目的地址 192.168.56.3
  1. 数据包到主机,查路由表:
  • 与 192.168.10.0 的掩码做与运算,结果不是 192.168.10.0(不匹配);

  • 与 192.168.56.0 的掩码做与运算,结果是 192.168.56.0(匹配);

  1. 从 eth1 接口直接发送(网关是 0.0.0.0,说明网段直接连接)。
例子 2:目的地址 202.10.1.2(公网 IP)
  1. 数据包到主机,查路由表:
  • 与 192.168.10.0、192.168.56.0、127.0.0.0 都不匹配;
  1. 走缺省路由,从 eth0 接口发给网关 192.168.10.1;

  2. 192.168.10.1 路由器再查自己的路由表,继续转发,直到到达目的主机。

七、IP 分片与组装:超大数据包的 “拆分与重组”

数据链路层有 “MTU(最大传输单元)” 限制 —— 比如以太网的 MTU 是 1500 字节,意味着一次最多传 1500 字节的数据。如果 IP 数据包超过 MTU,就需要 “分片”;到了目的主机,再 “组装” 成完整数据包。

1. 分片的关键字段(回顾 IP 协议头)

  • 标识(ID):同一数据包的所有分片,ID 相同(目的主机靠 ID 识别 “哪些分片是一伙的”);

  • 标志(Flags):MF=1 表示 “还有下一片”,MF=0 表示 “最后一片”;DF=1 表示 “禁止分片”(超 MTU 则丢弃);

  • 片偏移:分片在原数据包中的位置(单位:8 字节)—— 比如偏移 = 0,代表这是第一片;偏移 = 185,代表这是第二片(185×8=1480 字节,即第一片数据长度)。

2. 分片与组装流程(以 3000 字节数据包为例)

假设 IP 头 20 字节,MTU=1500 字节(数据部分最多 1480 字节):

分片过程(路由器 / 源主机):
  1. 原始数据包:总长度 3020 字节(IP 头 20 + 数据 3000);

  2. 第一片:IP 头 20 + 数据 1480(总长度 1500),ID=123,MF=1,片偏移 = 0;

  3. 第二片:IP 头 20 + 数据 1480(总长度 1500),ID=123,MF=1,片偏移 = 185(1480/8);

  4. 第三片:IP 头 20 + 数据 40(总长度 60),ID=123,MF=0,片偏移 = 370(2960/8);

  5. 三片分别独立发送,可能走不同路由。

组装过程(目的主机):
  1. 接收分片,按 “ID” 分组(把 ID=123 的分片归为一组);

  2. 按 “片偏移” 排序(0→185→370);

  3. 检查 “MF 标志”:当收到 MF=0 的分片,说明所有分片已到;

  4. 拼接所有分片的数据部分,加上原始 IP 头(或重新封装),传给上层协议(TCP/UDP)。

关键注意:IP 分片对传输层透明——TCP/UDP 完全不知道数据包被分片了,只负责接收组装后的完整数据。

八、总结:网络层的 “核心逻辑链”

最后我们用一句话串联所有知识点,帮你形成框架:

网络层通过 IP 协议给数据包 “贴标签”(源 / 目 IP),用 CIDR 和 NAT 解决 “IP 地址不够用” 的问题,靠路由表规划 “配送路径”,用分片组装解决 “MTU 限制”,最终实现跨网络的数据包传输。

如果想加深理解,建议动手实操:

  • ipconfig(Windows)或ifconfig(Linux)看自己的 IP 和子网掩码;

  • route print(Windows)或route -n(Linux)看路由表;

  • ping ``127.0.0.1测试环回地址,用ping 百度IP测试公网连通性。

http://www.dtcms.com/a/473551.html

相关文章:

  • 做网站办什么营业执照nginx wordpress 伪静态
  • 深入理解TCP/IP通信:系统调用与零拷贝技术全面解析
  • 编程语言Delphi
  • 【AI论文】RLP:将强化学习作为预训练目标
  • Etcd使用
  • etcd实战课-实战篇(上)
  • Kubernetes 运维指南:kubectl 命令全解析
  • 网站logo关键字参数
  • ubuntu下桌面应用启动图标的内容文件
  • Leetcode 25
  • 西安博达网站建设自己制作wordpress plugin
  • OpenCV的数据类型二
  • Serdes专题(3)Lattice Serdes架构
  • 人形机器人项目中使用Ubuntu-Server安装桌面系统进行远程xrdp远程连接操作
  • 京东开源了一款大模型安全框架:JoySafety,说是京东内部已应用,实现95%+攻击拦截率
  • 【传奇开心果系列】基于Flet框架实现的关于页面创建和提供文件下载集成了网络请求、文件下载、剪贴板操作功能自定义模板特色和实现原理深度解析
  • ​为什么我们需要将Flow转换为StateFlow?​​
  • vscode远程连接云服务器的初次尝试
  • 甘肃网站开发公司用手机怎么做免费网站
  • 网站是由多个网页组成的吗济南网约车平台
  • Linux系统下的终端,会话,shell,bash,进程组这几个概念的关系。
  • 微信小程序入门学习教程,从入门到精通,自定义组件与第三方 UI 组件库(以 Vant Weapp 为例) (16)
  • 银河麒麟V10高级服务器版Bash快捷键经常失效
  • 建设网站平台需要什么硬件配置电脑上买wordpress
  • Jessibuca 播放器
  • minio之docker的单机版安装
  • 主流 AI IDE 之一的 Qoder 和 Lingma IDE 介绍
  • 搜索不到网站的关键词国家企业信用公示系统官网查询
  • PostgreSQL在Linux中的部署和安装教程
  • AI大事记12:Transformer 架构——重塑 NLP 的革命性技术(上)