网络层
前言
上一篇我们彻底吃透了 五层模型、应用层序列化、DNS、MAC、ARP、MTU 与帧转发。
数据链路层解决的是局域网内、相邻节点的数据交付。
但互联网是跨网段、跨城市、跨运营商的大规模通信,这就需要 网络层 来统一管控路径寻址与数据包转发。
本篇作为计算机网络核心重难点,全覆盖后端面试高频考点:
IP 报文结构、IP 地址分类、特殊 IP、子网掩码与网段划分、路由转发机制、NAT 内网穿透。
彻底打通「局域网通信 → 全网通信」的底层逻辑,为后续 TCP 三次握手 / 四次挥手、网络并发问题铺垫底层能力。
网络层核心作用
网络层两大核心功能:地址管理+路由选择。
- 地址管理:制定一系列规则,通过地址描述一个设备在网络上的位置。
- 路由选择:网络环境比较复杂,从一个节点到另一个节点之间,存在很多条不同的路径,就需要通过这种方式,规划出更合适的路径进行传输。
网络层核心协议:IP协议(IPv4)。
IP协议
数据包报文结构=头部+数据载荷(传输层报文)
关键字段
- 4位版本:IPv4;6位版本:IPv6。
- 4位首部长度:IP协议的报头是变长的,最小20字节,最大60字节。
- 8位服务类型(TOS):能够让IP协议切换形态。
3位优先权字段(已弃用)、4位TOS字段、1位保留字段(必须置为0)。
对于4位TOS字段:这四位之间彼此冲突,只有一位能设置为1,不同位设为1,表示IP协议不同形态。四种形态为最小延时、最大吞吐量、最高可靠性、最小成本。- 16位总长度(字节数):描述了IP数据包最长为多少。
IP协议存在上限,但IP协议自身支持"拆包组包"功能。- 16位标识:如果一个大的IP数据包被拆分成了多个小包,这些小包的16位标识是相同的数值。
3位标志:3位中有一位表示是否允许拆包,有一位表示是否是最后一个包。
13位片偏移:描述当前每个小的数据包(分片)相对位置。
通过以上三个属性,来支持IP协议的拆包组包。- 8位生存时间(TTL):描述了这个IP数据包在网络上还能存活多久。
TTL的单位是次数。每经过一次路由器,TTL-1;当TTL=0时直接丢弃数据包,防止数据包无限换路转发。- 8位协议:标识上层传输层协议。即描述了IP数据包的载荷部分是一个UDP数据包还是TCP数据包。
- 16位首部校验和:只校验IP首部。
关于IP数据包的载荷部分,TCP/UDP的数据本身有校验和。- 32位源IP地址、32位目的IP地址:IP地址是一串32位整数,采用点分十进制。
地址管理
IP地址,是一串32位整数,大概有42亿多个,但全球这么多人,每个人都上网,IP地址肯定不够用,那要如何解决IP地址不够用呢?
下面有三种方式解决上述问题。
动态分配IP
动态分配IP,就是在设备连上网络时,临时给它分配一个IP,用完回收。
该方法提高了IP地址的利用率,未增加IP地址的数目。
NAT机制
NAT机制(网络地址转换):让多个内网设备共享一个公网IP上网。
IP分为内网IP(局域网IP)、外网IP(广域网IP)。
原则:
- 在同一个局域网内部,内网IP之间,不能重复。
- 在不同的局域网中,内网IP之间,可以重复。
- 外网IP始终不允许重复,务必是唯一的。
NAT工作机制:

运营商路由器内部会记录一个映射关系(对源IP的替换,当响应报文回来时,还要对响应报文的源IP替换回去)。
去程:不改目的 IP,只改源 IP;
回程:不改源 IP,只改目的 IP。
当服务器返回数据之后,路由器如何决定这个数据要交给哪个设备?
结合端口号。端口号可以区分同一主机不同进程,也可以区分不同主机不同进程。
也有可能会出现两个设备同时访问同一个外网IP,并且端口号相同的情况:

正是NAT机制,使得局域网内部设备能主动访问外网设备,外网设备无法主动访问局域网内部设备。
路由器转发原理
交换机 vs 路由器
- 交换机(二层设备):
(1)工作在数据链路层
(2)根据 MAC 地址 转发
(3)只能同网段通信- 路由器(三层设备)
(1)工作在网络层
(2)根据 IP 地址 + 路由表 转发
(3)实现跨网段、全网通信
路由表核心字段:
- 路由器每一条路由规则:目标网段 + 下一跳地址
- 转发逻辑:
(1)收到 IP 数据包
(3)匹配目标 IP 所属网段
(3)找到对应下一跳
(4)改写 MAC 地址,继续转发
路由最大特点:
全程源 IP、目的 IP 不变;每一跳 MAC 地址不断刷新
IPv6
IPv6:使用16个字节来表示IP地址,从根本上解决问题,大幅度提升IP地址个数。
最大问题:与IPv4不兼容。
网段划分
- 网段划分把一个IP地址分为两部分:网络号(标识局域网)、主机号(标识局域网中的一个设备)。
- 原则:同一个局域网中的设备,网络号必须相同,主机号必须不同;两个相邻的局域网(通过一个路由器连接的两个局域网),网络号不能相同。
那么如何区分一个IP地址哪一部分是网络号,哪一部分是主机号?
利用子网掩码。
子网掩码
子网掩码用来确定网络号。
特点:左侧都是1,右侧都是0,不会1,0交替出现;32位整数,被标记为1的部分就是网络号。
示例:
- IPv4地址:192.168.100.176
- 子网掩码:255.255.255.0
网络号就是192.168.100
特殊IP地址:
- 若一个IP地址,主机号全0,当前这个IP就表示"网络号"。代表一个局域网,不能分配给一个具体主机。
- 若一个IP地址,主机号全1,就是广播地址,不能分配给一个具体主机。
UDP Socket给这个地址发送UDP数据报,此时局域网中所有设备,都能收到这个数据报。而TCP无法与这个地址建立连接。
3.若一个IP是127开头,就是环回IP(loopback)。
环回IP用于进行测试性工作,能排除网络不通干扰因素。
路由选择
- 路由选择描述了 IP 协议(IP 数据报)转发过程。
- 进行 IP 数据报转发时,每个路由器都无法知道网络的全貌,只知道一些局部信息(哪些设备和自己相连),这就意味着 IP 数据在转发过程中是一个 "探索式" 过程 → 较优解。
- 一个网络层的数据报,每到达一个路由器,进行 "问路" 过程。
- 每个路由器内部都有一个数据结构 "路由表",根据数据报中的目的 IP 查路由表:
(1)若查到了,就直接按照路由表给定的方向(从哪个网络接口进行转发),继续转发;
(2)若没查到,就直接路由表中有一个 "默认的表项"(下一跳地址),按照默认的表项转发。
总结
本文讲解计算机网络网络层核心知识,解决跨网段全网通信问题,核心依托 IPv4 协议,分为两大功能:地址管理、路由选择。
- IP 报文头部定义各类控制字段,支持分片重组、TTL 防环路、区分 TCP/UDP 上层协议。
- 针对 IPv4 地址短缺,三种解决方案:DHCP 动态分配、NAT 内网共享公网 IP、128 位 IPv6。其中 NAT 上行只改源 IP、回程只改目的 IP,靠端口区分内网设备,隔离外网主动访问。
- 交换机基于 MAC 仅内网互通;路由器依靠 IP + 路由表跨网段转发,传输全程源 / 目的 IP 不变,仅 MAC 不断刷新。
- IP 由网络号 + 主机号组成,子网掩码划分网段;网段标识、广播地址、127 环回地址为三类特殊 IP,不可分配主机。
- 路由转发依靠路由表查表,路由器仅存储局部网络信息,逐跳查表转发,无匹配网段时走默认路由。
后续会持续更新相关内容。
本篇是「Java后端编程系列」的连载内容,点击链接查看完整系列: