网络(四)|全网最细网络层原理: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后端基础专栏合集

相关推荐
程序员黑豆30 分钟前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
hey_sml2 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
Doraemomo2 小时前
数据结构-环形链表
java·数据结构·链表
萧瑟余晖3 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
是未才4 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
ttod_qzstudio4 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
GlueNa2SiO35 小时前
第十八章 Linux故障排查与恢复
linux·服务器·笔记·学习
萧瑟余晖5 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
xian_wwq6 小时前
【学习笔记】Context Engineering,AI Agent 真正的内存管理-4/16
笔记·学习·context
不老刘6 小时前
【Java入门】Java服务部署方式全景对比:从java -jar到K8s
java·kubernetes·jar