第七讲:网络层与路由——IP地址、子网掩码与数据包的奇幻漂流

各位同学,今天我们聊聊网络层。说实话,这是整个网络体系里最“烧脑”的一层,但也是最有意思的一层。你想想看,数据包从你的电脑出发,穿越千山万水,最终精准地找到目标服务器——这背后靠的就是网络层的路由机制。

我个人习惯把网络层比作“快递分拣中心”。IP地址就是收件地址,子网掩码是邮政编码的前几位,路由表是分拣员的操作手册。嗯,这个比喻虽然简单,但很实用。

7.1 IP地址与子网掩码:地址与“面具”

IP地址是网络层的核心。IPv4地址是32位的,通常写成点分十进制,比如192.168.1.1。但光有地址不够,你还得知道哪些位是“网络号”,哪些是“主机号”。

子网掩码就是干这个的。它是一串32位的二进制数,网络号部分全为1,主机号部分全为0。比如255.255.255.0,表示前24位是网络号,后8位是主机号。

核心公式:

网络地址 = IP地址 & 子网掩码

主机地址 = IP地址 & (~子网掩码)

举个例子:IP 192.168.1.100,子网掩码255.255.255.0。按位与运算后,网络地址是192.168.1.0,主机地址是0.0.0.100。说白了,这个设备属于192.168.1.0/24这个网段。

我在项目中遇到过一个问题:有人把子网掩码配成了255.255.0.0,结果两个不同网段的设备互相能ping通,但业务就是跑不起来。为什么?因为广播域变大了,ARP请求满天飞,交换机被搞懵了。嗯,这里要注意:子网掩码不是越大越好,要根据实际网络规模来定。

避坑指南:

我曾经在配置VPN时,把对端子网掩码写成了255.255.255.255,结果路由死活不通。后来发现,子网掩码必须与实际的网络规划一致,否则数据包根本找不到回家的路。

7.2 路由表:数据包的“导航地图”

每个路由器都有一张路由表。这张表告诉路由器:要去某个目标网络,下一跳该往哪走。

路由表的核心条目包括:

  • 目标网络:比如192.168.1.0/24
  • 下一跳地址:比如10.0.0.1
  • 出接口:比如GigabitEthernet0/0
  • 度量值:比如跳数、带宽等

路由表是怎么来的?有三种方式:

  1. 直连路由:路由器自己接口上的网段,自动生成
  2. 静态路由:管理员手动配置
  3. 动态路由:通过路由协议自动学习

你想想看,如果全世界几十万台路由器都靠人工配静态路由,那得累死。所以动态路由协议就派上用场了。

7.3 路由算法:RIP与OSPF

动态路由协议的核心是路由算法。我重点讲两个:RIP和OSPF。

7.3.1 RIP:距离矢量协议

RIP(Routing Information Protocol)是最早的路由协议之一。它的算法很简单:每个路由器只告诉邻居“我能到达哪些网络”,邻居再告诉自己的邻居。度量值就是跳数,最大15跳。

说白了,RIP就像“传话游戏”。A告诉B,B告诉C,C告诉D。但传话容易出错,RIP有个问题叫“路由环路”。我曾经在实验室里搭过一个RIP网络,不小心配了个环路,结果路由表一直在震荡,CPU飙升到100%。

RIP的防环机制:

  • 最大跳数限制(16跳不可达)
  • 水平分割(不把从某接口学到的路由再从这个接口发出去)
  • 毒性逆转(把坏路由标记为16跳)

注意:RIP只适合小型网络。我见过有人在大企业网里用RIP,结果路由收敛时间长达几分钟,业务中断频繁。后来全部换成了OSPF。

7.3.2 OSPF:链路状态协议

OSPF(Open Shortest Path First)就聪明多了。每个路由器都收集整个网络的拓扑信息,然后自己计算最短路径。它用的是Dijkstra算法,也叫SPF算法。

OSPF的核心概念:

  • LSA:链路状态通告,描述路由器的接口和邻居
  • LSDB:链路状态数据库,存储所有LSA
  • SPF树:以自己为根的最短路径树

OSPF比RIP强在哪?

  • 收敛速度快(秒级)
  • 支持大型网络(可以划分区域)
  • 度量值基于带宽(不是跳数)
  • 无环路(SPF算法保证)

我记得有一次帮客户排查网络故障,发现OSPF邻居一直起不来。查了半天,原来是两端的Hello间隔和Dead间隔不一致。嗯,OSPF的细节很多,但一旦配好了,稳定性非常好。

7.4 数据包的转发过程

好了,现在我们把所有知识串起来,看看一个数据包从源到目标到底经历了什么。

假设:主机A(192.168.1.10/24)要访问主机B(10.0.0.20/24)。

  1. 主机A判断目标是否在同一网段:A用子网掩码255.255.255.0与B的IP做与运算,得到网络地址10.0.0.0,与自己不在同一网段。所以A把数据包发给默认网关192.168.1.1。
  2. 第一跳路由器收到数据包:路由器查路由表,发现目标网络10.0.0.0/24的下一跳是172.16.0.2,出接口是G0/1。
  3. 路由器修改MAC地址:把源MAC改成自己的G0/1接口MAC,目标MAC改成下一跳路由器的MAC。IP地址不变。
  4. 中间路由器逐跳转发:每经过一个路由器,都重复查表、改MAC、转发的动作。
  5. 最后一跳路由器:发现目标网络10.0.0.0/24是自己的直连网段,直接通过ARP获取主机B的MAC,把数据包发过去。
  6. 主机B收到数据包:检查目标IP是自己的,处理数据包。

整个过程,IP地址始终不变,但MAC地址每跳都在变。这就是“IP端到端,MAC逐跳变”的核心思想。

关键点:

数据包转发过程中,TTL(生存时间)每经过一个路由器减1。如果TTL减到0,路由器会丢弃数据包并发送ICMP超时消息。我曾经用traceroute排查网络路径,就是利用这个原理。

7.5 知识体系总览

下面这张图展示了本章的核心知识结构。我建议你把它保存下来,复习时对照着看。

网络层与路由知识体系 IP地址与子网掩码 • IPv4地址结构 • 子网掩码作用 • 网络地址计算 • CIDR表示法 • 广播域与子网划分 路由表与路由算法 • 路由表结构 • 静态路由配置 • RIP距离矢量 • OSPF链路状态 • SPF算法原理 数据包转发过程 • 目标网段判断 • 默认网关转发 • 逐跳路由查询 • MAC地址变换 • TTL与ICMP 核心思想:IP端到端,MAC逐跳变 路由决定路径,转发完成传输 实践要点 1. 子网掩码配置错误会导致网络不通或广播风暴 2. RIP适合小型网络,OSPF适合大型复杂网络 3. 排查网络故障时,先看路由表,再看ARP表

这张图把本章的三个核心模块串在了一起。IP地址和子网掩码是基础,路由表是核心,数据包转发是最终目的。三者缺一不可。

我的建议:

学网络层,一定要动手。我建议你在GNS3或EVE-NG上搭一个三台路由器的小网络,分别配RIP和OSPF,然后用traceroute看路径变化。纸上得来终觉浅,绝知此事要躬行。

好了,这一讲的内容就到这里。网络层是网络工程师的看家本领,把IP地址、子网掩码、路由表、路由协议这些概念吃透了,你就能理解数据包在互联网上的奇幻漂流了。