第七讲:网络层与路由——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
- 度量值:比如跳数、带宽等
路由表是怎么来的?有三种方式:
- 直连路由:路由器自己接口上的网段,自动生成
- 静态路由:管理员手动配置
- 动态路由:通过路由协议自动学习
你想想看,如果全世界几十万台路由器都靠人工配静态路由,那得累死。所以动态路由协议就派上用场了。
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)。
- 主机A判断目标是否在同一网段:A用子网掩码255.255.255.0与B的IP做与运算,得到网络地址10.0.0.0,与自己不在同一网段。所以A把数据包发给默认网关192.168.1.1。
- 第一跳路由器收到数据包:路由器查路由表,发现目标网络10.0.0.0/24的下一跳是172.16.0.2,出接口是G0/1。
- 路由器修改MAC地址:把源MAC改成自己的G0/1接口MAC,目标MAC改成下一跳路由器的MAC。IP地址不变。
- 中间路由器逐跳转发:每经过一个路由器,都重复查表、改MAC、转发的动作。
- 最后一跳路由器:发现目标网络10.0.0.0/24是自己的直连网段,直接通过ARP获取主机B的MAC,把数据包发过去。
- 主机B收到数据包:检查目标IP是自己的,处理数据包。
整个过程,IP地址始终不变,但MAC地址每跳都在变。这就是“IP端到端,MAC逐跳变”的核心思想。
关键点:
数据包转发过程中,TTL(生存时间)每经过一个路由器减1。如果TTL减到0,路由器会丢弃数据包并发送ICMP超时消息。我曾经用traceroute排查网络路径,就是利用这个原理。
7.5 知识体系总览
下面这张图展示了本章的核心知识结构。我建议你把它保存下来,复习时对照着看。
这张图把本章的三个核心模块串在了一起。IP地址和子网掩码是基础,路由表是核心,数据包转发是最终目的。三者缺一不可。
我的建议:
学网络层,一定要动手。我建议你在GNS3或EVE-NG上搭一个三台路由器的小网络,分别配RIP和OSPF,然后用traceroute看路径变化。纸上得来终觉浅,绝知此事要躬行。
好了,这一讲的内容就到这里。网络层是网络工程师的看家本领,把IP地址、子网掩码、路由表、路由协议这些概念吃透了,你就能理解数据包在互联网上的奇幻漂流了。