网络编程—网络层

前言

网络层是 TCP/IP 四层模型中承上启下的核心层级,负责在跨网段的复杂互联网络中为数据包选择传输路径,实现端到端的主机通信。本文将系统梳理 IP 协议格式、网段划分机制、NAT 地址转换与路由基本原理,搭配示图片、表格与命令实例辅助理解。
IP协议


一、基础认知

1.1 职能

网络层的核心作用是在复杂的网络拓扑中,确定数据包从源主机到目的主机的最优传输路径。

数据链路层负责单跳内的直连通信,而网络层实现跨多个网段的端到端通信。

1.2 基本概念

  • 主机:配置 IP 地址,具备基础路由控制能力的终端设备

  • 路由器:同时配置 IP 地址,且具备专业路由转发能力的网络设备

  • 节点:网络中主机与路由器的统称


二、IP 协议报文

IP是网络层的核心协议,IPv4 版本的报文由头部和数据两部分组成。其中固定头部长度为 20 字节,可通过选项字段扩展至最多 60 字节。

2.1 头部结构

下图为 IPv4 报文头部的标准结构,直观展示了各字段的排布与长度:

2.2 头部字段

IPv4 头部各字段的长度与核心功能:

字段名称 长度 核心功能
版本号 4 标识 IP 协议版本,IPv4 取值固定为 4
头部长度 4 以 4 字节为单位,标识头部总长度;最大值 15 对应 60 字节,常规报文为 5
服务类型 8 4 位 TOS 字段可选择最小延时、最大吞吐量、最高可靠性、最小成本四种优先级,四者互斥
总长度 16 整个 IP 数据报(头部 + 数据)的总字节数,最大值为 65535
标识 16 唯一标识一份原始报文;同一报文的所有分片标识相同,用于接收端重组
标志 3 第 2 位为禁止分片位;第 3 位为更多分片位
片偏移 13 分片相对原始报文起始位置的偏移,实际字节数 = 该值 × 8;除最后一片外,其余分片长度必须是 8 的整数倍
生存时间 8 报文最大可经过的路由跳数,每经过一个路由器减 1,归零时丢弃报文,防止路由环路;默认初始值通常为 64
协议 8 标识上层承载的协议类型,如 TCP 对应 6、UDP 对应 17
头部校验和 16 基于 CRC 校验 IP 头部的完整性,检测传输损坏
源 IP 地址 32 发送端主机的 IP 地址
目的 IP 地址 32 接收端主机的 IP 地址
选项字段 0~320 可选扩展字段,最多 40 字节,用于特殊网络功能

2.3 核心机制

  • 分片机制:当 IP 报文长度超过数据链路层的 MTU(最大传输单元)时,会被拆分为多个分片独立传输,到达目的主机后重组。

  • TTL 机制:通过跳数限制从根本上避免路由环路导致数据包在网络中无限循环。


三、网段划分

IPv4 地址是 32 位的二进制标识,通常写作点分十进制格式(如 192.168.1.1)。为实现分层寻址,IP 地址被划分为网络号主机号两部分:

  • 网络号:标识不同的网段,相连的两个网段网络号必须不同

  • 主机号:同一网段内的主机网络号相同,主机号唯一

3.1 早期方案

最初的 IP 地址采用固定分类的划分方式,共分为 A、B、C、D、E 五类,其中 A、B、C 类用于常规主机寻址:

地址类别 地址范围 网络号位数 主机号位数 单网可用主机数
A 类 0.0.0.0 ~ 127.255.255.255 8 24 约 1677 万
B 类 128.0.0.0 ~ 191.255.255.255 16 16 65534
C 类 192.0.0.0 ~ 223.255.255.255 24 8 254
D 类 224.0.0.0 ~ 239.255.255.255 - - 多播专用地址
E 类 240.0.0.0 ~ 247.255.255.255 - - 保留备用

该方案的核心缺陷是地址利用率极低:多数组织申请 B 类地址但远用不完 6 万多个主机位,A 类地址则大量闲置。

3.2 无类别域间路由

为解决分类地址的浪费问题,提出了无类别域间路由(CIDR),引入子网掩码灵活划分网络号与主机号,不再受 A/B/C 类地址的固定边界限制。

(1)核心规则
  1. 子网掩码 :32 位二进制数,高位全 1、低位全 0;IP 地址与子网掩码执行按位与运算,得到的结果就是网络号。

  2. 简写格式:IP地址/前缀长度,前缀长度表示子网掩码中 1 的位数。例如192.168.1.10/24,对应子网掩码 255.255.255.0。

网络位与主机位的划分逻辑:

(2)计算示例

已知 IP 地址192.168.1.10,子网掩码255.255.255.0:

  1. 二者按位与运算,结果为192.168.1.0,即该网段的网络号

  2. 主机位为后 8 位,范围从全 0 到全 1,对应192.168.1.0 ~ 192.168.1.255

3.3 特殊 IP 地址

  1. 网络地址:主机号全为 0,代表整个局域网网段,不可分配给主机,如192.168.1.0/24

  2. 广播地址:主机号全为 1,用于向同一网段内所有主机发送数据包,不可分配给主机,如192.168.1.255/24

  3. 环回地址:127.*.*.*网段,用于本机内部通信测试,最常用127.0.0.1;发往该地址的数据包不会流出本机网卡。


四、IP 地址稀缺性

IPv4 仅 32 位,理论总量约 43 亿,扣除特殊地址、按网卡分配后,实际可承载的公网设备数量远低于全球互联网设备数。行业内主要通过三类方案缓解地址压力。

4.1 私有 IP 地址

RFC 1918 规定了三类私有 IP 地址段,仅用于局域网内部通信,不可直接在公网路由。不同局域网可复用同一段私有地址,大幅节省公网 IP 资源。

表格

私有地址段 前缀长度 地址总数 适用场景
10.0.0.0 ~ 10.255.255.255 /8 16,777,216 大型企业内网
172.16.0.0 ~ 172.31.255.255 /12 1,048,576 中型企业内网
192.168.0.0 ~ 192.168.255.255 /16 65,536 家庭、小型办公网络

4.2 NAT 网络地址

NAT 是目前家用网络最核心的公网接入技术,让局域网内多台主机共享一个公网 IP 访问互联网。

(1)双 IP 结构

常用两个 IP:

  • WAN 口 IP:连接上级网络(运营商)的 IP,通常为公网 IP 或运营商内网 IP

  • LAN 口 IP:局域网网关 IP,即子网内主机的默认网关,通常为192.168.1.1

(2)工作原理

NAT 的地址转换完整流程:

  1. 内网主机向外网发送数据包,源 IP 为私有地址

  2. 路由器收到数据包后,将源 IP 替换为自身 WAN 口 IP,并记录端口与地址的映射关系

  3. 外网回包到达路由器后,根据映射记录将目的 IP 替换为对应内网主机的私有 IP

  4. 数据包转发至内网目标主机

4.3 补充方案

  • 动态 IP 分配:设备接入网络时才分配 IP,断开后回收,提升 IP 利用率;家用路由器普遍集成 DHCP 服务器。

  • IPv6 协议:采用 128 位地址长度,从根本上解决地址稀缺问题;与 IPv4 不兼容,目前处于逐步普及阶段。


五、路由原理

路由的核心是为数据包选择传输路径,采用逐跳转发模式:每个节点只负责确定下一跳地址,数据包一步步传递最终抵达目的主机。

5.1 基本概念

  • 一跳:数据链路层的一个传输区间,以太网中对应从源 MAC 地址到目的 MAC 地址的一次帧传输。

  • 数据链路层负责单跳内的帧传输,IP 层负责跨网段的端到端通信。

数据包跨路由器的逐跳转发过程:

5.2 路由表

每个主机和路由器都维护一张路由表,记录不同目的网段对应的下一跳地址与转发接口。

Linux 系统可通过route -n命令查看本机路由表:

bash 复制代码
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.10.1    0.0.0.0         UG    0      0        0 eth0

字段说明

  • Destination:目的网络地址

  • Gateway:下一跳网关地址,0.0.0.0表示该网段与本机直连,无需经过路由器

  • Genmask:目的网段的子网掩码

  • Iface:转发数据包使用的网络接口

  • Flags:U表示条目有效;G表示下一跳为路由器

5.3 实例

目的地址 202.10.1.2(跨网段转发)

  1. 依次匹配前三条路由条目,均未命中

  2. 匹配默认路由(0.0.0.0),从eth0接口转发至下一跳192.168.10.1

  3. 下一跳路由器继续根据自身路由表完成后续转发

5.4 路由表的生成方式

  • 静态路由:由网络管理员手动配置,适用于拓扑固定的小型网络

  • 动态路由:通过路由算法自动学习、更新路由表,常见算法包括距离向量算法、链路状态(LS)算法、Dijkstra 算法等,适用于大型复杂网络。


六、拓展

全球互联网的运行是多层主体协同的结果,从硬件基础设施到上层应用服务各有明确分工:

层级 参与主体 核心职责
物理基础设施 设备制造商、能源供应商 生产光缆、路由器等硬件设备;保障数据中心 7×24 小时供电
协议标准 IETF、IEEE 制定 TCP/IP、以太网等全球统一的网络协议标准
地址分配 ICANN、区域注册机构(如 APNIC) 负责全球 IP 地址、域名根的管理与区域分配
骨干网络 Tier1 运营商、IXP 交换中心 建设跨洋骨干光缆,提供网络互联交换节点
接入服务 ISP 运营商 部署光纤、5G 等接入网络,面向终端用户提供上网服务
监管合规 监管部门、安全机构 频谱资源分配、网络政策制定、安全事件应急响应
应用服务 云厂商、内容平台 提供云计算、CDN 加速、内容分发等上层服务
终端连接 终端设备厂商 实现网络协议栈与硬件适配,优化终端网络性能

总结

网络层是实现跨网络通信的核心枢纽:IP 协议提供了统一的寻址与报文标准,CIDR 与 NAT 技术在 IPv4 框架下大幅提升了地址利用率,路由表则是数据包逐跳转发的核心依据。理解这些基础原理,是深入学习网络协议、排查网络故障的重要前提。

相关推荐
不负岁月无痕1 小时前
简单理解操作系统结构
java·linux·c语言·开发语言·c++·面试
逻辑君1 小时前
ANNA 7.2 方块机器人实验技术报告
人工智能·深度学习·机器学习·机器人
A24207349301 小时前
React中请求拦截与响应拦截的统一处理方案
前端·javascript·react.js
SomeB1oody1 小时前
【RustyML入门】2.9. MeanShift
开发语言·后端·机器学习·rust·教程
菜鸟‍1 小时前
【论文学习】Medical Image Analysis 2024 || 医学图像分割中失败检测方法的比较基准研究:揭示置信度聚合的作用
人工智能·学习
萧瑟其中~1 小时前
多线程锁详解:互斥锁·自旋锁·读写锁(CAS + futex 原理)
开发语言·c++
AI导出鸭1 小时前
怎么让千问做表格?AI导出鸭苹果版将千问输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
陈嘿萌1 小时前
ECCV 2026 | 南开&OPPO开源 ExpoMotion:首个大规模动态多曝光融合数据集
人工智能·计算机视觉·图像融合·南开大学·新数据集·expomotion·多曝光融合
zyplayer-doc2 小时前
zyplayer-doc企业知识库能做什么:从文档创建、权限管理到AI问答的完整能力
大数据·javascript·数据库·人工智能·pdf·word