網絡基礎(協議,地址,OSI模型、Socket編程......)

目錄

一、計算機網絡發展

二、協議

1.認識協議

2.OSI七層模型

3.TCP/IP 五層(或四層)模型

4.協議本質

三、網絡傳輸流程

1.MAC地址

2.協議棧

3.IP地址

IP地址 vs MAC地址

1. 核心區別

2. 具體通信過程類比

3. 關鍵總結

為什么需要兩者?

4.協議棧圖解

Socket編程

1.端口號

2.TCP/UDP協議

3.網絡字節序

4.sockaddr 結構


一、計算機網絡發展

????????計算機作為人類協作的重要工具,其互聯需求天然催生了網絡技術的發展。最初,局部范圍內的連接需求推動了局域網(LAN)的誕生,這些網絡如同散落世界各地的數字節點,滿足著特定區域內的資源共享需求。隨著協作范圍的擴大,跨地域的局域網間產生了交互需求,這種拓撲擴展最終催生了覆蓋更廣域的廣域網(WAN)技術。網絡技術從LAN到WAN的演進,本質上映射著人類協作邊界不斷突破物理空間限制的過程。

????????所謂“局域網”(LAN)和“廣域網”(WAN)只是一個相對的概念. 比如, 我們有 "天朝特色" 的廣域網, 也可以看做一個比較大的局域網。

二、協議

1.認識協議

????????“協議”是一種約定,計算機要進行交流就需要有協議,就像人與人之間要進行交流就需要有語言,而語言、手語、摩斯密碼等這些都是人們的一種約定。

????????計算機之間的傳輸媒介是光信號和電信號. 通過 "頻率" 和 "強弱" 來表示 0 和 1 這樣的信息,?要想傳遞各種不同的信息, 就需要約定好雙方的數據格式

但是只要兩臺主機約定好協議就可以了嗎?

????????并不是的,如果你用頻率表示 01, 我用強弱表示 01, 就好比我用中國話, 你用葡萄牙語一樣, 雖然大家可能遵守的一套通信規則, 但是語言不同, 即是訂好了基本的協議, 也是無法正常通信的。這就需要我們定制一個統一的協議或標準,通常是業界公認或者具有江湖地位的組織或者公司來做這件事情。比如有國際標準化組織IEEE,ISO等。

????????IEEE(電氣和電子工程師協會) :這是一個由計算機和工程領域專家組成的龐大技術組織, 在通信協議領域貢獻突出。 IEEE 制定了全世界電子、 電氣和計算機科學領域 30%左右的標準, 包括 IEEE 802 系列標準, 這些標準涵蓋了從局域網(LAN) 到廣域網(WAN) 等多種網絡技術。

????????ISO(國際標準化組織): ISO 是由多個國家的標準化團體組成的國際組織, 它在開放系統互連(OSI) 模型方面的工作尤為著名。 OSI 模型定義了網絡通信的七層協議結構, 盡管在實際應用中, TCP/IP 協議族更為普遍, 但 OSI 模型仍然在學術和理論研究中占有重要地位。

2.OSI七層模型

協議分層好處

????????協議本質也是軟件, 在設計上為了更好地進行模塊化, 解耦合, 也是被設計成為層狀結構的。

這樣的話,層與層之間互不干擾,一層的改變不會牽扯另一層,可以隨意切換。

????????事實上計算機內部的設備與設備之間也需要交互,同樣需要協議。那么現在開啟你的想象力,計算機之間的通信可以這樣理解:把你的計算機硬件拆成各個小零件,然后你的內存在海南,CPU在東北,磁盤在新疆,它們之間用長長的線連接組成了你的計算機。

???????我的意思是,計算機內部馮·諾伊曼體系本身就是一個網絡結構,網絡通信本地計算機硬件之間的交互沒本質區別,無非就是從非常短的距離變成了超長距離而已。然而距離一旦變長就會遇到很多新的問題,而協議就是用來解決這些問題的。

如何處理數據?應用層...
數據丟了怎么辦??傳輸層
怎么定位目標主機?網絡層
怎么解決當下要去哪里?數據鏈路層...

3.TCP/IP 五層(或四層)模型

TCP/IP 是一組協議的代名詞, 它還包括許多協議, 組成了 TCP/IP 協議簇。
TCP/IP 通訊協議采用了 5 層的層級結構, 每一層都呼叫它的下一層所提供的網絡來完成自己的需求。

  • 物理層: 負責光/電信號的傳遞方式. 比如現在以太網通用的網線(雙絞 線)、 早期以太網采用的的同軸電纜(現在主要用于有線電視)、 光纖, 現在的 wifi 無線網使用電磁波等都屬于物理層的概念。 物理層的能力決定了最大傳輸速率、 傳輸距離、 抗干擾性等. 集線器(Hub)工作在物理層。
  • 數據鏈路層: 負責設備之間的數據幀的傳送和識別. 例如網卡設備的驅動、 幀同步(就是說從網線上檢測到什么信號算作新幀的開始)、 沖突檢測(如果檢測到沖突就自動重發)、 數據差錯校驗等工作. 有以太網、 令牌環網, 無線 LAN 等標準.,交換機(Switch)工作在數據鏈路層。
  • 網絡層: 負責地址管理和路由選擇. 例如在 IP 協議中, 通過 IP 地址來標識一臺主機, 并通過路由表的方式規劃出兩臺主機之間的數據傳輸的線路(路由). 路由器(Router)工作在網路層。
  • 傳輸層: 負責兩臺主機之間的數據傳輸. 如傳輸控制協議 (TCP), 能夠確保數據可靠的從源主機發送到目標主機。
  • 應用層: 負責應用程序間溝通, 如簡單電子郵件傳輸(SMTP) 、 文件傳輸協議(FTP) 、 網絡遠程訪問協議(Telnet) 等. 我們的網絡編程主要就是針對應用層。
    ?

????????在傳輸層最出名的協議是TCP,網絡層最出名的協議是IP,所以把這個模型叫作TCP/IP模型。

4.協議本質

????????主機之間雖然系統可能不同,但它們的協議棧都是嚴格按標準實現的,所以它們可以互相通信。

? ? ? ? 協議的本質是結構體,系統之間使用相同的結構體,約定好各個字段的含義,那么數據從哪里來到哪里去,要怎么用,它們都能看懂。這就像一個快遞單。

注:網絡通信貫穿了整個操作系統。

三、網絡傳輸流程

????????局域網(Local Area Network, LAN)是指覆蓋范圍較小(如家庭、辦公室、校園等)的網絡,其核心特點是高帶寬、低延遲和私有管理。

????????局域網發展是從計算機之間在小區域上的合作,最初幾乎每個區都有自己的協議,隨著網絡的發展很多區域之間也需要合作,那就需要統一的協議,所以有很多的協議都被淘汰,只有少部分被保留下來,如以太網,令牌環網,無線LAN等。

這里所指的協議都是在數據鏈路層的,接下來以以太網為例,給大家講解數據的傳輸。

以太網這個名字的由來

????????19世紀,科學家們覺得宇宙里必須有一種介質叫“以太”,光才得以傳播,就像聲音傳播必須有介質一樣。結果后來一群科學家一拍大腿:“這玩意兒根本不存在!”(邁克耳遜-莫雷實驗室錘打臉)。但“以太”這詞兒沒退休,反而被程序員薅走了羊毛,計算機科學家弄出來局域網通信標準后給它起名為以太網,內涵一下物理圈。

1.MAC地址

????????MAC地址是用來標識計算機的唯一性,用48比特位儲存,被寫死在計算機網卡中,是全球唯一的。

????????如上是主機之間在數據鏈路層的通信,在一個局域網內主機A給主機E發數據,這個過程所有的主機都能看到(叫泛洪),但只有跟目標MAC值相同的才會去接收,其他主機相當于吃瓜群眾。一個主機去接收不是發給自己的數據,這個過程就叫抓包。

那么試想一下如果很多臺主機一起發數據會發生什么?所以

  • 以太網中,任何時刻,只允許一臺機器向網絡發送數據。
  • 如果多臺同時發送,會發生數據干擾,稱之為數據碰撞。
  • 沒有交換機的情況下,一個以太網就是一個碰撞域。
  • 所有發送數據的主機要進行碰撞檢測和碰撞避免。

所以這也是一個網用的人越多就越卡的原因。以太網本質就是共享資源,具有互斥屬性

2.協議棧

主機之間通信本質是協議棧在通信,我們把各主機都看做協議棧。

????????數據在走過每一層時都需要添加當層特有的字段,稱為報頭,除報頭外的稱為有效載荷,即

  • 報文=報頭+有效載荷

????????注意:有效載荷是指該層的報頭除外的部分,因為該層并不關心前面幾層加了什么報頭,都看做一塊數據。

如下:

在不同層報文有不同的名稱:

  • 數據鏈路層:數據幀。
  • 網絡層:數據報。
  • 傳輸層:數據段。
  • 應用層:請求與應答。

細節1:

對于應用層協議除外的所有協議,要滿足以下兩點:

  • 報頭要能做到和有效載荷分離的能力。
  • 報頭中必須包含如何將自己的有效載荷交付給上一層的具體協議。

細節2:

  • 主機在數據鏈路層判斷報文是否發給自己,不是就直接丟棄。

細節3:

  • 如上,整個數據的封裝與解包的過程,相當于入棧與出棧。所以我想大家知道為什么叫協議了吧!

3.IP地址

????????IP地址分為IPv4和IPv6,用來標識計算機的唯一性,同樣是全球唯一的,IPV4是4字節的空間,即2^32次方,隨著全球的人數不斷增加,IP地址開始不夠用,后來我國推出了IPV6為16字節空間,但要推廣的全世界仍然是一個難題。

? ? ? ? 我想大家現在會很疑惑,剛才不是講了一個MAC地址是標識計算機的唯一性嗎,現在怎么又來一個IP地址標識計算機的唯一性?

IP地址 vs MAC地址

1. 核心區別
  • IP地址:負責全局尋址,標識通信的起點(源)和終點(目標),類似“出發地”和“最終目的地”。

    • 例子:唐僧從東土大唐(源IP)出發,最終目標是西天(目標IP),這兩個地址在整個旅程中不變。

  • MAC地址:負責局部尋址,標識每一段路程的直接上一站和下一站,類似“當前驛站”和“下一個驛站”。

    • 例子:從東土大唐到高老莊,再到流沙河……每一段的起點和終點MAC地址都會變化。

2. 具體通信過程類比

假設唐僧取經的路線是:
東土大唐 → 高老莊 → 流沙河 → 火焰山 → 西天

通信階段IP地址MAC地址(當前跳)解釋
出發時源:東土大唐
目標:西天
源MAC:大唐
目標MAC:高老莊
唐僧離開大唐時,只需知道第一站是高老莊(MAC地址指向直接下一站)。
到達高老莊后源:東土大唐
目標:西天
源MAC:高老莊
目標MAC:流沙河
高老莊的人告訴他下一站是流沙河,MAC地址更新為新的“局部起點和終點”。
到達流沙河后源:東土大唐
目標:西天
源MAC:流沙河
目標MAC:火焰山
流沙河的河神指引他去火焰山,MAC地址再次更新。
……(IP始終不變)(MAC逐段更新)直到最終抵達西天。
3. 關鍵總結
  • IP地址:像“終極目標”,全程不變(唐僧始終牢記要去西天)。

  • MAC地址:像“路標”,每到一個新地方就問:“下一站怎么走?”(MAC地址動態更新,確保每一步不迷路)。

  • 網絡通信:數據包像唐僧,IP決定最終去向,MAC決定如何走到下一跳(路由器或交換機)。


MAC地址IP地址
物理地址,固化在硬件中邏輯地址,可動態分配
用于同一局域網內的直接通信用于跨網絡的路由通信
數據鏈路層(OSI第二層)網絡層(OSI第三層)

為什么需要兩者?

  • IP地址是邏輯上的全局定位,但實際網絡中數據包需要經過多個設備(路由器、交換機),這些設備之間需要通過MAC地址在本地網絡中準確傳遞數據。

  • 就像唐僧不能直接“瞬移”到西天,必須依賴每一站的指引(MAC地址),而IP地址保證他最終不會走偏。

4.協議棧圖解

????????如上圖,數據在網絡層添加報頭時帶有源IP和目標IP,在數據鏈路層發現目標IP不是不是局域網內IP,然后添加MAC目標地址為路由器。傳輸到路由器后,路由器解包,分析目標IP后重新封裝,即加報頭,此時傳到另一個局域網,注意它封裝的這個報頭的協議已經不是原來局域網用的協議了,而是新局域網用的協議。

? ? ? ? 所以局域網之間盡管用不同的協議也無所謂,在路由器這里會進行重新封裝。從另一層面也說明了為什么有MAC地址還要在網絡層加IP地址好處,它讓世界的所有網絡都是 IP 網絡
,屏蔽最底層網絡的差異。

Socket編程

1.端口號

????????我們上網本質就是做兩臺主機的交互,一個是本地,一個是遠端,即客戶端與服務器。但是一個主機上客戶端是有很多的,比如:QQ,微信,抖音,愛奇藝等。服務器同樣有很多,QQ,微信,王者榮耀等。

? ? ? ? 所以一個數據傳輸到目標主機還不夠,還要把數據送入正確的服務器或客戶端。

服務器和客戶端的本質是什么?是一個程序,即進程。所以數據發送除了需要目標主機還需要目標進程。也就有了端口號用來標記一個主機內的唯一進程,端口號即port。

總結:IP+port可以確定全球唯一的進程。

  • 細節1:一個進程可以綁定多個端口號; 但是一個端口號不能被多個進程綁定。。
  • 細節2:雖然進程里面有進程ID標識進程唯一性,但進程 ID 屬于系統概念,?用它來標識唯一性會讓系統進程管理和網絡強耦合, 實際設計的時候,并沒有選擇這樣做。

端口號是多少字節,怎么分配的?

????????端口號在TCP/IP協議中是一個16位無符號整數,占用2字節,取值范圍為?0~65535(即?12^16?1)

????????一個主機內的進程是有生命周期的,這也決定了端口號是動態綁定的。可以由系統隨機分配和綁定,也可以有程序員自己綁定。但端口號0~1023是知名端口,不可以由我們把它綁定到進程,就像我們不能把110、120、119作自己的電話號碼一樣。只有1023以后才能有我們綁定。

2.TCP/UDP協議

在傳輸層有TCP/UDP協議,我們先做簡單了解,它們的特性如下:

特性TCPUDP
連接性面向連接(需三次握手建立連接)無連接(直接發送數據)
可靠性數據可靠傳輸(確認、重傳、校驗)不保證可靠性(可能丟包、亂序)
傳輸效率低(因額外控制機制)高(無復雜控制流程)
數據邊界字節流(無固定邊界)數據報(保留發送邊界)

3.網絡字節序

????????在計算機中并沒有規定在儲存一個數據時是把高位儲存在地址還是低地址,所以就有了大端機和小端機,小端是低地址存放低位,巧記“小”“小”“小”,其他情況為大端機。

? ? ? ? 在網絡通信,即計算機之間要進行交互,就需要解決一個存儲方式不一致問題,統一規定使用大端存儲,即網絡字節序,在計算機把數據丟入網絡前要把數據轉化為大端模式。

網絡字節序=大端模式。

4.sockaddr 結構

sockaddr 結構是網絡編程中用于表示套接字地址的通用數據結構。

它既可以用做網絡通信,可以用作本地通信。它的實現具有多態的性質。如下:

????????sockarr_in是網絡通信的套接字,socket_un是本地通信的套接字。類型轉化為sockaddr后通過頭16位地址判斷出類型。

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

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

相關文章

生成式AI對話中提示詞策略:明確問題、明確目標和提供背景信息是最有效的策略

生成式AI對話中提示詞策略:明確問題、明確目標和提供背景信息是最有效的策略 最有效的提示詞策略包括明確問題、明確目標和提供背景信息。普適性有效提示詞策略可分為三類:明確需求與精確指引型、清晰解釋與邏輯排序型、拆解任務與多樣化表達型。[局限]數據來源于中國用戶,…

AtCoder ABC402 ABCD

A - CBC 把大寫字母按順序連起來 B - Restaurant Queue 一眼隊列,stl模擬就行 C - Dislike Foods 顯然,每次克服暴力枚舉每個菜肴會超時。 然而題目中給了每個菜肴的配菜個數,不妨換過來統計每個配菜用在了哪些菜肴。每次克服時&#x…

Transformer 架構 - 解碼器 (Transformer Architecture - Decoder)

歡迎回到我們的 Transformer 系列教程!在上一篇中,我們詳細探討了 Transformer 的編碼器,它負責將輸入的源序列(比如源語言句子)轉換為一系列包含豐富上下文信息的向量表示。 現在,我們將把目光投向 Transformer 的另一半——解碼器 (Decoder)。解碼器負責接收編碼器的輸…

神經網絡與模型訓練過程筆記

1.專有名詞 ANN 人工神經網絡,一種受生物神經元啟發的監督學習算法。輸入數據通過網絡中的層級函數傳遞,激活特定神經元。函數復雜度越高,模型對數據的擬合能力越強,預測精度越高。 偏置項 其中x下表從1開始的是輸入變量&#xf…

【計算機網絡 | 第二篇】常見的通信協議(一)

HTTP和HTTPS有什么區別? 端口號:HTTP默認是80端口,HTTPS默認是443。 URL前綴:HTTPHTTP 的 URL 前綴是 http://,HTTPS 的 URL 前綴是 https://。 安全性和資源消耗:HTTP協議運行在TCP上,都是明…

【python實用小腳本系列】用 Python 自己手搓一個給視頻“靜音”的小腳本,批量處理,輕松高效制作“無聲電影”!

嘿,小伙伴們!今天我來給大家介紹一個超實用的 Python 小工具——一個能給視頻“靜音”的“聲音消除器”!是不是聽起來很酷?想象一下,你可以把任何有聲視頻變成無聲視頻,是不是很有趣?接下來&…

【gpt生成-總覽】怎樣才算開發了一門編程語言,需要通過什么測試

開發一門真正的編程語言需要經歷完整的設計、實現和驗證過程,并通過系統的測試體系驗證其完備性。以下是分階段開發標準及測試方法: 一、語言開發核心階段 1. 語言規范設計(ISO/IEC 標準級別) ??語法規范??:BNF/…

leetcode222 完全二叉樹的節點個數

完全二叉樹 的定義如下:在完全二叉樹中,除了最底層節點可能沒填滿外,其余每層節點數都達到最大值,并且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層(從第 0 層開始),則該層…

若依集成BladeX單點登錄的令牌管理與api請求流程

目錄 概述系統架構單點登錄流程令牌管理機制接口調用流程關鍵代碼實現數據結構安全性考慮常見問題與解決 概述 本文檔詳細說明若依系統如何實現與BladeX的單點登錄集成,包括令牌管理和接口調用的完整流程。整個集成采用基于OAuth2的授權碼流程,允許用…

《AI大模型應知應會100篇》第27篇:模型溫度參數調節:控制創造性與確定性

第27篇:模型溫度參數調節:控制創造性與確定性 摘要 在大語言模型的使用中,“溫度”(Temperature)是一個關鍵參數,它決定了模型輸出的創造性和確定性之間的平衡。通過調整溫度參數,您可以根據任…

愛普生SG2520VGN差分晶振5G基站的時鐘解決方案

在 5G 通信時代,數據流量呈爆發式增長,5G 基站作為信號的核心中轉樞紐,承載著前所未有的數據傳輸與處理重任。從海量的物聯網設備連接,到高速移動用戶的數據交互,每一個環節都對基站的性能提出了嚴苛要求。而精準穩定的…

GitHub SSH連接終極解決方案

GitHub SSH連接終極解決方案:443端口修改多場景故障排查指南 一、問題現象速查 當開發者執行以下命令時出現連接異常: ssh -T gitgithub.com常見報錯類型: 經典端口阻塞ssh: connect to host github.com port 22: Connection refused密鑰驗…

面向新一代擴展現實(XR)應用的物聯網框架

中文標題: 面向新一代擴展現實(XR)應用的物聯網框架 英文標題: Towards an IoT Framework for the New Generation of XR Applications 作者信息 Joo A. Dias,UNIDCOM - IADE,歐洲大學,里斯本&…

Qt unknown module(s) in qt:serialport解決方法

在Ubuntu和CentOS系統中,若使用Qt時遇到Unknown module(s) in QT: serialport錯誤,通常是由于未正確安裝Qt的串口模塊(QSerialPort)或項目配置不當導致。以下是針對兩種系統的解決方案: 一、安裝Qt串口模塊 1. Ubuntu/Debian系列 安裝開發包: 執行以下命令安裝Qt5串口模…

閥門軸承電動車工件一鍵精修軟件

若需定制開發“ComfyUI意見精修軟件” 技術棧建議: 前端:React/Vue Figma插件API(直接讀取設計稿)。 后端:Node.js/Python NLP庫(spaCy/NLTK)。 數據庫:MongoDB(存儲…

chapter32_SpringMVC與DispatcherServlet

一、簡介 從本章節開始進入SpringMVC的學習,SpringMVC最重要的類就是DispatcherServlet DispatcherServlet的本質是一個Servlet,回顧一下Servlet JavaWeb就是基于Servlet的Servlet接口有5個方法Servlet實現類是HttpServlet,自定義的Servle…

《Learning Langchain》閱讀筆記3-基于 Gemini 的 Langchain如何從LLMs中獲取特定格式

純文本輸出是有用的,但在某些情況下,我們需要 LLM 生成結構化輸出,即以機器可讀格式(如 JSON、XML 或 CSV)或甚至以編程語言(如 Python 或 JavaScript)生成的輸出。當我們打算將該輸出傳遞給其他…

中間件--ClickHouse-12--案例-1-日志分析和監控

1、案例背景 一家互聯網公司需要實時分析其服務器日志、應用日志和用戶行為日志,以快速發現潛在問題并優化系統性能。 2、需求分析 目標:實時分析日志數據,快速發現問題并優化系統性能。數據來源: 服務器日志:如 Ng…

多道程序和多任務操作系統區別

多道程序 vs. 多道任務:對比分析 ? 共同點 方面共同特征核心機制都依賴于進程/任務切換執行需求實現多個程序或任務"并發"執行系統支持都需要操作系統的支持(如調度算法、內存管理)本質目標提高資源利用率(CPU不空轉…

齊次坐標變換+Unity矩陣變換

矩陣變換 變換(transform):指的是我們把一些數據,如點,方向向量甚至是顏色,通過某種方式(矩陣運算),進行轉換的過程。 變換類型 線性變換:保留矢量加和標量乘的計算 f(x)…