
干了这么多年网络排障和基础设施运维我有个很深的体会很多问题到最后都卡在最基础的IP层知识上。面试的时候大家能把TCP三次握手、拥塞控制背得滚瓜烂熟但一问到跨网段ping的时候源MAC和目的MAC分别怎么变、为什么一台机器会出现169.254开头的地址、/26到底能配多少台机器反而容易卡壳。这篇文章就是把这些IP层相关的八股攒成一份能直接拿来复习和实践的笔记从IP协议的定位、地址规划与子网计算到ARP、DHCP、DNS如何和IP层配合再到网关、VLAN、路由的转发逻辑最后用实际排障案例把知识串起来。适合谁呢做运维、网络工程、系统集成、嵌入式开发的朋友都能用上特别适合准备网络基础面试的人。内容不追求讲得多深但求把原理和实操对得上号让你排查问题时能快一步。1. IP层到底在解决什么问题1.1 网络层的三个核心职责IP层对应OSI模型里的网络层。它要解决的根本问题是A主机发给B主机的数据怎么穿过一个由无数设备组成的复杂网络。要完成这个任务至少要回答三个问题第一网络里的每台设备叫什么名字这就是编址IP地址。第二数据从源到目的地走哪条路这就是路由选路。第三数据太大塞不进一个二层帧的时候怎么办这就是分片与重组。有一个很形象的类比MAC地址相当于你的门牌号只在同一个小区里有意义IP地址则是城市街道门牌号跨小区、跨城市都能定位。所以底层虽有MAC地址但跨网络通信时必须有一套全局统一的逻辑地址这就是IP地址存在的意义。理解了这个你就明白为什么二层交换机只需要看MAC而三层路由器必须看IP才能做转发决策。1.2 为什么IP协议要被设计成尽力而为几乎每份网络八股里都会出现这句话IP协议是无连接、不可靠、尽力而为的。乍一听这是缺点但我要说这恰恰是它能活到今天的原因。IP层只负责把数据报尽最大努力送到目的地不保证不丢包、不保证顺序、不保证不重复这些脏活累活全部由传输层TCP和应用层来做。这和快递业非常像。你寄快递时包裹是否损坏、是否被调包快递公司不替你检查这需要你自己包装好、购买保险。但正因为快递公司不检查内容才能做到高效的分拣和中转。如果每个中间路由器都要维护每一条连接的状态、都要重传丢失的数据那互联网的核心复杂度会大到无法扩展。这个设计原则叫端到端原则把复杂性放到通信的端点中间的节点保持简单。这也是面试官问为什么TCP需要三次握手而不是IP帮你搞定可靠传输时你应该想到的底层逻辑。不过要提醒一点IP不可靠并不代表IP层可以随意丢包。路由器的转发效能、QoS策略、MTU是否匹配仍然直接影响IP包的传输质量。实践中最常见的丢包率忽高忽低往往不是IP协议本身的问题而是某个中间节点处理不过来。2. IP地址规划从基础概念到实战计算2.1 IPv4地址结构分类、私网和特殊地址IPv4地址共32位用点分十进制表示比如192.168.1.10。传统上按前几位分成A/B/C/D/E五类。A类前8位是网络位B类前16位C类前24位。这个概念曾经很关键但现在基本被CIDR取代了因为它太浪费地址空间。比如说一个公司有300台机器用C类地址只够254台用B类又浪费6万多地址怎么都不合适。实际工作中你几乎只用关心三类地址私网地址、公网地址、特殊地址。私网地址有三个段10.0.0.0/8一个A类、172.16.0.0/1216个B类、192.168.0.0/16256个C类它们只允许在内网使用不在互联网上路由。这就是为什么你家路由器默认网段是192.168.x.x公司服务器多半是10.x.x.x或172.16.x.x。公网地址是要花钱申请的、全球唯一的服务器对外提供服务时一般需要一个公网IP或者通过NAT映射。特殊的地址里127.0.0.1是环回地址loopback用来让本机进程之间通信。你可能好奇网卡上有没有IP127.0.0.1能不能通答案是只要协议栈安装正常这个地址就永远通因为IP层会直接把发往127.0.0.1的包送进本机回环口根本不经过物理网卡。类似的还有169.254.x.x那是DHCP失败后系统自动分配的链路本地地址后面第3章会详细讲。2.2 子网掩码、CIDR和可用IP数量计算子网掩码是很多人的噩梦其实它只做一件事区分一个IP地址里哪些位是网络位、哪些位是主机位。比如255.255.255.0的二进制是24个1加8个0写成CIDR就是/24。网络位相同的IP才认为在同一个网段可以直接用二层通信不在同一网段就需要网关帮忙。这里有个高频真题10.10.7.64/26到底能分配多少个可用IP地址拆开算/26说明前26位是网络位主机位还剩6位那么地址总数是2^664个。网络地址是主机位全0即10.10.7.64广播地址是主机位全1即10.10.7.127中间可用的地址是10.10.7.65到10.10.7.126一共62个。网络地址和广播地址都不能分配给设备这一点在配服务器和打印机静态IP时特别容易踩坑——你把广播地址配上去了设备不报错但全网通信会出怪毛病。口算的窍门256减去掩码最后一段非0数值就得到块大小。比如255.255.255.192256-19264说明这个网段的地址范围在64的整数倍上对齐。再比如/25就是255.255.255.128256-128128可用地址126个。练熟这个很多地址规划问题能心算出来非常实用。2.3 不同系统下配置静态IP的实操先说我个人最常用的Linux命令方式在Rocky Linux、CentOS、Ubuntu、Debian上都稳定经得起考验用nmcli。它的好处是配置完立即生效还能防止写错配置导致系统起不来。示例把网卡ens160改成静态IP 192.168.10.20/24网关192.168.10.1DNS用公共DNS。nmcli connection modify ens160 ipv4.method manual \ ipv4.addresses 192.168.10.20/24 \ ipv4.gateway 192.168.10.1 \ ipv4.dns 223.5.5.5 nmcli connection up ens160如果你习惯了老式配置文件Rocky/RHEL系列在 /etc/NetworkManager/system-connections/ 下Debian/Ubuntu在 /etc/network/interfaces 里写Ubuntu 24.04建议用netplan方案。这里我不展开全部写法但必须强调一点远程操作改IP前一定要先在本地console或者带外管理口准备好或者写好一条能一秒恢复的自动回滚命令。我见过太多人远程改IP把自己改失联的IP改成错误网段后SSH立刻断开只能跑去机房。Windows下的命令行方式也很实用尤其是批量配机或者服务器core版本netsh interface ip set address name以太网 static 192.168.1.20 255.255.255.0 192.168.1.1 netsh interface ip add dns name以太网 addr223.5.5.5一张网卡配置多个IPLinux用ip addr add 192.168.1.11/24 dev ens160这样加第二地址如果要持久生效得把这条命令写进网络配置Windows用netsh interface ip add address 以太网 192.168.1.21 255.255.255.0。这个技巧在服务器多服务、临时测试VLAN、以及需要同时管理内外网时非常常用。嵌入式场景也躲不开IP配置比如在u-boot里设置IPsetenv ipaddr 192.168.1.88 setenv serverip 192.168.1.1 saveenvu-boot里的IP地址主要用于tftp下载内核、NFS挂载根文件系统配错了往往表现为能ping通网关但tftp总是超时因为tftp服务器IPserverip没有设对。另外提一句工控场景里PLC、CNC数控系统、网络摄像头都有各自的IP设置菜单比如发那科系统在系统-以太网里设IP海康/宇视摄像头可以用官方的IP搜索工具在同一个二层网络里扫描并改IP。这类设备配置的关键是必须和上位机/录制主机保持在同一个网段否则你会发现搜索工具根本搜不到设备因为跨网段了。3. IP层不是一个人在战斗ARP、ICMP、DHCP、DNS3.1 ARP从IP地址到MAC地址的关键一跳在真正的数据链路层设备之间交换的是帧帧头里装的是目的MAC地址。但你在浏览器里输入的是域名或者IP地址操作系统怎么知道下一跳设备的MAC呢答案就是ARP协议。流程很简单主机A想访问192.168.1.1先查自己的ARP缓存表没有就去广播一条谁是192.168.1.1请告诉192.168.1.10网关收到后用单播回一条我是192.168.1.1我的MAC是xx:xx:xx:xx:xx:xx。从此A就知道往这个MAC发IP包了。这个过程中有个很容易被忽略的点ARP请求是广播帧ARP应答是单播帧。为什么请求时不知道目标MAC所以必须广播应答时应答者知道请求者的MAC在请求帧源地址里所以可以单播。这个细节也是经典的八股题考点你动手抓一次包就能记一辈子。实操上使用GNS3搭两个路由器分别连接主机在两台路由器之间配置静态路由或动态路由再用Wireshark抓包观察IP包的转发过程会看到很有意思的现象源IP和目的IP在整个转发过程中不变但每一跳的源MAC和目的MAC都在变。路由器收到主机的IP包后发现目的IP不在自己的直连网段就查路由表找到下一跳然后重新封装成新MAC的帧再发出去。这就是MAC地址每跳变化、IP地址端到端不变的由来。排障时arp -a查看本机ARP表如果能解析到目标IP的MAC说明二层通解析不到说明对方不在本网段或网络隔离了。ping得通但ARP解析不出来那就先把防火墙和二层隔离的问题处理掉。3.2 ICMP和排障三板斧ping大概是全世界使用频率最高的网络命令但它背后是ICMP协议。ICMP既是IP层的配套协议又经常被用来传递IP层的错误信息。ping命令发出的是ICMP Echo Request类型8对端回应Echo Reply类型0中间只要有一个节点处理不了或者丢包你就看不到Reply。简单说三条实用经验。第一ping不同网段时如果请求包的TTL在跳变但一直得不到回应大概率是回程路由有问题这时候去目的主机上看它网关指到哪儿。第二ping本网段其他IP通、但ping网关不通先查交换机端口VLAN和ARP表。第三tracert的原理是逐跳发送TTL递增的探测包Linux默认UDPWindows默认ICMP利用路由器回传的ICMP Time Exceeded来画出路径如果你发现某一跳显示* * *很可能被防火墙过滤了不一定代表链路断要结合前后两跳判断。Windows下的pathping则是把tracert和ping结合会统计每一跳的丢包率和延迟定位中间链路质量特别方便。3.3 DHCP和169.254的身世大部分终端不手动配IP靠DHCP自动获取。DHCP的流程可以记成DORA四个字母Discover发现、Offer提供、Request请求、Ack确认。具体说客户端一开机就广播一条Discover找网络里有没有DHCP服务器服务器返回一条Offer说我可以给你这个IP客户端再广播一条Request说我就要这个IP服务器最后回Ack确认。整个过程走的是UDP 67/68端口所以要抓DHCP包的话过滤条件直接写udp.port67 || udp.port68。注意Offer在实际抓包时可能是单播也可能是广播主流客户端都能处理不用纠结这个细节。如果你在Windows上看到IP变成169