简介这份重邮计算机网络实验报告面向高校计算机网络课程学习者尤其适合正在完成实验课作业或备考网络方向的学生参考。报告完整覆盖四个实验模块网络命令与使用、网络服务器建立与使用、网络协议分析、网络设备与VLAN配置每个实验均包含实验目的、要求、主要步骤、结果与总结可直接对照实验日志模板梳理操作流程与排错思路。资源包共1个PDF文件大小约8.77MB内容以图文步骤和命令记录为主便于打印或电子查阅。目前已有198人学习下载说明其在同类实验报告中具有一定参考价值。读者可借此掌握ipconfig、ping、arp、ftp等常用命令理解IIS与Serv-U服务器配置、Ethereal抓包分析Ping与FTP协议过程以及交换机VLAN划分与跨交换机通信的配置方法适合作为实验预习、报告撰写和期末复习的辅助材料。1. 重邮计算机网络实验报告从抓包到协议栈一份能复现的实验笔记该长什么样如果你正在搜「重邮计算机网络实验报告」大概率不是想抄一份 PDF而是想搞清楚这门课的实验到底在做什么、Wireshark 抓到的那些包怎么读、Socket 编程那几行代码为什么跑不通、以及一份能拿得出手的实验报告应该包含哪些硬核内容。我当年做这套实验时最大的感受是——实验指导书告诉你「做什么」但很少告诉你「为什么这么做」和「做不出来时看哪里」。重邮的计算机网络实验通常围绕协议分析、Socket 编程、网络配置与抓包验证展开和湖科大教书匠那套课程、自顶向下教材的章节能对上号。这篇笔记不贴某一份具体报告而是把这类实验的通用做法、参数设置、排错路径拆开讲让你自己能写出一份经得起老师追问的报告。2. 实验环境搭建Wireshark 抓包前的四个必调项2.1 为什么抓包前要先确认网卡和过滤规则很多人第一次打开 Wireshark 就懵了——几百个包刷屏根本找不到自己要的 HTTP 或 TCP 握手。问题不在 Wireshark在于你没选对网卡、没设过滤。重邮实验里常见的场景是本机访问一个 Web 服务器要求你抓 HTTP 请求和响应。如果你选的是 VMware 虚拟网卡或者 Loopback可能一个包都抓不到因为流量根本没走那块网卡。常见做法是先用ipconfigWindows或ip aLinux确认当前活跃网卡的 IP然后在 Wireshark 的网卡列表里找对应 IP 的那一项。选错网卡是最高频的翻车点没有之一。# Windows 下查看活跃网卡和 IP ipconfig | findstr /i IPv4 # Linux 下查看 ip a show | grep -E inet |^[0-9]:逻辑说明ipconfig输出里找到你实际用来上网的那块网卡通常是有默认网关的那个记下 IP。Wireshark 网卡列表里会显示每块网卡的 IP选匹配的那块。参数上没什么可调的关键是别选「任何」以外的虚拟网卡。2.2 显示过滤器 vs 捕获过滤器别在错误的地方写规则Wireshark 有两套过滤器新手最容易搞混。捕获过滤器Capture Filter在抓包前设置语法是 BPF显示过滤器Display Filter在抓包后筛选语法是 Wireshark 自己的。实验报告里如果写错了位置老师一眼就能看出来。过滤器类型设置位置语法示例适用场景捕获过滤器抓包前网卡配置页tcp port 80流量大只想抓特定端口显示过滤器抓包后顶部过滤栏http.request.method GET已抓完筛选分析我一般会先不加捕获过滤器抓全量然后用显示过滤器慢慢筛。因为捕获过滤器一旦设错包就永久丢了没有后悔药。显示过滤器写错了顶多重新输入。# 显示过滤器常用写法 tcp.port 80 # 抓 80 端口 TCP http # 只看 HTTP ip.addr 192.168.1.100 # 只看某 IP tcp.flags.syn 1 tcp.flags.ack 0 # 只看 SYN 包逻辑说明tcp.flags.syn 1 tcp.flags.ack 0是筛选 TCP 三次握手的第一个 SYN 包这个写法在实验报告里分析握手过程时非常实用。参数上注意和eq等价但不能写成and显示过滤器里and也可以但更通用。2.3 时间戳格式和着色规则让报告截图更专业实验报告要截图截图里时间戳如果是默认的「秒 since 1970」老师看着费劲。改成「Time of Day」或者「Seconds Since Beginning of Capture」更直观。着色规则也建议调一下把 TCP 重传、HTTP 错误标红截图时重点一目了然。操作路径View → Time Display Format → Time of Day。着色规则在 View → Coloring Rules 里可以基于tcp.analysis.retransmission加一条红色规则。提示截图前按 CtrlShiftR 重新解析一下避免缓存导致显示异常。2.4 实验报告里必须体现的抓包证据链一份能被认可的抓包分析至少要包含抓包时间、网卡、过滤器设置、关键包的展开截图不是折叠的、以及你对每个字段的解读。我见过太多报告只贴一张折叠的包列表然后写「可以看到 TCP 握手成功」——这种报告拿不到高分。正确做法是展开 TCP 头部标出 SYN、ACK、Seq、Ack 的具体值然后解释为什么 Seq 和 Ack 是这样变化的。3. Socket 编程实验从 TCP 客户端到并发服务器的代码骨架3.1 TCP 客户端的最小可运行代码与参数含义重邮的 Socket 实验通常要求写一个 TCP 客户端和服务端实现简单通信。下面是最小可运行版本Python 写因为库封装少能看清每个系统调用的含义。import socket # 创建 TCP socket client socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务端注意这里用的是元组 client.connect((127.0.0.1, 8888)) # 发送数据必须 encode 成 bytes client.sendall(Hello from client.encode(utf-8)) # 接收响应1024 是缓冲区大小 data client.recv(1024) print(收到:, data.decode(utf-8)) client.close()逻辑说明AF_INET表示 IPv4SOCK_STREAM表示 TCP。connect的参数是(host, port)元组。sendall会确保所有数据都发出去比send更省心。recv(1024)的 1024 是单次最多接收的字节数不是总长度——如果服务端发来 5000 字节你可能要循环 recv。参数上端口选 1024 以上避免权限问题IP 用127.0.0.1本机测试最稳。3.2 服务端 bind/listen/accept 的阻塞点在哪服务端代码比客户端多几步核心是bind、listen、accept。新手最常卡在accept上——程序跑起来没反应其实是在等连接这是正常的阻塞行为。import socket server socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置端口复用避免重启时报 Address already in use server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind((0.0.0.0, 8888)) # 0.0.0.0 表示监听所有网卡 server.listen(5) # 5 是等待队列长度 print(等待连接...) conn, addr server.accept() # 阻塞在这里直到有客户端连入 print(来自, addr) data conn.recv(1024) print(收到:, data.decode(utf-8)) conn.sendall(Hello from server.encode(utf-8)) conn.close() server.close()逻辑说明SO_REUSEADDR这个参数强烈建议加上否则你每次重启服务端都要等几十秒端口释放血泪经验。bind的0.0.0.0表示监听所有网卡如果只写127.0.0.1则只有本机能连。listen(5)的 5 是半连接队列长度不是最大连接数别理解错。accept返回一个新的 socket 对象conn和客户端地址addr后续通信都用conn不是server。3.3 多线程并发服务器为什么你的服务端只能接一个客户端上面的服务端处理完一个连接就退出了实验里通常要求支持多个客户端同时连。加个threading就行。import socket import threading def handle(conn, addr): try: data conn.recv(1024) print(f{addr} 说: {data.decode()}) conn.sendall(f已收到 {len(data)} 字节.encode()) finally: conn.close() server socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind((0.0.0.0, 8888)) server.listen(5) while True: conn, addr server.accept() t threading.Thread(targethandle, args(conn, addr)) t.start()逻辑说明主线程只负责accept每个连接丢给一个子线程处理。handle里用try/finally确保连接一定关闭。参数上线程数没有硬限制但实验环境里几十个并发就够了。注意print在多线程下可能交错实验报告里不用纠结这个。3.4 用 Wireshark 验证 Socket 通信的完整流程代码跑通只是第一步实验报告要求你用抓包验证。启动 Wireshark 抓 Loopback如果本机通信或对应网卡然后运行客户端。你应该能看到三次握手SYN、SYN-ACK、ACK、数据传输PSH-ACK、四次挥手FIN-ACK。把每个阶段的包展开对照代码里的connect、sendall、close解释。注意本机通信走 Loopback 网卡Wireshark 里显示为「Adapter for loopback traffic capture」不是以太网网卡。4. 协议分析实验HTTP、TCP、IP 三层怎么串起来看4.1 HTTP 请求响应的字段逐行解读HTTP 实验通常要求你访问一个网页抓包并分析请求行、请求头、响应行、响应头。以访问一个简单页面为例显示过滤器写http找到 GET 请求展开 Hypertext Transfer Protocol。关键字段Request MethodGET/POST、Host目标域名、User-Agent客户端标识、Accept可接受类型。响应里看Status Code200/404/304、Content-Type、Content-Length。实验报告里要解释 304 和 200 的区别——304 是缓存命中没有响应体这个点很多报告漏掉。# 只看某个域名的 HTTP 请求 http.host example.com http.request # 只看响应状态码非 200 的 http.response.code ! 200逻辑说明http.host匹配 Host 头http.request是布尔字段表示这是请求。组合起来能快速定位。参数上注意!在显示过滤器里是合法的。4.2 TCP 三次握手与四次挥手的时序图怎么画实验报告里画时序图是加分项。不用 Visio用 Wireshark 自带的 Flow Graph 就行Statistics → Flow Graph → 选 TCP Flows。它会自动生成客户端和服务端的箭头图你截图后标注 Seq/Ack 变化即可。三次握手的关键客户端发 SYNSeq0服务端回 SYN-ACKSeq0, Ack1客户端再发 ACKSeq1, Ack1。注意这里的 Seq 是相对值Wireshark 默认显示相对序号可以在 TCP 协议偏好里关掉。四次挥手主动关闭方发 FIN对方回 ACK对方也发 FIN主动方回 ACK。为什么是四次不是三次因为 TCP 是全双工两个方向要各自关闭。这个点在实验报告里必须写清楚是高频考点。4.3 IP 分片与 TTL用 ping 命令构造实验条件IP 层实验常涉及分片和 TTL。用ping加-lWindows或-sLinux指定数据包大小超过 MTU 就会分片。# Windows发送 3000 字节的 ping强制分片 ping -l 3000 192.168.1.1 # Linux发送 3000 字节禁止分片-M do ping -s 3000 -M do 192.168.1.1逻辑说明-l 3000在 Windows 下指定载荷大小加上 IP 头和 ICMP 头会超过 1500 MTU触发分片。Wireshark 里过滤icmp能看到多个分片包每个包的Flags字段有More fragments标记最后一个分片该标记为 0。参数上-M do是 Linux 下禁止分片用来探测路径 MTU如果包太大且禁止分片会收到 ICMP 不可达。4.4 用过滤表达式把三层协议关联起来实验报告的高阶要求是展示你理解协议栈的封装关系。在 Wireshark 里选中一个 HTTP 包展开 Frame → Ethernet → IP → TCP → HTTP逐层截图。然后写一段话解释HTTP 报文作为 TCP 载荷TCP 段作为 IP 载荷IP 包作为以太帧载荷。# 找一个同时包含 HTTP 和 TCP 的包 http tcp # 查看某个 TCP 流的所有包 tcp.stream 0逻辑说明tcp.stream 0是跟踪某一条 TCP 连接的所有包编号从 0 开始。这个过滤器在分析完整会话时非常有用比手动找包高效得多。5. 实验报告避坑五个让老师皱眉的常见问题5.1 截图没有时间戳和过滤器信息现象报告里贴的 Wireshark 截图只有包列表看不出抓包时间和过滤条件。原因截图时没调整列显示或者截了折叠状态的包。解决截图前确保时间列可见过滤栏在截图范围内关键包展开到字段级别。我一般会截两张——一张全景带过滤器一张展开细节。5.2 Socket 代码端口被占用报 Address already in use现象服务端第二次运行时报OSError: [Errno 98] Address already in use。原因上一次的连接处于 TIME_WAIT 状态端口没释放。解决加setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)这一行能省你几十秒等待。如果还不行换个端口或者等 30 秒。5.3 抓包抓不到本机通信的流量现象客户端和服务端都在本机跑Wireshark 选以太网网卡抓不到任何包。原因本机通信走 Loopback不走物理网卡。解决Wireshark 里选「Adapter for loopback traffic capture」Windows 下如果没有这个选项需要装 Npcap 时勾选 Loopback 支持。Linux 下直接抓lo网卡。5.4 HTTP 实验里 304 响应被误判为错误现象报告里写「服务器返回 304说明请求失败」。原因不理解 304 是缓存协商成功不是错误。解决304 表示客户端缓存还有效服务端告诉客户端直接用缓存没有响应体。实验报告里应该解释这是 HTTP 缓存机制的正常行为不是 bug。5.5 时序图 Seq/Ack 标注错误现象报告里画的时序图 Seq 和 Ack 对不上或者把相对序号当绝对序号。原因Wireshark 默认显示相对序号第一次握手 Seq0但实际绝对序号是随机的。解决要么在 TCP 偏好里关掉相对序号显示绝对序号要么在报告里注明「以下均为相对序号」。我一般选后者因为绝对序号太长画图不好看。6. 进阶技巧用 tcpdump 和 Python 脚本自动化验证实验结论实验报告写到后面手动抓包分析效率太低。我后来养成的习惯是用 tcpdump 在后台抓包用 Python 脚本解析 pcap 文件自动统计握手次数、重传率、HTTP 状态码分布。这样报告里的数据是脚本跑出来的不是肉眼数的可信度高一个档次。from scapy.all import rdpcap, TCP, IP packets rdpcap(capture.pcap) syn_count 0 retrans_count 0 for pkt in packets: if TCP in pkt: flags pkt[TCP].flags if flags S: # SYN 包 syn_count 1 if pkt[TCP].seq in seen_seq: retrans_count 1 seen_seq.add(pkt[TCP].seq) print(fSYN 包数量: {syn_count}) print(f疑似重传: {retrans_count})逻辑说明rdpcap读取 pcap 文件TCP in pkt判断是否 TCP 包。flags S匹配纯 SYN 包。重传检测用 Seq 重复来判断简单但有效。参数上Scapy 需要单独安装pip install scapy读取大文件时内存占用较高实验级别的 pcap 通常几 MB没问题。用 tcpdump 抓包的典型命令# 抓 80 端口写文件限制 1000 个包 tcpdump -i any -w capture.pcap port 80 -c 1000 # 读取并显示 HTTP 请求 tcpdump -r capture.pcap -A tcp port 80 and tcp[((tcp[12:1] 0xf0) 2):4] 0x47455420逻辑说明-i any监听所有网卡-w写文件-c限制包数。第二条命令里的tcp[((tcp[12:1] 0xf0) 2):4] 0x47455420是匹配 TCP 载荷前 4 字节为GET0x47455420 是 GET 加空格的十六进制这个表达式在实验报告里写出来很显功底。最后说个我自己的习惯每次实验报告提交前我会把 Wireshark 的 pcap 文件、Python 分析脚本、截图一起打包报告里只放结论和关键截图。这样老师如果质疑数据我能立刻拿出原始文件复现。这个习惯让我在后来做 devops 相关工作时也受益——任何结论都要有可复现的证据链。希望帮到你。本文还有配套的精品资源点击获取