網絡協議。

一、流程案例

在這里插入圖片描述

接下來揭秘我要說的大事情,“雙十一”。這和我們要講的網絡協議有什么關系呢?

在經濟學領域,有個倫納德·里德(Leonard E. Read)創作的《鉛筆的故事》。這個故事通過一個鉛筆的誕生過程,來講述復雜的經濟學理論。這里,我也用一個下單的過程,看看互聯網世界的運行過程中,都使用了哪些網絡協議。

你先在瀏覽器里面輸入 https://www.kaola.com ,這是一個URL。瀏覽器只知道名字是“www.kaola.com”,但是不知道具體的地點,所以不知道應該如何訪問。于是,它打開地址簿去查找。可以使用一般的地址簿協議DNS去查找,還可以使用另一種更加精準的地址簿查找協議HTTPDNS。

無論用哪一種方法查找,最終都會得到這個地址:106.114.138.24。這個是IP地址,是互聯網世界的“門牌號”。

知道了目標地址,瀏覽器就開始打包它的請求。對于普通的瀏覽請求,往往會使用HTTP協議;但是對于購物的請求,往往需要進行加密傳輸,因而會使用HTTPS協議。無論是什么協議,里面都會寫明“你要買什么和買多少”。

DNS、HTTP、HTTPS 所在的層我們稱為應用層。經過應用層封裝后,瀏覽器會將應用層的包交給下一層去完成,通過 socket 編程來實現。下一層是傳輸層。傳輸層有兩種協議,一種是無連接的協議UDP,一種是面向連接的協議TCP。對于支付來講,往往使用 TCP 協議。所謂的面向連接就是,TCP 會保證這個包能夠到達目的地。如果不能到達,就會重新發送,直至到達。

TCP 協議里面會有兩個端口,一個是瀏覽器監聽的端口,一個是電商的服務器監聽的端口。操作系統往往通過端口來判斷,它得到的包應該給哪個進程。

傳輸層封裝完畢后,瀏覽器會將包交給操作系統的網絡層。網絡層的協議是 IP 協議。在 IP 協議里面會有源 IP 地址,即瀏覽器所在機器的 IP 地址和目標 IP 地址,也即電商網站所在服務器的 IP 地址。

操作系統既然知道了目標 IP 地址,就開始想如何根據這個門牌號找到目標機器。操作系統往往會判斷,這個目標 IP 地址是本地人,還是外地人。如果是本地人,從門牌號就能看出來,但是顯然電商網站不在本地,而在遙遠的地方。

操作系統知道要離開本地去遠方。雖然不知道遠方在何處,但是可以這樣類比一下:如果去國外要去海關,去外地就要去網關。而操作系統啟動的時候,就會被 DHCP 協議配置 IP 地址,以及默認的網關的 IP 地址 192.168.1.1。

操作系統如何將 IP 地址發給網關呢?在本地通信基本靠吼,于是操作系統大吼一聲,誰是 192.168.1.1 啊?網關會回答它,我就是,我的本地地址在村東頭。這個本地地址就是MAC地址,而大吼的那一聲是ARP協議。

于是操作系統將 IP 包交給了下一層,也就是MAC 層。網卡再將包發出去。由于這個包里面是有 MAC 地址的,因而它能夠到達網關。

網關收到包之后,會根據自己的知識,判斷下一步應該怎么走。網關往往是一個路由器,到某個 IP 地址應該怎么走,這個叫作路由表。

路由器有點像玄奘西行路過的一個個國家的一個個城關。每個城關都連著兩個國家,每個國家相當于一個局域網,在每個國家內部,都可以使用本地的地址 MAC 進行通信。

一旦跨越城關,就需要拿出 IP 頭來,里面寫著貧僧來自東土大唐(就是源 IP 地址),欲往西天拜佛求經(指的是目標 IP 地址)。路過寶地,借宿一晚,明日啟行,請問接下來該怎么走啊?

城關往往是知道這些“知識”的,因為城關和臨近的城關也會經常溝通。到哪里應該怎么走,這種溝通的協議稱為路由協議,常用的有OSPF和BGP。

城關與城關之間是一個國家,當網絡包知道了下一步去哪個城關,還是要使用國家內部的 MAC 地址,通過下一個城關的 MAC 地址,找到下一個城關,然后再問下一步的路怎么走,一直到走出最后一個城關。

最后一個城關知道這個網絡包要去的地方。于是,對著這個國家吼一聲,誰是目標 IP 啊?目標服務器就會回復一個 MAC 地址。網絡包過關后,通過這個 MAC 地址就能找到目標服務器。

目標服務器發現 MAC 地址對上了,取下 MAC 頭來,發送給操作系統的網絡層。發現 IP 也對上了,就取下 IP 頭。IP 頭里會寫上一層封裝的是 TCP 協議,然后將其交給傳輸層,即TCP 層。

在這一層里,對于收到的每個包,都會有一個回復的包說明收到了。這個回復的包絕非這次下單請求的結果,例如購物是否成功,扣了多少錢等,而僅僅是 TCP 層的一個說明,即收到之后的回復。當然這個回復,會沿著剛才來的方向走回去,報個平安。

因為一旦出了國門,西行路上千難萬險,如果在這個過程中,網絡包走丟了,例如進了大沙漠,或者被強盜搶劫殺害怎么辦呢?因而到了要報個平安。

如果過一段時間還是沒到,發送端的 TCP 層會重新發送這個包,還是上面的過程,直到有一天收到平安到達的回復。這個重試絕非你的瀏覽器重新將下單這個動作重新請求一次。對于瀏覽器來講,就發送了一次下單請求,TCP 層不斷自己悶頭重試。除非 TCP 這一層出了問題,例如連接斷了,才輪到瀏覽器的應用層重新發送下單請求。

當網絡包平安到達 TCP 層之后,TCP 頭中有目標端口號,通過這個端口號,可以找到電商網站的進程正在監聽這個端口號,假設一個 Tomcat,將這個包發給電商網站。

電商網站的進程得到 HTTP 請求的內容,知道了要買東西,買多少。往往一個電商網站最初接待請求的這個 Tomcat 只是個接待員,負責統籌處理這個請求,而不是所有的事情都自己做。例如,這個接待員要告訴專門管理訂單的進程,登記要買某個商品,買多少,要告訴管理庫存的進程,庫存要減少多少,要告訴支付的進程,應該付多少錢,等等。

如何告訴相關的進程呢?往往通過 RPC 調用,即遠程過程調用的方式來實現。遠程過程調用就是當告訴管理訂單進程的時候,接待員不用關心中間的網絡互連問題,會由 RPC 框架統一處理。RPC 框架有很多種,有基于 HTTP 協議放在 HTTP 的報文里面的,有直接封裝在 TCP 報文里面的。

當接待員發現相應的部門都處理完畢,就回復一個 HTTPS 的包,告知下單成功。這個 HTTPS 的包,會像來的時候一樣,經過千難萬險到達你的個人電腦,最終進入瀏覽器,顯示支付成功。
在這里插入圖片描述

二、網絡分層

假設你要在網上購買一本書:

  1. 應用層:你打開瀏覽器,訪問網上書店,選擇一本書并下訂單。
  2. 表示層:你的訂單信息可能會被加密,以確保傳輸過程中的安全。
  3. 會話層:你的瀏覽器與書店服務器建立一個會話,確保在整個購物過程中保持連接。
  4. 傳輸層:你的訂單信息被分成多個數據包,每個數據包都會被編號,確保所有數據包能完整地送達書店服務器。負責端到端的通信和數據完整性,常用協議有TCP和UDP
  5. 網絡層:這些數據包通過互聯網,使用IP地址找到書店服務器。
  6. 數據鏈路層:在本地網絡中,這些數據包通過交換機和路由器,使用MAC地址進行傳輸。
  7. 物理層:最終,這些數據包通過物理介質(如網線、光纖或無線信號)傳輸到書店服務器。

三、ifconfig

CIDR(Classless Inter-Domain Routing,無類域間路由) 表示法使用IP地址和一個斜杠后面的數字來表示網絡前綴的長度,例如,192.168.1.0/24表示一個網絡前綴,其中前24位為網絡部分,剩下的8位為主機部分。
10.100.122.2/24,這個 IP 地址中有一個斜杠,斜杠后面有個數字 24。這種地址表示形式,就是 CIDR。后面 24 的意思是,32 位中,前 24 位是網絡號,后 8 位是主機號。

伴隨著 CIDR 存在的,一個是廣播地址,10.100.122.255。如果發送這個地址,所有 10.100.122 網絡里面的機器都可以收到。另一個是子網掩碼,255.255.255.0。

將子網掩碼和 IP 地址進行 AND 計算。前面三個 255,轉成二進制都是 1。1 和任何數值取 AND,都是原來數值,因而前三個數不變,為 10.100.122。后面一個 0,轉換成二進制是 0,0 和任何數值取 AND,都是 0,因而最后一個數變為 0,合起來就是 10.100.122.0。這就是網絡號。將子網掩碼和 IP 地址按位計算 AND,就可得到網絡號。

net-tools和iproute2都是用于管理Linux網絡配置的工具集。

net-tools是一個傳統的網絡工具集,包含一些常見的網絡命令行工具,比如ifconfig, route, netstat等。這些工具在過去被廣泛使用來配置和查看網絡接口、路由表以及網絡狀態信息。例如,使用ifconfig可以查看和配置網絡接口的信息,使用route可以添加和刪除路由條目,使用netstat可以顯示網絡狀態和連接信息。

而iproute2則是一個更新的網絡工具集,它提供了更多現代化的網絡管理工具,比如ip, ss, tc等。其中最常用的是ip命令,它可以用來替代ifconfig和route命令,提供更靈活和強大的網絡配置功能。例如,使用ip命令可以輕松地配置網絡接口、管理路由表、設置策略路由等。

總的來說,iproute2提供了更加靈活和強大的網絡管理工具,推薦在新的Linux系統中使用,而net-tools則是傳統的工具集,逐漸被iproute2取代。

MAC

在 IP 地址的上一行是 link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff,這個被稱為MAC 地址,是一個網卡的物理地址,用十六進制,6 個 byte 表示。
MAC地址更像是身份證,是一個唯一的標識。

MAC 地址是有一定定位功能的,只不過范圍非常有限。你可以根據 IP 地址,找到杭州市網商路 599 號 B 樓 6 層,但是依然找不到我,你就可以靠吼了,大聲喊身份證 XXXX 的是哪位?我聽到了,我就會站起來說,是我啊。但是如果你在上海,到處喊身份證 XXXX 的是哪位,我不在現場,當然不會回答,因為我在杭州不在上海。

網絡設備狀態標識

<BROADCAST,MULTICAST,UP,LOWER_UP>
UP 表示網卡處于啟動的狀態;BROADCAST 表示這個網卡有廣播地址,可以發送廣播包;MULTICAST 表示網卡可以發送多播包;LOWER_UP 表示 L1 是啟動的,也即網線插著呢

四、DHCP與PXE

Linux 首先會判斷,要去的這個地址和我是一個網段的嗎,或者和我的一個網卡是同一網段的嗎?只有是一個網段的,它才會發送 ARP 請求,獲取 MAC 地址。
如果發現不是呢?
Linux 默認的邏輯是,如果這是一個跨網段的調用,它便不會直接將包發送到網絡上,而是企圖將包發送到網關。

DHCP 就是租ip地址

在這個廣播包里面,新人大聲喊:我是新來的(Boot request),我的 MAC 地址是這個,我還沒有 IP,誰能給租給我個 IP 地址!
如果一個網絡管理員在網絡里面配置了DHCP Server的話,他就相當于這些 IP 的管理員。他立刻能知道來了一個“新人”。這個時候,我們可以體會 MAC 地址唯一的重要性了。當一臺機器帶著自己的 MAC 地址加入一個網絡的時候,MAC 是它唯一的身份,如果連這個都重復了,就沒辦法配置了。

只有 MAC 唯一,IP 管理員才能知道這是一個新人,需要租給它一個 IP 地址,這個過程我們稱為DHCP Offer。同時,DHCP Server 為此客戶保留為它提供的 IP 地址,從而不會為其他 DHCP 客戶分配此 IP 地址,這有一個租用期的。

預啟動執行環境(PXE)自動安裝操作系統

首先,啟動 BIOS。這是一個特別小的小系統,只能干特別小的一件事情。其實就是讀取硬盤的 MBR 啟動扇區,將 GRUB 啟動起來;然后將權力交給 GRUB,GRUB 加載內核、加載作為根文件系統的 initramfs 文件;然后將權力交給內核;最后內核啟動,初始化整個操作系統。
PXE 協議分為客戶端和服務器端,由于還沒有操作系統,只能先把客戶端放在 BIOS 里面。當計算機啟動時,BIOS 把 PXE 客戶端調入內存里面,就可以連接到服務端做一些操作了。

PXE的工作過程

PXE 服務器上,往往還有一個 TFTP 服務器
在這里插入圖片描述

什么是initramfs

initramfs(Initial RAM Filesystem,初始內存文件系統)是系統啟動時使用的一個小型的臨時文件系統。它被加載到內存中,并在系統啟動的早期階段提供一些基本的工具和驅動程序,以幫助系統找到并掛載實際的根文件系統(通常是在硬盤上)。

為什么需要initramfs

想象一下,系統啟動過程就像是一個人在黑暗中找東西。initramfs就像是一把手電筒,幫助系統在一開始的時候找到并準備好實際要使用的文件系統。

工作流程

  1. 啟動加載程序

    • 當你打開計算機時,啟動加載程序(比如GRUB)會從硬盤上加載Linux內核和initramfs到內存中。
  2. 解壓initramfs

    • 內核啟動后,會解壓這個臨時文件系統到內存中,里面包含了一些基本的工具和驅動程序。
  3. 運行初始化腳本

    • initramfs里有一些初始化腳本,這些腳本會運行并做一些準備工作,比如加載必要的驅動程序,讓系統能夠識別硬盤和其他設備。
  4. 掛載實際的根文件系統

    • 初始化腳本會找到硬盤上的實際根文件系統(就是平時你操作系統所在的地方),然后把這個根文件系統掛載起來。
  5. 切換到實際根文件系統

    • 一旦實際的根文件系統準備好,系統會把控制權交給這個根文件系統,繼續啟動剩下的操作系統。

總結

initramfs在系統啟動時提供了一個臨時的、最基本的環境,幫助系統加載需要的驅動程序和工具,以便能夠找到并掛載實際的根文件系統,讓操作系統順利啟動起來。

五、

六、

七、

八、

九、

十、

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

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

相關文章

[代碼復現]Self-Attentive Sequential Recommendation(ing)

參考代碼&#xff1a;SASRec.pytorch 可參考資料&#xff1a;SASRec代碼解析 前言&#xff1a;文中有疑問的地方用?表示了。可以通過ctrlF搜索’?。 環境 conda create -n SASRec python3.9 pip install torch torchvision因為我是mac運行的&#xff0c;所以device是mps 下面…

算法(七)插入排序

文章目錄 插入排序簡介代碼實現 插入排序簡介 插入排序&#xff08;insertion sort)是從第一個元素開始&#xff0c;該元素就認為已經被排序過了。然后取出下一個元素&#xff0c;從該元素的前一個索引下標開始往前掃描&#xff0c;比該值大的元素往后移動。直到遇到比它小的元…

Caliburn.Micro框架學習筆記——Action的參數傳遞機制

據此篇文章&#xff0c;我們繼續來談談Caliburn.Mirco的Action參數傳遞機制。因此程序結構都是默認MVVM的形式。 基本機制 它的機制是—— Caliburn.Micro 的智能對象參數綁定機制通過約定和反射使得視圖和視圖模型之間的交互變得更加直觀和簡潔。通過 cal:Message.Attach 語…

【C語言】探索文件讀寫函數的全貌

&#x1f308;個人主頁&#xff1a;是店小二呀 &#x1f308;C語言筆記專欄&#xff1a;C語言筆記 &#x1f308;C筆記專欄&#xff1a; C筆記 &#x1f308;喜歡的詩句:無人扶我青云志 我自踏雪至山巔 &#x1f525;引言 本章將介紹文件讀取函數的相關知識和展示使用場景&am…

vue中如何進行Markdown文檔展示與解析

vue中如何進行Markdown文檔展示與解析 一、安裝插件二、如何使用 需求&#xff1a;接口返回了一個政策詳情頁面&#xff0c;里面有圖片&#xff0c;用v-html展示的是url&#xff0c;所以改用vue-markdown 一、安裝插件 npm install vue-markdown --save二、如何使用 <vue-…

RabbitMQ 如何保證消息不丟失

開啟消息確認機制&#xff1a; 在發布消息時&#xff0c;可以設置deliveryMode為2&#xff08;持久化&#xff09;&#xff0c;以確保消息不會因為RabbitMQ的崩潰而丟失。 使隊列持久化&#xff1a; 通過設置durable為true&#xff0c;可以確保隊列在RabbitMQ重啟后依然存在。…

Python 實戰:打造智能進銷存系統

想象一下&#xff0c;在繁忙的商店里&#xff0c;每天都有數以百計的商品進進出出&#xff0c;庫存在不斷變化&#xff0c;銷售數據涌入&#xff0c;而你卻能輕松應對一切。是的&#xff0c;Python 可以幫你實現這一切。本文將教你如何使用 Python 構建一個智能的進銷存系統&am…

學習記錄-5.30

學習記錄-5.30 同步在我的博客可以來看看 http://www.zhihuigou.top/ ### Golang為什么比別的語言跟擅長并發: 首先是因為Goroutine&#xff0c;算是go的一個最大的特色 是輕量級的線程,創建一個goroutine的開銷非常小,大約幾KB,且調度開銷很低 并且goroutine的調度,并不…

React組件通信——兄弟組件

兄弟組件通信 方法一&#xff1a;狀態提升 子組件先將數據傳遞到父組件&#xff0c;父組件再把數據傳到另一個子組件中。 import { useState } from "react"; // 定義A組件&#xff0c;向B組件發送數據 function A({ onGetMsg }) {const name "this is A na…

fyne apptab布局

fyne apptab布局 AppTabs 容器允許用戶在不同的內容面板之間切換。標簽要么只是文本&#xff0c;要么是文本和一個圖標。建議不要混合一些有圖標的標簽和一些沒有圖標的標簽。 package mainimport ("fyne.io/fyne/v2/app""fyne.io/fyne/v2/container"//&…

PolarDB分布式架構學習筆記

PolarDB分布式是什么&#xff1f; 業務場景有哪些&#xff1f; 分布式焦點問題&#xff1f; 技術架構 CN DN介紹 CDC組件介紹 Columnar組件介紹 視頻學習&#xff1a;PolarDB 實操課 第一講&#xff1a;PolarDB分布式版架構介紹_嗶哩嗶哩_bilibili

都在說的跨網文件共享系統是什么?企業該怎么甄選?

跨網文件共享系統成為越來越受關注的產品焦點&#xff0c;那么跨網文件共享系統是什么呢&#xff1f;跨網文件共享是指在不同網絡之間共享文件的過程&#xff0c;使得不同網絡中的用戶可以訪問和使用共享的文件。 原則上而言&#xff0c;不同網絡間的文件是無法共享的&#xff…

在SpringBoot中使用redis中的zset實現延遲任務

為什么使用zset實現延遲任務 ZSET&#xff08;有序集合&#xff09;適合實現延遲任務的原因主要有以下幾點&#xff1a; 排序特性&#xff1a;ZSET根據分數&#xff08;score&#xff09;自動排序&#xff0c;這使得我們可以將任務的執行時間作為分數&#xff0c;從而能夠輕松…

OAK相機如何將 YOLOv9 模型轉換成 blob 格式?

編輯&#xff1a;OAK中國 首發&#xff1a;oakchina.cn 喜歡的話&#xff0c;請多多&#x1f44d;??? 內容可能會不定期更新&#xff0c;官網內容都是最新的&#xff0c;請查看首發地址鏈接。 Hello&#xff0c;大家好&#xff0c;這里是OAK中國&#xff0c;我是Ashely。 專…

最新消息:騰訊大模型App“騰訊元寶“上線了

&#x1f9d9;?♂? 諸位好&#xff0c;吾乃斜杠君&#xff0c;編程界之翹楚&#xff0c;代碼之大師。算法如流水&#xff0c;邏輯如棋局。 &#x1f4dc; 吾之筆記&#xff0c;內含諸般技術之秘訣。吾欲以此筆記&#xff0c;傳授編程之道&#xff0c;助汝解技術難題。 &#…

Python代碼:二十八、密碼游戲

1、題目 牛牛和牛妹一起玩密碼游戲&#xff0c;牛牛作為發送方會發送一個4位數的整數給牛妹&#xff0c;牛妹接收后將對密碼進行破解。 破解方案如下&#xff1a;每位數字都要加上3再除以9的余數代替該位數字&#xff0c;然后將第1位和第3位數字交換&#xff0c;第2位和第4位…

2024年藝術鑒賞與科學教育國際會議(ICAASE 2024)

2024年藝術鑒賞與科學教育國際會議 2024 International Conference on Art Appreciation and Science Education 【1】會議簡介 2024年藝術鑒賞與科學教育國際會議是一場集藝術、科學和教育于一體的國際性學術盛會。本次會議旨在推動藝術鑒賞與科學教育領域的深入交流與合作&am…

C語言(字符函數和字符串函數)1

Hi~&#xff01;這里是奮斗的小羊&#xff0c;很榮幸各位能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;關注收藏&#xff0c;歡迎歡迎~~ &#x1f4a5;個人主頁&#xff1a;小羊在奮斗 &#x1f4a5;所屬專欄&#xff1a;C語言 本系列文章為個人學習筆記&#x…

python API自動化(接口測試基礎與原理)

1.接口測試概念及應用 什么是接口 接口是前后端溝通的橋梁&#xff0c;是數據傳輸的通道&#xff0c;包括外部接口、內部接口,內部接口又包括&#xff1a;上層服務與下層服務接口&#xff0c;同級接口 外部接口&#xff1a;比如你要從 別的網站 或 服務器 上獲取 資源或信息 &a…

SpringMVC框架學習筆記(四):模型數據 以及 視圖和視圖解析器

1 模型數據處理-數據放入 request 說明&#xff1a;開發中, 控制器/處理器中獲取的數據如何放入 request 域&#xff0c;然后在前端(VUE/JSP/...)取出顯 示 1.1 方式 1: 通過 HttpServletRequest 放入 request 域 &#xff08;1&#xff09;前端發送請求 <h1>添加主人…