1. IPv4寻址从分类到无分类的演进之路第一次配置网络时我被192.168.1.1这样的地址搞晕了——为什么不能随便设置数字后来才明白IPv4地址就像电话号码的国家区号需要严格规划。传统分类编址把地址分为A、B、C三类就像图书馆的书架分区A类地址1.0.0.0~126.0.0.0相当于图书馆的科技区网络号占8位能容纳1600多万台主机但全球只有126个A类网络B类地址128.0.0.0~191.255.0.0像文学区网络号16位适合中型企业C类地址192.0.0.0~223.255.255.0则是杂志区每个网络最多254台主机实际项目中遇到个典型问题某公司申请到B类地址172.16.0.0随着部门增加需要划分子网。我们通过子网掩码实现灵活划分比如# 原始B类地址 IP地址172.16.0.1 子网掩码255.255.0.0 # 划分4个子网后 子网掩码255.255.192.0 可用子网 172.16.0.0/18 172.16.64.0/18 172.16.128.0/18 172.16.192.0/18但划分子网仍会造成地址浪费就像硬纸板分隔书架会占用空间。1993年推出的CIDR无分类编址彻底改变了游戏规则它有两个革命性创新抛弃ABC分类允许任意长度的网络前缀如192.168.1.0/26支持路由聚合将多个连续地址块合并通告如192.168.1.0/24可聚合8个/27子网在配置华为路由器时CIDR的优越性特别明显# 传统分类地址配置 interface GigabitEthernet0/0/1 ip address 192.168.1.1 255.255.255.0 # CIDR方式配置 interface GigabitEthernet0/0/1 ip address 192.168.1.129 255.255.255.1282. IP数据报的奇幻漂流发送与转发全流程抓包分析一个ping请求时发现数据报就像漂流瓶经历着奇妙的旅程。当主机A192.168.1.2ping主机B10.1.1.1时直接交付判断A用自己的子网掩码255.255.255.0与目标IP进行AND运算# Python验证计算 src_ip 0xC0A80102 # 192.168.1.2 dst_ip 0x0A010101 # 10.1.1.1 mask 0xFFFFFF00 # 255.255.255.0 if (src_ip mask) ! (dst_ip mask): print(需要网关转发)ARP解析A通过广播查询默认网关MAC地址过程像在小区里喊谁是192.168.1.1路由器查表网关路由器收到数据报后检查TTL值每跳减1防环路校验头部发现错误就丢弃最长前缀匹配路由表就像快递分拣员找最详细的地址转发决策匹配路由条目后数据报被送到下一跳或直接交付在Cisco设备上查看路由表特别有意思R1# show ip route Codes: L - local, C - connected, S - static... 10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks C 10.1.1.0/24 is directly connected, GigabitEthernet0/1 S 10.2.0.0/16 [1/0] via 192.168.1.2543. ICMP网络世界的信鸽与警报系统曾经花了三小时排查网络故障最后发现是ICMP被防火墙拦截了。这个看似简单的协议实际承担着关键职责差错报告报文相当于网络交警终点不可达Type3就像快递退回通知源点抑制Type4流量控制信号类似请减速路牌超时Type11TTL归零警告防止数据报无限循环诊断工具的运作原理Ping回送请求/应答# Linux下抓取ICMP包 tcpdump -i eth0 icmp实际发送的是Type8请求收到Type0应答Traceroute的巧妙设计首先发送TTL1的UDP包触发第一跳路由器返回超时报文逐步增加TTL值像爬楼梯一样记录每跳地址最后到达目标时利用端口不可达报文Type3终止探测在Windows和Linux下的实现差异# Linux使用UDP高端口 traceroute -n 8.8.8.8 # Windows使用ICMP tracert -d 8.8.8.84. 动态路由协议从RIP到BGP的进化论管理校园网时RIP协议导致的坏消息传得慢让我吃了苦头——某条链路断开后全网花了15分钟才收敛。后来迁移到OSPF才解决问题。RIP距离向量协议像传话游戏每30秒广播整张路由表最大跳数15限制网络规模毒性逆转等优化仍难避免环路OSPF链路状态协议则像精确的卫星地图建立邻居关系Hello包同步LSDB数据库DD/LSR/LSU报文用Dijkstra算法计算最短路径# Dijkstra算法简化示例 def dijkstra(graph, start): distances {node: float(inf) for node in graph} distances[start] 0 while queue: current min(queue, keylambda x: distances[x]) for neighbor, weight in graph[current].items(): if distances[neighbor] distances[current] weight: distances[neighbor] distances[current] weight return distancesBGP作为路径向量协议则是国家间的外交官基于TCP 179端口建立连接通过UPDATE报文交换路由属性AS_PATH等策略路由决定最优路径非纯技术考量配置BGP邻居的典型命令router bgp 65001 neighbor 203.0.113.2 remote-as 65002 neighbor 203.0.113.2 route-map SET_PREF in5. 实战网络故障排查四步法去年处理过一次路由环路故障总结出有效排查方法物理层检查show interface查看端口状态用光纤测试仪检测光衰连通性测试# 扩展Ping测试 ping -s 1472 -c 5 10.1.1.1 # 测试MTU路由追踪# Linux下带端口探测 traceroute -T -p 80 www.example.com协议分析Wireshark过滤规则icmp || ospf || eigrp查看OSPF邻居状态show ip ospf neighbor对于静态路由导致的环路最有效的方法是# 添加黑洞路由 ip route 192.168.3.0 255.255.255.0 null06. IPv4与IPv6的共存之道在部署IPv6时过渡技术就像双语翻译双栈技术配置示例interface GigabitEthernet0/0 ip address 192.168.1.1 255.255.255.0 ipv6 address 2001:db8::1/64隧道技术类似快递套箱# 配置6to4隧道 interface Tunnel0 tunnel source Ethernet0 tunnel mode ipv6ip tunnel destination 203.0.113.1实际项目中我遇到最棘手的问题是PMTU黑洞解决方法是在边界设备设置ipv6 mtu 1280 # 确保不超过最小MTU