简介:PacketTRacer计算机网络实验指导.pdf 是一份面向高校计算机网络课程学生与初学者的实验操作手册,围绕 Packet Tracer 模拟器与真实组网场景展开,帮助读者把课堂理论落到动手实践。内容覆盖网线制作、双机互联、交换机局域网构建、Windows Server 2003 安装等基础实验,并给出实验目的、设备清单、技术原理、拓扑图与分步操作,便于按章节对照练习。资源包共 1 个文件,为 pdf 格式,整体约 10.74MB,单文件即可完整阅读,无需额外解压或安装其他组件。该资料已有 85 人学习,适合作为课程实验预习、课后复盘与期末复习的参考。读者可从中掌握 EIA/TIA 568A 与 568B 线序标准、直连线与交叉线的制作及测线仪验证方法、双机 IP 配置与 ping 测试、星型局域网搭建流程,以及服务器系统安装的关键步骤,对网络基础实验的规范操作与排错思路有较完整的呈现。
1. PacketTRacer 实验指导到底在教什么:从抓包到协议栈的完整链路
很多同学做计算机网络实验时,最头疼的不是不会写代码,而是不知道"我抓到的这些包到底说明了什么"。PacketTRacer 实验指导这类材料,核心解决的就是这个问题——它把抽象的分层协议变成看得见、摸得着的数据包,让你在真实交互中理解 TCP 三次握手、IP 分片、ARP 请求响应这些"考试要背、工作要用"的知识点。如果你正在准备 408 考研、做头歌平台上的以太网实训、或者刚入行做 DevOps 需要补网络基础,这套实验路径都值得走一遍。它不要求你有多深的编程功底,但要求你愿意动手抓包、逐层拆解、反复验证。接下来我会按"环境搭建→核心实验→参数调优→避坑排查"的顺序,把这条链路完整讲清楚,让你能直接照着复现。
2. 实验环境搭建:从零跑通第一个抓包会话
2.1 工具选型与安装:Wireshark 还是 tcpdump
做 PacketTRacer 类实验,抓包工具是基础设施。常见选择有两个:Wireshark 和 tcpdump。Wireshark 有图形界面,适合逐包分析、看协议树、追踪流;tcpdump 是命令行工具,适合在服务器上快速抓取、配合脚本做自动化。我的建议是:本地实验用 Wireshark,远程服务器或容器环境用 tcpdump 抓完再拉回本地分析。
安装 Wireshark 在 Ubuntu/Debian 下一条命令搞定:
sudo apt update sudo apt install wireshark -y # 安装时会提示是否允许非 root 用户抓包,选 Yes # 把当前用户加入 wireshark 组,避免每次 sudo sudo usermod -aG wireshark $USER # 重新登录后生效Windows 和 macOS 直接去官网下载安装包即可,安装时注意勾选 Npcap(Windows)或 ChmodBPF(macOS),否则抓不到网卡流量。
tcpdump 通常系统自带,没有的话:
sudo apt install tcpdump -y # 验证版本 tcpdump --version参数说明:-i指定网卡,-w写入文件,-c限制包数,-nn禁止域名和端口解析(加快速度)。比如抓 100 个包存文件:
sudo tcpdump -i eth0 -nn -c 100 -w capture.pcap逻辑很直接:-i eth0选网卡,-nn避免 DNS 反查拖慢速度,-c 100抓够就停,-w存成标准 pcap 格式,Wireshark 可以直接打开。
2.2 用 PacketTRacer 跑通第一个 TCP 握手实验
环境就绪后,第一个实验通常是观察 TCP 三次握手。步骤不复杂,但细节决定你能不能看到完整的包。
第一步,打开 Wireshark,选择活跃网卡(有流量的那个),在过滤栏输入tcp.port == 80或tcp.port == 443。
第二步,打开浏览器访问一个 HTTP 网站(注意:现在很多站点强制 HTTPS,建议用curl访问一个已知的 HTTP 测试地址,或者自己起一个本地服务)。
第三步,停止抓包,在过滤结果里找SYN、SYN-ACK、ACK三个包。
如果你用 curl 做客户端:
# 访问一个 HTTP 测试端点,触发三次握手 curl -v http://example.com/ # -v 会打印详细连接过程,方便和抓包结果对照逻辑说明:curl 发起连接时,内核协议栈会自动完成三次握手。Wireshark 抓到的第一个包是客户端发往服务器的 SYN,第二个是服务器回的 SYN-ACK,第三个是客户端再回的 ACK。三个包的时间戳间隔通常在毫秒级,如果间隔很大,说明网络有延迟或丢包。
参数说明:Wireshark 过滤栏支持 BPF 语法,tcp.flags.syn == 1可以只看 SYN 包,tcp.flags.ack == 1只看 ACK 包。组合起来tcp.flags.syn == 1 && tcp.flags.ack == 0就是纯 SYN。
提示:如果抓不到包,先确认网卡选对了,再确认有没有其他抓包工具占用(比如同时开了 tcpdump),最后检查防火墙是否拦截了流量。
3. 核心实验拆解:ARP、IP 分片与 TCP 重传怎么观察
3.1 ARP 请求与响应:局域网通信的第一步
ARP 是很多同学容易忽略的一层,但它是局域网通信的起点。PacketTRacer 实验里通常要求你观察 ARP 请求和响应的完整过程。
操作步骤:清空 ARP 缓存,然后 ping 同一网段的另一台机器。
# 查看当前 ARP 缓存 arp -a # 清空缓存(Linux) sudo ip neigh flush all # ping 同网段地址,触发 ARP ping -c 2 192.168.1.1 # 再次查看 ARP 缓存,应该多了刚才的条目 arp -a逻辑说明:清空缓存后,主机不知道目标 IP 对应的 MAC 地址,于是发一个 ARP 广播请求(目标 MAC 是 ff:ff:ff:ff:ff:ff),同网段所有主机都收到,只有目标 IP 的主机会回一个 ARP 响应,告诉请求方自己的 MAC。Wireshark 过滤arp就能看到这一问一答。
参数说明:ip neigh flush all清空所有邻居表项,arp -a在 Linux 上可能显示不全,建议用ip neigh show。ARP 请求是广播,响应是单播,这个区别在抓包时看目标 MAC 就能分辨。
3.2 IP 分片:大包怎么被切开传输
IP 分片是考试常考、工作中也常遇到的点。PacketTRacer 实验里一般会让你发一个超过 MTU 的包,观察分片过程。
用 ping 发一个大包:
# 发送 3000 字节的 ICMP 包,强制分片 ping -c 1 -s 3000 192.168.1.1 # -s 指定数据部分大小,加上 IP 头 20 字节和 ICMP 头 8 字节,总长超过 1500 MTU逻辑说明:以太网默认 MTU 是 1500 字节,一个 3000 字节的 ICMP 包会被切成多个分片。Wireshark 过滤icmp后,你会看到第一个分片有完整的 ICMP 头,后续分片只有数据。每个分片的 IP 头里有Identification、Flags、Fragment offset三个关键字段。
参数说明:-s 3000指定的是 ICMP 数据部分,实际 IP 包总长是 3000 + 8 + 20 = 3028 字节。分片后每个分片不超过 1500 字节。Flags字段里 MF(More Fragments)为 1 表示后面还有分片,为 0 表示最后一个。Fragment offset以 8 字节为单位,所以每个分片的偏移量都是 8 的倍数。
3.3 TCP 重传:丢包后协议栈怎么补救
TCP 重传是可靠性传输的核心机制。PacketTRacer 实验里通常用tc模拟丢包,然后观察重传行为。
# 在回环接口上模拟 20% 丢包 sudo tc qdisc add dev lo root netem loss 20% # 发起一个 TCP 传输,比如用 nc 传数据 nc -l 12345 & # 服务端 dd if=/dev/zero bs=1M count=10 | nc 127.0.0.1 12345 # 客户端传 10MB # 抓包观察重传 sudo tcpdump -i lo -nn 'tcp port 12345' -w retrans.pcap # 实验结束清除规则 sudo tc qdisc del dev lo root逻辑说明:tc netem loss 20%让 20% 的包随机丢弃。TCP 发送方发现某个包长时间没被确认(超时)或者收到三个重复 ACK(快速重传),就会重发。Wireshark 里过滤tcp.analysis.retransmission能直接看到重传包。
参数说明:loss 20%可以改成loss 5%或delay 100ms做不同实验。tcp.analysis.retransmission是 Wireshark 的内置过滤器,专门标记重传。注意回环接口的 MTU 通常很大(65536),不会触发分片,适合单独观察 TCP 行为。
注意:
tc规则在实验后一定要删除,否则会影响后续所有本地通信。用tc qdisc del dev lo root清理。
4. 参数调优与验证:让实验结果可复现
4.1 抓包过滤器与显示过滤器的区别
很多人分不清抓包过滤器和显示过滤器,导致要么抓了一堆无用包,要么想看的包被过滤掉了。抓包过滤器在抓取前生效,用 BPF 语法,写错了抓不到;显示过滤器在抓取后生效,用 Wireshark 语法,写错了只是显示不出来。
| 对比项 | 抓包过滤器 | 显示过滤器 |
|---|---|---|
| 生效时机 | 抓取前 | 抓取后 |
| 语法 | BPF(如tcp port 80) | Wireshark(如tcp.port == 80) |
| 性能影响 | 减少抓包量,降低开销 | 不影响已抓数据,只影响显示 |
| 典型用法 | host 192.168.1.1 and tcp | ip.addr == 192.168.1.1 && tcp |
我的习惯是:抓包时用宽松的 BPF(比如只限协议),显示时用精确的 Wireshark 语法逐层缩小范围。这样既不会漏包,也不会被无关流量干扰。
4.2 时间戳精度与相对时间设置
分析 TCP 重传、RTT 这类指标时,时间戳精度很关键。Wireshark 默认显示绝对时间,但看相对时间更有用。
操作:在 Wireshark 里点View→Time Display Format→Seconds Since Beginning of Capture,这样第一个包是 0 秒,后续都是相对时间。再配合Statistics→TCP Stream Graphs→Time Sequence,能直观看到重传和窗口变化。
参数说明:如果要做高精度分析,可以在抓包时加-t ad(tcpdump)或调整 Wireshark 的Capture Options里的Time stamp precision到纳秒级。不过大多数实验毫秒级够用。
4.3 用脚本批量验证实验结果
手动抓包分析适合学习,但做批量验证时脚本更高效。下面这个 Python 脚本用scapy发 ARP 请求并解析响应:
from scapy.all import ARP, Ether, srp def arp_scan(ip_range): # 构造 ARP 请求包,目标 MAC 为广播 arp_request = ARP(pdst=ip_range) broadcast = Ether(dst="ff:ff:ff:ff:ff:ff") packet = broadcast / arp_request # 发送并接收响应,超时 2 秒 answered, unanswered = srp(packet, timeout=2, verbose=False) for sent, received in answered: print(f"IP: {received.psrc} MAC: {received.hwsrc}") if __name__ == "__main__": arp_scan("192.168.1.0/24")逻辑说明:ARP(pdst=ip_range)构造 ARP 请求,Ether(dst="ff:ff:ff:ff:ff:ff")封装成广播帧,srp发送并等待响应。返回的answered列表里每项是一问一答,打印出 IP 和 MAC 对应关系。
参数说明:timeout=2是等待响应的秒数,局域网内通常 1 秒够用。verbose=False关闭详细输出,避免刷屏。这个脚本可以快速验证 ARP 实验是否成功,也能用来盘点局域网设备。
提示:scapy 需要 root 权限才能发原始包,用
sudo python3 script.py运行。
5. 避坑与排查:PacketTRacer 实验里最容易翻车的 5 个点
5.1 抓不到包:网卡选错或权限不足
现象:Wireshark 打开后接口列表为空,或者选了接口但一个包都抓不到。
原因:一是没有抓包权限,Linux 下普通用户默认不能抓;二是选了错误的网卡,比如选了虚拟网卡但流量走的是物理网卡;三是被其他抓包工具占用。
解决:Linux 下把用户加入 wireshark 组并重新登录;Windows 下确认 Npcap 安装正确并以管理员身份运行;检查ip link或ifconfig确认活跃网卡名称;关闭其他抓包工具。
5.2 过滤规则写错:BPF 和 Wireshark 语法混用
现象:抓包过滤器里写了tcp.port == 80,结果报错或抓不到任何包。
原因:抓包过滤器用 BPF 语法,tcp.port == 80是 Wireshark 显示过滤器语法,BPF 里应该写tcp port 80。
解决:记住区分——抓包过滤器用tcp port 80、host 192.168.1.1、net 192.168.1.0/24;显示过滤器用tcp.port == 80、ip.addr == 192.168.1.1、ip.src == 192.168.1.0/24。不确定时先不写抓包过滤器,抓完再用显示过滤器筛。
5.3 ARP 实验看不到响应:目标不在线或跨网段
现象:发了 ARP 请求,但只看到请求包,没有响应包。
原因:目标 IP 不在线;或者目标 IP 不在同一网段,请求根本不会发到那个网段;或者中间有设备拦截了 ARP。
解决:先ping目标确认在线;确认双方在同一子网(子网掩码一致);检查是否有防火墙或安全软件拦截 ARP。跨网段通信走的是网关的 MAC,不是目标主机的 MAC,这点要分清。
5.4 IP 分片实验没分片:MTU 设置不对
现象:发了大包,但 Wireshark 里没看到分片,只有一个完整的大包。
原因:回环接口 MTU 通常是 65536,不会分片;或者网卡支持巨帧(Jumbo Frame),MTU 调大了。
解决:在物理网卡上做实验,确认 MTU 是 1500;或者用ping -M do -s 3000强制不允许分片,观察报错。回环接口适合做 TCP 行为实验,不适合做分片实验。
5.5 TCP 重传实验干扰太大:tc 规则没清理
现象:做完重传实验后,后续所有本地通信都变慢或丢包。
原因:tc规则加在回环接口上没删除,一直生效。
解决:实验结束立即执行sudo tc qdisc del dev lo root。养成习惯:加规则前先tc qdisc show dev lo看有没有残留,实验后确认清理干净。如果忘了清理,重启网络或重启机器也能恢复。
6. 进阶技巧:用 tshark 做自动化协议分析
Wireshark 图形界面适合学习,但做批量分析或集成到 CI 里,tshark更合适。它是 Wireshark 的命令行版本,能直接输出结构化数据。
比如统计一个 pcap 文件里各协议的包数量:
# -r 读文件,-q 安静模式,-z 统计 tshark -r capture.pcap -q -z io,phs # 输出每个协议的层级统计再比如提取所有 HTTP 请求的 URL:
tshark -r capture.pcap -Y "http.request" -T fields -e http.host -e http.request.uri # -Y 显示过滤器,-T fields 指定输出字段逻辑说明:-z io,phs是协议层级统计,能快速看出流量构成。-Y等价于 Wireshark 的显示过滤器,-T fields -e指定要提取的字段,输出是制表符分隔的文本,方便后续用 awk 或 Python 处理。
参数说明:-e http.host提取 Host 头,-e http.request.uri提取请求路径。如果要提取 TCP 重传的包号和时间,可以用-Y "tcp.analysis.retransmission" -T fields -e frame.number -e frame.time_relative。
我一般会把这个和watch结合,做实时监控:
# 每 5 秒统计一次新抓包里的 TCP 重传数量 watch -n 5 'tshark -r /tmp/live.pcap -Y "tcp.analysis.retransmission" 2>/dev/null | wc -l'这个习惯帮我省了很多手动翻包的时间。刚开始做 PacketTRacer 实验时,我也是一个包一个包点开看,后来发现用 tshark 先做一轮粗筛,再回 Wireshark 精看,效率高得多。希望帮到你。
本文还有配套的精品资源,点击获取