4. 网络层实现:IP协议、IP地址分类、子网掩码、路由选择原理
各位同学,咱们今天聊聊网络层。说实话,这是整个网络通信栈里最核心的一层。没有网络层,数据包就只能在一个局域网里打转,根本出不了门。我当年刚入行时,总觉得IP地址就是随便分配一下,后来被现实狠狠教育了一顿——地址规划不好,后期运维简直是噩梦。
4.1 IP协议:互联网的“通用语言”
IP协议,全称Internet Protocol,说白了就是给每个设备发一个唯一的“门牌号”。这个门牌号就是IP地址。数据包在网络里传输,全靠这个地址找到目标。
目前主流的是IPv4,32位,分4段,每段0-255。比如 192.168.1.1。但IPv4地址早就枯竭了,所以IPv6(128位)正在慢慢普及。我个人习惯,新项目能上IPv6就上,省得以后折腾。
核心要点:IP协议提供的是“无连接、不可靠”的服务。它只管把包发出去,不保证一定能到。可靠性是上层协议(比如TCP)的事。
4.2 IP地址分类:A、B、C、D、E类
早期的IP地址是分类的,就像把房子分成别墅区、公寓区、宿舍区。我刚开始学的时候,觉得这分类挺合理,后来发现太浪费地址了。
| 类别 | 首字节范围 | 默认子网掩码 | 用途 |
|---|---|---|---|
| A类 | 1 - 126 | 255.0.0.0 | 大型网络 |
| B类 | 128 - 191 | 255.255.0.0 | 中型网络 |
| C类 | 192 - 223 | 255.255.255.0 | 小型网络 |
| D类 | 224 - 239 | 无 | 组播 |
| E类 | 240 - 255 | 无 | 实验保留 |
举个例子:A类地址,一个网络就能有1600多万个主机。你想想看,哪个公司需要这么多?所以后来才有了CIDR(无类域间路由),彻底打破了这种僵化的分类。
避坑指南:我曾经在配置网络时,把127.0.0.1当成了普通地址来用,结果怎么都ping不通。后来才想起来,127.0.0.1是回环地址,专门用来测试本机网络栈的。千万别把它分配给任何接口。
4.3 子网掩码:划清“邻里”界限
子网掩码,说白了就是一把“剪刀”,把IP地址剪成网络部分和主机部分。比如 255.255.255.0,前24位是网络号,后8位是主机号。
为什么要用子网掩码?因为要判断两个IP是不是在同一个网段。怎么判断?把IP和子网掩码做“与”运算,结果相同就在同一个网段。
IP: 192.168.1.10 → 11000000.10101000.00000001.00001010
掩码: 255.255.255.0 → 11111111.11111111.11111111.00000000
与运算: → 11000000.10101000.00000001.00000000 → 192.168.1.0
嗯,这里要注意:子网掩码不能随便写。写错了,要么网络不通,要么广播风暴。我记得有一次,一个同事把掩码写成了 255.255.0.0,结果整个B段地址都在一个广播域里,网络直接瘫痪。
警告:子网划分时,每个子网的主机数要减去2(网络地址和广播地址不可用)。比如一个C类网段(256个地址),实际可用只有254个。这个坑我踩过,项目上线前才发现地址不够用,临时改规划,那叫一个狼狈。
4.4 路由选择原理:数据包的“导航系统”
路由选择,就是数据包从源到目的地,怎么走的问题。你想想看,互联网上有几亿台设备,数据包不可能乱窜,必须有个“导航”。
路由器的核心工作就两件事:
- 选路:根据路由表,决定下一跳是谁
- 转发:把数据包从合适的接口扔出去
路由表长什么样?我给你们看个简化版:
目标网络 下一跳 接口
192.168.1.0/24 直接连接 eth0
10.0.0.0/8 192.168.1.1 eth0
0.0.0.0/0 192.168.1.254 eth0 (默认路由)
路由选择的原则很简单:最长前缀匹配。说白了,就是谁的掩码越长,谁就更精确,就选谁。比如目标IP是 192.168.1.5,既匹配 192.168.1.0/24,又匹配 0.0.0.0/0,那肯定选前者。
个人经验:我在一次跨国网络调优中,发现数据包总是绕远路。后来查路由表,发现是默认路由的优先级设置错了。调整之后,延迟从300ms降到了80ms。路由选择,细节决定成败。
4.5 静态路由 vs 动态路由
路由分两种:静态和动态。
- 静态路由:管理员手动配置。适合小网络,稳定但维护麻烦。
- 动态路由:路由器之间自动交换信息。适合大网络,灵活但消耗资源。
常见的动态路由协议有:
- RIP:基于跳数,最大15跳。老古董了,现在很少用。
- OSPF:基于链路状态,收敛快。我比较推荐。
- BGP:互联网的“大管家”,负责不同AS之间的路由。
我曾经在一个项目中,用静态路由配了50多条条目,结果网络拓扑一变化,改配置改到崩溃。后来果断上了OSPF,世界清净了。
建议:小网络(少于10台路由器)用静态路由,简单可靠。大网络(超过20台)必须上动态路由,否则运维成本会让你怀疑人生。
4.6 总结与避坑
网络层这块,说白了就是三件事:地址规划、子网划分、路由配置。我见过太多新手,一上来就配IP,结果地址冲突、子网掩码写错、路由表混乱,最后网络不通。
我的建议是:
- 先画拓扑图,再规划地址
- 子网掩码算清楚,别偷懒
- 路由表写完后,用
traceroute验证路径 - 动态路由协议,选OSPF准没错
好了,这一章就到这里。下一章咱们聊聊传输层,TCP和UDP的那些事儿。到时候我会分享一个我当年调试TCP窗口大小的血泪史,保证精彩。