
简介西北工业大学软件学院计算机网络实验报告聚焦HTTP协议深度探索面向网络工程、计算机及相关专业学生也可供自学者巩固Wireshark抓包分析技能。报告完整覆盖四个核心实验基础GET/响应交互含HTTP版本、可接受语言、状态码200、内容大小等、条件GET响应IF-MODIFIED-SINCE头与304状态码、长文档检索分块传输与多个TCP段以及HTML文档嵌入对象分析多GET请求与CDN交互。每个实验均给出操作步骤、Wireshark截图、关键字段解析与结果说明便于对照复现。资源包共1个doc文件约6.62MB结构紧凑既有理论要点又有实操细节。已有1631人学习下载对于课程实验、期末复习或想深入理解HTTP协议与网络数据包分析的读者是实用性较强的参考资料。 西北工业大学软件学院的计算机网络实验应该是很多同学大学四年里第一次认真对待Wireshark和路由器配置的时刻。说实话我当年做这门实验课的时候也踩了不少坑比如抓包抓不到三次握手、配路由把整个拓扑搞到不通、Socket编程一运行就报错。等到后来帮学弟学妹调了无数次实验才发现大部分问题其实都集中在几个共同的节点上。这篇内容我把计算机网络实验从环境搭建、协议抓包分析、子网划分与路由配置到Socket编程和实验报告撰写按实际操作顺序重新理了一遍。适合正在做计算机网络实验的同学参考也适合准备考研复试、想快速把网络实验核心知识串起来的人。讲的都是实际能落地的操作不是教科书式罗列。1. 实验环境搭建与工具选型1.1 需要准备哪些软件我们学院计算机网络实验涉及到的工具相对固定主要是三类抓包分析类、拓扑模拟类和代码编写类。Wireshark抓包分析HTTP、TCP、UDP等协议报文实验报告里的大多数截图都靠它。Cisco Packet Tracer 或华为eNSP做路由器、交换机配置实验。软院课程里两种都会用到Cisco的模拟器更常见eNSP更贴近国内设备。VS Code或IDEA跑Socket网络编程实验语言不限Java、Python、C都行我们当时大二的主语言是Java也有人用Python。建议在实验开始前就把这几个工具装好并验证能运行。Packet Tracer和eNSP对系统环境要求不高但Windows下安装eNSP需要WinPcap或NPcap支持装完以后第一次启动如果提示抓包失败就是这两个依赖没装好。Wireshark安装时也会自动装NPcap所以安装顺序最好是先装Wireshark再装eNSP。1.2 软件安装常见问题我在帮同学处理安装问题的时候碰到最多的是下面几个eNSP启动时提示“未安装Wireshark”或“未安装VirtualBox”即使你明明装了Wireshark。原因是eNSP只识别默认安装路径如果你的Wireshark安装在非C盘默认目录它就可能检测不到。解决方案重新安装Wireshark到默认路径或者手动配置eNSP的工具路径。Packet Tracer运行时的界面卡顿。这个一般是老版本兼容性问题建议直接使用较新版本。Wireshark无法开始捕获提示“您没有权限”。Windows下需要以管理员身份运行WiresharkLinux下需要把当前用户加入wireshark组并重新登录。这些看起来都是小事但在实验课上会很浪费时间。我通常建议在实验前一天的晚上就把环境全部验证一遍确认能正常抓包、能正常启动模拟器第二天到了机房直接开始干活。2. 三次握手与Wireshark抓包分析2.1 抓包快速上手协议分析实验是计算机网络实验的重头戏最常见的任务就是用Wireshark捕获TCP三次握手过程分析SYN、SYN-ACK、ACK三个报文段的标志位和序号变化。快速上手步骤其实不复杂打开Wireshark选择当前联网的网卡开始捕获。在浏览器地址栏访问一个HTTP网站。停止捕获在过滤栏输入tcp.flags.syn1筛选出所有SYN报文。这里有一个很多人没注意到的点Wireshark默认抓取的是当前网卡的流量但如果你访问的网站是HTTPS那么内容区域会有TLS加密你只能看到握手过程看不到HTTP明文内容。实验报告如果需要HTTP报文分析建议访问一个HTTP站点或者用Wireshark打开预先保存的抓包文件。还有一个重点三次握手的筛选不要只过滤tcp.flags.syn1因为SYN报文有两次第一次握手和第二次握手都带SYN标志只是第二次还带ACK。要区分客户端和服务端可以加上ip.addr你的本机IP这样就能快速定位本机发起的连接。2.2 TCP序号和确认号的查看抓包拿到三次握手报文后重点看TCP头部里的Sequence Number和Acknowledgment Number。我们当时实验报告里要求标注三次握手各自的序号关系。第一次握手客户端发送SYN假设序号是x此时确认号为0无效标志位SYN置1。第二次握手服务端回复SYN-ACK序号为y确认号为x1。第三次握手客户端发送ACK序号为x1确认号为y1。这里初学者容易犯迷糊的地方在于为什么确认号要加1。因为SYN报文会占用一个序号即使它不携带任何数据所以接收方在确认的时候要在收到的序号基础上加1。这个细节在期末复习时也经常考理解之后比死记硬背管用得多。提示Wireshark显示的是相对序号Relative Sequence Number还是绝对序号可以在“视图-首选项-Protocols-TCP”里切换。实验报告建议开启相对序号数字更小更直观。抓包实验除了三次握手还有一个很常见的任务是用过滤找到TCP挥手过程的FIN报文分析四次挥手。挥手比握手多了一次报文是因为TCP是全双工通信两端必须各自关闭自己的发送通道。这个原理不难但分析FIN-ACK和最后的TIME_WAIT状态时如果对状态转换不熟就会卡住。3. 子网划分与路由配置实操3.1 子网划分的思路子网划分实验看似是纯算术题但在模拟器里一配就容易出问题。原因在于很多人只算IP范围没有把网络地址、广播地址、可用主机数和路由条目对应起来。举个例子一个常见的任务是把192.168.1.0/24划分成4个子网每个子网至少能容纳50台主机。计算思路是这样的需要至少6位主机位2的6次方减2等于62满足50台所以掩码是/26即255.255.255.192可以划出4个子网分别是192.168.1.0/26、192.168.1.64/26、192.168.1.128/26、192.168.1.192/26。我在模拟器里演示的时候同学们最容易犯的错是直接把主机IP填成广播地址或者把网关填成了网络地址。这里有个简单的方法把子网划分和VLAN设计、IP地址规划放在一起理解网络地址主机位全0不能分配给设备。广播地址主机位全1不能分配给设备。可用地址网络地址1到广播地址-1。如果你是用Cisco Packet Tracer做这个实验建议把每个子网的第一个可用地址分配给路由器接口作为网关把后面的地址分配给终端设备。这样整个拓扑会清晰很多路由配置也不容易混乱。3.2 静态路由与RIP配置路由配置实验一般从静态路由开始再到动态路由RIP。静态路由的核心命令就一条ip route 目标网络地址 子网掩码 下一跳地址例如从Router0配置到192.168.2.0/24网络的静态路由下一跳是Router1的接口地址192.168.1.2Router0(config)# ip route 192.168.2.0 255.255.255.0 192.168.1.2这里需要特别注意下一跳地址必须是直连链路上对端设备的接口IP不能填自己这边的接口IP也不能填非直连网络的地址。很多同学在这里容易晕其实只需要记住路由器转发数据包时只知道把包交给下一跳但下一跳必须在自己的直连网络内。RIP配置相对简单因为它只需要声明哪些直连网络参与RIP进程路由器会自动学习路由Router0(config)# router rip Router0(config-router)# version 2 Router0(config-router)# network 192.168.1.0 Router0(config-router)# network 192.168.0.0 Router0(config-router)# no auto-summary尤其要注意no auto-summary这一句如果不关闭自动汇总RIPv2在处理不连续子网时会自动把路由汇总成主类网络导致路由学习和转发出错。这是实验中非常经典的一个坑。3.3 常见配置错误模拟器配置实验中的常见错误我整理了一张排查清单现象可能原因排查命令ping不通对端静态路由缺失或下一跳错误show ip route直连网络ping通跨网段不通缺少回程路由show ip route ping动态路由学不到RIP版本不一致或网络声明缺失show ip rip database / show running-configVLAN间无法通信Trunk未配置或子接口封装错误show interfaces trunk / show vlan排查时有个习惯特别重要先看路由表再ping不要盲目尝试。路由表show ip route一看就知道路由有没有生效省去大部分猜测。注意模拟器里ping默认发5个ICMP报文如果显示U.U.U表示目标不可达通常是路由问题如果是.....表示请求超时可能是链路或接口问题两者含义不同。4. Socket编程从半懂不懂到能应付验收4.1 TCP编程框架Socket编程实验通常是做一个简单的TCP聊天程序或文件传输程序目的是理解传输层的可靠连接机制。实验验收时老师一般会看两端是否能正常通信然后问几个关于三次握手和缓冲区的问题。以Java为例一个最简单的TCP服务端长这样ServerSocket server new ServerSocket(8080); Socket socket server.accept(); BufferedReader in new BufferedReader(new InputStreamReader(socket.getInputStream())); String line in.readLine(); System.out.println(收到客户端消息: line); socket.close(); server.close();客户端长这样Socket socket new Socket(127.0.0.1, 8080); PrintWriter out new PrintWriter(socket.getOutputStream(), true); out.println(hello, server); socket.close();代码本身不难但验收时经常出的问题有几个服务端没有先启动、端口被占用、防火墙拦截、中文乱码、输入输出流没有flush。我这里重点说一下flush。PrintWriter构造函数第二个参数传true表示自动刷新缓冲区如果你用的是new PrintWriter(out)那么写完数据后必须手动flush()否则数据会停留在发送缓冲区服务端一直收不到。这是实际编码里最常见的bug比逻辑错误更隐蔽。4.2 UDP编程差异如果实验要求同时实现UDP通信需要注意UDP和TCP在使用上的三个差异UDP需要先创建DatagramSocket每次发送都需要同时指定目的IP和端口。UDP没有连接服务端和客户端是平等关系都可以先发数据。UDP发送的是DatagramPacket必须手动构造字节数组、长度、地址、端口。UDP发送端的核心代码DatagramSocket socket new DatagramSocket(); byte[] data hello.getBytes(); InetAddress addr InetAddress.getByName(127.0.0.1); DatagramPacket packet new DatagramPacket(data, data.length, addr, 9090); socket.send(packet); socket.close();接收端DatagramSocket socket new DatagramSocket(9090); byte[] buffer new byte[1024]; DatagramPacket packet new DatagramPacket(buffer, buffer.length); socket.receive(packet); String msg new String(packet.getData(), 0, packet.getLength()); System.out.println(msg); socket.close();UDP实验里大家问得最多的问题是为什么接收端只能收到一次数据其实UDP本身是无状态的如果你希望持续接收就要把receive()放进一个while循环里并且服务端不能关闭socket。4.3 验收时的常见提问我们当时Socket编程验收老师经常现场改几个点来考察理解深度如果把服务端的accept()注释掉客户端能连上吗答案是连不上客户端会抛出ConnectException。如果客户端不发送数据直接关闭socket服务端的readLine()会返回什么答案是返回null因为连接关闭后读取流到达末尾。如果同时服务多个客户端单线程的accept()可以吗答案是只能逐个处理一个客户端不释放连接后面的客户端就会一直阻塞。这些问题其实都是对Socket底层机制的理解跟实验报告写得是否华丽没关系。能把这些问题回答清楚比在报告里堆几十页截图要实在得多。5. 实验报告撰写的经验5.1 报告结构实验报告是我们学院网络课程考核的重要环节。我看了不少同学的报告发现普遍存在的问题是截图多、分析少配置命令贴了一整页但是没有任何对数据包或配置结果的解读。一份合格的计算机网络实验报告建议按这个结构走实验目的简要说明本次实验验证的网络原理。实验环境操作系统、工具版本、网络拓扑描述。实验步骤按操作顺序描述每步插入关键截图和关键配置。结果分析这是得分关键对截图中的关键字节、关键字段进行解释。问题与解决记录实验中遇到的问题和排查过程。实验结论总结对协议或机制的深入理解。我特别想强调“结果分析”这一块。比如抓包截图里TCP报文段的源端口和目的端口分别是什么SYN标志位为什么要置1确认号为什么比序号大1路由配置截图里路由表出现了哪几条条目这些条目是从直连、静态还是动态学到的。把这些写清楚老师一眼就能看出你是不是真的做过实验而不是复制粘贴。5.2 截图与数据分析技巧截图看似简单实际有讲究。我们学院实验报告要求尽量用中文标注所以截图之后最好用画图工具或截图软件在关键字段上画圈、画箭头。这里分享几个提升报告质量的小技巧抓包截图要保证能看到TCP头部展开区域不要只截一个包列表因为标志位、序号、确认号都在展开区域里。路由配置截图不要只用show running-config最好再配一张show ip route的结果两者结合才能证明配置已生效。截图里的IP地址、端口、MAC地址要用文字在旁边标注出来避免老师在几十个相似截图里找关键信息。对于动态路由实验建议写清楚收敛时间或路由条目的变化过程比如RIP默认30秒发送一次路由更新收敛过程中路由表会发生短暂变化这是很好的分析素材。提示实验报告排版不要出现大段代码贴图尤其是模拟器命令行输出。用代码块或者表格整理关键配置看起来更清爽也更好写分析。另外报告的“问题与解决”部分一定不要空着。哪怕你全程没遇到问题也建议写一两个自己主动排查的细节比如“关闭防火墙后UDP通信正常”或者“修改MTU后大数据包不再分片失败”。这类内容恰恰能反映你对网络协议的理解深度也是老师判定“独立完成”的重要依据。6. 实验过程中的几点体会最后聊几点我自己的体会。计算机网络实验和纯理论课最大的区别在于你必须同时建立“宏观拓扑”和“微观报文”两套视角。配路由时脑子里面是整个网络的路径视图抓包时又要在报文字节层面看标志位、看序号大部分同学在两者之间切换时容易懵这很正常。我的建议是每做一个实验先用一个整体Top图把数据流路径画出来再针对路径上的关键节点做抓包确认这样既不会在配置里迷失也不会在看报文时忘了这条流是从哪到哪。再说说时间安排。实验报告尽量在实验当天趁热写尤其是抓包分析和路由表分析的部分隔一天再看截图可能已经想不起来当时为什么这么配了。如果遇到实验课上没调通的情况一定要在报告里记录当时的报错信息、排查命令和最终的解决办法这是最真实也最宝贵的实验数据。还有一个小技巧期末复习计算机网络的时候把实验报告里的抓包截图和配置命令当复习资料是很有用的。三次握手、四次挥手、RIP路由更新、TCP重传机制这些高频考点都能在实验记录里找到对应的实证理解起来比单纯看课本快得多。希望大家实验顺利。本文还有配套的精品资源点击获取