本期为“服务器操作系统常见问题解析”系列报道第十一期,介绍在PXE安装系统时如何通过tcpdump分析安装过程中的网络传输交互。
问题描述
在PXE(预启动执行环境)部署操作系统的过程中,常因环境配置不当导致安装出现问题。例如:系统加载阶段异常进入GRUB命令行界面,致使安装进程无法继续。

图1:系统安装进入grub
本文将介绍如何通过使用tcpdump抓包的方式,追踪并分析此类问题的根本原因。
PXE安装流程
在PXE系统安装流程中,客户端的初始化与安装文件获取遵循严谨的交互机制:
(1)网卡初始化:客户端经由支持PXE功能的网卡进行系统引导,激活网络启动流程。
(2)地址与资源定位:客户端通过DHCP协议动态获取IP地址,并获取NBP(Network Boot Program)文件的名称及存储路径,完成网络资源寻址。
(3)核心程序下载:依据启动模式差异,客户端通过TFTP协议从服务器端下载对应NBP文件,Legacy模式调用pxelinux.0,UEFI模式则采用BOOTX64.EFI或grubx64.efi等适配文件。
(4)配置文件加载:执行NBP文件后,客户端再次通过TFTP协议下载启动配置文件,Legacy模式使用default配置,UEFI模式则调用grub.cfg文件进行系统启动参数配置。
(5)核心组件加载:根据用户选定的操作系统版本,客户端从服务端获取对应的vmlinuz内核文件与initrd初始化镜像,完成系统内核环境搭建。
(6)安装文件传输:客户端通过NFS、FTP或HTTP等协议,批量下载操作系统安装文件,正式触发系统安装流程。

图2: PXE安装流程
从上述流程可见,PXE系统安装过程涉及从服务端获取DHCP地址、下载NBP文件、加载配置文件及传输内核与初始化镜像等关键环节。那么,如何有效验证这些文件的下载过程是否正常,数据传输是否完整呢?
接下来,将为大家详细介绍如何通过抓包方法分析PXE整个启动过程。
抓包工具准备
1.tcpdump工具介绍
tcpdump是一款功能强大且广泛应用的命令行网络抓包工具。该工具可实时监听指定网络接口的数据流,精准捕获TCP、UDP、ICMP等各类网络协议数据包,并以标准化格式呈现数据交互细节,为网络管理员构建了系统化的故障诊断与流量分析体系。
我们可以在PXE服务端使用tcpdump抓取PXE安装过程中的网络数据包,从而分析各文件传输过程。以下是具体的安装和使用方法:
(1)通过yum安装tcpdump软件包
# yum install tcpdump
(2)执行如下命令开始抓包
# tcpdump -i net -s0 -w pxe.cap
其中:
net:提供PXE服务端提供服务的网络接口名称
-s0:捕获完整数据包,不限制长度
-w pxe.cap:将捕获到的数据保存到pxe.cap文件中
(3)当客户端通过PXE进行系统安装并出现问题时,可以在服务端停止tcpdump的抓包操作,此时生成的pxe.cap文件将完整记录本次PXE安装过程中的所有网络传输数据包,可借助Wireshark工具对其中的具体信息进行深度分析。
2.Wireshark工具介绍
Wireshark作为开源网络协议分析领域的标杆工具,被广泛应用于网络故障排查、安全审计及协议开发等专业场景。在Wireshark的主界面中,捕获的网络报文通过三个核心区域进行可视化呈现:
数据包列表
以时间轴顺序展示所有捕获的数据包,包含源地址、目标地址、协议类型等关键信息。
数据包详情
对选中数据包进行分层解析,从数据链路层到应用层展示协议字段的具体内容。
数据包字节流
以十六进制和ASCII码形式呈现数据包的原始字节数据,便于底层数据校验。

图3: wireshark界面
3.通过Wireshark解析tcpdump抓的数据包
(1)在Windows操作系统环境下,启动Wireshark工具并导入之前抓取的pxe.cap数据包文件。

图4: wireshark打开文件
(2)根据PXE系统安装流程,客户端初始化阶段需通过DHCP协议完成IP地址获取。通过Wireshark分析捕获的网络报文,可完整呈现这一地址分配过程的标准交互时序:
DHCP Discover ->DHCP Offer ->DHCP Request -> DHCP ACK
其中
DHCP Discover
客户端广播寻址报文,搜索网络中的可用DHCP服务器
DHCP Offer
DHCP服务器响应客户端请求,提供可用IP地址及配置参数
DHCP Request
客户端向目标服务器发送IP地址请求确认
DHCP ACK
DHCP服务器确认分配,正式下发IP地址及相关配置信息
通过解析DHCP ACK报文,可获取以下关键配置参数:
客户端IP地址:192.168.91.128
Next Server
地址:192.168.91.128(指向TFTP服务器)
其中Next Server字段明确了后续PXE引导文件的获取目标,即TFTP服务的访问地址。

图5: wireshark解析TFTP服务器地址信息
(3)检查PXE安装过程中,传输的各文件包传输情况。
从数据包中看到,客户端通过TFTP服务器读取的NBP文件的总大小是tsize: 955632字节,每次传输的块大小为blksize: 1468字节。

图6: wireshark解析NBP文件大小
在TFTP协议传输过程中,可通过解析数据包中的[last]标记。该标记表明NBP文件数据流已完整接收,此时可通过以下步骤计算实际传输大小:
NBP大小= blksize × (总包数- 1) +末包blksize
实际计算得出:
NBP文件大小= 1468 × (651 - 1) + 1432 = 955632字节
将计算得出的实际文件大小与TFTP协议中声明的文件大小(tsize=955632字节)进行比对验证:
若两者数值完全一致,可判定网络传输过程中未发生数据包丢失,文件完整性得到保障;
若计算值与声明值存在差异,则表明NBP文件传输不完整,需进一步排查传输过程中是否存在数据包丢失或重传异常。

图7: wireshark解析传输NBP文件最后一个包信息
当NBP文件加载完成后,系统将发起对grub.cfg配置文件的请求。对于其他文件的完整性验证,可通过数据包文件中的传输数据进行计算,以确认文件传输过程中是否存在缺失。
从捕获的数据包中可见,grub.cfg的加载路径为TFTP服务中的相对路径pxelinux目录。

图8: wireshark解析grub.cfg信息
根据grub.cfg配置文件的引导规则,系统将依次发起对内核文件vmlinuz和初始化镜像文件initrd的加载请求,这两个文件用于构建启动安装程序所需的内存运行环境。

图9: wireshark解析vmlinuz信息

图10: wireshark解析initrd信息
(4)当内存系统镜像文件initrd传输完成后,系统将开始下载安装过程中所需的install.img文件及各类软件包文件。

图11: wireshark解析install.img信息
根据客户端PXE安装过程的报错信息,以及tcpdump抓到的网络数据包传输过程,可以分析PXE传输过程中,各安装配置文件的完整性,定位问题原因。
问题分析
回到文章开篇提及的故障场景:当客户端通过PXE启动时,系统未能正常进入安装界面,停滞在GRUB命令行交互状态:

图12:pxe安装系统进入grub界面
通过tcpdump抓包分析,看到客户端在从PXE服务端读取pxelinux/grubx64.efi文件时,出现了“File not found”的报错信息:

图13:wireshark解析错误原因
所以造成该问题的原因是:由于PXE服务端缺失grubx64.efi文件,客户端在PXE启动过程中无法获取必要的引导程序,进而致使后续安装流程无法正常启动。
解决方法
在PXE服务端,将系统镜像中的grubx64.efi文件复制至/var/lib/tftpboot/pxelinux目录,并为该文件设置可读权限。
总结
PXE安装故障大多源于网络交互异常,用tcpdump+Wireshark分析时,记住三个关键点:
(1)对应流程:将数据包与PXE的6步流程对应,定位卡壳环节;
(2)关注协议:重点检查DHCP(地址分配)和TFTP(文件传输)的交互细节;
(3)验证完整性:通过文件大小、报错信息判断是否为文件缺失或传输异常。
掌握这套方法,无论遇到IP分配失败、引导文件丢失还是网络丢包,都能快速定位问题,让PXE安装效率翻倍!
售前咨询
售后服务
回到顶部