?? 歡迎大家來到小傘的大講堂??
🎈🎈養成好習慣,先贊后看哦~🎈🎈
所屬專欄:LInux_st
小傘的主頁:xiaosan_blog制作不易!點個贊吧!!謝謝喵!!
1. 計算機網絡背景
1.1 網絡發展
獨立模式:計算機相互獨立
網絡互聯: 多臺計算機連接在一起, 完成數據共享;
局域網 LAN: 計算機數量更多了, 通過交換機和路由器連接在一起;
廣域網 WAN: 將遠隔千里的計算機都連在一起;
- 計算機是人的工具, 人要協同工作, 注定了網絡的產生是必然的
?
1.2 初識協議
- "協議" 是一種約定.
- 打電話約定電話鈴響的次數的約定
?
計算機之間的傳輸媒介是光信號和電信號. 通過 "頻率" 和 "強弱" 來表示 0 和 1 這樣的信息. 要想傳遞各種不同的信息, 就需要約定好雙方的數據格式.
思考: 只要通信的兩臺主機, 約定好協議就可以了么?
- 定好協議, 但是你用頻率表示 01, 我用強弱表示 01, 就好比我用中國話, 你用葡萄牙語一樣, 雖然大家可能遵守的一套通信規則, 但是語言不同, 即是訂好了基本的協議, 也是無法正常通信的
所以, 完善的協議, 需要更多更細致的規定, 并讓參與的人都要遵守。
- 計算機生產廠商有很多;
- 計算機操作系統, 也有很多;
- 計算機網絡硬件設備, 還是有很多;
- 如何讓這些不同廠商之間生產的計算機能夠相互順暢的通信? 就需要有人站出來, 約定一個共同的標準, 大家都來遵守, 這就是 網絡協議;
1.2.1 定制協議標準的組織或公司主要有以下幾類:
1. 國際標準化組織:
- IEEE(電氣和電子工程師協會):這是一個由計算機和工程領域專家組成的龐大技術組織,在通信協議領域貢獻突出。IEEE制定了全世界電子、電氣和計算機科學領域30%左右的標準,包括IEEE802系列標準,這些標準涵蓋了從局域網(LAN)到廣域網(WAN)等多種網絡技術。
- ISO(國際標準化組織):ISO是由多個國家的標準化團體組成的國際組織,它在開放系統互連(OSI)模型方面的工作尤為著名。OSI模型定義了網絡通信的七層協議結構,盡管在實際應用中,TCP/IP協議族更為普遍,但OSI模型仍然在學術和理論研究中占有重要地位。
- ITU(國際電信聯盟):ITU是聯合國下屬的專門機構,負責制定電信領域的國際標準。ITU-T制定的標準涵蓋了電話和網絡通信,與ISO合作確保了通信技術的全球兼容性和互操作性。
2.?區域標準化組織:
- ETSI(歐洲電信標準學會):由歐洲共同體各國政府資助,是一個由電信行業的廠商與研究機構參加并從事研究開發到標準制定的組織。
- ASTAP(亞洲與泛太平洋電信標準化協會):1998年由日本與韓國發起成立的標準化組織,旨在加強亞洲與太平洋地區各國信息通信基礎設施及其相互連接的標準化工作的協作。
3.?公司:
- 某些公司,如泰凌微,也自研各種標準的軟件協議棧,包括低功耗藍牙、zigbee、thread及Matter等,并可進行定制化改動,這是其核心競爭力之一。泰凌微還計劃重點發展智能電子價簽、智能遙控、智能家居等市場。
4.?民間國際團體:
- IETF(互聯網工程師任務組):這是一個負責開發和推廣互聯網協議(特別是構成TCP/IP協議族的協議)的志愿組織,通過RFC發布新的或者取代老的協議標準。
5.?官方機構:
- FCC(聯邦通信委員會):美國對通信技術的管理的官方機構,主要職責是通過對無線電、電視和有線通信的管理來保護公眾利益。也對包括標準化在內的通信產品技術特性進行審查和監督。
1.3 協議分層
- 協議本質也是軟件, 在設計上為了更好的進行模塊化, 解耦合, 也是被設計成為層狀結構的
軟件分層的好處
- 在這個例子中, 我們的"協議"只有兩層:語言層、 通信設備層。
- 但是實際的網絡通信協議, 設計的會更加復雜, 需要分更多的層
- 但是通過上面的簡單例子, 我們是能理解, 分層可以實現解耦合, 讓軟件維護的成本更低
2. OSi七層協議
- OSI(Open System Interconnection, 開放系統互連) 七層網絡模型稱為開放式系統互聯參考模型, 是一個邏輯上的定義和規范;
- 把網絡從邏輯上分為了 7 層. 每一層都有相關、 相對應的物理設備, 比如路由器, 交換機;
- OSI七層模型是一種框架性的設計方法,其最主要的功能使就是幫助不同類型的主機實現數據傳輸:
- 它的最大優點是將服務、接口和協議這三個概念明確地區分開來,概念清楚,理論也比較完整.通過七個層次化的結構模型使不同的系統不同的網絡之間實現可靠的通訊;
- 但是,它既復雜又不實用;所以我們按照TCP/IP四層模型來講解,
- 其實在網絡角度, OSI 定的協議 7 層模型其實非常完善, 但是在實際操作的過程中, 會話層、 表示層是不可能接入到操作系統中的, 所以在工程實踐中, 最終落地的是 5 層協議。
- 但是要理解上面的話, 需要我們學習完網絡才可以理解, 這里就知道就可以。
?
2.1?TCP/IP五層(或四層)模型
TCP/IP是一組協議的代名詞,它還包括許多協議,組成了TCP/IP協議簇.
TCP/IP通訊協議采用了5層的層級結構,每一層都呼叫它的下一層所提供的網絡來完
成自己的需求.
- 物理層:負責光/電信號的傳遞方式.比如現在以太網通用的網線(雙絞線)、早期以太網采用的的同軸電纜(現在主要用于有線電視)、光纖,現在的wifi無線網使用電磁波等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等.集線器(Hub)工作在物理層.
- 數據鏈路層:負責設備之間的數據幀的傳送和識別.例如網卡設備的驅動、幀同步(就是說從網線上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到沖突就自動重發)、數據差錯校驗等工作.有以太網、令牌環網,無線LAN 等標準.交換機(Switch)工作在數據鏈路層.
- 網絡層:負責地址管理和路由選擇.例如在IP協議中,通過IP地址來標識一臺主機,并通過路由表的方式規劃出兩臺主機之間的數據傳輸的線路(路由).路由器(Router)工作在網路層.
- 傳輸層:負責兩臺主機之間的數據傳輸.如傳輸控制協議(TCP),能夠確保數據可靠的從源主機發送到目標主機.
- 應用層:負責應用程序間溝通,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等.我們的網絡編程主要就是針對應用層.
物理層我們考慮的比較少, 我們只考慮軟件相關的內容. 因此很多時候我們直接稱為TCP/IP 四層模型.
- 對于一臺主機,它的操作系統內核實現了從傳輸層到物理層的內容;
- 對于一臺路由器,它實現了從網絡層到物理層;
- 對于一臺交換機,它實現了從數據鏈路層到物理層;
- 對于集線器,它只實現了物理層;
但是并不絕對. 很多交換機也實現了網絡層的轉發; 很多路由器也實現了部分傳輸層的內容(比如端口轉發);
?
3. 再識協議
3.1 為什么要有TCP/IP 協議?
- 首先, 即便是單機, 你的計算機內部, 其實都是存在協議的, 比如: 其他設備和內存通信, 會有內存協議。 其他設備和磁盤通信, 會有磁盤相關的協議, 比如: SATA, IDE, SCSI 等。 只不過我們感知不到罷了。 而且這些協議都在本地主機各自的硬件中, 通信的成本、 問題比較少。
- 其次, 網絡通信最大的特點就是主機之間變遠了。 任何通信特征的變化, 一定會帶來新的問題, 有問題就得解決問題, 所以需要新的協議咯。
3.2?TCP/IP 協議與操作系統的關系(宏觀上, 怎么實現的)
所以究竟什么是協議?
OS 源代碼一般都是用 C/C++語言寫的。
問題: 主機 B 能識別 data, 并且準確提取 a=10, b=20, c=30 嗎?
回答: 答案是肯定的! 因為雙方都有同樣的結構體類型 struct protocol。 也就是說,用同樣的代碼實現協議, 用同樣的自定義數據類型, 天然就具有”共識“, 能夠識別對方發來的數據, 這不就是約定嗎?關于協議的樸素理解: 所謂協議, 就是通信雙方都認識的結構化的數據類型
因為協議棧是分層的, 所以, 每層都有雙方都有協議, 同層之間, 互相可以認識對方的協議。
4.網絡傳輸基本流程
4.1?局域網網絡傳輸流程圖
4.1.1?局域網(以太網為例)通信原理
- 兩臺主機在同一個局域網, 是否能夠直接通信? 是的
- 每臺主機在局域網上, 要有唯一的標識來保證主機的唯一性: mac 地址
?
4.1.2?認識 MAC 地址
- MAC 地址用來識別數據鏈路層中相連的節點;
- 長度為 48 位, 及 6 個字節. 一般用 16 進制數字加上冒號的形式來表示(例如:08:00:27:03:fb:19)
- 在網卡出廠時就確定了, 不能修改. mac 地址通常是唯一的(虛擬機中的 mac 地址不是真實的 mac 地址, 可能會沖突; 也有些網卡支持用戶配置 mac 地址).
- 以太網中,任何時刻,只允許一臺機器向網絡中發送數據
- 如果有多臺同時發送,會發生數據干擾,我們稱之為數據碰撞
- 所有發送數據的主機要進行碰撞檢測和碰撞避免
- 沒有交換機的情況下,一個以太網就是一個碰撞域
- 局域網通信的過程中,主機對收到的報文確認是否是發給自己的,是通過目標mac 地址判定
- 這里可以試著從系統角度來理解局域網通信原理
初步明白了局域網通信原理,再來看同一個網段內的兩臺主機進行發送消息的過程
而其中每層都有協議, 所以當我進行進行上述傳輸流程的時候, 要進行封裝和解包
下面我們明確一下概念
- 報頭部分, 就是對應協議層的結構體字段, 我們一般叫做報頭
- 除了報頭, 剩下的叫做有效載荷
- 故, 報文 = 報頭 + 有效載荷
?
然后, 我們在明確一下不同層的完整報文的叫法
- 不同的協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報 (datagram),在鏈路層叫做幀(frame).
- 應用層數據通過協議棧發到網絡上時,每層協議都要加上一個數據首部(header),稱為封裝(Encapsulation).
- 首部信息中包含了一些類似于首部有多長,載荷(payload)有多長,上層協議是什么等信息.
- 數據封裝成幀后發到傳輸介質上,到達目的主機后每層協議再剝掉相應的首部,根據首部中的"上層協議字段"將數據交給對應的上層協議處理.
在網絡傳輸的過程中, 數據不是直接發送給對方主機的, 而是先要自定向下將數據交付給下層協議, 最后由底層發送, 然后由對方主機的底層來進行接受, 在自底向上進行向上交付, 下面是一張示意圖
4.1.3.數據包封裝和分用
下圖為數據封裝的過程
下圖為數據分用的過程
4.2?跨網絡傳輸流程圖
4.2.1?網絡中的地址管理-認識IP地址
IP協議有兩個版本,IPv4和IPv6,凡是提到IP協議,沒有特殊說明的,
默認都是指IPv4
- IP地址是在IP協議中,用來標識網絡中不同主機的地址;
- 對于IPv4來說,IP地址是一個4字節,32位的整數;
- 我們通常也使用"點分十進制”的字符串表示IP地址,例如192.168.0.1;用點分割的每一個數字表示一個字節,范圍是0-255;
跨網段的主機的數據傳輸·數據從一臺計算機到另一臺計算機傳輸過程中要經過一個或
多個路由器.
下面是一張示意圖
在同一局域網中,IP地址前部分相同,當我們發現不同時,會先走路由器,在通過路由器前往目標主機
然后結合封裝與解包, 體現路由器解包和重新封裝的特點
對比IP地址和Mac地址的區別
- IP地址在整個路由過程中,一直不變(目前,我們只能這樣說明,后面在修正)
- Mac地址一直在變
- 目的IP是一種長遠目標,Mac是下一階段目標,目的IP是路徑選擇的重要依據,mac 地址是局域網轉發的重要依據
例如:唐僧取經:
東土大唐->西天? ? ?ip地址指向,是長遠目標的
其中路過女兒國,則東土大唐要經過女兒國,然后Mac地址就從女兒國到西天,這是短期目標,會發生變化的
提煉IP網絡的意義和網絡通信的宏觀流程
- IP 網絡層存在的意義:提供網絡虛擬層,讓世界的所有網絡都是IP網絡,屏蔽最底層網絡的差異