
简介计算机网络实验报告资源包围绕使用网络协议分析器捕捉与分析协议数据包展开适合高校计算机、网络工程专业学生完成课程实验时参考。报告基于 macOS 环境、以太网条件以 Wireshark 为主要分析工具完整验证了数据帧、IP 数据报、TCP 报文段三种报文格式并对 ARP、ICMP、TCP 三次握手、FTP 工作过程及 WWW 应用协议进行抓包分析思路清晰结论明确可作为实验预习、报告撰写和考前复习的辅助材料。资源为 1 个 docx 文档约 7.17MB内容涵盖实验目的、环境、过程记录、结果分析和总结等模块重点解答了访问网页时的协议层次、百度主页应答报文个数、同一持久连接、无效链接提示以及本地/远地图像对应的 TCP 连接数等思考题便于直接对照或复用框架。已有 352 人学习/下载适合需要系统梳理网络协议分析流程、快速产出规范实验报告的同学。1. 网络协议分析器实验抓的不是包而是网络行为从ping -c 3 baidu.com这一类命令开始。你看到的是平均RTT三个数字但网关MAC怎么拿到、DNS有没有参与、ICMP回显请求的identifier具体是多少全被ping的输出吞掉了。开启网络协议分析器捕捉协议数据包之后这些底层动作一条一条出现在界面里像按下慢放键。很多人把计算机网络基础实验里的这个报告做成截图集锦哪一步先哪一步后都说不清。实际上这个实验的正确价值在于让TCP/IP封装关系、端口语义、报文往返顺序在同一份证据里互相印证。以下几章就按计算机网络基础课最常见的要求把抓包前的原理准备、接口选择、过滤器参数、字段解释和结论验证讲清楚。2. 协议数据包的分层封装与网络协议分析器的捕获原理2.1 从应用层到链路层协议数据包的嵌套封装读分析结果时先纠正一个常见的概念混淆。网络协议分析器保存的每一条记录在以太网环境里本质上是“帧”而不是“报文”。帧的最外层是目的MAC和源MAC往里剥才是IP头再往内是TCP或UDP头最里面是应用层的数据。一次HTTP请求在被发出之前会沿着这个链路反向封装浏览器把请求行和Header交给HTTP库HTTP库再把数据交给TCPTCP在数据前追加端口号和序列号随后IP层添上源和目标IP地址网卡驱动最后把整个结构包进以太网帧才打上线路。这串步骤不是分析器给出来的而是TCP/IP模型的实际落点。分析器的作用是“解封装”它拿到原始帧字节后按以太网类型字段判断后面是IPv4还是ARP再按IP头部里的协议号判断上层是TCP还是UDP继续解到应用层。所以你在界面里看到每一层字段井井有条是解码器工作的结果不是帧里天然就是一个树状结构。封装顺序对实验的直接影响是过滤器条件能写得多“深”取决于帧里有哪一层。比如tcp.port 443能作用在IP包上是因为帧的以太网类型是0x0800IP头里的协议号为6。如果抓到一个ARP帧它没有IP层所有带ip开头的显示过滤器都会自动落空。实验报告里如果出现“ARP报文带TCP端口”的说法多半就是没弄明白封装边界。2.2 网络协议分析器的工作位置与抓包机制常见做法是把抓包工具说成“监听网卡”。更准确地说帧到达网卡后驱动在做正常上送协议栈的同时把一份拷贝交给抓包接口libpcapWindows下是WinPcap或Npcap负责给这个帧打上时间戳并送入缓冲区。分析器界面上看到的那一行数据就是从缓冲区读出来的。这段路径意味着抓包不会影响帧的原始内容也不改变网络流量的接收方。混杂模式是实验里另一个容易忽略的点。默认情况下网卡只把目的MAC是本机的单播帧和广播帧上送给系统混杂模式会通知网卡把接收到的所有帧都收下来。在普通交换机上端口之间做了MAC地址隔离非本机的单播帧不会出现在你的网卡上所以打开混杂模式也不等于能抓到整个局域网。真正想让网络协议分析器捕捉协议数据包时能“多点覆盖”要依赖交换机端口镜像或者干脆在自己要分析的终端上抓本机流量。本机发往外部、本机回环、外部返回本机的流在工作站本地网卡上都能看到。抓包是被动观测不会改写帧内容。实验时最好统一时序先启动抓包再执行产生流量的操作最后停掉抓包。倒过来会流失实验里最想比较的“发起阶段”数据。有的场景还要注意缓冲区溢出流量大而分析器处理不过来时libpcap会把新到的帧直接丢掉界面上表现为包号不连续。2.3 实验环境准备安装、权限与接口选择我一般会用Wireshark的纯命令行版本tshark做抓包实验理由有三命令能原样写进实验报告可复现过滤条件不容易打错在远程服务器上也能直接跑。Windows下先装Wireshark会附带tshark和dumpcapLinux在Debian系里用下面命令安装sudo apt update sudo apt install -y tshark tshark --version sudo tshark -D第一行安装tshark过程中会询问是否允许非root用户抓包建议选是安装程序会把dumpcap的抓包能力交给wireshark用户组后面不必频繁使用sudo。如果当时选了否后续命令统一用sudo执行也不影响。第二行输出版本和libpcap版本用来排查驱动与内核不兼容这类环境问题。第三行列出当前机器能抓的接口。第三行的输出格式在Linux下通常是“数字.接口名”的形式常见接口如下表接口名适用场景抓包注意点eth0有线网卡流量交换网络里只能看到本机流量wlan0无线网卡流量混杂模式受驱动限制一般只收到本机帧lo本机回环流量访问本机服务必须选它TCP握手全程可见any全部接口合集每帧元数据里带来源接口标识“any”接口比较特殊它把多个网卡的数据流合并到一起代价是帧开头会增加一个伪头部记录来源接口。做实验分析时能用具体接口就用具体接口否则后面按MAC地址过滤时会夹杂多台接口的干扰。3. 用网络协议分析器捕捉协议数据包接口、过滤器与命令行抓包3.1 最小抓包命令选定接口和写入文件实验前先想清楚流量会从哪个接口过。本机访问本机Web服务在127.0.0.1接口就选lo工作时访问公网HTTP接口选以太网卡。网络协议分析器捕捉协议数据包最常用的命令行写法是sudo tshark -i any -f tcp port 80 -w /tmp/http.pcap这一句话里三个参数互相配合。-i指定接口any是抓所有接口-f后面跟的是BPF抓包过滤器含义是“只保留TCP端口为80的帧”这样DNS、SSH、系统广播帧不会进文件-w把结果写入pcap文件而不是打印到屏幕。如果没写-wtshark会把解析结果逐行打到终端流量一多就刷屏。写报告时要的是文件建议实验开始就养成-w的习惯。抓包时长和文件大小也应在同一命令里限制常用的写法是sudo tshark -i lo -f tcp port 443 -a duration:15 -b filesize:10000 -w quic_test.pcap-a duration:15表示15秒后自动停止-b filesize:10000表示单个文件达到10000KB就轮转配合-b files:5最多保留5个文件避免抓了一个小时把磁盘写满。流量较大时文件轮转耗尽后会把最旧文件删掉实验报告里要写明这个参数别人复现时才知道你抓到的只是时间窗口内的一部分。3.2 捕获过滤器与显示过滤器语法不同各自管一段抓包命令里的-f是捕获过滤器它的语法来自BPF作用时机在帧进入分析器之前。帧如果不符合过滤器就被内核直接丢弃不进文件。另一个概念是显示过滤器作用时机在文件已经生成之后只是“在已有文件里筛选显示”原始文件内容不变。实验报告里经常把两者混用导致复现时结果不一致。判断标准很简单tcp port 80是BPF语法tcp.port 80是显示过滤器语法。下面是我做抓包实验时最常用的几组过滤器对照场景BPF捕获过滤器显示过滤器实际效果只要HTTP流量tcp port 80tcp.port 80端口80的TCP帧进出方向都保留只看指定主机host 192.168.1.10ip.addr 192.168.1.10源或目的IP匹配即保留ping实验icmpicmp.type 8前者保留全部ICMP后者只留回显请求排除ARP噪声not arp!arpARP广播帧干扰大通常先滤掉回环接口HTTPtcp port 8080 and host 127.0.0.1tcp.port 8080 ip.addr 127.0.0.1抓本机Web服务请求使用显示过滤器从已保存文件中提取数据时我一般这样写tshark -r http.pcap -Y http.request || http.response -T fields \ -e frame.number -e ip.src -e http.request.uri-r指定读取文件-Y指定显示过滤器-T fields改变输出格式为“字段抽取”-e列出抽取哪些字段。这里的“||”表示“或”这个符号只存在于显示过滤器语法里BPF里没有这种写法这也是区分两种过滤器的一个实例。3.3 保存、合并与按条件分割协议数据包文件抓包实验做完原始文件往往比需要的大直接整个发给别人会拖慢阅读。合并和分割都建议用命令完成别开GUI再点击导出。mergecap -w all.pcap http.pcap dns.pcap # 两个文件按时间戳合并 editcap -c 500 -F pcapng big.pcap part # 每500个帧分成一个小文件mergecap输出文件名由-w指定源文件按时间戳排序后合并适合把多个实验阶段对齐成一条时间线。editcap里的-c 500是按帧数切割生成part_00001_2024...之类的文件-F pcapng指定输出封装格式有的工具只读pcap格式需要改成pcap。还有另一种更实用的导出姿势直接用tshark重新读过滤后再写文件tshark -r all.pcap -Y dns -w dns_only.pcap这条命令把all.pcap里所有DNS帧单独写到一个文件。对比editcap按数量切这种方式是按协议切报告里引用数据时更清晰。注意这里-w和-Y同时出现含义是“读入文件先过滤再写入新文件”和刚才从接口抓包时-w的意义不同。4. 分析协议数据包从TCP三次握手到HTTP请求还原4.1 在数据包文件中观察TCP握手与挥手实验报告里最常出现的一个图表是“TCP三次握手”。打开抓好的web.pcap文件先按TCP标志位抓出握手帧tshark -r web.pcap -Y tcp.flags.syn 1 || tcp.flags.fin 1 -T fields \ -e frame.number -e tcp.stream -e tcp.flags.str \ -e ip.src -e tcp.srcport -e ip.dst -e tcp.dstport输出里会看到SYN帧的flags.str显示为SSYN-ACK帧显示为SAACK帧显示为A。区分不同连接的关键字段是tcp.stream这是分析器给每个TCP四元组分配的编号。同一个stream编号的帧才属于同一条连接。如果SYN重复出现且序列号相同说明发生了重传如果对方回RST而不是SYN-ACK常见原因是被访问端口没有监听或防火墙主动拒绝。用这个命令对照自己的抓包结果时一个有效做法是只过滤单条streamtshark -r web.pcap -Y tcp.stream 0 -T fields -e frame.number -e tcp.time_relative -e tcp.flags.str -e tcp.len看这行的相对时间能看到握手完成后紧接着发送HTTP请求TCP负载数据从几十字节到几百字节的变化趋势。对计算机网络里“可靠传输”的理解很有帮助。4.2 用 -T fields 提取HTTP请求与响应字段TCP握手只是通信建立阶段真正体现应用层实验价值的是HTTP请求和响应的还原。下面的命令把指定文件里的HTTP报文转成表格tshark -r web.pcap -Y http.request || http.response -T fields -E headery \ -e frame.time_relative -e ip.src -e tcp.srcport \ -e http.request.method -e http.request.uri \ -e http.response.code -e http.content_type-E headery表示输出第一行写上字段名http.request.method和http.request.uri只有请求报文才有值响应报文对应位置为空http.response.code只有响应报文才出现值。把这份输出直接写成实验报告里的表比贴截图更便于核对。常用HTTP字段对应关系如下字段名解释出现在http.request.method请求方法GET/POST/PUT等请求方向http.request.uri请求路径不含协议和主机名请求方向http.host请求中的主机名请求方向http.response.code状态码200/301/404等响应方向http.content_type响应体内容类型响应方向看字段设计就能理解分析器的解码逻辑请求和响应共用一套HTTP头字段分析器用方向把字段归类并不能光靠一个字段名区分请求还是响应。过滤条件写成http.request和http.response两个单独的布尔标志才是区分方向的标准做法。4.3 用DNS过滤器验证域名解析过程上网行为从DNS开始。抓DNS包时过滤器建议直接写udp port 53因为标准DNS查询走UDP。tshark -r dns.pcap -Y dns.flags.response 1 -T fields \ -e dns.qry.name -e dns.a -e dns.flags.rcode这个命令只留DNS响应帧每行输出查询的域名、解析结果IP和返回码。rcode为0表示无错误为3表示域名不存在NXDOMAIN。把这条结果和请求帧放在一起能清晰看到“查询-应答”的一对一关系。假如实验环境里没有足够多的DNS流量可以用nslookup或dig主动构造dig example.com 8.8.8.8 noall answer这条命令使分析器在一个稳定可控的时间点创建一次DNS查询和响应非常适合写进报告作为验证步骤。注意要在抓包启动后再执行dig否则抓包文件会是空的。5. 网络协议分析器报告里最有说服力的验证与排错技巧5.1 用统计输出证明抓包覆盖率报告里“我抓到了50个包”这类描述没有对比意义。用分析器的统计子命令可以直接产出一张协议分层统计表写进报告能直接体现计算机网络基础实验里的协议分布概念tshark -r all.pcap -z io,phs输出里会列出每个协议的帧数、总字节数和占比。这些数字可以直接支撑报告里的“大部分流量集中在HTTP”之类结论。需要展示会话级信息时用-z conv,tcp能看到每条TCP连接传输的字节数和持续时间。两个命令都在tshark -r读文件时执行不会重新抓包对已有文件反复统计也不会改变数据。把这份统计表放在实验报告末尾比一页截图更能体现对协议数据包整体结构的把握。5.2 抓不到数据包的三种常规排错实验中最常见的结果是分析器打开半天一条帧都没有。先别急着重装按顺序查三个地方。接口选错最常见。访问127.0.0.1上的服务却不选lo网卡上没有任何回环帧自然一条抓不到。改成sudo tshark -i lo后立即能看到数据。第二个是权限。Linux下dumpcap需要CAP_NET_RAW能力安装tshark时如果选了“不允许非root用户抓包”普通用户运行会直接拒绝。用sudo setcap cap_net_raw,cap_net_admineip /usr/bin/dumpcap一次性赋予之后普通用户也能抓。第三个是时长太短。很多抓包命令一执行就停在等待状态实际流量还没产生就已经因为-a duration:3退出了。把时长放宽到15到30秒并保证另一终端同步在ping目标地址。把这三种排错步骤写进实验报告的“排错记录”一节时建议同时保留tshark的报错原文和接口列表截图两者一对照原因基本就锁定了。本文还有配套的精品资源点击获取