Wireshark抓包实验


Wireshark抓包实验

这篇计网课的一个大实验,我把实验报告附在后面以供参考(助教的博士学长很耐心地检查了一遍,应该是没啥大问题的)

实验概述

本次实验旨在通过 Wireshark 抓包工具,深入理解计算机网络中传输层(TCP)和应用层(HTTP)的通信机制。实验分为两个主要部分:

  1. TCP 协议分析:通过 Python 编写简单的 Client-Server 程序,在本地回环和局域网环境下观察 TCP 的连接建立(三次握手)、数据传输、连接断开以及拥塞控制机制。
  2. HTTP 协议分析:通过 Flask 搭建简易服务器,分析 HTTP 请求/响应报文格式、长连接与短连接、以及包含嵌入对象的页面加载过程。

第一部分:TCP 协议抓包分析

1. 实验准备与环境

  • 操作系统:Windows 10/11, Ubuntu 22.04 或 macOS(注意芯片版本)。
  • 软件依赖:Wireshark, Python 解释器。

2. 实验内容与步骤

任务一:捕获本地回环的 TCP 数据包

  1. 安装软件:确保已安装 Wireshark 和 Python。
  2. 编写测试程序:在 code/task1 文件夹下创建以下 Python 脚本(需手动输入文件名及代码):
    • 服务端 (server.py):负责接收文件。
    • 客户端 (client.py):负责通过 TCP 发送文件。
    • 注:代码逻辑需实现监听指定端口(如 12346)并进行文件流传输。
  3. 开始抓包:打开 Wireshark,选择 本地回环网卡 (Loopback)
  4. 运行程序
    1
    2
    3
    4
    # 启动服务端
    python server.py
    # 启动客户端(输入文件名并发送)
    python client.py
  5. 过滤数据:在 Wireshark 过滤器输入 tcp.port == 12346,观察连接建立、数据分块传输及断开过程。

任务二:捕获局域网内的 TCP 数据包

  1. 网络配置
    • 查看本机 IP:Windows 使用 ipconfig,Ubuntu/macOS 使用 ifconfig
    • 确保两台主机在同一网段且能互相 Ping 通。
  2. 修改代码
    • server.py 中的 server_ip 修改为服务端主机的实际局域网 IP。
    • client.py 中的目标 IP 修改为该服务端 IP。
    • 代码示例
      1
      2
      server_ip = "192.168.x.x" # 替换为实际IP
      server_port = 12346
  3. 防火墙设置:确保服务端防火墙允许该端口通信(不建议直接关闭防火墙,建议添加入站规则)。
  4. 执行与抓包:仿照任务一的步骤进行文件传输并抓包分析。

3. TCP 实验思考题

请结合 Wireshark 的抓包截图和导出数据,回答以下问题:

基础分析:

  1. 在任务一(本地回环)中,客户端发送数据的端口是多少?这个端口是谁决定的?
  2. 在任务二(局域网)中,服务端和客户端的 IP 地址和端口号分别是什么?
  3. 为什么在任务一中不需要设置防火墙端口通行权限?
  4. 在任务二中,用于初始化 TCP 连接的 SYN 报文段序号(Sequence Number)是多少?在报文中哪个字段表明这是一个 SYN 报文?
  5. 前 6 个 TCP 报文段的长度各自是多少?
  6. 在跟踪文件中,是否存在重传的报文段?你需要检查哪里来确认这一点?
  7. 接收方在一个 ACK 中通常确认多少数据?你能观察到“每隔一个报文段确认一次”的情形吗?
  8. 该 TCP 连接的吞吐量(Bytes/Time)是多少?请解释计算方法。

进阶分析(TCP 拥塞控制):
使用 Wireshark 的 统计 -> TCP流图形 -> 图形序列 (Stevens) 功能生成图表,回答:

  1. 观察序列号-时间图,你如何判断 TCP 慢启动 (Slow Start) 的开始和结束?拥塞避免在什么地方开始起作用?(注:实际图像可能与教材的理想模型不同,请分析差异)。
  2. 总结本次实验抓取的 TCP 数据与教材中学习的理想情况有何不同?

第二部分:HTTP 协议抓包分析

1. 实验准备与环境

  • 环境搭建
    1. code 为根目录打开命令行。
    2. 安装依赖:pip install flask
    3. 启动简易服务器:运行 python app.py
  • 浏览器设置:每次实验前请务必清空浏览器缓存

2. 实验内容与步骤

任务一:基本 HTTP GET/Response 交互

  1. 启动 Wireshark 开始抓包。
  2. 浏览器访问:http://127.0.0.1:8080/step_1
  3. 停止抓包并使用过滤器 http 查看数据。
  4. 分析要求
    • 你的浏览器运行的是 HTTP 1.0 还是 1.1?服务器用的是什么版本?
    • 服务器返回的状态代码(Status Code)是什么?
    • HTML 文件在服务器上的最后修改时间(Last-Modified)是什么?
    • 传回的内容大小(Content-Length)是多少 Bytes?

任务二:获取较长的 HTML 文件

  1. 清空缓存,开始抓包。
  2. 浏览器访问:http://127.0.0.1/step_2 (注意端口,若 app.py 默认则可能为 8080,请依据实际运行提示)。
  3. 该页面包含较长文本,会触发 TCP 分段传输。
  4. 分析要求
    • 浏览器发送了多少个 HTTP GET 请求?
    • 该 HTTP Response 数据包被拆分成了多少个 TCP 段来传送?
    • 状态代码是什么?

任务三:获取有嵌入对象的 HTML 文件

  1. 清空缓存,开始抓包。
  2. 浏览器访问:http://127.0.0.1/step_3
  3. 该页面包含两个图片链接,浏览器需自动获取这些嵌入对象。
  4. 分析要求
    • 浏览器向服务器发送了多少个 HTTP GET 请求?这些请求的目的网址分别是什么?
    • 这两个图片是串行下载还是并行下载的?请结合抓包的时间戳进行解释。

实验报告要求

  1. 数据支撑:回答所有思考题时,必须提供 Wireshark 的截图或导出的数据包内容作为证据。
  2. 注释说明:在截图中对关键字段(如 SYN 标记、序列号、ACK 号等)进行标注和解释。
  3. 打印输出:建议使用 Wireshark 的 文件 -> 打印 -> Output to file 功能导出关键数据包详情,附在报告中。

实验报告


Author: linda1729
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source linda1729 !
评论
  TOC