“從HTTP到TCP/IP的旅程“-----深入淺出Java Web通信

先放結構圖:在這里插入圖片描述

一、引言:網絡通信就像寄快遞

想象一下我們在網上買了一本書,整個配送過程是這樣的:

  1. 應用層:你在購物網站填好收貨地址(HTTP請求)
  2. 傳輸層:快遞公司把包裹打包,貼上運單號(TCP協議)
  3. 網絡層:包裹根據地址被路由到不同中轉站(IP協議)
  4. 數據鏈路層:每個中轉站確定具體運輸路徑(MAC地址)
  5. 物理層:貨車、飛機等實際運輸工具(電纜、光纖)

Java Web通信的底層原理和這個過程非常相似。

二、Java Web通信的五層模型

Java Web通信基于TCP/IP協議棧,分為五層:

層級作用類比對應Java技術
應用層處理業務邏輯填寫快遞單HTTP協議、Servlet
傳輸層建立可靠連接包裹打包+運單號TCP協議、Socket
網絡層路由尋址確定中轉站路徑IP協議
數據鏈路層物理網絡傳輸每個中轉站的運輸方式Ethernet協議
物理層實際物理傳輸貨車、飛機等電纜、光纖等
三、從HTTP到TCP/IP的封裝過程

讓我們通過一個簡單的Java Web請求,看看數據是如何被層層封裝的。

1. 應用層:HTTP請求
// 一個簡單的Java Servlet處理HTTP請求
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) {// 處理業務邏輯String name = request.getParameter("name");response.getWriter().println("Hello, " + name);}
}

比喻:這就像你在快遞單上填寫了收件人姓名、地址和聯系電話。

2. 傳輸層:TCP協議

Java通過Socket類實現TCP連接:

// 客戶端代碼:建立TCP連接并發送HTTP請求
try (Socket socket = new Socket("example.com", 80)) {OutputStream out = socket.getOutputStream();// 構造HTTP請求String request = "GET /hello?name=World HTTP/1.1\r\n" +"Host: example.com\r\n" +"Connection: close\r\n\r\n";out.write(request.getBytes());// 接收響應InputStream in = socket.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));String line;while ((line = reader.readLine()) != null) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}

比喻:快遞公司把你的快遞單和物品一起打包,貼上運單號,確保包裹能按順序送達。

3. 網絡層:IP協議

Java代碼無需直接操作IP協議,由操作系統內核處理:

// 但我們可以通過Java獲取IP信息
InetAddress address = InetAddress.getByName("example.com");
System.out.println("目標IP: " + address.getHostAddress());
// 輸出:目標IP: 93.184.216.34

比喻:快遞公司根據地址選擇最優路線,比如從北京到上海可能經過南京中轉站。

4. 數據鏈路層和物理層

這兩層由網絡設備和操作系統底層處理,Java代碼無需關心:

  • 數據鏈路層:將IP包封裝成幀(Frame),添加MAC地址
  • 物理層:將幀轉換為電信號或光信號傳輸
四、封裝過程詳解:從代碼到網絡包

當我們在瀏覽器輸入http://example.com/hello?name=World時,實際發生的過程:

  1. 應用層

    • 瀏覽器構造HTTP請求:
      GET /hello?name=World HTTP/1.1
      Host: example.com
      User-Agent: Mozilla/5.0
      ...
      
  2. 傳輸層

    • TCP協議添加頭部信息:
      • 源端口:隨機生成(如54321)
      • 目標端口:80(HTTP默認端口)
      • 序列號:用于保證數據順序
      • 確認號:用于確認數據接收
  3. 網絡層

    • IP協議添加頭部信息:
      • 源IP:客戶端IP(如192.168.1.100)
      • 目標IP:example.com的IP(如93.184.216.34)
      • 協議號:6(表示TCP協議)
  4. 數據鏈路層

    • 添加MAC地址:
      • 源MAC:客戶端網卡MAC地址
      • 目標MAC:網關或路由器的MAC地址
  5. 物理層

    • 轉換為電信號或光信號,通過網絡傳輸
五、常見問題解答
  1. 為什么需要這么多層?
    分層設計的好處是各層獨立發展,比如未來可以用HTTP/3替代HTTP/2,而不需要改變TCP層。

  2. TCP和UDP有什么區別?

    • TCP:可靠連接,像打電話,確保對方收到消息
    • UDP:不可靠連接,像發短信,不保證對方一定收到
  3. Java Web開發中需要手動處理TCP/IP嗎?
    大部分時候不需要。Spring Boot等框架已經封裝了底層細節,我們只需要關注HTTP請求和響應。

六、總結

Java Web通信是一個復雜但有序的過程,從HTTP請求到TCP連接,再到IP路由,最終通過物理網絡傳輸。理解這個過程有助于我們:

  1. 排查網絡問題(如端口被占用、防火墻攔截)
  2. 優化系統性能(如減少HTTP請求、復用TCP連接)
  3. 設計更安全的網絡應用(如防止IP欺騙、端口掃描)

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

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

相關文章

docker build使用代理以實現構建過程中下載Github源碼等操作

在通過Dockerfile構建docker容器的過程中,經常會需要在構建過程中拉取Github上的代碼。當宿主機配好代理,但容器內是一個隔離的環境,若想在容器內訪問,則需再打通容器和宿主機之間的代理配置。 方法一: 若宿主機上的…

Docker 快速搭建一個基于 GPT-Vis 組件的統計圖表生成服務

以下是對工具簡單介紹: 可以在服務端使用 GPT-Vis 統計圖表組件直接渲染成圖片支持Docker一鍵部署,提供統計圖表渲染生成API接口支持多種GPT-Vis支持的組件,包括折線圖、柱形圖、餅圖、面積圖、條形圖、直方圖、散點圖、詞云圖、雷達圖、思維…

hal庫練習1

要求:一個按鍵實現呼吸燈的控制,一個按鍵控制LED燈的閃爍,串口發送數據控制燈的開關 定時器配置 1.選擇需要的定時器2.配置基礎參數(根據時鐘樹給定時器輸入的時鐘)3.打開中斷4.在主函數里打開中斷 定時器掃描按鍵 …

java線程(4)

程序(program) 是為完成制定任務,用某種語言編寫的一組指令的集合.簡單的話說:就是我們寫的代碼. 進程 1.進程是指進行中的程序,比如我們使用QQ,就啟動了一個進程,操作系統就會為該進程分配內存空間,當我們使用迅雷,又啟動了一個進程,操作系統將為迅雷分配新的內存空間. 2、…

02《F8Framework》核心入口 FF8.cs

FF8.cs類是 F8Framework的核心入口 采用單例模式 提供對各個功能模塊的全局訪問 【特點】通過靜態類FF8統一訪問所有功能 1.模塊化設計: 每個功能獨立 通過 ModuleCenter 統一管理 2.懶加載機制: …

【硬件】相機的硬件測試

相機測試 author: Alla Imatest 提供超過 30 種測試項目,主要包括: 1)圖像基礎參數?:MTF(調制傳遞函數)、畸變、均勻性、動態范圍 2)色彩與光學特性?:白平衡誤差、飽和度、gamma …

Profinet與Modbus TCP協議轉換技術:西門子S7-1500(主站)和歐姆龍NJ PLC的高效數據交換

一、項目背景 某大型現代化智慧農業養殖場致力于打造全方位智能化的養殖環境。其養殖系統中,環境監測與調控部分選用了西門子S7-1500PLC作為Profinet協議主站。該PLC憑借強大的運算能力和豐富的功能模塊,能夠精準地采集和處理養殖場內的溫度、濕度、空氣…

希爾伯特變換,實信號轉復信號的FPGA實現思路

希爾伯特變換將實信號轉復信號的原理 將實信號的相位推遲90度后作為復信號的虛部。 錯誤實現方式 實信號經過希爾伯特濾波后得到復信號的虛部,之后直接與實信號組成復信號。而由于濾波器本身會對信號延時,故I路與Q路并不是相差90度,所以此方…

多模態大語言模型演進:從視覺理解到具身智能的技術突破

多模態大語言模型演進:從視覺理解到具身智能的技術突破 多模態大語言模型(MLLMs)正在重塑人工智能的邊界,實現從"看見"到"理解"再到"行動"的全鏈條智能。本文將深入解析蘋果最新多模態研究進展,揭示視覺-語言模型十年演進的技術脈絡,剖析…

window顯示驅動開發—渲染管道

支持 Direct3D 版本 10 的圖形硬件可以使用共享可編程著色器核心進行設計。 GPU) (圖形處理單元可以編程著色器核心,這些著色器核心可以跨構成呈現管道的功能塊進行計劃。 這種負載均衡意味著硬件開發人員不需要使用每種著色器類型,而只需要使用執行呈現…

時序數據庫Apache IoTDB核心技術深度解析

一、引言 ?背景?:5G技術加速了IoT領域的發展,物聯網設備數據的收集、存儲和計算需求日益增長。Apache IoTDB作為一款專為物聯網時序數據設計的軟件系統,在2020年被Apache基金會認可為頂級項目。 二、IoT領域發展趨勢 ?5G與IoT?&#x…

Next.js面試題:API深度解析

Next.js面試題:API深度解析 Next.js 通過 App Router 的引入徹底改變了 Web 開發范式。在這個新時代,深入理解 Next.js 的 API 函數不再只是錦上添花,而是技術面試中的關鍵區分點。這些函數構成了構建高性能、可擴展、現代化 Web 應用的基石…

Docker-MCP quickstart

項目概述 Docker-MCP 是一個 支持mcp的Docker 管理服務器,它允許 客戶端 通過 MCP(Model Control Protocol)接口直接與 Docker 進行交互。該項目提供了一套工具,使 AI 助手能夠創建容器、部署 Docker Compose 、獲取容器日志以及…

git 的變基操作(適合一個功能進行了多次commit提交,提交記錄過多不美觀)

git提交的 commit 的記錄很多,想多個 commit 進行合并,對代碼進行整理,幫助更好的閱讀代碼 IDEA 的操作步驟: 這里,給出你想進行合并的記錄 hash 值,完了點擊“Rebase”進行合并 點擊后,會進行…

【完整源碼+數據集+部署教程】路邊廣告牌實例分割系統源碼和數據集:改進yolo11-SEAMHead

研究背景與意義 研究背景與意義 隨著城市化進程的加快,路邊廣告牌作為重要的商業宣傳媒介,越來越多地出現在城市的各個角落。它們不僅承擔著信息傳播的功能,還對城市的視覺環境產生了深遠的影響。然而,隨著廣告牌數量的激增&…

C++ 中文件 IO 操作詳解

在C中,文件操作是通過流(stream)來實現的。標準庫提供了三種主要的文件流類來處理文件IO操作: ofstream:用于寫入文件(output file stream)ifstream:用于讀取文件(input file stream&#xff0…

第32節 Node.js 全局對象

在Node.js中我們可以直接訪問到全局對象。 這些對象在所有模塊里都是可用的,有些對象不是在全局作用域而是在模塊作用域里,這些情況將在本文的內容中進行介紹。 global {Object} 全局命名空間對象。 在瀏覽器中,全局作用域就是頂級域。如…

Linux文件屬性和權限概述-linux026

Linux文件屬性和權限概述 Linux 系統作為多用戶操作系統,通過文件屬性和權限機制來控制不同用戶對文件和目錄的訪問,從而保證系統的安全性。不同的用戶對同一文件可以有不同的訪問權限,這些權限包括 讀取(read)、寫入…

nuScenes介紹

目標檢測指標 指標內容mAP(mean Average Precision)bev下2d中心點的距離來評價,而不是像2d檢測里用iou來評價mATE(Average Translation Error)中心點的2D歐式距離mASE(Average Scale Error)中心…

帶中斷計數器的UART接收中斷程序 (8259@400H/402H)

1.程序功能 在中斷服務程序中增加了中斷計數器,并在主循環中通過串口輸出中斷次數。 2.驗證 2.1手動觸發8259的IR1,高電平有效 2.2串口接收 3.測試程序 ; You may customize this and other start-up templates; ; The location of this template is…