【JavaEE】-- 網絡原理

文章目錄

  • 1. 網絡發展史
    • 1.1 廣域網
    • 1.2 局域網
  • 2. 網絡通信基礎
    • 2.1 IP地址
    • 2.2 端口號
    • 2.3 認識協議
    • 2.4 五元組
    • 2.5 協議分層
      • 2.5.1 分層的作用
      • 2.5.2 OSI七層模型(教科書)
      • 2.5.3 TCP/IP五層(或四層)模型(工業中常用,行業中常說)
    • 2.6 封裝和分用

在這里插入圖片描述

1. 網絡發展史

1.1 廣域網

廣域網,即WideArea Network,簡稱WAN。通過路由器,將多個局域網連接起來,在物理上組成很大范圍的網絡,就形成了廣域網。廣域網內部的局域網都屬于其子網。
在這里插入圖片描述
如果有北、中、南等分公司,甚至海外分公司,把這些分公司以專線方式連接起來,即稱為“廣域網”。如果屬于全球化的公共型廣域網,則稱為互聯網(又稱公網,外網),屬于廣域網的一個子集。有時在不嚴格的環境下說的廣域網,其實是指互聯網。所謂“局域網”和"廣域網”只是一個相對的概念。比如,我們有"天朝特色”的廣域網,也可以看做一個比較大的局域網。

1.2 局域網

局域網,即LocalAreaNetwork,簡稱LAN。Local即標識了局域網是本地,局部組建的一種私有網絡。局域網內的主機之間能方便的進行網絡通信,又稱為內網;局域網和局域網之間在沒有連接的情況下,是無法通信的。

局域網組建網絡的方式有很多種:

  1. 基于網線直連
    在這里插入圖片描述

  2. 基于集線器組建
    在這里插入圖片描述

  3. 基于交換機組建
    在這里插入圖片描述
    可以實現對所有計算機設備的數據轉發,在內網中實現組網,主要用在公司內部。

  4. 基于交換機和路由器組建
    在這里插入圖片描述
    通過路由可以連接互聯網(廣域網),獲取一個公網IP。

在公司和家庭中很常見,路由器下面可以連接多個交換機。

路由:可以理解為一個地方到另一個地方的路徑。但是路徑有多條,有路程最短的、用時最短的、最通暢的、成本最低的。例如:從北京到上海的快遞可能有多種路線,路由器類似“中轉站”負責選擇最快或最經濟的路徑。

2. 網絡通信基礎

2.1 IP地址

概念: IP地址主要用于標識網絡主機、其他網絡設備(如路由器)的網絡地址。簡單說,IP地址用于定位主機的網絡地址。就像我們發送快遞一樣,需要知道對方的收貨地址,快遞員才能將包裹送到目的地。

格式: IP地址是一個32位的二進制數,通常被分割為4個“8位二進制數”(也就是4個字節,也就是相當于一個整形的大小,42億左右),如:01100100.00000100.00000101.00000110。
我們把這種表示稱為IPv4,但是,隨著網絡設備越來越多,42億個IP就不夠了,升級成了IPv6。
通常用“點分十進制”的方式來表示,即a.b.c.d的形式(a,b,c,d都是0~255之間的十進制整數)如:100.4.5.6。

在這里插入圖片描述

2.2 端口號

概念: 在網絡通信中,IP地址用于標識主機網絡地址,端口號可以標識主機中發送數據、接收數據的進程。簡單說:端口號用于定位主機中的進程。

類似發送快遞時,不光需要指定收貨地址(IP地址),還需要指定收貨人(端口號)。

格式: 端口號是0~65535范圍的數字,在網絡通信中,進程可以通過綁定一個端口號,來發送及接收網絡數據。

如果是服務提供方就需要一個確定的端口號(比如MySQL服務端的端口號默認是3306),如果是客戶端的話系統會隨機分配一個端口號。1 ~ 1024是知名端口號,比較有名的程序已經占用了的端口號,比如web程序用的80,FTP用的21。1025 ~ 65535這個范圍內可以隨便指定,原則就是一臺主機上的端口號不能在不同的網絡程序之間沖突。

**問題:**有了IP地址和端口號,可以定位到網絡中唯一的一個進程,但還存在一個問題,網絡通信是基于二進制0/1數據來傳輸,如何告訴對方發送的數據是什么樣的呢?網絡通信傳輸的數據類型可能有多種:圖片,視頻,文本等。同一個類型的數據,格式可能也不同,如發送一個文本字符串“你好!”:如何標識發送的數據是文本類型,及文本的編碼格式呢?
基于網絡數據傳輸,需要使用協議來規定雙方的數據格式。

2.3 認識協議

概念: 協議,網絡協議的簡稱,網絡協議是網絡通信(即網絡數據傳輸)經過的所有網絡設備都必須共同遵從的一組約定、規則。如怎么樣建立連接、怎么樣互相識別等。只有遵守這個約定,計算機之間才能相互通信交流。協議(protocol)最終體現為在網絡上傳輸的數據包的格式。

2.4 五元組

在TCP/IP協議中,用五元組來標識一個網絡通信:

  1. 源IP:標識源主機
  2. 源端口號:標識源主機中該次通信發送數據的進程
  3. 目的IP:標識目的主機
  4. 目的端口號:標識目的主機中該次通信接收數據的進程
  5. 協議號:標識發送進程和接收進程雙方約定的數據格式

在這里插入圖片描述
可以在cmd中,輸入netstat -ano查看網絡數據傳輸中的五元組信息:
在這里插入圖片描述

2.5 協議分層

2.5.1 分層的作用

分層最大的好處,類似于面向接口編程:定義好兩層間的接口規范,讓雙方遵循這個規范來對接。在代碼中,類似于定義好一個接口,一方為接口的實現類(提供方,提供服務),一方為接口的使用類(使用方,使用服務):

  1. 對于使用方來說,并不關心提供方是如何實現的,只需要使用接口即可。
  2. 對于提供方來說,利用封裝的特性,隱藏了實現的細節,只需要開放接口即可。
    在這里插入圖片描述

2.5.2 OSI七層模型(教科書)

在這里插入圖片描述
在這里插入圖片描述
OSI七層模型既復雜又不實用:所以OSI七層模型沒有落地、實現。實際組建網絡時,只是以OSI七層模型設計中的部分分層,也即是以下TCP/IP五層(或四層)模型來實現。

2.5.3 TCP/IP五層(或四層)模型(工業中常用,行業中常說)

TCP/IP是一組協議的代名詞,它還包括許多協議,組成了TCP/IP協議簇。

TCP/IP通訊協議采用了5層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。

在這里插入圖片描述
1. 應用層: 和用戶打交道,接收與展示用戶的數據,比如手法快遞的過程中,只關注物品本身。
2. 傳輸層: 完成端到端的傳輸的準備,也就是說確定收發主機的地址和端口號,比如確認快遞的收件人和發件人的地址和電話。
3. 網絡層: 規劃出端到端之間的網絡路徑,路徑中可能會包含中間經過其他的網絡設備,比如快遞運輸過程中可能經過的加油站。
4. 數據鏈路層: 完成點到點之間的傳輸,每個網絡設備之間的傳輸。

5. 物理層: 把真實的BIT數據流通過轉換成光電信號在傳輸介質中傳輸(網線:電信號;光纖:光信號)。

其中四層是指不包含物理層。

2.6 封裝和分用

封裝是指在發送方對數據進行的處理。
分用是指在接收方對數據進行的處理。

下面就以qq發送消息與接收消息的場景為例:
1. 應用層
這一層是由應用程序來實現的,此時對應的就是QQ這個應用程序,應用層主要是確定消息體的內容。

比如現在用戶A要給用戶B發送一個"hello"。下面一個問題就是如何進行數據的組織與解析,這個協議一般是在設計階段就要完成的任務(協議的任務只有程序員知道),現在我們假設協議是:發送方QQ;接收方QQ;發送的內容

那么,我們按照協議規定組織好的數據就是:123456;654321;hello
在這里插入圖片描述

組織好之后,就可以調用系統的API(socket api)進行發送操作,從而信息的處理方移交給下一層。

2. 傳輸層

傳輸層眾多協議中最典型的兩種協議是:TCP協議、UDP協議。我們假設使用TCP協議:

此時我們就接收到消息體,我們把這個消息體稱為載荷
在這里插入圖片描述
此時會在傳輸層根據TCP協議加上一個在載荷頭部加上一個TCP頭,該TCP頭主要確定源端口號和目標端口號,該操作由操作洗頭膏完成們可以知道哪個程序使用了哪個端口號。
在這里插入圖片描述
3. 網絡層
該層會規劃出端到端之間的網絡路徑。

此時當前載荷就變成了:
在這里插入圖片描述

該層會根據IP協議在該載荷頭部加一個IP頭,該IP頭主要確定了元IP地址與目標IP地址,此時就可以確認消息要發送給哪臺主機的哪個進程。
在這里插入圖片描述

如何獲取接收方的IP地址與端口號?
我們在使用QQ時都是需要登錄的,登陸的時候等于向QQ服務器發送了一個請求,然后QQ服務器給了有一個響應,此時QQ服務器就會記錄登陸方的信息類似于key value的形式,比如:(key:QQ123456, value:IP:端口號)。用戶A和用戶B在進行信息傳輸的時候并不是兩臺網絡設備直接進行傳輸的,而是發送方會把信息發送到QQ服務器,服務器根據自己維護的登錄用戶以及對應的IP地址,找到接收方的IP,再把消息轉發給接收方。
在這里插入圖片描述

4. 數據鏈路層
此時的載荷是:在這里插入圖片描述

該層會根據以太協議在當前載荷的頭部和尾部分別加一個幀頭和幀尾。

在這里插入圖片描述

幀頭中存放的是源MAC地址和目標MAC地址;幀尾中存放的是校驗和。

校驗和
發送方通過某種算法(CRC–對每個byte進行累加操作,最終得一個值)對載荷進行運算,得到一個值并保存起來,接收方在收到數據之后,取出載荷以相同的算法進行計算,如果得到的結果與校驗和相同,就表示接收到的載荷與發送的載荷一致,中途沒有被篡改,否則載荷就是無效的。

加入幀頭和幀尾之后,把數據以二進制的形式發送給物理層。

5. 物理層
這一層主要是把具體的數據(報文)轉換成光電信號,通過傳輸介質進行傳輸。

如何通過電信號表示0和1?
高電平表示1(3.5 ~ 5v);低電平表示0(0.1v ~ 0.25v)

6. 物理層
接收到光電信號之后,根據以太網協議把信號轉換成二進制BIT流。
在這里插入圖片描述

然后以二進制的形式交給上一層。

7. 數據鏈路層

該層會解析出幀頭、幀尾和載荷。

確認數據正確之后,會去掉幀頭和幀尾,然后把本層的載荷移交給上一層。

8. 網絡層
在這里插入圖片描述
根據IP協議解析報文,取出載荷交給上一層。

9. 傳輸層
在這里插入圖片描述
根據TCP協議解析報文,取出載荷交給上一層。

10. 應用層
在這里插入圖片描述

按照應用程序解析消息體–發送方QQ:123456;接收方QQ:654321;消息內容:hello.

以上的1-5是發送方,6-10是接收方
發送方的數據從應用層到物理層的過程叫封裝;接收方的數據從物理層到應用層的過程叫分用。

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

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

相關文章

UVa1384/LA3700 Interesting Yang Hui Triangle

UVa1384/LA3700 Interesting Yang Hui Triangle 題目鏈接題意分析AC 代碼 題目鏈接 本題是2006年icpc亞洲區域賽上海賽區的題目 題意 給出素數P和整數N&#xff0c;求楊輝三角第N1行中不能整除P的數有幾個&#xff0c; P < 1000 , N ≤ 10 9 P<1000,\;N≤10^9 P<1000…

文件系統與文件管理:從磁盤到內核的全鏈路解析

一、文件系統&#xff1a;磁盤的 “數據管家” 1.1 硬盤物理結構&#xff1a;數據存儲的硬件基礎 硬盤如同一個多層書架&#xff0c;由以下核心部件構成&#xff1a; 盤片&#xff1a;多層磁性圓盤&#xff0c;正反兩面覆蓋磁性涂層&#xff0c;用于存儲二進制數據&#xff…

HTML5 Canvas 星空戰機游戲開發全解析

HTML5 Canvas 星空戰機游戲開發全解析 一、游戲介紹 這是一款基于HTML5 Canvas開發的2D射擊游戲&#xff0c;具有以下特色功能&#xff1a; &#x1f680; 純代碼繪制的星空動態背景?? 三種不同特性的敵人類型&#x1f3ae; 鍵盤控制的玩家戰機&#x1f4ca; 完整的分數統…

Telegram平臺分發其聊天機器人Grok

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

【GlobalMapper精品教程】095:如何獲取無人機照片的拍攝方位角

文章目錄 一、加載無人機照片二、計算方位角三、Globalmapper符號化顯示方向四、arcgis符號化顯示方向一、加載無人機照片 打開軟件,加載無人機照片,在GLobalmapperV26中文版中,默認顯示如下的航線信息。 關于航線的起止問題,可以直接從照片名稱來確定。 二、計算方位角 …

SpringBoot使用ffmpeg實現視頻壓縮

ffmpeg簡介 FFmpeg 是一個開源的跨平臺多媒體處理工具集&#xff0c;用于錄制、轉換、編輯和流式傳輸音頻和視頻。它功能強大&#xff0c;支持幾乎所有常見的音視頻格式&#xff0c;是多媒體處理領域的核心工具之一。 官方文檔&#xff1a;https://ffmpeg.org/documentation.h…

OpenCv高階(十九)——dlib關鍵點定位

文章目錄 一、什么是人臉關鍵點定位&#xff1f;二、關鍵點模型的下載及關鍵信息的理解三、dlib關鍵點定位的簡單實現&#xff08;1&#xff09;導入必要的庫&#xff08;2&#xff09;從指定路徑讀取圖像文件&#xff08;3&#xff09;創建dlib的正面人臉檢測器對象&#xff0…

人工智能100問?第36問:什么是BERT?

目錄 一、通俗解釋 二、專業解析 三、權威參考 BERT是基于Transformer Encoder的雙向語言預訓練模型,具備強大的語義理解能力,是現代自然語言處理的重要基石。它是一套讓機器像人一樣“前后一起看”的語言理解技術,它讓AI不光“讀得快”,還“讀得懂”。現在很多搜索引擎…

Chrome/ Edge 瀏覽器彈出窗口隱藏菜單地址欄

Chrome 利用快捷方式&#xff0c;打開一個無地址欄的瀏覽器窗口&#xff0c;以百度為例 創建瀏覽器快捷方式&#xff0c;在目標欄里 添加 -apphttps://www.baidu.com 點擊【應用】&#xff0c;【確定】按鈕保存生效。后面通過空上快捷方式打開的瀏覽器沒有地址欄。 Edge瀏覽…

計算機網絡常見體系結構、分層必要性、分層設計思想以及專用術語介紹

計算機網絡體系結構 從本此開始&#xff0c;我們就要開始介紹有關計算機網絡體系結構的知識了。內容包括&#xff1a; 常見的計算機網絡體系結構 計算機網絡體系結構分層的必要性 計算機網絡體系結構的設計思想 舉例說明及專用術語 計算機網絡體系結構是計算機網絡課程中…

【C++】“多態”特性

文章目錄 一、多態的概念二、多態的定義實現1. 多態的構成條件1.1 虛函數1.2 虛函數的重寫 2. 多態的調用3. 虛函數重寫的其他問題3.1 協變3.2 析構函數的重寫 三、override和final關鍵字四、重載/重寫/隱藏的對比五、純虛函數和抽象類六、多態的原理 C的三大主要特性&#xff…

2025.5.27學習日記 linux三劍客 sed與正則表達式

sed是Stream Editor(字符流編輯器)的縮寫,簡稱流編輯器。 sed是操作、過濾和轉換文本內容的強大工具。 常用功能包括結合正則表達式對文件實現快速增刪改查 , 其中查詢的功能中最常用的兩大功能是過 濾 ( 過濾指定字符串)、取行(取出指定行)。 注意sed和awk使用單引號,雙引號…

文科小白學習Linux系統之安全管理

目錄 前言 一、SELinux安全上下文 1、SELinux 簡介 2、基礎操作命令 1. 查看SELinux狀態 2. 切換工作模式 3、安全上下文&#xff08;Security Context&#xff09; 1. 查看上下文 2. 修改上下文 chcon命令 semanage 命令 4、SELinux布爾值&#xff08;Booleans&am…

企業內訓系統源碼開發詳解:直播+錄播+考試的混合式學習平臺搭建

在企業數字化轉型的大潮中&#xff0c;員工培訓早已不再是傳統教室中的一場場“走過場”&#xff0c;而是通過技術驅動的“系統化能力提升”。尤其在知識更新換代加速、競爭壓力日益激烈的背景下&#xff0c;企業越來越傾向于建設自主可控、功能靈活、支持多種學習形態的內訓平…

智能化報銷與精細化管理:購物小票識別系統全面提升企業運營效率

在現代企業管理中&#xff0c;購物小票的處理一直是財務和運營管理中的一項挑戰。尤其在企業費用報銷、會員管理、庫存監控等環節&#xff0c;手動整理與核對小票不僅耗時費力&#xff0c;還容易產生錯誤。隨著人工智能技術的發展&#xff0c;企業亟需一種高效、智能的解決方案…

毫秒級數據采集的極致優化:如何用C#實現高性能、無冗余的實時文件寫入?

在工業控制、通信系統或高頻交易領域&#xff0c;毫秒級數據采集的精度直接決定系統性能。但一個棘手問題常被忽視&#xff1a;如何處理同一毫秒內的重復數據&#xff1f; 若簡單寫入所有數據&#xff0c;會導致文件臃腫、分析效率驟降&#xff1b;若處理不當&#xff0c;又可能…

NLua性能對比:C#注冊函數 vs 純Lua實現

引言 在NLua開發中&#xff0c;我們常面臨一個重要選擇&#xff1a;將C#函數注冊到Lua環境調用&#xff0c;還是直接在Lua中實現邏輯&#xff1f; 直覺告訴我們&#xff0c;C#作為編譯型語言性能更高&#xff0c;但跨語言調用的開銷是否會影響整體性能&#xff1f;本文通過基準…

go并發與鎖之sync.Mutex入門

sync.Mutex 原理&#xff1a;一個共享的變量&#xff0c;哪個線程握到了&#xff0c;哪個線程可以執行代碼 功能&#xff1a;一個性能不錯的悲觀鎖&#xff0c;使用方式和Java的ReentrantLock很像&#xff0c;就是手動Lock&#xff0c;手動UnLock。 使用例子&#xff1a; v…

【HarmonyOS5】DevEco Studio 使用指南:代碼閱讀與編輯功能詳解

?本期內容&#xff1a;【HarmonyOS5】DevEco Studio 使用指南&#xff1a;代碼閱讀與編輯功能詳解 &#x1f3c6;系列專欄&#xff1a;鴻蒙HarmonyOS&#xff1a;探索未來智能生態新紀元 文章目錄 前言代碼閱讀代碼導航功能代碼折疊語法高亮跨語言跳轉代碼查找 快速查閱API接口…

【Python 深度學習】1D~3D iou計算

一維iou 二維 import numpy as npdef iou_1d(set_a, set_b):# 獲得集合A和B的邊界 x1, x2 set_ay1, y2 set_b# 計算交集的上下界low max(x1,y1)high - min(x2, y2)# 計算交集if high - low < 0:inter 0else:inter high - low# 計算并集union (x2 -x1) (y2 - y1) - in…