數據鏈路層協議——以太網協議

1. 數據鏈路層

  • 網絡層用于將數據從一臺主機發送到另一臺主機。
  • 傳輸層用于將數據可靠的從一臺主機發送到另一臺主機。(網絡層沒有保證可靠性的策略,傳輸過程中可能會出現各種意外,例如:丟包,網絡擁塞等。通過傳輸層可以保證數據可靠的傳輸到對端主機。
  • 數據鏈路層用于在局域網內找尋目標主機。當一臺主機要和其他主機通信時,本質上其實是將數據交給路由器通過一跳一跳的方式最終到達目標主機的。

本章介紹數據鏈路層的工作原理,如何在局域網內找到目標主機(路由器)。

2. 以太網協議

2.1 認識以太網

局域網通信技術

  1. 以太網:每個節點有全球唯一的48位地址,即制造商分配給網卡的MAC地址,以保證以太網上所有節點能互相鑒別。以太網具有廣播特性、半雙工和全雙工傳輸特性以及CSMA/CD特性等。(1000 Mbps)和10G以太網,它們都符合IEEE 802.3系列標準規范。
  2. 令牌環網:通過在網環上按順序依次傳遞令牌,確保在同一時刻只有一個節點能夠獨占信道,從而避免了傳輸沖突。
  3. 無線局域網(WLAN):無線局域網技術基于無線通信技術,通過無線信號進行數據傳輸。它提供了無線接入網絡的便利,用戶可以在無線覆蓋范圍內隨時隨地連接到局域網,并享受網絡資源和服務。

認識以太網

  • "以太網" 不是一種具體的網絡, 而是一種技術標準; 既包含了數據鏈路層的內容, 也包含了一些物理層的內容. 例如: 規定了網絡拓撲結構, 訪問控制方式, 傳輸速率等;
  • 例如以太網中的網線必須使用雙絞線; 傳輸速率有10M, 100M, 1000M等;
  • 以太網是當前應用最廣泛的局域網技術; 和以太網并列的還有令牌環網, 無線LAN等;

局域網通信原理:所有主機都會收到消息,但是在數據鏈路層發現消息不是發給自己的,就會自動丟棄該報文。

例如在上圖局域網中,主機A給主機E發送一個消息,其他的所有主機其實都會收到,但是在數據鏈路層判斷出該報文并不是發給自己的,于是直接丟棄了。

碰撞避免

由于局域網通信中,所有主機共享一個通信信道,所以難免存在多條數據發生碰撞的問題,因為發生碰撞可能會對數據造成干擾,所以局域網中同一時間只能有一臺主機發消息。站在系統的角度來看,局域網就是一種臨界資源,多臺主機(多個進程)訪問局域網(臨界資源)時是互斥的(加鎖)。

為了解決這個問題,以太網采用了以下措施:

  1. 在發送數據前,先偵聽信道是否空閑,如果空閑則立即發送數據。
  2. 如果信道忙,則繼續偵聽,直到信道空閑時再發送數據。
  3. 在發送數據的同時,繼續偵聽信道是否發生沖突。
  4. 如果在發送數據過程中檢測到沖突,則立即停止發送數據并發送一個特殊的信號,通知其他所有站點發生了沖突。
  5. 發生沖突的站點會執行一種特殊的退避算法(如截斷二進制指數退避算法),等待一段時間后再重新嘗試發送數據。

通過這種方式,以太網能夠在一定程度上減少碰撞的發生,提高通信效率。

令牌環網則采用了令牌傳遞的方式來控制數據的傳輸,從而避免了碰撞的問題。在令牌環網中,每個節點都連接在一個環形鏈路上,并且只有擁有令牌的節點才能發送數據。當一個節點想要發送數據時,它必須等待獲得令牌。當一個節點完成數據傳輸后,它會將令牌傳遞給下一個節點。通過這種方式,令牌環網能夠確保在任意時刻只有一個節點在發送數據,從而避免了碰撞的發生。

令牌環網中的令牌傳遞機制也可以類比為操作系統中的信號量或互斥鎖,它們都是用來控制多個進程對共享資源的訪問。

2.2 以太網幀格式

  • 源地址和目的地址是指網卡的硬件地址(也叫MAC地址), 長度是48位,是在網卡出廠時固化的;
  • 幀協議類型字段有三種值,分別對應IP、ARP、RARP;
  • 幀末尾是CRC校驗碼。

如何將報文和有效載荷分離

因為以太網的報文都是固定大小,所以我們提取出報文的頭14個字節,尾4個字節,剩下的就是數據了。

報文向上交付給哪個協議

接收端收到該報文后,可以提取出該報文的2位類型字段,根據2位類型交給不同的協議。常見的類型:0800為IP協議,0806為ARP協議,8035為RARP協議。

舉個例子

當主機A想要給主機E發送MAC幀時,局域網中所有的主機都會收到該報文,但是到達數據鏈路層后發現該報文并不是發送給自己的,于是將該報文丟棄。

主機E收到該報文后,發現該報文是發給自己的,然后進行CRC校驗,判斷該報文在傳輸過程中是否出現錯誤,如果沒有,提取出類型字段為0800,判斷出要將數據交給IP協議,于是將報文和有效載荷進行分離,然后將數據向上交付。

2.3 認識MAC地址

  • MAC地址用來識別數據鏈路層中相連的節點;
  • 長度為48位, 及6個字節. 一般用16進制數字加上冒號的形式來表示(例如: 08:00:27:03:fb:19)
  • 在網卡出廠時就確定了, 不能修改. mac地址通常是唯一的(虛擬機中的mac地址不是真實的mac地址, 可能會沖突; 也有些網卡支持用戶配置mac地址).

MAC地址有點像我們的身份證,每臺主機都擁有一個全球唯一的MAC地址。

我們使用ifconfig命令來查看我們的MAC地址,前面的ether就是以太的意思。

如何理解MAC地址和IP地址

在網絡通信中,當我們給對方發送消息時,我們需要知道對方的IP地址。根據IP地址我們就能將數據從一臺主機發送到另一臺主機,IP地址就像是一個終極目標。而MAC地址的作用像是為了這個終極目標而劃分成的一個個小目標。

  • 1.源IP和目的IP表示通信過程中的起始和終點
  • 2.源MAC和目的MAC表示的是通信過程中每一個區間上的起始和重點

舉個例子:唐僧要從東土大唐到西天取經,中間會路過黑風嶺,女兒國,車遲國。在這個例子中,東土大唐和西天相當于是通信的兩臺主機,黑風嶺,女兒國,車遲國看作是路由器,唐僧理解為是通信中的報文。

在東土大唐(發送端)時,唐僧(報文)確定好了目的地(目的IP)以及下一站要去的地點(目的MAC)時,出發到達黑風嶺(路由器),到達后,他的目的IP是不會發生改變的,因為他要去的一直都是西天(接收端)。但是源MAC和目的MAC就會發生改變了,他已經完成了從東土大唐到黑風嶺,接下來就應該從黑風嶺到女兒國。

如圖所示,最終就完成了整個報文的傳輸過程。

2.4 認識MTU

MTU相當于發快遞時對包裹尺寸的限制. 這個限制是不同的數據鏈路對應的物理層, 產生的限制.

  • 以太網幀中的數據長度規定最小46字節,最大1500字節,ARP數據包的長度不夠46字節,要在后面補填充位;
  • 最大值1500稱為以太網的最大傳輸單元(MTU),不同的網絡類型有不同的MTU
  • 如果一個數據包從以太網路由到撥號鏈路上,數據包長度大于撥號鏈路的MTU了,則需要對數據包進行分片(fragmentation);
  • 不同的數據鏈路層標準的MTU是不同的;

對于MAC幀來說,其中的數據長度其實就是上層協議交付給他的報文。

為什么要設置MTU

如果不設置MTU,那么數據就不會分包。在網絡傳輸中就會出現數據過長的問題。

長數據的傳輸速度慢,且容易發生碰撞,發生碰撞可能會導致數據出現錯誤,發送端要將整個長數據重新發送(重發的成本較大)。

但是這也不代表分包就是好的。

如果將長數據分包,也就意味著丟包的概率概率增大。原本網絡的丟包概率為萬分之一,如果我們將報文分成一百個,那么丟包概率就上升到了百分之一。

所以我們在網絡通信中,盡可能避免傳送長數據。

2.5 MTU對IP協議的影響

由于數據鏈路層MTU的限制, 對于較大的IP數據包要進行分包

  • 將較大的IP包分成多個小包, 并給每個小包打上標簽;
  • 每個小包IP協議頭的 16位標識(id) 都是相同的;
  • 每個小包的IP協議頭的3位標志字段中, 第2位置為0, 表示允許分片, 第3位來表示結束標記(當前是否是最后一個小包, 是的話置為1, 否則置為0);
  • 到達對端時再將這些小包, 會按順序重組, 拼裝到一起返回給傳輸層;
  • 一旦這些小包中任意一個小包丟失, 接收端的重組就會失敗. 但是IP層不會負責重新傳輸數據;

因為網絡通信的最大傳輸單元為1500。所以數據網絡層交給數據鏈路層的報文大小就不能超過1500個字節,但是IP協議至少20字節,也就是說IP報文的數據部分不能超過1480個字節。如果超過了就需要在IP層分包。對接收端IP層組裝。

2.6 MTU對UDP協議的影響

  • 一旦UDP攜帶的數據超過1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就會在網絡層分成多個IP數據報.
  • 這多個IP數據報有任意一個丟失, 都會引起接收端網絡層重組失敗. 那么這就意味著, 如果UDP數據報在網絡層被分片, 整個數據被丟失的概率就大大增加了.

2.7 MTU對TCP協議的影響

因為IP報文的數據長度最大為1480,也就意味著TCP協議交給IP協議的報文大小最大為1480。但是TCP協議報頭的最小長度為20字節,也就是說TCP協議的數據部分不能超過1460的大小,一旦超過就會在網絡層分包。

  • TCP的一個數據報也不能無限大, 還是受制于MTU. TCP的單個數據報的最大消息長度, 稱為MSS(MaxSegment Size);
  • TCP在建立連接的過程中, 通信雙方會進行MSS協商.
  • 最理想的情況下, MSS的值正好是在IP不會被分片處理的最大長度(這個長度仍然是受制于數據鏈路層的MTU).
  • 雙方在發送SYN的時候會在TCP頭部寫入自己能支持的MSS值.
  • 然后雙方得知對方的MSS值之后, 選擇較小的作為最終MSS. MSS的值就是在TCP首部的40字節變長選項中(kind=2);

對于TCP來說,分片也會增加TCP報文丟包的概率,但與UDP不同的是TCP丟包后還需要進行重傳,因此TCP應該盡量減少因為分片導致的數據重傳。

MTU和MSS的關系如下:

我們可以使用ifconfig命令查看MTU的大小。

2.8 模擬通信過程

當前主機B想要給主機C發送消息。

1.主機B要將數據傳輸給主機C,首先必須先將數據交給局域網中的路由器F,主機B會構建好MAC幀報文進行將報文發送到局域網中。發送報文如下:

2.局域網中所有主機都會收到該報文,其他主機在數據鏈路層識別出該報文的目的地址不是自己的,于是直接將該報文丟棄,路由器F收到該報文后,判斷出該報文是給自己的,于是向上交付給網絡層,網絡層提取出目的IP后,通過路由表查詢到下一次應該將數據交給路由器G。

3.路由器F構建MAC幀報文,發送到路由器F和路由器G所在的局域網中。構建報文如下:

3.不斷經過以上過程,最終將數據傳送給了主機D

3. ARP協議

地址解析協議(Address Resolution Protocol,ARP)協議,根據IP地址獲取MAC地址的一個TCP/IP協議。

3.1 ARP協議的作用

為什么會存在ARP協議

我們剛剛模擬了通信過程,但是中間有一個疑點,主機B如何知道路由器F的MAC地址,從而構建出MAC幀的。

  • 方法一:所有主機出廠時內置一份其他所有主機的MAC地址,顯而易見不太現實。
  • 方法二:通信過程中獲取對方的MAC地址。

而ARP協議就是我們說的方法二,通過IP地址獲取對方的MAC地址。

ARP的作用

ARP協議建立了主機 IP地址 和 MAC地址 的映射關系.

  • 在網絡通訊時,源主機的應用程序知道目的主機的IP地址和端口號,卻不知道目的主機的硬件地址;
  • 數據包首先是被網卡接收到再去處理上層協議的,如果接收到的數據包的硬件地址與本機不符,則直接丟棄;
  • 因此在通訊前必須獲得目的主機的硬件地址;

3.2 ARP協議的位置

ARP協議實際上是在MAC幀協議之上的。我們再來看一下MAC幀的報文格式。

類型字段的含義是交給上層的哪個協議,其中就有0806對應的就是交給上層的ARP協議,而8035協議是RARP協議。

ARP協議是將IP地址轉化為MAC地址,而RARP的作用剛好相反,是將MAC地址轉化為IP地址。

3.3 ARP協議數據報格式

  • 注意到源MAC地址、目的MAC地址在以太網首部和ARP請求中各出現一次,對于鏈路層為以太網的情況是多余的,但如果鏈路層是其它類型的網絡則有可能是必要的。
  • 硬件類型指鏈路層網絡類型,1為以太網;
  • 協議類型指要轉換的地址類型,0x0800為IP地址;
  • 硬件地址長度對于以太網地址為6字節;
  • 協議地址長度對于和IP地址為4字節;
  • op字段為1表示ARP請求,op字段為2表示ARP應答。

仔細觀察會發現其實前半部分就是以太網報文的首部,而在以太網協議的角度來看,其實ARP協議就是以太網報文的數據部分,這也驗證了其實ARP協議是在以太網協議之上的。

3.4 ARP協議工作流程

現在,主機A想要給主機E發送消息,但是在局域網內通信,必須要知道對方的MAC地址,我們現在來模擬一次主機A是如何獲取主機E的地址的。

APR請求

1.主機A在ARP層構建ARP報文。

  • 主機A構建的是ARP請求,所以ARP報文中的op字段設置為1。
  • ARP報文中的硬件類型字段設置為1,表示當前使用的是以太網通信。
  • ARP報文中的協議類型設置為0800,表示路主機A要根據主機E的IP地址來獲取主機E的MAC地址。
  • ARP報文中的硬件地址長度和協議地址長度分別設置為6和4,因為MAC地址的長度是48位,IP地址的長度是32位。
  • ARP報文當中的發送端以太網地址和發送端IP地址,對應就是主機A的MAC地址和IP地址。
  • ARP報文當中的目的以太網地址和目的IP地址,對應就是主機E的MAC地址和IP地址,但由于主機A當前還不知道主機E的MAC地址,因此將目的以太網地址的二進制序列設置為全1,表示在局域網中進行廣播

2.主機A在MAC幀層構建MAC幀。

  • 封裝MAC幀報頭時,以太網目的地址和以太網源地址,對應分別是主機E和主機A的MAC地址,但由于主機A不知道主機E的MAC地址,因此MAC幀報頭當中的以太網目的地址的二進制序列也只能設置為全1,表示在局域網中進行廣播。
  • 因為這里封裝的是一個ARP請求數據包,因此MAC幀當中的幀類型字段設置為0806。

3.主機A在局域網中以廣播的形式發送。

所有主機都會收到該報文。在MAC幀層,其他主機會先看該報文的目的MAC,發現是以廣播的形式,于是再提取出類型字段,發現是0806,這是一個ARP請求報文,于是將該報文的報頭和有效載荷分離,并且將有效載荷向上交付給ARP層

在ARP層,其他主機先提取出op字段,判斷出這是一個ARP請求的報文,然后再提取出目的IP字段,發現這個報文并不是交給自己的,于是直接將該報文丟棄,而主機E判斷出這個報文是自己的后,就會對該報文進行應答。

ARP響應

4.主機E收到報文后,進行ARP應答,他也會在ARP層構建一個報文。

  • 主機E構建的是ARP響應,所以ARP報文中的op字段設置為2。
  • 主機E填寫源MAC,源IP,目的MAC和目的IP

5.主機E在MAC幀層構建MAC幀

填寫目的MAC和源MAC。

6.主機E在局域網中發送該報文

所有主機都會收到MAC幀報文,在MAC幀層提取出目的MAC是MACA,與自己的MAC地址不相同,于是直接丟棄報文,不會向上交付

而主機A在提取出目的MAC后判斷出該報文是發給自己的,于是將該報文進行報頭和有效載荷的分離,并將有效載荷向上交付。在ARP層,先提取出op字段,發現這是一個ARP響應,于是就可以拿到主機E的MAC地址了。

為什么MAC幀中已經有了源MAC和目的MAC,ARP報頭中還要有這兩個字段?

MAC幀中的源MAC和目的MAC地址用于在數據鏈路層上傳輸數據,而ARP報頭中的源MAC和目的MAC地址則用于在數據鏈路層上傳輸ARP請求和響應。這兩個字段在不同的上下文中有不同的用途。

如果下層使用的不是以太網協議,而是其他協議(不一定包含源MAC和目的MAC字段),在ARP層可以提取出源MAC和目的MAC。

為什么主機A在收到ARP應答后,MAC幀中已經有了源MAC,為什么到ARP層才能提取出MACE?

局域網中的任何一臺主機可能即會發送ARP請求,也會收到ARP請求。如果只在MAC幀層,是無法判斷出這個報文是一個ARP請求還是ARP應答。也就是說,主機A無法判斷出該報文是請求主機A的MAC還是對A發送的ARP請求的一個響應,所以主機A需要向上交付給ARP層,ARP提取出op字段為2時才能夠判斷出這是一個ARP響應。

3.5 ARP緩存表

我們并不是每一次獲取ARP都需要經過上述過程。每個主機都會維護一個ARP緩存表,當進行了一次ARP請求和響應時,就把MAC和IP的映射填入ARP緩存表中,下次查詢就可以直接去ARP緩沖表中查了,不需要再進行ARP的請求和響應了。

我們可以使用arp -a命令來查看我們主機的ARP緩存表

需要注意的是緩存表中的表項有過期時間(一般為20分鐘),如果20分鐘內沒有再次使用某個表項,則該表項失效,下次還要發ARP請求來獲得目的主機的硬件地址。

3.6 RARP協議

RARP(Reverse Address Resolution Protocol),即反向地址解析協議,是地址解析協議(ARP)的反向過程。RARP協議的主要功能是將物理地址(MAC地址)轉換為IP地址。在計算機網絡中,當設備(如某些無盤工作站或路由器)啟動時,它可能知道自己的物理地址,但不知道自己的IP地址。這時,設備可以使用RARP協議來請求其邏輯地址。

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

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

相關文章

跨域問題的4種解決方案

文章導讀 前言 跨域問題指的是在Web開發中,由于瀏覽器的同源策略限制,當一個網頁嘗試訪問與它不同源(協議、域名或端口不同)的資源時,可能會遇到安全限制導致無法正常訪問的問題。這種策略旨在防止惡意網站讀取或修改其…

yarn的基本命令和用法

Yarn通過并行安裝、離線模式、確定性安裝以及更好的依賴解析算法,為開發者提供了更快、更穩定、更安全的包管理體驗。它保留了npm的大部分功能,并在此基礎上做了大量優化,下面我們就來詳述Yarn的核心命令和實用技巧。📚 安裝Yarn…

【MySQL精通之路】InnoDB(7)-鎖和事務模型(2)-事務模型

主博客: 【MySQL精通之路】InnoDB(7)-鎖和事務模型-CSDN博客 上一篇: 【MySQL精通之路】InnoDB(7)-鎖和事務模型(1)-鎖-CSDN博客 下一篇: 目錄 1.事務隔離級別 2.1 可重復讀 2.2 讀已提交 2.3 讀取未提交 2.4 序列化讀 2.自動提交、…

訂餐系統總結、

應用層: SpringBoot:快速構建Spring項目,采用“約定大于配置”的思想,簡化Spring項目的配置開發。 SpringMvc:Spring框架的一個模塊,springmvc和spring無需通過中間整合層進行整合,可以無縫集成。 Sprin…

完整的數據可視化方法集

在當前的大數據時代,了解如何可視化數據是UI/UX設計師技能的重要組成部分。如今,幾乎所有的公司都需要良好的數據可視化作為確定業務方向和決策的參考。數據的可視化結果越好,用戶的決策就越科學。 1、什么是數據可視化 數據可視化是將信息…

張量 t-product 積(matlab代碼)

參考文獻:Tensor Robust Principal Component Analysis with a New Tensor Nuclear Norm 首先是文章2.3節中 t-product 的定義: 塊循環矩陣: 參考知乎博主的例子及代碼:(t-product與t-QR分解,另一篇傅里葉對…

HTML5 設備訪問及輸入輸出設備交互

目錄 設備訪問輸入設備交互輸出設備交互設備訪問 設備信息訪問 navigator.userAgent:獲取瀏覽器的用戶代理字符串,從中可以解析出設備類型、操作系統、瀏覽器版本等信息。 const userAgent = navigator.userAgent; console.log(userAgent); // 輸出類似 "Mozilla/5.0…

算法(Algorithm)

算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,代表著用系統的方法描述解決問題的策略機制。也就是說,算法能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。算法應該具有…

【python004】miniforge可行替代方案實戰總結(最近更新中)

1.熟悉、梳理、總結項目研發實戰中的miniforge日常使用中的問題。隨著版本更新,做了一些變動,如商業化限制,取消一些語法等。 2.歡迎點贊、關注、批評、指正,互三走起來,小手動起來!

vue通過for循環生成input框后雙向綁定失效問題

有些時候頁面上有太多的表單元素&#xff0c;一個個的寫太過繁瑣&#xff0c;拿 input 框舉例&#xff0c;眾多的 input 框&#xff0c;無非就是輸入框前的說明和 input 框的 name 屬性不一樣 <el-form :inline"true" :model"formInline" size"mi…

01-05.Vue自定義過濾器

目錄 前言過濾器的概念過濾器的基本使用給過濾器添加多個參數 前言 我們接著上一篇文章01-04.Vue的使用示例&#xff1a;列表功能 來講。 下一篇文章 02-Vue實例的生命周期函數 過濾器的概念 概念&#xff1a;Vue.js 允許我們自定義過濾器&#xff0c;可被用作一些常見的文本…

軟件模塊的耦合

軟件模塊的耦合 耦合是指軟件模塊之間的依賴程度&#xff0c;耦合越低&#xff0c;模塊之間的獨立性越高&#xff0c;軟件的可維護性、可重用性也越高。下面是幾種常見的耦合類型的概念&#xff1a; 數據耦合&#xff08;Data Coupling&#xff09;&#xff1a; 當一個模塊通…

Python ? 使用代碼解決今天中午吃什么的重大生存問題

1. 環境安裝 安裝Python代碼環境參考文檔 2. 代碼塊 import random# 準備一下你想吃的東西 hot ["蘭州拉面", "爆肚面", "黃燜雞", "麻辣香鍋", "米線", "麻食", "羊肉泡饃", "肚絲/羊血湯&qu…

doxygen 1.11.0 使用詳解(九)——包含公式

目錄 Doxygen allows you to put LATEX formulas in the output (this works only for the HTML, LATEX and RTF output. To be able to include formulas (as images) in the HTML and RTF documentation, you will also need to have the following tools installed latex: …

定時監測服務器磁盤是否超過閾值,超過就刪除docker 鏡像

達到指定百分比 刪除鏡像腳本 df -h 查找到 內存占用信息 &#xff0c;得到的 文件系統名稱是 overlay的&#xff0c;Use% 達到70就進行刪除docker 鏡像 #!/bin/bash# 設置磁盤使用閾值 THRESHOLD70# 獲取 overlay 文件系統的磁盤使用百分比 DISK_USAGES$(df -h | grep overl…

利用sentence bert 實現語義向量搜索

目錄 基于pytorch的中文語言模型預訓練:https://github.com/zhusleep/pytorch_chinese_lm_pretrain/tree/master sentence_emb.py search_faiss_robert768.py faiss_index.py gen_vec_save2_faiss.py 基于pytorch的中文語言模型預訓練:https://github.com/zhusleep/pytorch_…

[協議]stm32讀取AHT20程序示例

AHT20溫度傳感器使用程序&#xff1a; 使用i2c讀取溫度傳感器數據很簡單&#xff0c;但市面上有至少兩個手冊&#xff0c;我這個對應的手冊貼出來&#xff1a; main: #include "stm32f10x.h" // Device header #include <stdint.h> #includ…

數智賦能內澇治理,四信城市排水防澇解決方案保障城市安全運行

由強降雨、臺風造成城市低洼處出現大量積水、內澇的情況時有發生&#xff0c;給人們出行帶來了極大不便和安全隱患&#xff0c;甚至危及群眾生命財產安全。 為降低內澇造成的損失&#xff0c;一方面我們要大力加強城市排水基礎設施的建設&#xff1b;另一方面要全面掌握城市內澇…

U-Boot menu菜單分析

文章目錄 前言目標環境背景U-Boot如何自動調起菜單U-Boot添加自定義命令實踐 前言 在某個廠家的開發板中&#xff0c;在進入它的U-Boot后&#xff0c;會自動彈出一個菜單頁面&#xff0c;輸入對應的選項就會執行對應的功能。如SD卡鏡像更新、顯示設置等&#xff1a; 目標 本…

docker命令詳解大全

Docker是一種流行的容器化平臺&#xff0c;用于快速部署應用程序并管理容器的生命周期。以下是一些常用的Docker命令及其用途的概述&#xff1a; docker run&#xff1a;創建一個新容器并運行一個命令。docker ps&#xff1a;列出當前運行的容器。docker stop&#xff1a;停止…