广东工业大学计算机网络实验报告:从抓包到组网,一份能跑通的实验复盘
简介这份广东工业大学计算机网络实验报告面向计算机、软件工程等专业学生用于完成课程实验与期末报告撰写也可供自学者练习网络配置与协议分析。内容覆盖两大部分一是 Windows 下常用网络命令包括 Ping、IPconfig、Netsh、Tracert、Netstat、Arp、Nslookup 的测试与结果记录二是协议分析软件基础借助 Wireshark 抓包分析 Ethernet II 封包、ARP 请求与应答、IP 与 ICMP 数据包并解析 ping、tracert 程序功能及 TCP 三次握手过程。资源包共 1 个文件为 doc 格式实验报告文档整体约 1.73MB结构完整、条理清晰可直接参考实验目的、内容要求、结果记录与思考题解答。目前已有 4030 人学习下载适合需要快速理解实验流程、对照整理报告或复习网络命令与抓包分析方法的读者。1. 广东工业大学计算机网络实验报告从抓包到组网一份能跑通的实验复盘如果你在广工读计算机相关专业大概率会在某个学期撞上计算机网络实验。这门课最让人头疼的地方在于理论课讲的是 OSI 七层、TCP 三次握手实验课却要你在 Linux 终端里敲命令、抓包、配路由中间隔着一道巨大的鸿沟。很多同学实验报告写了几十页Wireshark 截图贴了一堆但问他 TCP 三次握手具体在第几个包完成答不上来。这份实验报告的核心价值不是帮你凑字数而是让你真正理解每一个协议字段背后的含义并且能在自己的虚拟机上完整复现。适合正在上这门课、准备期末复习、或者想补网络基础的同学。下面我按实验类型拆开讲每一步都给可复现的命令和参数说明。2. 实验环境搭建别在第一步就翻车2.1 虚拟机与网络模式的选择逻辑广工的计算机网络实验通常要求两人一组各自用虚拟机互连。常见做法是用 VMware Workstation 或 VirtualBox 装两台 Ubuntu或一台 Ubuntu 一台 Windows网络模式选 NAT 还是桥接直接决定了你能不能抓到对方的包。我一般会这样配两台虚拟机都选桥接模式Bridged让它们和宿主机在同一个网段。原因是 NAT 模式下虚拟机的 IP 是 VMware 虚拟 DHCP 分配的宿主机访问虚拟机需要端口转发抓包时看到的源 IP 全是虚拟网卡地址分析起来很别扭。桥接模式下每台虚拟机从路由器拿独立 IP和真实设备没区别Wireshark 抓到的包源目地址一目了然。如果你只有一台电脑那就用 Host-Only 模式加一张 NAT 网卡做双网卡Host-Only 负责两台虚拟机互通NAT 负责上外网装软件。配置命令如下# 查看网卡名称和 IP ip addr show # 假设 Host-Only 网卡是 ens37手动配 IP sudo ip addr add 192.168.56.10/24 dev ens37 sudo ip link set ens37 up # 验证连通性 ping 192.168.56.11这里192.168.56.0/24是 VMware Host-Only 的默认网段VirtualBox 默认是192.168.56.0/24也一样。配完 IP 后两台机器互 ping通了你才能开始做后续实验。注意防火墙可能拦 ICMPUbuntu 默认 ufw 是关闭的如果 ping 不通先sudo ufw status确认一下。2.2 必装工具清单与验证方法实验报告里最常用的工具就三个Wireshark、tcpdump、netcat。Wireshark 负责图形化抓包分析tcpdump 负责命令行抓包服务器上没图形界面时用netcat 负责构造 TCP/UDP 测试流量。# Ubuntu 一键安装 sudo apt update sudo apt install -y wireshark tcpdump netcat-openbsd # 把当前用户加入 wireshark 组避免每次 sudo sudo usermod -aG wireshark $USER # 重新登录后验证 wireshark --version tcpdump --version nc -h装完后有一个关键设置Wireshark 抓包需要权限加入 wireshark 组后重新登录才生效。如果不想重新登录临时用sudo wireshark也行但抓到的包属主是 root保存文件时注意权限。tcpdump 验证时跑sudo tcpdump -i any -c 5然后在另一个终端 ping 一下网关能看到 5 个包就说明抓包正常。提示实验报告里截图要截全包括终端命令、输出结果和时间戳只截一个 Wireshark 窗口没有说服力。3. Wireshark 抓包分析把三次握手拆到字段级3.1 抓包位置与过滤表达式Wireshark 的核心能力是过滤。不会写过滤表达式你面对几千个包根本无从下手。实验报告里最常考的就是 TCP 三次握手和四次挥手过滤表达式必须记牢。# 只抓 TCP 且端口为 80 的包 tcp port 80 # 只抓某个 IP 的包 ip.addr 192.168.56.10 # 只抓 SYN 包三次握手第一步 tcp.flags.syn 1 tcp.flags.ack 0 # 抓 HTTP 请求 http.request # 组合过滤某 IP 的 80 端口 TCP 包 ip.addr 192.168.56.10 tcp.port 80这些表达式直接填在 Wireshark 顶部的过滤栏里。tcp.flags.syn 1 tcp.flags.ack 0这个表达式专门抓第一次握手因为第一次握手的 SYN 包 ack 标志位是 0。第二次握手的 SYNACK 包两个标志位都是 1第三次握手的 ACK 包只有 ack 是 1。把这三个包按顺序找到实验报告的核心截图就有了。3.2 三次握手字段逐项解读用 netcat 构造一个最简单的 TCP 连接然后抓包看字段。# 机器 A服务端监听 8080 端口 nc -l 8080 # 机器 B客户端连接 nc 192.168.56.10 8080连接建立后在 Wireshark 里过滤tcp.port 8080你会看到三个包。第一个包是客户端发的 SYN关键字段Sequence Number 是随机初始序列号比如 0Flags 里 SYN1Window Size 是接收窗口。第二个包是服务端回的 SYNACKAcknowledgment Number 是客户端序列号1自己的 Sequence Number 也是随机值。第三个包是客户端回的 ACKAcknowledgment Number 是服务端序列号1。实验报告里要写清楚为什么序列号是随机而不是从 0 开始因为防止历史连接残留数据干扰新连接。为什么需要三次而不是两次因为要确认双方的收发能力都正常。这些是老师必问的点光贴截图不写分析拿不到高分。3.3 用 tcpdump 做无图形界面抓包有些实验环境是纯命令行服务器没有 Wireshark 图形界面这时候 tcpdump 就是唯一选择。它的输出比 Wireshark 简略但关键信息都有。# 抓 8080 端口的包-nn 不解析域名-S 显示绝对序列号 sudo tcpdump -i any -nn -S tcp port 8080 -w capture.pcap # 抓完后用 tcpdump 读 tcpdump -r capture.pcap -nn # 或者把 pcap 拷到有 Wireshark 的机器上打开-w capture.pcap把原始包写入文件这个文件可以拷到任何有 Wireshark 的机器上打开格式完全兼容。-S参数很重要默认 tcpdump 显示的是相对序列号开了-S才显示绝对序列号分析握手过程时更直观。-nn禁止 DNS 解析和端口名解析避免抓包时因为解析拖慢速度丢包。注意tcpdump 抓包本身会消耗 CPU高流量场景下可能丢包。实验环境流量小无所谓但如果做性能测试建议用-s 0抓完整包长默认只抓 262144 字节可能截断大包。4. Socket 编程实验从代码到抓包验证闭环4.1 TCP 服务端与客户端最小实现广工的 Socket 编程实验一般要求用 C 或 Python 写一个 C/S 程序实现文件传输或简单聊天。Python 的 socket 库最直观下面是一个能跑通的 TCP 回声服务端。# tcp_server.py import socket HOST 0.0.0.0 # 监听所有网卡 PORT 9000 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 端口复用 s.bind((HOST, PORT)) s.listen(5) # 半连接队列长度 print(fListening on {PORT}) conn, addr s.accept() with conn: print(fConnected by {addr}) while True: data conn.recv(1024) # 每次最多收 1024 字节 if not data: break conn.sendall(data) # 原样发回# tcp_client.py import socket HOST 192.168.56.10 # 服务端 IP PORT 9000 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) s.sendall(bHello, GTU network lab) data s.recv(1024) print(fReceived: {data.decode()})服务端SO_REUSEADDR这个选项很关键不加的话程序退出后端口会处于 TIME_WAIT 状态短时间内无法重新绑定。listen(5)的参数是半连接队列长度不是最大连接数实验报告里经常有人搞混。客户端sendall和send的区别是sendall会循环发送直到所有数据发完send可能只发一部分新手直接用sendall避免踩坑。4.2 用抓包验证 Socket 行为代码跑通只是第一步实验报告要求你证明数据确实经过了网络协议栈。在客户端和服务端通信时用 Wireshark 抓tcp.port 9000你能看到三次握手建立连接客户端发送Hello, GTU network lab对应的 PSHACK 包数据长度 22 字节服务端回显同样的数据四次挥手断开连接这里有一个细节如果客户端发送的数据小于 MSS最大报文段长度TCP 会立即发送如果大于 MSS会分段。实验报告里可以故意发一个 5000 字节的字符串观察 Wireshark 里是否被分成多个包。MSS 在以太网环境下通常是 1460 字节5000 字节会被分成 4 个包146014601460620。4.3 UDP 对比实验与丢包观察TCP 实验做完后通常还要做 UDP 对比。UDP 无连接、不保证可靠代码更简单但行为差异很大。# udp_server.py import socket with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.bind((0.0.0.0, 9001)) while True: data, addr s.recvfrom(1024) print(fFrom {addr}: {data.decode()}) s.sendto(bACK, addr)UDP 服务端不需要listen和accept直接recvfrom收数据。抓包时你会发现 UDP 没有握手过程第一个包就是数据包。如果客户端连续发 100 个 UDP 包Wireshark 里可能只看到 95 个这就是 UDP 丢包。实验报告里可以统计丢包率分析原因缓冲区满、网络拥塞等。提示UDP 实验的加分项是设置SO_RCVBUF观察缓冲区大小对丢包率的影响默认缓冲区 212992 字节改小到 1024 后丢包率会明显上升。5. 避坑与排查实验报告里最容易翻车的 5 个点5.1 抓不到包现象、原因、解决现象Wireshark 选了网卡过滤表达式也写了但一个包都没有。原因最常见的是选错了网卡。虚拟机有两张网卡NAT 和 Host-Only流量走的是 Host-Only你却在 NAT 网卡上抓。其次是过滤表达式写错比如tcp port 80写成了tcp.port 80Wireshark 用不用。解决先不加任何过滤抓所有包看有没有流量。如果有流量但过滤后没有就是表达式问题。如果所有包都没有检查网卡选择在 Wireshark 首页看哪张网卡有流量波动。5.2 序列号显示为相对值现象、原因、解决现象Wireshark 里 Sequence Number 显示 0、1、2 这种小数字不是随机大数。原因Wireshark 默认开启相对序列号方便阅读但不利于分析。解决Edit → Preferences → Protocols → TCP → 取消勾选Relative sequence numbers。改完后重新抓包序列号就是真实的随机初始值。实验报告里如果要求写初始序列号必须关掉这个选项。5.3 Socket 程序报 Address already in use现象、原因、解决现象服务端程序刚退出重新运行时报OSError: [Errno 98] Address already in use。原因TCP 连接断开后主动关闭方会进入 TIME_WAIT 状态持续 2MSL通常 60 秒期间端口不能被重新绑定。解决加SO_REUSEADDR选项如 4.1 节代码所示。或者等 60 秒再运行。实验报告里可以顺便解释 TIME_WAIT 的作用确保最后一个 ACK 能到达对方防止旧连接的数据包干扰新连接。5.4 ping 不通但抓包能看到请求现象、原因、解决现象A ping BA 显示请求超时但在 B 上抓包能看到 ICMP 请求包。原因B 收到了请求但没回通常是 B 的防火墙拦了 ICMP 回应或者 B 的路由表没有回程路由。解决sudo ufw disable临时关防火墙测试。如果是路由问题ip route show检查默认网关Host-Only 网络不需要网关但需要正确的子网掩码。5.5 实验报告截图没有时间戳现象、原因、解决现象老师要求截图包含时间信息但你的截图只有 Wireshark 窗口。原因Wireshark 默认不显示绝对时间只显示相对时间。解决View → Time Display Format → Date and Time of Day。这样每个包的时间戳就是完整的年月日时分秒。另外终端截图要包含命令提示符证明是你实际运行的不是网上抄的。6. 进阶技巧用 Python 脚本自动化分析 pcap 文件实验报告写到后面手动数包、算时间差很痛苦。我一般会写个脚本自动提取关键指标比如三次握手耗时、吞吐量、重传率。用scapy库可以直接读 pcap 文件。from scapy.all import rdpcap, TCP import sys packets rdpcap(capture.pcap) syn_time None synack_time None ack_time None for pkt in packets: if TCP in pkt: flags pkt[TCP].flags if flags S: # SYN syn_time pkt.time elif flags SA: # SYNACK synack_time pkt.time elif flags A and syn_time and not ack_time: ack_time pkt.time if syn_time and synack_time and ack_time: print(fSYN - SYNACK: {(synack_time - syn_time)*1000:.2f} ms) print(fSYNACK - ACK: {(ack_time - synack_time)*1000:.2f} ms) print(fTotal handshake: {(ack_time - syn_time)*1000:.2f} ms) else: print(未找到完整握手包检查过滤条件)这个脚本读 pcap 文件自动找 SYN、SYNACK、ACK 三个包算出每段耗时。pkt.time是浮点秒数乘 1000 转毫秒。实验报告里放这个数据比手动看 Wireshark 时间列精确得多。如果抓包文件很大rdpcap会全部加载到内存可以用PcapReader流式读取。另一个实用技巧是统计重传率。TCP 重传的包在 Wireshark 里标记为[TCP Retransmission]用 scapy 判断条件是相同序列号出现多次。from collections import defaultdict seq_count defaultdict(int) for pkt in packets: if TCP in pkt and pkt[TCP].flags 0x02: # 只看数据包 key (pkt[IP].src, pkt[IP].dst, pkt[TCP].seq) seq_count[key] 1 retrans sum(1 for v in seq_count.values() if v 1) print(f重传包数量: {retrans})这段代码用(源IP, 目的IP, 序列号)做唯一键如果同一个键出现多次就是重传。实验报告里可以对比不同网络条件下的重传率比如本地回环 vs 跨虚拟机 vs 真实外网。本地回环重传率基本为 0跨虚拟机偶尔有真实外网取决于链路质量。最后说一个我踩过的坑scapy 读 pcap 时如果文件里有非 IP 包比如 ARPpkt[IP]会报错。稳妥写法是先判断IP in pkt。这个细节在实验报告里不用写但你自己跑脚本时能省不少调试时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

低代码平台API设计:动态实体、元数据与RESTful实践

低代码平台API设计:动态实体、元数据与RESTful实践

接手宏天架构的低代码平台之后,我第一件被叫去处理的事,就是API设计规范。低代码平台和普通业务系统最大的区别,在于它自己就是一个“业务系统的生成器”,用户在设计器里拖出来的每一个业务对象,最终都要被一套API暴露…

2026/10/12 1:58:17 阅读更多 →
免费显卡测试方案:从显存扫描到AI推理压测全流程

免费显卡测试方案:从显存扫描到AI推理压测全流程

一张显卡拿到手里,点亮、跑分、打两局游戏,大多数人的检测就到这儿了。但真等它掉驱动、花屏、黑屏,再回头排查就晚了。显卡其实是台缩小版的电脑,供电、显存、散热、BIOS、显存控制器哪一环出问题都可能带来各种疑难杂症。这篇要…

2026/10/11 9:39:09 阅读更多 →
LSTM/GRU/RNN时序预测原理与工业落地避坑指南

LSTM/GRU/RNN时序预测原理与工业落地避坑指南

简介:本资源是一套完整的基于LSTM、GRU与RNN的时间序列预测实践项目,面向计算机、人工智能、数据科学等相关专业的学生、教师及从业者,适用于课程设计、毕设选题、大作业开发及深度学习入门进阶学习。压缩包共15个文件,含3个Pytho…

2026/10/10 20:34:23 阅读更多 →

最新新闻

FreeRTOS CMSIS系列(9):中断管理详解

FreeRTOS CMSIS系列(9):中断管理详解

一、中断优先级任何中断的优先级都大于任务! 在我们的操作系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先级并不是从0~15 ,默认情况下它是从 5~15 ,0~4 这 5 个中断优先级不是 Fr…

2026/10/12 4:25:38 阅读更多 →
FreeRTOS CMSIS系列(6):任务通知详解

FreeRTOS CMSIS系列(6):任务通知详解

目录 一、什么是任务通知 二、任务通知值的更新方式 三、任务通知的优势和劣势 3-1 任务通知的优势 3-2 任务通知的劣势 四、任务通知相关 API 函数 4-1 发送通知 4-2 等待通知 五、测试程序 一、什么是任务通知 FreeRTOS 从版本 V8.2.0 开始提供任务通知这个功能&…

2026/10/12 4:25:38 阅读更多 →
SVD揭秘推荐背后的兴趣密码

SVD揭秘推荐背后的兴趣密码

一、假设你刚刚刷了三条视频 你的行为是: FPS 枪法教学 → 看完,还点了赞 游戏装备评测 → 看完 蛋糕制作教程 → 很快划走现在系统要决定:下一条给你推荐什么?最直接的方法是:继续推荐游戏视频。 但系统怎么从海量观看…

2026/10/12 4:25:38 阅读更多 →
602 蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法

602 蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法

耳机经过锂电池保护,电池供电,发24个脉冲进船运模式后,可以用充电5V脉冲激活才能启动。所以电路是经过锂电池保护的。为什么写了25个脉冲还是没有进入船运模式?什么原因?GPIO测量,可以产生高电平3V, 低电平…

2026/10/12 4:25:38 阅读更多 →
Xilem 构建压力测试指南:用 `cargo rustc` 与 `compile_stress_test` 度量 Rust UI 框架的编译性能

Xilem 构建压力测试指南:用 `cargo rustc` 与 `compile_stress_test` 度量 Rust UI 框架的编译性能

前端桌面应用 【免费下载链接】xilem An experimental Rust native UI framework 项目地址: https://gitcode.com/gh_mirrors/xil/xilem 点击查看 免费下载 Xilem 是一个高度依赖 Rust 泛型与类型系统组合的实验性原生 UI 框架,其声明式 view 树在编译期…

2026/10/12 4:25:38 阅读更多 →
React 18 服务器错误恢复机制深度解析:Suspense 兜底、水合回退与 onRecoverableError 完整指南

React 18 服务器错误恢复机制深度解析:Suspense 兜底、水合回退与 onRecoverableError 完整指南

前端 【免费下载链接】rfcs RFCs for changes to React 项目地址: https://gitcode.com/gh_mirrors/rfc/rfcs 点击查看 免费下载 React 18 引入了一套全新的服务器渲染错误恢复机制:当组件在服务端抛出异常时,React 不再让整个页面崩溃&…

2026/10/12 4:24:38 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →