网络(四)|全网最细网络层原理:IP 协议、IP 地址分类、子网划分、路由转发、NAT 穿透详解

网络层

前言

上一篇我们彻底吃透了 五层模型、应用层序列化、DNS、MAC、ARP、MTU 与帧转发。

数据链路层解决的是局域网内、相邻节点的数据交付。

但互联网是跨网段、跨城市、跨运营商的大规模通信,这就需要 网络层 来统一管控路径寻址与数据包转发。

本篇作为计算机网络核心重难点,全覆盖后端面试高频考点:

IP 报文结构、IP 地址分类、特殊 IP、子网掩码与网段划分、路由转发机制、NAT 内网穿透。

彻底打通「局域网通信 → 全网通信」的底层逻辑,为后续 TCP 三次握手 / 四次挥手、网络并发问题铺垫底层能力。

网络层核心作用

网络层两大核心功能:地址管理+路由选择。

  1. 地址管理:制定一系列规则,通过地址描述一个设备在网络上的位置。
  2. 路由选择:网络环境比较复杂,从一个节点到另一个节点之间,存在很多条不同的路径,就需要通过这种方式,规划出更合适的路径进行传输。

网络层核心协议:IP协议(IPv4)。

IP协议

数据包报文结构=头部+数据载荷(传输层报文)

关键字段

  1. 4位版本:IPv4;6位版本:IPv6。
  2. 4位首部长度:IP协议的报头是变长的,最小20字节,最大60字节。
  3. 8位服务类型(TOS):能够让IP协议切换形态。
    3位优先权字段(已弃用)、4位TOS字段、1位保留字段(必须置为0)。
    对于4位TOS字段:这四位之间彼此冲突,只有一位能设置为1,不同位设为1,表示IP协议不同形态。四种形态为最小延时、最大吞吐量、最高可靠性、最小成本。
  4. 16位总长度(字节数):描述了IP数据包最长为多少。
    IP协议存在上限,但IP协议自身支持"拆包组包"功能。
  5. 16位标识:如果一个大的IP数据包被拆分成了多个小包,这些小包的16位标识是相同的数值。
    3位标志:3位中有一位表示是否允许拆包,有一位表示是否是最后一个包。
    13位片偏移:描述当前每个小的数据包(分片)相对位置。
    通过以上三个属性,来支持IP协议的拆包组包。
  6. 8位生存时间(TTL):描述了这个IP数据包在网络上还能存活多久。
    TTL的单位是次数。每经过一次路由器,TTL-1;当TTL=0时直接丢弃数据包,防止数据包无限换路转发。
  7. 8位协议:标识上层传输层协议。即描述了IP数据包的载荷部分是一个UDP数据包还是TCP数据包。
  8. 16位首部校验和:只校验IP首部。
    关于IP数据包的载荷部分,TCP/UDP的数据本身有校验和。
  9. 32位源IP地址、32位目的IP地址:IP地址是一串32位整数,采用点分十进制。

地址管理

IP地址,是一串32位整数,大概有42亿多个,但全球这么多人,每个人都上网,IP地址肯定不够用,那要如何解决IP地址不够用呢?

下面有三种方式解决上述问题。

动态分配IP

动态分配IP,就是在设备连上网络时,临时给它分配一个IP,用完回收。

该方法提高了IP地址的利用率,未增加IP地址的数目。

NAT机制

NAT机制(网络地址转换):让多个内网设备共享一个公网IP上网。

IP分为内网IP(局域网IP)、外网IP(广域网IP)。

原则:

  1. 在同一个局域网内部,内网IP之间,不能重复。
  2. 在不同的局域网中,内网IP之间,可以重复。
  3. 外网IP始终不允许重复,务必是唯一的。

NAT工作机制:

运营商路由器内部会记录一个映射关系(对源IP的替换,当响应报文回来时,还要对响应报文的源IP替换回去)。

去程:不改目的 IP,只改源 IP;

回程:不改源 IP,只改目的 IP。

当服务器返回数据之后,路由器如何决定这个数据要交给哪个设备?

结合端口号。端口号可以区分同一主机不同进程,也可以区分不同主机不同进程。

也有可能会出现两个设备同时访问同一个外网IP,并且端口号相同的情况:

正是NAT机制,使得局域网内部设备能主动访问外网设备,外网设备无法主动访问局域网内部设备。

路由器转发原理

交换机 vs 路由器

  1. 交换机(二层设备):
    (1)工作在数据链路层
    (2)根据 MAC 地址 转发
    (3)只能同网段通信
  2. 路由器(三层设备)
    (1)工作在网络层
    (2)根据 IP 地址 + 路由表 转发
    (3)实现跨网段、全网通信

路由表核心字段:

  1. 路由器每一条路由规则:目标网段 + 下一跳地址
  2. 转发逻辑:
    (1)收到 IP 数据包
    (3)匹配目标 IP 所属网段
    (3)找到对应下一跳
    (4)改写 MAC 地址,继续转发

路由最大特点:

全程源 IP、目的 IP 不变;每一跳 MAC 地址不断刷新

IPv6

IPv6:使用16个字节来表示IP地址,从根本上解决问题,大幅度提升IP地址个数。

最大问题:与IPv4不兼容。

网段划分

  1. 网段划分把一个IP地址分为两部分:网络号(标识局域网)、主机号(标识局域网中的一个设备)。
  2. 原则:同一个局域网中的设备,网络号必须相同,主机号必须不同;两个相邻的局域网(通过一个路由器连接的两个局域网),网络号不能相同。

那么如何区分一个IP地址哪一部分是网络号,哪一部分是主机号?

利用子网掩码。

子网掩码

子网掩码用来确定网络号。

特点:左侧都是1,右侧都是0,不会1,0交替出现;32位整数,被标记为1的部分就是网络号。

示例:

  1. IPv4地址:192.168.100.176
  2. 子网掩码:255.255.255.0
    网络号就是192.168.100

特殊IP地址:

  1. 若一个IP地址,主机号全0,当前这个IP就表示"网络号"。代表一个局域网,不能分配给一个具体主机。
  2. 若一个IP地址,主机号全1,就是广播地址,不能分配给一个具体主机。
    UDP Socket给这个地址发送UDP数据报,此时局域网中所有设备,都能收到这个数据报。而TCP无法与这个地址建立连接。
    3.若一个IP是127开头,就是环回IP(loopback)。
    环回IP用于进行测试性工作,能排除网络不通干扰因素。

路由选择

  1. 路由选择描述了 IP 协议(IP 数据报)转发过程。
  2. 进行 IP 数据报转发时,每个路由器都无法知道网络的全貌,只知道一些局部信息(哪些设备和自己相连),这就意味着 IP 数据在转发过程中是一个 "探索式" 过程 → 较优解。
  3. 一个网络层的数据报,每到达一个路由器,进行 "问路" 过程。
  4. 每个路由器内部都有一个数据结构 "路由表",根据数据报中的目的 IP 查路由表:
    (1)若查到了,就直接按照路由表给定的方向(从哪个网络接口进行转发),继续转发;
    (2)若没查到,就直接路由表中有一个 "默认的表项"(下一跳地址),按照默认的表项转发。

总结

本文讲解计算机网络网络层核心知识,解决跨网段全网通信问题,核心依托 IPv4 协议,分为两大功能:地址管理、路由选择。

  1. IP 报文头部定义各类控制字段,支持分片重组、TTL 防环路、区分 TCP/UDP 上层协议。
  2. 针对 IPv4 地址短缺,三种解决方案:DHCP 动态分配、NAT 内网共享公网 IP、128 位 IPv6。其中 NAT 上行只改源 IP、回程只改目的 IP,靠端口区分内网设备,隔离外网主动访问。
  3. 交换机基于 MAC 仅内网互通;路由器依靠 IP + 路由表跨网段转发,传输全程源 / 目的 IP 不变,仅 MAC 不断刷新。
  4. IP 由网络号 + 主机号组成,子网掩码划分网段;网段标识、广播地址、127 环回地址为三类特殊 IP,不可分配主机。
  5. 路由转发依靠路由表查表,路由器仅存储局部网络信息,逐跳查表转发,无匹配网段时走默认路由。

后续会持续更新相关内容。

本篇是「Java后端编程系列」的连载内容,点击链接查看完整系列:

🔹 上一篇:网络(三)|彻底搞懂网络底层!五层模型、序列化、MAC/ARP、MTU 一次吃透

👉 点击直达 Java后端基础专栏合集

相关推荐
大模型码小白19 小时前
Milvus 架构设计:从向量索引到分布式检索,AI 原生存储引擎的内部机制
java·大数据·人工智能·分布式·深度学习·milvus
稚南城才子,乌衣巷风流19 小时前
链表(Linked List):数据结构详解与实战应用
java
NWU_LK19 小时前
【WebFlux】第二篇 —— Project Reactor 核心数据类型
java
三84420 小时前
笔记:在同一个物理服务器上通过nginx的虚拟主机生成多个不同的web站点
java·前端·nginx
吃着火锅x唱着歌20 小时前
Effective C++ 学习笔记 条款38 通过复合塑模出has-a或“根据某物实现出”
c++·笔记·学习
syagain_zsx20 小时前
库制作与原理 · 链接知识笔记
c语言·c++·笔记·动态库·静态库
caimouse20 小时前
mm学习笔记_04:VAD树算法与地址空间分配
笔记·学习·算法·reactos
智者知已应修善业20 小时前
【使用D触发器74HC175实现0001 0011 0111 1111 1110 1100 1000的循环彩灯电路。】2025-4-28
驱动开发·经验分享·笔记·硬件架构·硬件工程
2501_9327502620 小时前
Android 数据持久化解析
android·java