☰
广工计算机网络实验报告复现:Wireshark抓包分析与TCP/HTTP协议拆解
2026/10/8 2:52:14 网站建设 项目流程

简介:这份广东工业大学2015年计算机网络实验报告,面向计算机相关专业学生及网络初学者,用于参考实验流程、规范报告撰写与复习网络基础配置。报告以GNS3网络仿真为主线,涵盖交换机基础操作、VLAN划分与VLAN间通信、路由器连通性验证,以及Wireshark抓包分析Trunk链路流量等典型实验内容,并配有拓扑图、测试截图与结果说明,便于对照理解每一步配置目的与验证方法。资源包共1个PDF文件,大小约1.17MB,内容完整、结构清晰,可直接用于实验预习、报告模板参考或期末复习。目前已有71人学习下载,适合需要完成计算机网络实验、巩固GNS3与VLAN配置思路的读者借鉴使用。

1. 广工2015年计算机网络实验报告:一份能直接对着做的实验存档

如果你正在上计算机网络这门课,或者带这门课的助教,大概率会遇到一个很具体的问题:实验指导书给的是原理和步骤框架,但真到写报告的时候,抓包截图要截哪几个字段、Wireshark 过滤器怎么写、协议分析写到什么颗粒度才算过关,这些细节没人给你标准答案。这份《广工2015年计算机网络实验报告.pdf》就是一份完整的实验存档,覆盖了以太网帧分析、IP 协议、TCP 三次握手与四次挥手、HTTP 请求响应、DNS 解析等经典实验项目,每个实验都配有拓扑说明、操作步骤、抓包截图和结果分析。它适合两类人:一是正在做同类实验、需要一份可参照的完整范例来对齐格式和深度;二是想快速复现一套验证流程、把 Wireshark 抓包分析跑通的自学者。下面我按实际拆解和复现的路径,把这份报告里能直接抄作业的部分、参数怎么设、容易翻车的地方逐层讲清楚。

2. 实验环境搭建与抓包工具链配置:从零把 Wireshark 跑起来

2.1 为什么选 Wireshark 而不是 tcpdump

这份报告里所有实验的抓包环节都基于 Wireshark,这不是随便选的。tcpdump 适合在无图形界面的服务器上做快速抓包,但计算机网络实验的核心诉求是「看见协议字段的每一个比特」,Wireshark 的分层解析视图和过滤器语法在这个场景下效率高出一个量级。报告里用到的版本是 2015 年前后的 Wireshark 1.x 系列,界面和现在 4.x 有差异,但核心操作逻辑没变。

常见做法是:在虚拟机里装一台 Linux(报告里用的是 Ubuntu),宿主机装 Wireshark 抓虚拟网卡的流量。这样做的原因是实验需要构造特定的网络条件,比如断开某个连接、修改 DNS 服务器地址,直接在物理机上操作会影响正常上网。如果你手头没有虚拟机环境,用两台物理机接同一台交换机也可以,但灵活性差一些。

我一般会建议先把抓包接口选对。Wireshark 启动后首先弹出的是接口列表,这里有个坑:如果你用的是虚拟机 NAT 模式,抓到的流量是经过地址转换的,源 IP 和目标 IP 可能不是你预期的实验地址。报告里用的是桥接模式,虚拟机和宿主机在同一网段,抓到的包更「干净」。

2.2 过滤器语法与常用表达式

报告里反复出现的过滤器分两类:抓包过滤器和显示过滤器。抓包过滤器在开始抓包之前设置,用的是 BPF 语法;显示过滤器在抓包之后筛选,用的是 Wireshark 自己的语法。很多人搞混这两者,导致要么抓了一堆无关包,要么过滤条件写错什么都看不到。

# 抓包过滤器(BPF 语法),在接口选择界面的 capture filter 栏输入 host 192.168.1.100 and tcp port 80 # 显示过滤器(Wireshark 语法),在抓包后的 filter 栏输入 ip.src == 192.168.1.100 && tcp.flags.syn == 1 # 只看 HTTP GET 请求 http.request.method == "GET" # 排除 ARP 和 ICMP 的干扰 !arp && !icmp

逻辑说明:抓包过滤器在网卡层面就丢弃不匹配的包,适合流量大的环境;显示过滤器只是隐藏不匹配的包,原始数据还在。参数方面,host后面跟 IP 地址或域名,port指定端口号,&&和and等价,!和not等价。报告里做 TCP 实验时,建议先用tcp.port == 80缩小范围,再用tcp.flags进一步筛选特定标志位的包。

提示:如果你在 Windows 上抓本地回环流量(比如浏览器访问本机搭建的 Web 服务器),Wireshark 默认抓不到。需要装 Npcap 并勾选 loopback 支持,或者直接用虚拟机方案绕开这个问题。

2.3 实验拓扑的搭建与验证

报告里的实验拓扑不复杂,但每一步都有验证动作。以 TCP 实验为例,拓扑是「客户端 → 交换机 → 服务器」,服务器上跑一个简单的 HTTP 服务。搭建完之后,报告里做的第一件事不是直接抓包,而是先用 ping 确认连通性,再用 telnet 测试端口是否开放。

# 在服务器上启动一个简单的 HTTP 服务(Python 2 写法,报告年代对应) python -m SimpleHTTPServer 80 # 在客户端验证连通性 ping 192.168.1.10 telnet 192.168.1.10 80 # 如果 telnet 不通,检查防火墙规则 sudo iptables -L -n

逻辑说明:SimpleHTTPServer是 Python 2 自带的模块,监听 80 端口,任何 GET 请求都会返回当前目录的文件列表。ping验证 ICMP 层连通,telnet验证 TCP 层端口可达。如果telnet卡住或拒绝连接,大概率是防火墙拦截了,用iptables -L -n查看规则链。报告里没有展开讲防火墙排查,但这是实际复现时最容易卡住的一步。

参数方面,-m指定模块名,80是端口号,如果 80 被占用可以换成 8080,但后续抓包过滤器里的端口号要同步改。iptables -L -n里的-n表示不解析域名,直接显示 IP,速度更快。

3. 以太网帧与 IP 协议分析:抓包截图里到底该看哪些字段

3.1 以太网帧结构在 Wireshark 里的对应关系

报告里第一个实验是分析以太网帧。Wireshark 抓到一个包后,中间的面板会按协议层次展开,最底层就是 Ethernet II。这里需要关注的字段有四个:目的 MAC、源 MAC、类型、帧校验序列(FCS)。报告里的截图把前三个都圈出来了,FCS 因为网卡通常会剥离,Wireshark 默认不显示。

Ethernet II, Src: 00:0c:29:1a:2b:3c, Dst: ff:ff:ff:ff:ff:ff Destination: ff:ff:ff:ff:ff:ff (Broadcast) Source: 00:0c:29:1a:2b:3c Type: IPv4 (0x0800)

逻辑说明:ff:ff:ff:ff:ff:ff是广播地址,说明这是一个广播帧,通常是 ARP 请求。Type: 0x0800表示上层协议是 IPv4,如果是0x0806就是 ARP,0x86dd是 IPv6。报告里要求学生对比单播帧和广播帧的区别,单播帧的目的 MAC 是一个具体的地址,广播帧全是 F。

参数方面,Wireshark 的ethernet.src和ethernet.dst可以作为显示过滤器,eth.type == 0x0800可以筛选 IPv4 帧。如果你抓到的包显示Type: Unknown,可能是网卡驱动没有正确解析,换一台机器或者更新 Wireshark 版本通常能解决。

3.2 IP 数据报首部字段的逐项解读

IP 协议实验的核心是看懂首部里的每一个字段。报告里重点分析了版本、首部长度、总长度、标识、标志、片偏移、生存时间(TTL)、协议、源 IP、目的 IP。其中 TTL 和协议字段是排查问题时最常用的。

Internet Protocol Version 4, Src: 192.168.1.100, Dst: 192.168.1.10 Version: 4 Header Length: 20 bytes Total Length: 60 Identification: 0x1c46 (7238) Flags: 0x02 (Don't Fragment) Fragment offset: 0 Time to live: 64 Protocol: TCP (6) Source: 192.168.1.100 Destination: 192.168.1.10

逻辑说明:Header Length: 20 bytes说明没有选项字段,是最小首部。Total Length: 60是 IP 数据报总长度,减去 20 字节首部就是上层数据长度。Flags: 0x02表示设置了「不分片」位,这在 TCP 连接中很常见。TTL: 64是 Linux 默认值,Windows 默认是 128,每经过一个路由器减 1,减到 0 就丢弃并返回 ICMP 超时。Protocol: TCP (6)里的 6 是协议号,ICMP 是 1,UDP 是 17。

报告里有一个容易被忽略的细节:Identification字段在分片时的作用。如果抓到一个包设置了More fragments标志,说明后面还有分片,需要根据Fragment offset重组。实际实验中很少遇到分片,但理解这个机制对排查 MTU 问题很有帮助。

注意:Wireshark 默认不计算 IP 首部校验和,如果显示Header checksum: 0x0000 [validation disabled],不是包有问题,是软件设置。可以在 Preferences → Protocols → IPv4 里打开校验和验证。

3.3 ARP 请求与响应的抓包验证

ARP 实验是理解 MAC 地址和 IP 地址映射关系的关键。报告里的做法是:先清空 ARP 缓存,然后 ping 同一网段的另一台机器,抓取 ARP 请求和响应。

# 查看 ARP 缓存 arp -a # 清空 ARP 缓存(Linux) sudo ip -s -s neigh flush all # 清空后立即 ping,触发 ARP 请求 ping -c 1 192.168.1.10 # 再次查看 ARP 缓存,确认映射已建立 arp -a

逻辑说明:arp -a列出当前缓存的所有 IP-MAC 映射。ip -s -s neigh flush all是 Linux 下清空邻居表的命令,等价于清空 ARP 缓存。清空后 ping 会触发 ARP 广播请求,目标机器单播回应,Wireshark 里能看到一问一答两个包。参数方面,-c 1表示只发一个 ping 包,避免多余流量干扰抓包。

报告里还对比了跨网段 ping 的情况:如果目标 IP 不在同一网段,ARP 请求的目标地址是网关的 IP,而不是最终目标。这个细节在分析网络故障时很关键——如果你发现 ARP 请求的是网关但网关没回应,说明网关配置或物理连接有问题。

4. TCP 与 HTTP 协议实验复现:三次握手、四次挥手和请求响应全流程

4.1 TCP 三次握手的抓包与状态验证

TCP 实验是这份报告里最核心的部分。三次握手的过程在 Wireshark 里表现为三个连续的包:SYN、SYN-ACK、ACK。报告里的截图把三个包的序号和确认号都标出来了,这是分析 TCP 可靠传输的基础。

# 显示过滤器:只看与 192.168.1.10 的 80 端口相关的 TCP 包 tcp.port == 80 && ip.addr == 192.168.1.10 # 只看 SYN 包 tcp.flags.syn == 1 && tcp.flags.ack == 0 # 跟踪 TCP 流(右键 → Follow → TCP Stream)

逻辑说明:第一个 SYN 包的Seq=0,Flags=0x02(SYN)。第二个 SYN-ACK 包的Seq=0,Ack=1,Flags=0x12(SYN+ACK)。第三个 ACK 包的Seq=1,Ack=1,Flags=0x10(ACK)。这里的序号是相对序号,Wireshark 默认显示相对于第一个包的偏移,可以在 TCP 协议设置里关掉相对序号,看原始值。

参数方面,tcp.flags.syn == 1筛选所有 SYN 置位的包,tcp.flags.ack == 0排除 SYN-ACK。Follow TCP Stream会把整个会话的数据按方向拼接显示,适合分析 HTTP 请求和响应内容。报告里要求学生画出三次握手的状态转换图,实际上 Wireshark 的Statistics → Flow Graph可以直接生成时序图,比手画准确得多。

4.2 四次挥手与连接释放的异常情况

四次挥手比三次握手多一个包,因为 TCP 是全双工的,每个方向都需要单独关闭。报告里的截图显示了 FIN、ACK、FIN、ACK 四个包。但实际抓包时经常只看到三个包,原因是第二和第三个包合并了——被动关闭方在收到 FIN 后,如果没有数据要发,会把 ACK 和自己的 FIN 一起发出去。

# 筛选 FIN 包 tcp.flags.fin == 1 # 查看 TCP 连接重置(RST)包 tcp.flags.reset == 1 # 统计 TCP 会话的往返时间 tcp.analysis.ack_rtt

逻辑说明:tcp.flags.fin == 1筛选所有 FIN 置位的包。tcp.flags.reset == 1筛选 RST 包,RST 表示连接被强制重置,常见于端口未开放或防火墙拦截。tcp.analysis.ack_rtt是 Wireshark 计算的往返时间,可以用来分析网络延迟。报告里没有深入讲 RTT,但这是判断网络质量的重要指标。

参数方面,tcp.analysis开头的过滤器都是 Wireshark 的分析字段,不是协议本身的字段。如果抓包时没有启用 TCP 分析,这些过滤器可能不生效。可以在 Preferences → Protocols → TCP 里确认「Calculate conversation timestamps」和「Analyze TCP sequence numbers」已勾选。

提示:如果四次挥手只抓到三个包,不要觉得抓错了。先看第二个包的 Flags 是不是同时有 ACK 和 FIN,如果是,就是正常的合并情况。报告里给的截图是标准四个包,但实际环境有差异是正常的。

4.3 HTTP 请求响应与 DNS 解析的联动分析

HTTP 实验通常和 DNS 实验一起做,因为浏览器访问一个域名时,先发 DNS 查询拿到 IP,再发 TCP 连接,最后发 HTTP 请求。报告里的做法是:在客户端清空 DNS 缓存,然后访问一个指定域名,抓取整个流程。

# 清空 DNS 缓存(Linux) sudo systemctl restart systemd-resolved # 或者 sudo /etc/init.d/nscd restart # 用 curl 发起 HTTP 请求,同时抓包 curl -v http://www.example.com # Wireshark 显示过滤器:DNS 查询 dns.qry.name == "www.example.com" # 显示过滤器:HTTP GET 请求 http.request.method == "GET"

逻辑说明:systemctl restart systemd-resolved重启 DNS 解析服务,清空缓存。curl -v会输出详细的请求过程,包括 DNS 解析、TCP 连接、HTTP 请求头和响应头。Wireshark 里先看到 DNS 查询包(UDP 53 端口),然后是 TCP 三次握手,最后是 HTTP GET 和响应。参数方面,dns.qry.name筛选特定域名的 DNS 查询,http.request.method筛选 HTTP 方法。

报告里有一个值得注意的细节:HTTP 响应码在 Wireshark 里的显示位置。http.response.code == 200可以筛选成功响应,http.response.code >= 400筛选错误响应。如果抓到的 HTTP 包显示Continuation或TCP segment of a reassembled PDU,说明响应数据被分到多个 TCP 段里,需要看重组后的完整消息。

5. 实验报告撰写避坑:截图、分析和格式的常见翻车点

5.1 截图不清晰或关键字段被遮挡

现象:报告里的截图模糊,或者关键字段被 Wireshark 的列宽遮住,导致无法辨认。原因:直接截全屏,分辨率不够,或者没有调整列宽。解决:抓包后先调整 Wireshark 的列宽,把关键字段(如 Seq、Ack、Flags)完整显示出来,再用截图工具截取中间面板的协议树部分。报告里建议用 PNG 格式,不要用 JPG,避免压缩失真。

5.2 过滤器写错导致抓不到包

现象:按照步骤操作了,但 Wireshark 里一个包都没有。原因:抓包过滤器和显示过滤器混用,或者 IP 地址、端口号写错。解决:先不加任何过滤器抓一次,确认有流量,再逐步加过滤条件。报告里强调了一个检查顺序:先确认接口选对,再确认过滤器语法,最后确认目标机器确实在通信。

5.3 分析部分只贴截图不写解读

现象:报告里全是截图,文字分析只有一两句话。原因:不知道分析要写到什么程度。解决:每个截图至少配三句话——这个包在协议流程中的位置、关键字段的值和含义、这个值说明了什么问题。报告里的范例是:先描述现象,再解释原理,最后关联到课本知识点。

5.4 实验环境不一致导致结果对不上

现象:照着报告做,但抓到的包和报告里的不一样。原因:操作系统版本、Wireshark 版本、网络拓扑不同。解决:报告里的结果是特定环境下的,重点是理解分析方法和字段含义,不是追求包一模一样。如果 TTL 值不同,Linux 是 64,Windows 是 128,这是正常的。如果 HTTP 版本不同,报告里是 HTTP/1.1,现在很多网站是 HTTP/2,抓包结构会变。

5.5 报告格式不符合模板要求

现象:内容写完了,但格式被退回。原因:字体、行距、页边距、图表编号不符合模板。解决:先看模板的样式设置,用 Word 的样式功能统一调整,不要手动改。报告里的图表都有编号和标题,截图下面要写「图 X:XXX」,表格上面要写「表 X:XXX」。这个细节看起来小,但助教批改时第一眼就看这个。

6. 从这份报告到自己的实验能力:三个可复用的验证技巧

这份报告最大的价值不是让你抄一遍,而是给你一套可复用的验证方法。我拆完之后,总结了三个平时做网络排查也会用到的技巧。

第一个是「分层验证」。报告里每个实验都遵循同一个逻辑:先验证物理层和链路层(ping 通不通),再验证网络层(路由对不对),最后验证传输层和应用层(端口和协议)。这个顺序能帮你快速定位问题在哪一层。比如 ping 不通,就不用看 TCP 了;ping 通但 telnet 不通,问题在防火墙或服务没启动。

第二个是「过滤器组合」。报告里用到的过滤器都是基础语法,但组合起来能解决大部分筛选需求。我一般会先写一个宽泛的条件,比如ip.addr == 目标IP,然后逐步加&& tcp.port == 80、&& tcp.flags.syn == 1,每加一个条件就看一下结果数量,避免条件太严导致空结果。

第三个是「对照课本」。报告里的分析部分不是凭空写的,每个字段的解释都能在课本里找到对应章节。做实验的时候手边放一本《计算机网络:自顶向下方法》或者谢希仁的《计算机网络》,遇到不认识的字段先翻书,比直接搜网上答案靠谱。

# 一个我常用的抓包后快速分析命令组合 # 统计 TCP 重传次数 tshark -r capture.pcap -Y "tcp.analysis.retransmission" -T fields -e frame.number # 统计 HTTP 响应码分布 tshark -r capture.pcap -Y "http.response" -T fields -e http.response.code | sort | uniq -c # 提取所有 DNS 查询的域名 tshark -r capture.pcap -Y "dns.flags.response == 0" -T fields -e dns.qry.name | sort -u

逻辑说明:tshark是 Wireshark 的命令行版本,适合批量处理 pcap 文件。-r读取文件,-Y应用显示过滤器,-T fields -e提取指定字段。sort | uniq -c统计频次。这三个命令分别对应重传分析、HTTP 状态码分析和 DNS 查询分析,都是实验报告里常见的分析维度。

参数方面,-Y后面跟的过滤器和 Wireshark 图形界面里的一样。如果tshark提示找不到命令,需要单独安装,Linux 下是sudo apt install tshark,Windows 下装 Wireshark 时勾选 TShark 组件。

从那以后我每次做网络实验,都强制自己先跑一遍分层验证,再开始抓包。这个习惯帮我省了很多来回折腾的时间。希望这份拆解能帮你把实验报告顺利写完,也能把抓包分析这个技能真正留下来。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询