計算機網絡綜合實驗指南

計算機網絡綜合實驗指南

本實驗將結合《計算機網絡自頂向下》前三章的核心概念,通過實際操作加深對應用層、運輸層和網絡層的理解。實驗涵蓋?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 的流量差異(如多路復用)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77699.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77699.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77699.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【AI部署】騰訊云GPU-RUN—SadTalker的AI數字人視頻—未來之窗超算中心

磁盤空間 創建未來之窗 查看磁盤命令 df -h 指定路徑創建環境 conda create --prefix sadtalker python3.10 指令路徑運行環境 conda activate ./sadtalker 安裝環境 pip install torch1.12.1cu113 torchvision0.13.1cu113 torchaudio0.12.1 --extra-index-url https://…

爬蟲利器SpiderTools谷歌插件教程v1.0.0!!!web端JavaScript環境檢測!!!

SpiderTools谷歌插件教程v1.0.0 一、SpiderTools簡介二、下載通道三、插件介紹四、插件使用五、工具函數使用 補環境工具推薦:爬蟲補環境利器webEnv 一、SpiderTools簡介 SpiderTools主要用于檢測和監控網頁的JavaScript運行環境。該插件可以幫助開發者更好地查看…

Android開發協調布局滑動懸停

Android開發協調布局滑動懸停 直接給個xml,防止下次忘了怎么寫。 <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"x…

Linux學習——TCP

一.TCP編程API 1.socket函數 1.socket函數 include include int socket(int domain,int type,int protocol); 參數 domain AF_INET AF_INET6 AF_UNIX,AF_LOCAL AF_NETLINK AF_PACKET type SOCK_STREAM: 流式…

Linux驅動開發--異步通知與異步I/O

3、異步通知與異步I/O 3.1 Linux信號 阻塞與非阻塞訪問、poll()函數提供了較好的解決設備訪問的機制&#xff0c;但是如果有了異步通知&#xff0c;整套機制則更加完整了。 異步通知的意思是&#xff1a;一旦設備就緒&#xff0c;則主動通知應用程序&#xff0c;這樣應用程序…

大語言模型推理能力的強化學習現狀理解GRPO與近期推理模型研究的新見解

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【Linux系統】Linux基礎指令(詳解Linux命令行常用指令,每一個指令都有示例演示)

文章目錄 一、與文件路徑相關的指令0.補充知識&#xff1a;路徑的認識1.pwd 指令2.cd 指令&#xff08;含家目錄的介紹&#xff09; 二、創建和刪除文件的指令0.補充知識&#xff1a;普通文件和目錄文件1.touch 指令&#xff08;可以修改文件的時間戳&#xff09;2.mkdir 指令3…

LangChain 單智能體模式示例【純代碼】

# LangChain 單智能體模式示例import os from typing import Anyfrom langchain.agents import AgentType, initialize_agent, Tool from langchain_openai import ChatOpenAI from langchain.tools import BaseTool from langchain_experimental.tools.python.tool import Pyt…

解決:VSCode C++ conan 安裝第三方庫后 頭文件報錯

文章目錄 1 頭文件include路徑查找報錯參考 1 頭文件include路徑查找報錯 找到conan_toolchain.cmake中 INCLUDE_PATH list(PREPEND CMAKE_INCLUDE_PATH "/Users/hanliqiang/.conan2/p/b/fmte8c4f7a755477/p/include")生成C編譯配置 CtrlShiftP 中選擇C Edit Confi…

松靈Cobot Magic雙臂具身遙操機器人(基于ROS的定位建圖與協同導航技術)

摘要 本文以CobotMagic可移動協作機器人為研究對象&#xff0c;從硬件架構設計、軟件系統架構、多傳感器融合定位建圖系統、智能導航系統協同機制四個維度&#xff0c;深入解析機器人系統工作原理。重點研究多傳感器融合定位建圖系統實現原理&#xff0c;結合實測數據驗證系統…

回歸,git 分支開發操作命令

核心分支說明 主分支&#xff08;master/production&#xff09;存放隨時可部署到生產環境的穩定代碼&#xff0c;僅接受通過測試的合并請求。 開發分支&#xff08;develop&#xff09;集成所有功能開發的穩定版本&#xff0c;日常開發的基礎分支&#xff0c;從該分支創建特性…

ASP.NET Core 最小 API:極簡開發,高效構建(下)

在上篇文章 ASP.NET Core 最小 API&#xff1a;極簡開發&#xff0c;高效構建&#xff08;上&#xff09; 中我們添加了 API 代碼并且測試&#xff0c;本篇繼續補充相關內容。 一、使用 MapGroup API 示例應用代碼每次設置終結點時都會重復 todoitems URL 前綴。 API 通常具有…

Spring之我見 - Spring Boot Starter 自動裝配原理

歡迎光臨小站&#xff1a;致橡樹 Spring Boot Starter 的核心設計理念是 約定優于配置&#xff0c;其核心實現基于 自動配置&#xff08;Auto-Configuration&#xff09; 和 條件化注冊&#xff08;Conditional Registration&#xff09;。以下是其生效原理&#xff1a; 約定…

精益數據分析(7/126):打破創業幻想,擁抱數據驅動

精益數據分析&#xff08;7/126&#xff09;&#xff1a;打破創業幻想&#xff0c;擁抱數據驅動 在創業的道路上&#xff0c;我們都懷揣著夢想&#xff0c;但往往容易陷入自我編織的幻想中。我希望通過和大家一起學習《精益數據分析》&#xff0c;能幫助我們更清醒地認識創業過…

牛客java練習題

[toc] 1.依賴注入 依賴注入是一種設計模式和編程思想,不依賴 具體的框架實現,可以通過多種方式和框架來實現可以通過Spring , Google Guice , PicoContainer 等都可以實現依賴注入,也可以通過手動編寫實現目的: 為了解耦合,將對象之間的依賴關系從代碼中解耦出來, 使系統更加…

大模型應用開發自學筆記

理論學習地址&#xff1a; https://zh.d2l.ai/chapter_linear-networks/index.html autodl學術加速&#xff1a; source /etc/network_turboconda常見操作: 刪除&#xff1a; conda remove --name myenv --all -y導出&#xff1a; conda env export > environment.yml…

鴻蒙ArkUI實戰之TextArea組件、RichEditor組件、RichText組件、Search組件的使用

本文接上篇繼續更新ArkUI中組件的使用&#xff0c;本文介紹的組件有TextArea組件、RichEditor組件、RichText組件、Search組件&#xff0c;這幾個組件的使用對應特定場景&#xff0c;使用時更加需要注意根據需求去使用 TextArea組件 官方文檔&#xff1a; TextArea-文本與輸…

除了`String`、`StringBuffer` 和 `StringBuilder`之外,還有什么處理字符串的方法?

一、標準庫中的字符串處理類 1. StringJoiner&#xff08;Java 8&#xff09; 用途&#xff1a;用于在拼接字符串時自動添加分隔符、前綴和后綴。示例&#xff1a;StringJoiner sj new StringJoiner(", ", "[", "]"); sj.add("A").…

Qt中讀寫結構體字節數據

在Qt中讀寫結構體字節數據通常涉及將結構體轉換為字節數組(QByteArray)或直接從內存中讀寫。以下是幾種常見方法&#xff1a; 方法1&#xff1a;使用QDataStream讀寫結構體 cpp #include <QFile> #include <QDataStream>// 定義結構體 #pragma pack(push, 1) //…

Windows 10 上安裝 Spring Boot CLI詳細步驟

在 Windows 10 上安裝 Spring Boot CLI 可以通過以下幾種方式完成。以下是詳細的步驟說明&#xff1a; 1. 手動安裝&#xff08;推薦&#xff09; 步驟 1&#xff1a;下載 Spring Boot CLI 訪問 Spring Boot CLI 官方發布頁面。下載最新版本的 .zip 文件&#xff08;例如 sp…