当前位置: 首页 > news >正文

计算机网络综合实验指南

计算机网络综合实验指南

本实验将结合《计算机网络自顶向下》前三章的核心概念,通过实际操作加深对应用层、运输层和网络层的理解。实验涵盖 HTTP/TCP抓包分析DNS解析观察网页性能评估简单Socket编程,帮助你将理论转化为实践。


实验准备

  • 工具

    • Wireshark(下载链接)

    • Chrome 浏览器

    • Python 环境(推荐安装 Python 3.x)

  • 网络环境:确保能访问互联网(如访问 http://example.com)。


实验任务 1:使用 Wireshark 捕获 HTTP/TCP 流量

目标:观察 TCP 三次握手、HTTP 请求/响应、TCP 四次挥手。
步骤
  1. 启动 Wireshark

    • 选择监听的网络接口(如 Wi-Fi)。

    • 设置过滤条件:tcp.port == 80(仅捕获 HTTP 流量)。

    • 点击 蓝色鲨鱼鳍按钮 开始抓包。

  2. 触发 HTTP 请求

    • 打开浏览器,访问 http://example.com

  3. 停止抓包

    • 返回 Wireshark,点击 红色方块按钮 停止捕获。

  4. 分析数据包

    • TCP 三次握手

      • 查找前三个 TCP 包(Flags: SYN → SYN-ACK → ACK)。

      • 点击 SYN 包,查看 Transmission Control Protocol 下的 Sequence Number 和 Acknowledgment Number

    • HTTP 请求/响应

      • 查找 GET / HTTP/1.1 请求包,展开 Hypertext Transfer Protocol 查看请求头。

      • 找到状态码为 200 OK 的响应包,查看响应内容。

    • TCP 四次挥手

      • 过滤 tcp.flags.fin == 1,观察 FIN 和 ACK 包的交互。

验证问题
  1. 三次握手中,Client 和 Server 的初始序列号(ISN)分别是多少?

  2. HTTP 响应包中的 Content-Type 是什么?

  3. 四次挥手中,哪一方先发送了 FIN 包?


实验任务 2:分析 DNS 查询

目标:理解域名解析过程,观察 DNS 协议交互。
步骤
  1. 清空 DNS 缓存(可选)

    • Windows:ipconfig /flushdns

    • macOS/Linux:sudo dscacheutil -flushcache

  2. 捕获 DNS 流量

    • 在 Wireshark 中设置过滤条件:dns

    • 在浏览器中访问一个新域名(如 http://neverssl.com)。

  3. 分析 DNS 数据包

    • 查找 DNS Query 和 DNS Response

    • 展开 Domain Name System,查看查询类型(如 A 记录)、响应 IP 地址。

    • 注意事务 ID(Transaction ID)如何匹配请求与响应。

验证问题
  1. DNS 查询的类型是 A 记录还是 AAAA 记录?

  2. 域名解析耗时多少毫秒?(查看 Time 列)

  3. DNS 响应中返回的 IP 地址是什么?


实验任务 3:使用 Chrome 开发者工具分析网页性能

目标:评估网页加载性能,识别关键耗时阶段。
步骤
  1. 打开 Network 面板

    • Chrome 中按 F12 → 切换到 Network 标签。

    • 勾选 Disable cache(避免缓存干扰)。

  2. 捕获网页加载过程

    • 访问一个复杂网页(如 http://www.nytimes.com)。

    • 观察所有请求的加载顺序和时间线。

  3. 分析性能瓶颈

    • 按 Time 列排序,找到耗时最长的请求。

    • 点击该请求 → 查看 Timing 标签,分析各阶段耗时:

      • Queuing:请求排队时间。

      • DNS Lookup:DNS 查询耗时。

      • Initial connection:TCP 握手 + SSL 握手(HTTPS)。

      • Content Download:下载内容耗时。

验证问题
  1. 页面加载共发起了多少个请求?

  2. 耗时最长的请求是哪种类型(JS、图片、XHR)?

  3. 该请求的 Content Download 阶段耗时多少?


实验任务 4:编写简单的 Socket 程序

目标:体验 TCP/UDP 通信,理解协议差异。
步骤
  1. TCP 客户端/服务端通信

    • 服务端代码(Python)

      python

      import socket
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      s.bind(('0.0.0.0', 8080))
      s.listen()
      conn, addr = s.accept()
      print(f"Connected by {addr}")
      data = conn.recv(1024)
      print(f"Received: {data.decode()}")
      conn.send(b"Hello from server!")
      conn.close()
    • 客户端代码(Python)

      python

      import socket
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      s.connect(('localhost', 8080))
      s.send(b"Hello from client!")
      data = s.recv(1024)
      print(f"Received: {data.decode()}")
      s.close()
    • 运行观察

      • 先启动服务端,再运行客户端,查看控制台输出。

  2. UDP 客户端/服务端通信

    • 服务端代码

      python

      import socket
      s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
      s.bind(('0.0.0.0', 8080))
      data, addr = s.recvfrom(1024)
      print(f"Received from {addr}: {data.decode()}")
      s.sendto(b"Hello from UDP server!", addr)
    • 客户端代码

      python

      import socket
      s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
      s.sendto(b"Hello from UDP client!", ('localhost', 8080))
      data, addr = s.recvfrom(1024)
      print(f"Received: {data.decode()}")
      s.close()
    • 运行观察

      • 注意无需建立连接,直接发送数据。

验证问题
  1. TCP 和 UDP 在代码中有何关键区别?

  2. 如果先启动客户端再启动服务端,TCP 和 UDP 的行为有何不同?

  3. UDP 服务端能否收到客户端消息?为什么?


实验总结与拓展

知识点回顾
  • 应用层:HTTP/DNS 协议格式、网页性能优化。

  • 运输层:TCP 可靠传输机制(握手、挥手)、UDP 无连接特性。

  • 工具使用:Wireshark 抓包、Chrome 开发者工具分析。

拓展挑战
  1. 使用 Wireshark 捕获 HTTPS 流量(需导入浏览器证书)。

  2. 修改 Socket 程序,实现多客户端并发通信(TCP 多线程)。

  3. 分析 HTTP/2 与 HTTP/1.1 的流量差异(如多路复用)。

相关文章:

  • 大模型安全吗?数据泄露与AI伦理的黑暗面!
  • ModuleNotFoundError: No module named ‘vllm.lora.peft_helper‘原因和解决方式
  • C++进阶-多态
  • 【C++ 程序设计】实战:C++ 实践练习题(31~40)
  • sort自定义排序函数tips【C++】
  • 维普期刊(瑞数6)分析
  • Android开发中广播(Broadcast)技术详解
  • rag搭建,是如何进行向量匹配检索的?
  • Transfomer的本质
  • 【Android】Wallpaper学习
  • 博客系统案例练习2-用户注册-redis
  • 数据库知识
  • 电解电容失效分析过程、失效分析报告
  • 450.删除二叉搜索树中的节点
  • 【Vulkan 入门系列】创建交换链、图像视图和渲染通道(四)
  • 【2025面试常问Java八股】AQS介绍(AbstractQueuedSynchronizer 抽象队列同步器)
  • PyCharm使用Anaconda 中的虚拟环境
  • PowerBi如何制作KPI的总览页?
  • 关于AI:记忆、身份和锁死
  • Function calling LLMs 的 MCP:AI开发的双剑合璧
  • 玉渊谭天丨先爆视频再爆订单,美关税影响下企业因短视频火出圈
  • 西藏艺术来到黄浦江畔,“隐秘之门”艺术展外滩三号开幕
  • 人民日报头版:各地扎实开展学习教育,一体推进学查改
  • 南华期货递表港交所,冲刺第二家“A+H”股上市期货公司
  • 美国佛罗里达州立大学发生枪击事件
  • 泰康资产获批设立全资私募基金管理子公司,首期投资规模预计120亿元