8. 網絡層

在復雜的網絡環境中確定一個合適的路徑.

1. IP協議

1. 基本概念

IP協議:提供一種能力(有非常大的概率,做到某事),把數據報從主機A,跨網絡,送到主機B?

--> 必須要有方式,標識通信兩端唯一性!!(IP協議解決的是主機到主機的問題,進程到進程的問題有端口號) ---> 每臺主機都必須設置IP地址(公網IP)

主機: 配有 IP 地址, 但是不進行路由控制的設備;
路由器: 即配有 IP 地址, 又能進行路由控制;(理論工作在網絡層,而當代路由器,已經是一臺小型計算機了!是可以工作在應用層的)
節點: 主機和路由器的統稱

2. 協議頭格式

? 4 位版本號(version): 指定 IP 協議的版本, 對于 IPv4 來說, 就是 4. ? 4 位頭部長度(header length): IP 頭部的長度是多少個 32bit, 也就是 length 4
的字節數. 4bit 表示最大的數字是 15, 因此 IP 頭部最大長度是 60 字節. ? 16 位總長度(total length): IP 數據報整體占多少個字節. ? 16 位標識(id): 唯一的標識主機發送的報文. 如果 IP 報文在數據鏈路層被分片
了, 那么每一個片里面的這個 id 都是相同的. ? 3 位標志字段: 第一位保留(保留的意思是現在不用, 但是還沒想好說不定以后要
用到). 第二位置為 1 表示禁止分片, 這時候如果報文長度超過 MTU, IP 模塊就會丟
棄報文. 第三位表示"更多分片", 如果分片了的話, 最后一個分片置為 0, 其他是 1. 類
似于一個結束標記. ? 13 位分片偏移(framegament offset): 是分片相對于原始 IP 報文開始處的偏移. 
其實就是在表示當前分片在原報文中處在哪個位置. 實際偏移的字節數是這個值 8
得到的. 因此, 除了最后一個報文之外, 其他報文的長度必須是 8 的整數倍(否則報文
就不連續了). ? 8 位生存時間(Time To Live, TTL): 數據報到達目的地的最大報文跳數. 一般是
64. 每次經過一個路由, TTL -= 1, 一直減到 0 還沒到達, 那么就丟棄了. 這個字段主要是用來防止出現路由循環? 8 位協議: 表示上層協議的類型? 16 位頭部校驗和: 使用 CRC 進行校驗, 來鑒別頭部是否損壞. ? 32 位源地址和 32 位目標地址: 表示發送端和接收端. ? 選項字段(不定長, 最多 40 字節): 略

?1. IP報文,解包問題(封裝)

挪動指針即可增加/減少協議頭

2. 分用問題(8位協議表明有效載荷是什么數據)

?? 8 位服務類型(Type Of Service): 3 位優先權字段(已經棄用), 4 位 TOS 字段, 和
1 位保留字段(必須置為 0). 4 位 TOS 分別表示: 最小延時, 最大吞吐量, 最高可靠性,?
最小成本. 這四者相互沖突, 只能選擇一個. 對于 ssh/telnet 這樣的應用程序, 最小延
時比較重要; 對于 ftp 這樣的程序, 最大吞吐量比較重要.

3. 網段劃分(重要)

IP 地址分為兩個部分, 網絡號和主機號(IP = 網絡號? + 主機號)
???網絡號: 保證相互連接的兩個網段具有不同的標識;
???主機號: 同一網段內, 主機之間具有相同的網絡號, 但是必須有不同的主機號

???不同的子網其實就是把網絡號相同的主機放到一起.(路由器有構建子網的功能)
???如果在子網中新增一臺主機, 則這臺主機的網絡號和這個子網的網絡號一致,
是主機號必須不能和子網中的其他主機重復.
通過合理設置主機號和網絡號, 就可以保證在相互連接的網絡中, 每臺主機的 IP 地址都
不相同.
那么問題來了, 手動管理子網內的 IP, 是一個相當麻煩的事情.
? 有一種技術叫做 DHCP, 能夠自動的給子網內新增主機節點分配 IP 地址, 避免
了手動管理 IP 的不便. 
? 一般的路由器都帶有 DHCP 功能. 因此路由器也可以看做一個 DHCP 服務器.
過去曾經提出一種劃分網絡號和主機號的方案, 把所有 IP 地址分為五類, 如下圖所示
? A 類 0.0.0.0 到 127.255.255.255
? B 類 128.0.0.0 到 191.255.255.255
? C 類 192.0.0.0 到 223.255.255.255
? D 類 224.0.0.0 到 239.255.255.255
? E 類 240.0.0.0 到 247.255.255.255

隨著 Internet 的飛速發展,這種劃分方案的局限性很快顯現出來,大多數組織都申請 B 類 網絡地址, 導致 B 類地址很快就分配完了, A 類卻浪費了大量地址;

? 例如, 申請了一個 B 類地址, 理論上一個子網內能允許 6 萬 5 千多個主機. A 類
地址的子網內的主機數更多. 
? 然而實際網絡架設中, 不會存在一個子網內有這么多的情況. 因此大量的 IP 地址都被浪費掉了

?針對這種情況提出了新的劃分方案, 稱為 CIDR(Classless Interdomain Routing):

???引入一個額外的子網掩碼(subnet mask)來區分網絡號和主機號;
???子網掩碼也是一個 32 位的正整數. 通常用一串 "0" 來結尾;
???將 IP 地址和子網掩碼進行 "按位與" 操作, 得到的結果就是網絡號;
???網絡號和主機號的劃分與這個 IP 地址是 A 類、B 類還是 C 類無關
FF代表全是1;0:整個IP就是表示網絡號
子網地址范圍:這個子網內最多可以有多少臺主機。
可見,IP 地址與子網掩碼做與運算可以得到網絡號, 主機號從全 0 到全 1 就是子網的地
址范圍;
IP 地址和子網掩碼還有一種更簡潔的表示方法,例如 140.252.20.68/24,表示 IP 地址為
140.252.20.68, 子網掩碼的高 24 位是 1,也就是 255.255.255.0

子網劃分是指將一個較大的網絡分割成多個較小的網絡,也就是子網;why?--- 查找目標主機,必須先查找目標網絡:本質就可以淘汰其他網絡,可以在全網中提高查找目標主機的效率?

子網劃分的本質:把32位比特位進行劃分,確定網絡號有多少位!

目的

  • 提高 IP 地址利用率:在沒有子網劃分時,A 類、B 類網絡可能會造成 IP 地址浪費。例如,一個 B 類網絡理論上可容納 65534 個主機,但實際使用中往往不需要這么多主機地址。通過子網劃分,可以根據實際需求將大網絡分割成若干小網絡,充分利用 IP 地址資源。
  • 增強網絡管理和安全性:將網絡劃分為多個子網后,不同子網可以根據需要進行獨立管理,設置不同的訪問控制策略。例如,企業可以將辦公子網、服務器子網等分開管理,辦公子網對外部網絡訪問進行限制,而服務器子網對特定的內部主機開放,從而增強網絡安全性。

結論1:IP地址是有用的,是有限的,是資源 --- 各國運營商都在搶,為啥搶?要搭建國家子網?

4. 特殊的IP地址

???將 IP 地址中的主機地址全部設為 0, 就成為了網絡號, 代表這個局域網
???將 IP 地址中的主機地址全部設為 1, 就成為了廣播地址, 用于給同一個鏈路中相互連接的所有主機發送數據包;
???127.*的 IP 地址用于本機環回(loop back)測試,通常是 127.0.0.1

5. IP地址的數量限制

我們知道, IP 地址(IPv4)是一個 4 字節 32 位的正整數. 那么一共只有 2 32 次方 個 IP 地址, 大概是 43 億左右. TCP/IP 協議規定, 每個主機都需要有一個 IP 地址.
這意味著, 一共只有 43 億臺主機能接入網絡么?
實際上, 由于一些特殊的 IP 地址的存在, 數量遠不足 43 ; 另外 IP 地址并非是按照主機臺數來配置的, 而是每一個網卡都需要配置一個或多個 IP 地址.
CIDR 在一定程度上緩解了 IP 地址不夠用的問題(提高了利用率, 減少了浪費, 但是 IP

地址的絕對上限并沒有增加), 仍然不是很夠用. 這時候有三種方式來解決:

???動態分配 IP 地址: 只給接入網絡的設備分配 IP 地址. 因此同一個 MAC 地址的
設備, 每次接入互聯網中, 得到的 IP 地址不一定是相同的;
???NAT 技術(后面會重點介紹);
???IPv6: IPv6 并不是 IPv4 的簡單升級版. 這是互不相干的兩個協議, 彼此并不兼容; IPv6 16 字節 128 位來表示一個 IP 地址; 但是目前 IPv6 還沒有普及;

6. 私有IP地址和公網IP地址

公網的理解:公網IP -- 各個國家的運營商主動申請 -- 運營商不僅僅要組建內網,運營商,也要組建自己國家的公網環境 -- 一個區域,究竟能有多大的網絡,取決于自己有多少個公網IP -- 分配公網IP,是結合網民數量,按照地區劃分的

如果一個組織內部組建局域網,IP 地址只用于局域網內的通信,而不直接連到 Internet ,理論上 使用任意的 IP 地址都可以,但是 RFC 1918 規定了用于組建局域網的私有 IP 地址
? 10.*,前 8 位是網絡號,共 16,777,216 個地址
? 172.16.*到 172.31.*,前 12 位是網絡號,共 1,048,576 個地址
? 192.168.*,前 16 位是網絡號,共 65,536 個地址
包含在這個范圍中的, 都成為私有 IP, 其余的則稱為全局 IP(或公網 IP);

???一個路由器可以配置兩個 IP 地址, 一個是 WAN IP, 一個是 LAN IP(子網IP).
???路由器 LAN 口連接的主機, 都從屬于當前這個路由器的子網中.
??不同的路由器, 子網 IP 其實都是一樣的(通常都是 192.168.1.1). 子網內的主機 IP 地址不能重復. 但是子網之間的 IP 地址就可以重復了.
???每一個家用路由器, 其實又作為運營商路由器的子網中的一個節點. 這樣的運營商路由器可能會有很多級, 最外層的運營商路由器, WAN IP 就是一個公網 IP .
???子網內的主機需要和外網進行通信時, 路由器將 IP 首部中的 IP 地址進行替換 (替換成 WAN 口 IP), 這樣逐級替換, 最終數據包中的 IP 地址成為一個公網 IP. 這種技術稱為 NAT(Network Address Translation,網絡地址轉換).
???如果希望我們自己實現的服務器程序, 能夠在公網上被訪問到, 就需要把程序部署在一臺具有外網 IP 的服務器上. 這樣的服務器可以在阿里云/騰訊云上進行購買
1.發送:

?

2.回來:

7. 路由

路由器本身就具有構建子網的能力-->給子網內所有主機分配IP的能力(任何路由器,都要配有至少配有兩個IP)

路由報文,本質是查找主機的問題!---> 查找本質,是一個淘汰的過程,只要淘汰效率高,查找效率就高

在復雜的網絡結構中, 找出一條通往終點的路線
路由的過程, 就是這樣一跳一跳(Hop by Hop) "問路" 的過程.
所謂 "一跳" 就是數據鏈路層中的一個區間. 具體在以太網中指從源 MAC 地址到目的 MAC 地址之間的幀傳輸區間.

?IP 數據包的傳輸過程也和問路一樣

???當 IP 數據包, 到達路由器時, 路由器會先查看目的 IP;
???路由器決定這個數據包是能直接發送給目標主機, 還是需要發送給下一個路由器;
???依次反復, 一直到達目標 IP 地址;
???路由表可以使用 route 命令查看
???如果目的 IP 命中了路由表, 就直接轉發即可;
???路由表中的最后一行,主要由下一跳地址和發送接口兩部分組成,當目的地址與路由表中其它行都不匹配時,就按缺省路由條目規定的接口發送到下一跳地址。

?假設某主機上的網絡接口配置和路由表如下:

???這臺主機有兩個網絡接口,一個網絡接口連到 192.168.10.0/24 網絡,另一個網絡接口連到 192.168.56.0/24 網絡;
???路由表的 Destination 是目的網絡地址,Genmask 是子網掩碼,Gateway 是下一跳地址,Iface 是發送接口,Flags 中的 U 標志表示此條目有效(可以禁用某些 條目),G標志表示此條目的下一跳地址是某個路由器的地址,沒有 G 標志的條目表示目的網絡地址是與本機接口直接相連的網絡,不必經路由器轉發;
轉發過程例 1: 如果要發送的數據包的目的地址是 192.168.56.3

???跟第一行的子網掩碼做與運算得 到 192.168.56.0,與第一行的目的網絡地址不

???再跟第二行的子網掩碼做與運算得 到 192.168.56.0,正是第二行的目的網絡地址,因此從 eth1 接口發送出去;
???由于 192.168.56.0/24 正 是與 eth1 接口直接相連的網絡,因此可以直接發到目的主機,不需要經路由器轉發;
轉發過程例 2: 如果要發送的數據包的目的地址是 202.10.1.2
???依次和路由表前幾項進行對比, 發現都不匹配;
???按缺省路由條目, eth0 接口發出去, 發往 192.168.10.1 路由器;
???由 192.168.10.1 路由器根據它的路由表決定下一跳地址;
結論1:公網路由器的路由算發表和內網的路由算發表復雜度是不同的

8.?IP 分片和組裝的具體過程

???16 位標識(id): 唯一的標識主機發送的報文. 如果 IP 報文在數據鏈路層被分片了, 那么每一個片里面的這個 id 都是相同的.
???3 位標志字段: 第一位保留(保留的意思是現在不用, 但是還沒想好說不定以后要用到). 第二位置為 1 表示禁止分片, 這時候如果報文長度超過 MTU, IP 模塊就會丟棄報文. 第三位表示"更多分片", 如果分片了的話, 最后一個分片置為 0, 其他是 1. 類似于一個結束標記.
???13 位分片偏移(framegament offset): 是分片相對于原始 IP 報文開始處的偏移.其實就是在表示當前分片在原報文中處在哪個位置. 實際偏移的字節數是這個值 除以 8 得到的. 因此, 除了最后一個報文之外(之前如果都是 8 的整數倍,最后一片的偏移量也一定是 8 的整數倍), 其他報文的長度必須是 8 的整數倍(否則報文就不連續了).
???注意:片偏移(13 )表示本片數據在它所屬的原始數據報數據區中的偏移量
(以 8 字節為單位)

分片

如何甄別特定報文是否被分片了?--- 更多分片0 && 片偏移0 !!!

a. 更多分片(MF)標志判斷

IP 首部中有個 “更多分片(MF)” 標志位 。當 MF = 1 時,表明該報文是一個分片,且后續還有分片。因為如果報文被分片,只要不是最后一個分片,MF 位就會被置為 1 ,用于告知接收方還有后續分片。

b. MF 為 0 且片偏移大于 0 判斷

當 MF = 0 時,正常理解可能是未分片報文或最后一個分片。但如果此時片偏移(Fragment Offset ) > 0 ,說明該報文之前存在其他分片,即此報文是經過分片后的最后一個分片。因為片偏移表示該分片在原始報文中的位置偏移量,若片偏移大于 0 ,意味著前面有其他分片占據了原始報文靠前的位置,所以能判定報文經歷過分片 。

保證分片收全的原理

  • 標識字段:IP 首部的 16 位標識字段,發送方對同一原始報文的所有分片設置相同標識值。接收方據此識別屬于同一報文的分片并聚合。
  • 片偏移字段:接收方依據片偏移確定分片順序。理論上,若按片偏移升序排列后,相鄰分片的片偏移與自身長度滿足 “片偏移 + 自身報文長度 = 下一個分片的片偏移”,且收到 MF(更多分片)標志為 0 的分片(表示無后續分片 ),可認為收全。但實際網絡中,若有分片丟失(如第一片、中間片、結尾片 ),就無法滿足上述條件,意味著未收全。
1. 檢查 MTU 限制
當一個 IP 數據報的大小超過了網絡的 MTU(最大傳輸單元)限制時,就需要進行分片。MTU 是數據鏈路層對 IP 層數據包進行封裝時所能接受的最大數據長度。
2. 分割數據報
IP 層將原始的 IP 數據報分割成多個較小的片段。
對于每個片段,IP 層會設置相應的標識(Identification)、偏移量(Fragment Offset)和標志位(Flags)等字段。
標識字段用于標識屬于同一個數據報的不同分片,確保所有分片能夠被正確地重新組裝。
偏移量字段指示了當前分片相對于原始數據報的起始位置,以 8 字節為單位。
標志位字段包含了 3 個位,其中 MFMore Fragment位用于指示是否還有更多的分片,DFDo Not Fragment位用于指示數據報是否允許進行分片。
3. 添加 IP 頭部
每個分片都會加上自己的 IP 頭部,與完整 IP 報文擁有類似的 IP 頭結構,但 MF 和 Fragment Offset 等字段的值會有所不同。
4. 發送分片
分片在傳輸過程中獨立傳輸,每個分片都有自己的 IP 頭部,并且各自獨立地選擇路由

組裝

1. 接收分片
當目的主機的 IP 層接收到這些分片后,會根據標識字段將屬于同一個數據報的所有分片挑選出來。
2. 排序與組裝
利用片偏移字段,IP 層會對屬于同一個數據報的分片進行排序。
當所有的分片都到達并正確排序后,IP 層會將這些分片重新組裝成一個完整的 IP 數據報。
3. 傳遞給上層協議
組裝好的 IP 數據報會傳遞給上層的協議進行處理。

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

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

相關文章

【通識】線性代數(Linear Algebra)

線性代數被廣泛應用于抽象代數和泛函分析中;通過解析幾何,線性代數能被具體表示,線性代數被泛化為算子理論。而非線性模型被近似為線性模型,應用場景多為自然科學和社會科學。 費馬和笛卡爾的工作,線性代數出現于十七世…

Qt 嵌入式界面優化技術

在嵌入式系統中,界面性能直接影響用戶體驗和系統穩定性。由于嵌入式設備通常資源受限(如低性能 CPU、有限內存、小尺寸屏幕),需針對性優化 Qt 界面以實現流暢顯示和高效交互。本文從渲染引擎、資源管理、布局優化到硬件加速&#…

去除視頻字幕 4 : 下一步,打算研究 Video Inpainting (視頻修復):

就是說,到現在,才算是真正開始,才發現真正的問題。 嘗試去除視頻上的字幕,使用 IOPaint, 效果很初級。。。問題描述 請幫我分析此時的效果。 此時的右側字幕區域,閃爍不停!我原本以為效果會很好。實際非常…

代碼隨想錄算法訓練營第五十五天|圖論part5

并查集理論基礎 初始化: void init() {for (int i 0; i < n; i) {father[i] i;} } 尋根&#xff1a; // 并查集里尋根的過程 int find(int u) {return u father[u] ? u : father[u] find(father[u]); // 路徑壓縮 } 判斷u跟v是否同根 // 判斷 u 和 v是否找到同一個根 b…

安卓模擬器 adb Frida hook 抓包

基本步驟 adb connect 127.0.0.1:62001adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27043adb shell./data/local/tmp/frida-server再開啟cd D:\linuxdir\python\fridapython main.py下載夜神模擬 https://www.yeshen.com/ 安裝adb 點擊下載adb&#xff08…

編程與數學 03-002 計算機網絡 14_網絡性能分析

編程與數學 03-002 計算機網絡 14_網絡性能分析一、網絡性能指標&#xff08;一&#xff09;帶寬、時延、吞吐量等指標的定義與測量方法&#xff08;二&#xff09;性能指標對網絡應用的影響二、網絡性能的測試方法&#xff08;一&#xff09;使用網絡測試工具&#xff08;如Wi…

AT9880B參數特征

AT9880B 是一款高性能北斗單模衛星導航接收機 SOC 單芯片&#xff0c;芯片集成射頻前端和數字基帶、北斗多頻衛星信號處理引擎、電源管理功能。 芯片支持接收中國北斗二號和北斗三號&#xff0c;支持接收 B1I、B1C、B2I、B3I、B2a 和 B2b 等頻點信號。主要特征 支持北斗二號/三…

eBPF 賦能云原生: WizTelemetry 無侵入網絡可觀測實踐

引言 隨著 KubeSphere 企業版 4.2.0 的正式發布&#xff0c;WizTelemetry 可觀測平臺 2.0 也同步亮相。作為本次升級中的重磅模塊之一&#xff0c;它迅速引發了開發與運維團隊的廣泛關注。 本系列文章將系統解讀 WizTelemetry 的核心能力與落地實踐。繼前兩篇介紹了平臺架構與指…

【JAVA安全-Fastjson系列】Fastjson 1.2.24 反序列化漏洞分析及測試環境構建【復習回顧】

Fastjson 1.2.24 反序列化漏洞分析及測試環境構建 漏洞背景 Fastjson 是阿里巴巴開源的一個高性能 Java JSON 庫&#xff0c;廣泛用于 Java 對象的序列化和反序列化。在 1.2.24 及之前的版本中&#xff0c;存在一個嚴重的安全漏洞&#xff0c;攻擊者可以通過構造惡意的 JSON 字…

關于神經網絡CNN的搭建過程以及圖像卷積的實現過程學習

通過如下博客內容學習了CNN搭建的步驟&#xff0c;按照博主的思路完成了cnn網絡的構建并完成50個epoch的訓練并畫出損失函數的曲線圖時有滿滿的成就感 PyTorch深度學習實戰&#xff08;3&#xff09;——使用PyTorch構建神經網絡_pytorch 神經網絡-CSDN博客 通過如下博客內容…

nodejs 實現Excel數據導入數據庫,以及數據庫數據導出excel接口(核心使用了multer和node-xlsx庫)

項目地址&#xff1a;https://gitee.com/LiangDouJun/nodejsExcel 一、實現效果 1、數據庫數據導出 2、excel導入 二、代碼實現 // 根據環境加載對應的配置文件 const env process.env.NODE_ENV || development; require(dotenv).config({ path: .env.${env} });const expr…

VUE2 學習筆記8 v-text/html/cloak/once/pre/自定義

除了之前已經介紹過的v-on v-bind v-for v-if v-show&#xff0c;vue還有很多其他的指令。v-textv-text是Vue內置指令。內置指令&#xff0c;是Vue內部定義好的&#xff0c;開發的時候直接拿來用就行了。v-text用于向其所在的標簽添加文本。<body><div id"root&q…

vue 使用postcss-pxtorem 實現適老化

1. 安裝依賴 npm install postcss-pxtorem -D2. 配置 Vite (vite.config.js) import { defineConfig } from vite import vue from vitejs/plugin-vue import postcsspxtorem from postcss-pxtoremexport default defineConfig({plugins: [vue()],css: {postcss: {plugins: [po…

Rust:高效錯誤處理工具 anyhow

Rust 的 anyhow 庫是一個專注于簡化錯誤處理的工具&#xff0c;特別適合應用程序開發場景。它通過統一的錯誤類型和便捷的 API&#xff0c;減少模板代碼&#xff0c;提升錯誤信息的可讀性。以下是其核心用法及示例&#xff1a;1. 安裝與基礎用法 在 Cargo.toml 中添加依賴&…

Solidity基礎(教程①-簡單數字存儲)

我們來嘗試一個超級簡單的智能合約&#xff0c;它只會做一件事情&#xff1a;存儲一個數字&#xff0c;并且讓我們能修改這個數字。最簡單的 Solidity 代碼// SPDX-License-Identifier: MIT pragma solidity ^0.8.0;// 定義一個智能合約&#xff0c;名字叫做 SimpleStorage (簡…

在 Web3 時代通過自我主權合規重塑 KYC/AML

1. 引言 前序博客有&#xff1a; Ligero 和 Ligetron 中的 MPC 和 ZKLigetron&#xff1a;Nim Network開發的針對AI的zkVMLigetron&#xff1a;基于MPC-In-The-Head范式的zkVM簡介谷歌采用 Ligero 構建其 ZK 技術棧 KYC&#xff08;了解你的客戶&#xff0c;Know Your Custo…

Linux kernel pinctrl子系統簡介

pinctrl(Pin Control)子系統是 Linux 內核中用于統一管理 SoC 引腳(Pin)功能配置的核心子系統,主要解決傳統引腳管理方式中存在的配置分散、驅動沖突、資源管理混亂等問題。尤其在嵌入式系統中,SoC 引腳通常支持多種復用功能(如 GPIO、UART、SPI、I2C、視頻接口等),pi…

web開發常見問題解決方案大全:502/503 Bad Gateway/Connection reset/504 timed out/400 Bad Request/401 Unauthorized

web開發常見問題解決方案大全&#xff1a;502/503 Bad Gateway&#xff0f;Connection reset&#xff0f;504 timed out&#xff0f;400 Bad Request&#xff0f;401 Unauthorized&#xff0f;403 Forbidden 在使用反向代理&#xff08;如 Nginx、HAProxy&#xff09;或正向代…

Vue 3 拖拽排序功能優化實現:從原理到實戰應用

一、引言&#xff1a;為什么需要拖拽排序&#xff1f;在現代Web應用中&#xff0c;交互體驗越來越受到重視。拖拽排序(Drag and Drop)作為一種直觀的用戶交互方式&#xff0c;被廣泛應用于&#xff1a;任務管理工具&#xff08;如Trello的任務卡片排序&#xff09;內容管理系統…

git 使用 rebase 刪除某次 提交

git刪除某次commit記錄 在Git中&#xff0c;要刪除某次commit記錄有幾種不同的實現方法&#xff1a; 方法一&#xff1a;使用git rebase命令和~標記 該方法適用于刪除最近的幾次commit記錄。 首先&#xff0c;使用以下命令查看你需要刪除的commit的記錄 git log找到你要刪除的c…