【計算機網絡原理】淺談應用層協議的自定義和傳輸層UDP協議的總結

?????? write in front????????
?????????大家好,我是xiaoxie.希望你看完之后,有不足之處請多多諒解,讓我們一起共同進步????? . ?? ?xiaoxie?????????—CSDN博客
本文由xiaoxie??????????原創 CSDN?如需轉載還請通知?????
個人主頁:xiaoxie?????????—CSDN博客

系列專欄:xiaoxie的計算機網絡學習系列專欄——CSDN博客●'?'σσ??
我的目標:"團團等我💪( ??_?? ?)"?

(?????????? )歡迎各位→點贊👍 + 收藏?? + 留言📝?+關注(互三必回)!

目錄

?編輯?一.淺談應用層協議

1.自定義應用層協議

1.場景假設

2.信息規定

3.數據格式

1.基于行文本的方式來傳輸

2.基于xml方式來傳輸

3.基于json的方式來傳輸

4.yaml的方式來傳輸數據

5.protobuffer(pb)的方式來傳輸數據

二.傳輸層協議總結1

1.傳輸層的作用

2.端口號.

1.端口號的特性

1端口號的范圍

2. 使用命令行查看某個端口號是否被綁定

3.端口號在客服端和服務端的分配

4.多個進程是否能夠綁定同一個端口號?

5.一個進程是否可以綁定多個端口號?

3.UDP協議

1.UDP的特點

2.UDP協議的格式

?3.源端口 vs 目的端口

4.UDP長度

5.校驗和

6.應用場景


?一.淺談應用層協議

我們可以從上圖看到在TCP/ IP模型中,除了應用層是由我們來處理之外,其他層都是由操作系統來處理,雖然這樣說并不代表其他層的工作原理和它們所使用協議不重要

原因包括:

  • 故障排查:了解網絡層次結構有助于在遇到網絡問題時進行有效的故障排查。
  • 性能優化:理解不同層次的協議如何工作可以幫助開發者優化應用程序的性能。
  • 安全考慮:了解網絡層次可以更好地設計安全措施,保護數據傳輸的安全。
  • 協議設計:對于需要設計自定義協議的開發者,理解現有層次結構和協議是基礎。
  • 互操作性:了解不同層次的協議有助于確保應用程序能夠與不同的系統和網絡設備進行互操作

這里所以博主就先為大家先簡單介紹一下應用層協議的幾種格式類型,重點介紹一下其他層的協議之后,再重新重點詳細的介紹應用層的原理和協議.

1.自定義應用層協議

1.場景假設

我們需要開發一個外賣軟件,這個時候就需要?我們來自定義應用層協議,來傳輸信息了.其中自定義應用層協議就是我們要對傳輸的數據做出約定:?

1.傳輸的數據都有那些信息.

2.傳輸的信息都有遵守什么樣的格式.

2.信息規定

這里的信息規定具體就是看你的業務需要,不同的業務需要傳輸的信息自然不同,這里并沒有什么別的技巧,根據具體的業務來具體規定即可.我們根據這個外賣軟件的場景,簡單的規定一下需要傳輸什么信息.

1.請求: 用戶id, 所在位置(這里只是舉個例子)

2.響應:商家列表其中包含的元素:1.商家名稱2.商家圖片3,商家簡介4.商家評價等等.

3.數據格式

上述的數據,都屬于"結構化數據”(通過結構體來表示的數據)網絡上傳輸的是字符串(二進制字符串),就需要對數據進行序列化.序列化的方式是有很多種的.

1.基于行文本的方式來傳輸

請求:用戶ID,所在位置經緯度\n

例子: 123,123°18′\n

響應: 商家1名稱,商家1圖片,商家1簡介,商家1評價;商家2名稱,商家2圖片,商家2簡介,商家2評價\n

例子: 北京烤鴨,圖片地址,北京烤鴨簡介,北京烤鴨評價;海底撈,圖片地址,海底撈評價,海底撈評價\n

上述格式就屬于是一種自定義的格式.要包含哪些信息,分割符都使用哪個.…. 都是可以靈活的進行控制的只要確保, 客戶端和服務器,使用同一套規則進行通信即可(非常重要)
上面這套規則,就屬于是比較一般的的?可維護性比較差,特別是屬性多了的時候,比較混亂.這種格式通常用于簡化的通信場景,其中客戶端和服務器之間的數據交換不需要復雜的結構

2.基于xml方式來傳輸

xml是通過成對的標簽來組織數據的,是一種經典的數據組織格式,在十幾二十年前是非常流行的,現在就比較少了,它和HTML的那個格式類似.

<result>

? ? ? ? ? ?<userID> 123</userID>

? ? ? ? ? ?<position>123°18′</position>

</result>

其中,標簽的名稱是啥,如何嵌套,都是可以自定義的,只要確保客戶端和服務器都遵循相同的數據格式和標簽定義,以保證數據的正確傳輸和解析.

雖然這套規則還是不夠簡潔高效,但它的結構性和自描述性使其在某些場景下仍然是一個不錯的選擇,特別是在需要高度結構化數據和元數據的情況下。

3.基于json的方式來傳輸

json是目前最流行,最廣泛的輕量級數據交換格式。它易于人閱讀和編寫,同時也易于機器解析和生成

{

? ?userID:123,

? ?position:123°18′

}

使用{ }作為邊界,{ }里面為鍵值對,鍵值對之間使用 , 來分割,鍵和值之間使用:來分割.

JSON的優點:

  1. 輕量性:JSON格式簡潔,沒有XML那么冗長,通常比XML文件更小。

  2. 易于閱讀和編寫:JSON的結構類似于編程語言中的結構,使得它易于人類閱讀和編寫。

  3. 靈活的格式:JSON支持各種數據類型,包括字符串、數字、數組、對象(也稱為字典或哈希表)、布爾值和null

  4. 與JavaScript的兼容性:JSON與JavaScript天然集成,可以直接被JavaScript解析為對象或序列化為字符串。

  5. 跨語言支持:許多編程語言提供了原生的庫來處理JSON,包括但不限于Python、Java、C#、Ruby等。

  6. 自描述:JSON對象是鍵值對的集合,使得數據結構清晰且易于理解。

  7. 不需要啟動和結束標簽:與XML不同,JSON不需要額外的開始和結束標簽來標識文檔。

  8. 高效的數據交換:JSON通常用于APIs,因其高效性而成為RESTful Web服務中數據交換的首選格式。

JSON的應用場景:

  1. Web API通信:作為客戶端和服務器之間數據交換的標準格式。

  2. 配置文件:存儲應用程序的配置信息。

  3. 數據存儲:作為輕量級的數據存儲格式,用于數據庫或文件系統。

  4. 消息隊列:在消息傳遞系統中作為消息的格式。

  5. 緩存:作為緩存數據的格式,因為它易于序列化和反序列化。

  6. 前端開發:在網頁開發中,JSON常用于與后端進行數據交換。

  7. 微服務架構:在微服務架構中,服務之間通過JSON交換數據。

  8. 移動應用開發:在移動應用中,JSON常用于客戶端和服務器之間的通信。

  9. 游戲開發:在游戲開發中,JSON用于存儲游戲數據和配置。

  10. 數據分析:在數據分析和機器學習中,JSON用于傳輸數據集或模型參數。

JSON的這些優點使其成為現代網絡應用中數據交換的首選格式,尤其是在需要快速、高效和跨語言兼容的場景中。 同時注意確保客服端和服務端規則的統一.

4.yaml的方式來傳輸數據

基于縮進的格式來組織數據的

result

? ?userID:123

? ?position:123°18′

它是通過縮進來表示包含/嵌套關系的,而xml是通過標簽來表示同時注意這個縮進是有講究的

  • 縮進:YAML嚴格使用空格進行縮進,通常是兩個空格作為一級縮進,且不允許混用空格和制表符(Tab)。
  • 一致性:整個文檔的縮進必須保持一致,否則會導致解析錯誤。
  • 空格敏感:除了縮進,YAML還對空格敏感,因此在鍵值對中使用空格需要特別注意。

YML的這些特性使其在需要高度可讀性和結構化的配置文件或數據表示時非常適用。?

5.protobuffer(pb)的方式來傳輸數據

前面幾種都是 文本格式,肉眼能看懂而 pb 是 二進制格式了,肉眼看不懂,博主這里也不好手搓出一個例子
pb 針對要傳輸的數據進一步的整理和壓縮了雖然可讀性不好,能夠把空間最充分的利用,最節省網絡帶寬,效率也最高 .

Pb雖然在人機交互方面不如文本格式直觀,但在機器之間傳輸數據時,其效率和性能優勢非常明顯。使用Pb時,首先需要定義數據結構的.proto文件,然后使用Pb工具生成相應語言的代碼,之后就可以使用這些代碼來序列化和反序列化數據。

由于Protobuf是二進制格式,確實無法直接提供一個手寫的示例,但定義數據結構的.proto文件示例如下:

syntax = "proto3";
package example;message Result {int32 userID = 1;string position = 2;
}

在這個例子中,Result是一個消息類型,包含一個整型的userID字段和一個字符串類型的position字段。字段后面的數字(如12)是字段的標簽,用于序列化時標識字段。

使用Protobuf時,需要通過編譯.proto文件生成對應的序列化和反序列化代碼,然后才能在程序中使用。

以上就是關于應用層協議的一點介紹,具體的內容,在博主總結完其余幾層協議和原理之后,會對應用層協議重點介紹.

二.傳輸層協議總結1

這里解釋一下由于TCP的內容比較復雜,所以這里就主要是對UDP協議的總結,博主將會在下一篇博客重點介紹TCP協議(這個非常非常重要,屬于是面試必考,大學考試的話也必考).

1.傳輸層的作用

傳輸層是OSI(開放系統互聯)七層模型和TCP/IP四層模型中的一個關鍵層次,它位于網絡層之上,應用層之下。傳輸層的主要作用是提供進程間的通信服務,負責在網絡中不同主機的應用程序之間建立、維護和終止通信連接

2.端口號.

傳輸層中有個非常重要的名詞就是端口號,端口號是網絡套接字(通常稱為套接字地址)的一個組成部分,用于區分同一IP地址上運行的不同網絡服務或進程。端口號(傳輸層)與IP地址(網絡層)一起構成了一個唯一的網絡端點,允許數據被正確地路由到正確的應用程序。

1.端口號的特性

1端口號的范圍

端口號是一個16位數字,所以它的范圍為 0 - 65535?其中,0到1023是眾所周知的端口(也叫系統端口或特權端口),通常被系統或者常見服務和應用程序使用.所以當我們寫自己的服務器系統的時候最好要避開這些端口號.

2. 使用命令行查看某個端口號是否被綁定

同一臺機器上,同一時刻,端口號不能被重復綁定,例如如果在一臺機器上進程A綁定了端口號8023,進程B也嘗試綁定端口號8023,就會綁定失敗.那我們該如何確定某個端口號被進程綁定了呢.

Windows?

netstat -ano | findstr [端口號]

Linux

netstat -tuln | grep [端口號]

這里以Windows舉例?

?就可以看到某個端口號是否被綁定

3.端口號在客服端和服務端的分配

客戶端通常在動態分配的端口號(臨時端口,通常在1024到65535之間)上發起通信,而服務器監聽在固定的端口號上。

4.多個進程是否能夠綁定同一個端口號?

前文提到雖然同一臺機器上,同一時刻,端口號不能被重復綁定,但是操作系統允許TCP和UDP套接字綁定到同一個端口,因為它們在協議層面上是獨立的,并且可以共存而不相互干擾當然可以使用是可以使用,但是盡量避免使用,畢竟端口號多著呢.你就算是服務器系統也不可能同時啟動六萬多個進程.這有助于提高系統的清晰性、安全性和性能,并減少潛在的沖突和混淆.

5.一個進程是否可以綁定多個端口號?

在實際應用中,一個進程綁定多個端口是常見的,尤其是在提供多種服務或需要處理大量并發連接的服務器上,每個服務綁定到不同的端口號并且也非常推薦使用.

舉個栗子

比如寫一個服務器程序,首先服務器需要有一個端口號,給客戶端提供業務功能,這樣的端口,稱為“業務端口” 給普通用戶用的
程序猿還需要能夠對這個服務器進行更精細的控制.
比如控制讓這個服務器重新加載配置/開啟某個功能/重新啟動/重新加載數據/修改某個選項設定...
這樣的操作,經常會通過網絡來進行操作,服務器就會另外綁定一個端口號,稱為"管理端口"

程序員想對這個服務器進行管理操作,就通過管理端口給服務器發送一些對應的請求,服務器執行對應的邏輯
給程序猿+運營人員例如搞個后門,給指定用戶的賬戶余額增加 1000.這樣的操作勢必要通過管理端口不能通過業務端口(萬一被玩家發現了!
日常開發會遇到一些 bug,需要去査看服務器的一些運行狀態 (比如服務器中的一些關鍵的變量是啥樣的值...服務器不能直接用 就需要調試器 去調試(調試器一調試就會把服務器阻塞住,無法給別的客戶端提供服務了)也會通過網絡的方式,給服務器發調試請求,服務器返回對應的關鍵信息,稱為"調試端口"

還有一些其他的方面這里就不多舉例,總之這種一個進程綁定多個端口是一種常見的做法,它提供了靈活性和安全性,有助于構建可維護和可擴展的服務器應用程序

3.UDP協議

UDP協議比較簡單,這里就簡單介紹

1.UDP的特點

1.無連接

UDP是一種無連接的協議,這意味著在數據傳輸之前,發送方和接收方之間不需要建立和維護一個連續的連接。發送端可以直接向接收端發送數據報,而無需事先通知或握手。這簡化了通信流程,減少了延遲,但也意味著發送方不知道數據是否成功到達目的地。

2.不可靠傳輸

UDP不提供像TCP那樣的數據包確認、重傳機制或錯誤恢復服務。數據報可能會在網絡中丟失、重復或亂序到達,UDP本身不負責解決這些問題。因此,數據的可靠傳輸需要由上層應用來保證,或者接受數據丟失的可能性

3.面向數據報

UDP是面向數據報的協議,它將應用程序的數據封裝成數據報(datagrams)進行傳輸。每個數據報都是獨立傳輸的單元,包含完整的源地址和目的地址信息。這使得UDP適合傳輸少量數據或對實時性要求高的應用。

4.全雙工

指的是數據可以同時在兩個方向上傳輸。在UDP中,既然沒有連接的概念,自然也沒有限制數據只能單向流動,所以UDP支持全雙工通信。發送方和接收方可以同時獨立地發送數據,而不需要等待對方的響應,這增強了協議的靈活性和效率。

2.UDP協議的格式

  1. 源端口(Source Port):占用16位,標識發送方的應用程序端口。這個字段是可選的,但當使用時,它標明了發送方進程的端口號,有助于接收方回復消息到正確的應用程序。如果未使用,該字段通常被置為0。

  2. 目的端口(Destination Port):同樣占用16位,表示接收方的應用程序端口。這個字段是必要的,確保數據能夠被正確地路由到接收端的指定應用程序。

  3. 長度(Length):占用16位,指示整個UDP數據報的長度,包括UDP頭部和數據部分。這個字段的單位是字節,因此最小的有效UDP數據報長度為8字節(僅頭部)。

  4. 校驗和(Checksum):占用16位,提供了一個基本的錯誤檢測機制。校驗和覆蓋UDP頭部和數據部分,以及一個偽頭部(包含IP頭部的部分信息),以確保數據的完整性。如果接收方計算的校驗和與數據包中的校驗和不匹配,該數據包將被丟棄。

?3.源端口 vs 目的端口

UDP源端口(Source Port)

  1. 標識性:源端口號通常用于標識發送數據報的本地應用程序或服務。
  2. 可選性:在UDP中,源端口號是可選的,應用程序可以選擇不指定源端口號,讓操作系統自動選擇一個臨時的源端口。
  3. 客戶端通信:當客戶端應用程序向服務器發送數據報時,通常需要指定一個源端口號,以便服務器能夠識別并可能需要向客戶端發送響應。
  4. 多任務處理:源端口號允許一臺主機上的多個應用程序同時進行通信。

UDP目的端口(Destination Port)

  1. 服務識別:目的端口號用于指定接收數據報的遠程服務或應用程序。例如,如果一個客戶端想要訪問服務器上的DNS服務,它會將目的端口號設置為53(DNS服務的標準端口)。
  2. 服務器監聽:服務器應用程序通常會監聽特定的端口,當它們接收到發往該端口的數據報時,會知道如何處理這些數據。
  3. 無連接:由于UDP是無連接的,目的端口號不用于建立或維護連接,而僅僅是為了將數據報路由到正確的服務或應用程序。

4.UDP長度

由于UDP數據報 = UDP報頭 + 載荷.而UDP長度表示的是整個UDP數據報的長度,而UDP長度最多為16位也就是65535即為64kb,所以傳輸數據時UDP最多傳輸的數據就為64kb不可以再多了,也正是因為這UDP數據報長度的制約導致了UDP無法傳輸數據量大的數據.

5.校驗和

數據在網絡的傳輸過程中,出錯是不可以避免的,例如發生比特翻轉等等,那么我們就需要對傳輸過來的數據進行校驗知道數據在傳輸過程中是否出錯,而UDP的校驗和就是通過CRC(循環冗余校驗)來完成的.

CRC是一種廣泛使用的錯誤檢測碼,通過對數據執行多項式除法生成校驗碼,以確保數據的完整性。

UDP校驗和的計算過程如下:

  1. 偽首部的添加:在計算校驗和時,UDP數據報前面會臨時添加一個偽首部,這個偽首部包含了源IP地址、目的IP地址和UDP長度等信息,但這個偽首部僅用于計算校驗和,并不隨數據報一起發送。

  2. 填充:如果UDP數據報的長度(包括偽首部、UDP首部和數據)不是16位的整數倍,則在數據報的末尾添加一個全零的字節進行填充。

  3. 計算校驗和:將整個UDP數據報(包括偽首部、UDP首部和數據)按照16位的單元進行累加,如果中間結果的高16位不為0,則繼續與低16位相加,重復此過程直到高16位為0。然后將得到的16位數值進行按位取反,得到的結果就是校驗和。

  4. 發送:發送方將計算得到的校驗和放入UDP數據報的校驗和字段中,然后發送整個UDP數據報。

  5. 接收:接收方在收到UDP數據報后,使用相同的過程重新計算校驗和,如果計算得到的校驗和與UDP數據報中的校驗和字段相同,則認為數據報未損壞;如果不同,則認為數據報在傳輸過程中可能出現了錯誤。

UDP校驗和雖然可以檢測許多常見的錯誤,但它不是百分百可靠,有些錯誤可能無法被檢測到。盡管如此,UDP校驗和提供了一種簡單、高效的錯誤檢測方法,適用于那些可以容忍一定錯誤率的實時或流式數據傳輸應用。

除了使用CRC,還有一種方法-- MD5,MD5是一種廣泛使用的哈希函數,它產生一個128位(16字節)的哈希值,通常用于驗證數據的完整性。不光是在UDP中使用于校驗和,在我們以后開發工作中,也算是會用到的一種方法.我們可以簡單了解一下,當然現在的MD5已經變得容易破解了,我們需要這種在對數據安全領域比較高的場景中,推薦使用更加安全的哈希函數

當使用MD5作為UDP數據報的校驗方法時,通常的做法是:

  1. 計算MD5哈希:發送方首先對UDP數據負載計算MD5哈希值。

  2. 附加MD5哈希:將計算得到的MD5哈希值作為UDP數據負載的一部分附加到原始數據之后。

  3. 傳輸:發送方將整個UDP數據報(包括附加的MD5哈希值)發送給接收方。

  4. 接收與驗證:接收方在收到UDP數據報后,會提取出數據負載,并對接收到的數據負載重新計算MD5哈希值。

  5. 比較哈希值:接收方比較重新計算的MD5哈希值與數據報中附帶的MD5哈希值。如果兩個哈希值相同,那么認為數據在傳輸過程中沒有被篡改;如果不同,那么數據可能已經被篡改,接收方應該丟棄該數據報。

6.應用場景

UDP(用戶數據報協議)由于其無連接、無狀態、不可靠的特性,適用于一些特定的應用場景,尤其是那些對實時性要求較高、能夠容忍一定數據丟失的場合。以下是UDP的一些典型應用場景:

  1. 實時應用:如視頻會議、IP電話(VoIP)、在線游戲等,這些應用對實時性的要求遠高于對數據完整性的要求。

  2. 網絡廣播:UDP支持廣播和多播,適用于需要向多個目的地同時發送數據的情況。

  3. DNS查詢:域名系統(DNS)通常使用UDP進行域名解析,因為DNS查詢通常是請求-響應模式,且響應數據量不大。

  4. 簡單網絡管理協議(SNMP):用于網絡管理,包括設備監控和數據收集,通常數據量較小。

  5. 流媒體傳輸:如音樂和視頻流,這些應用可以容忍偶爾的數據丟失,但需要快速傳輸。

  6. 遠程登錄和命令執行:如使用SSH(安全外殼協議)進行遠程登錄,雖然現代SSH協議也可以運行在TCP之上,但UDP提供了一種替代方案。

  7. TFTP(簡單文件傳輸協議):用于在客戶端和服務器之間進行簡單的文件傳輸,不需要復雜的連接管理。

  8. 網絡監控和診斷工具:如ping和traceroute,這些工具用于測試網絡連通性和路徑。

  9. 局域網(LAN)內的通信:在LAN中,由于網絡環境相對可靠,UDP的無連接特性可以提供更快的通信速度。

  10. 某些類型的在線游戲:特別是那些對實時性要求極高的游戲,可能會選擇UDP來減少延遲。

  11. 內容分發網絡(CDN):在某些情況下,CDN可能會使用UDP來傳輸數據,以減少處理開銷。

  12. DHCP(動態主機配置協議):用于自動分配IP地址給網絡中的設備。

  13. VoIP系統中的某些控制信令:雖然VoIP通話本身可能使用RTP(實時傳輸協議)運行在UDP之上,但相關的信令協議可能也會直接使用UDP。

UDP的應用場景通常與它的簡單性和低延遲特性有關。盡管UDP不提供TCP那樣的可靠性保證,但在很多情況下,這些保證不是必需的,或者可以在應用層實現。在選擇UDP還是TCP時,需要根據具體的應用需求來決定。

以上就是關于UDP協議和一些應用層格式的一點小小的介紹,感謝你的閱讀,祝你一天愉快

? ?

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

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

相關文章

如何在cPanel面板中開啟雙因素身份驗證

本周有一個客戶&#xff0c;購買Hostease的主機&#xff0c; 客戶購買的是Linux虛擬主機&#xff0c;帶cPanel面板的。詢問我們的在線客服&#xff0c;如何加強他的cPanel的安全性。cPanel的雙因素身份驗證功能可以幫助幫客戶加固安全性。 雙因素身份驗證(2FA)是一種增強安全性…

【虛擬機軟件】 VMware Workstation Pro 17 新建 Linux 虛擬機教程(CentOS 7 版本)

文章目錄 下載安裝 VMware Workstation Pro 17 軟件下載 Linux 的 ISO 映像文件Linux版本選擇 新建虛擬機準備配置新建安裝 后續設置文章導航 我是一名立志把細節說清楚的博主&#xff0c;歡迎【關注】&#x1f389; ~ 原創不易&#xff0c; 如果有幫助 &#xff0c;記得【點贊…

slam14講(第8講、前端里程計)LK光流、直接法

直接法的引出 因為第7講大部分都是講特征點法&#xff0c;通過提取orb特征點和點的描述子&#xff0c;來構建兩幀圖像之間的特征點對應關系。這種方法會有缺點&#xff1a; 關鍵點和描述子提取計算耗時&#xff0c;如果相機的頻率高&#xff0c;則slam算法大部分耗時被占。特…

com.alibaba.fastjson.JSONObject循環給同一對象賦值會出現“$ref“:“$[0]“現象問題

1、問題描述 有些場景下&#xff0c;我們會選擇用JSONObject代替Map來處理業務邏輯&#xff0c;但是使用JSONObject時有一個需要注意的地方&#xff1a;在處理JSONObject對象時&#xff0c;引用的com.alibaba.fastjson.JSONObject&#xff0c;在一個集合中&#xff0c;循環給這…

【MySQL精通之路】InnoDB(10)-行格式

目錄 1.表數據結構 1.1 聚集索引數據結構 1.2 輔助索引數據結構 2.行格式 2.1 REDUNDANT行格式 2.2 REDUNDANT存儲特性 2.3 COMPACT行格式 2.4 COMPACT存儲特性 2.5 DYNAMIC行格式 2.6 DYNAMIC存儲特性 2.7 COMPRESSED行格式 2.8 COMPRESSED存儲特性 3.定義表格的…

數組-區間合并

一、題目描述 二、題目思路 這里提供滿足基本要求的解題思路&#xff1a; 1.先對列表內按照start大小升序排序&#xff0c;這里創建Comparator接口的實現類&#xff0c;重寫compare方法。 2.遍歷intervals&#xff0c;設置laststart、lastend兩個變量與當前區間相比較&#…

Ansible實戰YAML語言完成apache的部署,配置,啟動全過程

&#x1f3e1;作者主頁&#xff1a;點擊&#xff01; &#x1f3dd;?Ansible專欄&#xff1a;點擊&#xff01; ??創作時間&#xff1a;2024年5月24日15點59分 目錄 &#x1f4af;趣站推薦&#x1f4af; &#x1f38a;前言 ??YAML語言回顧 &#x1f386;1.編寫YAML文…

centos 安裝nginx 并配置https ssl

進入你要安裝的目錄 一般是/usr/local/ wget https://nginx.org/download/nginx-1.24.0.tar.gz解壓安裝包&#xff1a;使用以下命令解壓下載的Nginx安裝包&#xff1a; tar -zxvf nginx-1.24.0.tar.gz在編譯和安裝Nginx之前&#xff0c;確保您的系統上已安裝了必要的編譯工具和…

flume channel和interceptor簡介及官方用例

一、Flume Channels channel是在代理上暫存事件的存儲庫。Source 添加事件&#xff0c;Sink 將其刪除。 1、Memory Channel 事件存儲在具有可配置最大大小的內存中隊列中。它非常適合需要更高吞吐量的流&#xff0c;但在agent發生故障時會丟失暫存數據 Property Name Defau…

k近鄰和kd樹

K近鄰 選取k值的時候可以采用交叉驗證的方法 一般采用歐氏距離 kd樹 采用樹這個特殊的數據結構來實現k近鄰算法 先假設是二維的情況 下面講解kd樹的完整構造過程 找這個中位數是按照每棵子樹來創建的 前提是已經有了一棵kd樹,然后來一個實例點

java組合設計模式Composite Pattern

組合設計模式&#xff08;Composite Pattern&#xff09;是一種結構型設計模式&#xff0c;它允許你將對象組合成樹形結構來表示“部分-整體”的層次結構。組合模式使得客戶端對單個對象和組合對象的使用具有一致性。 // Component - 圖形接口 interface Graphic {void draw()…

Python UDP編程簡單實例

TCP是建立可靠的連接&#xff0c;并且通信雙方都可以以流的形式發送數據。 相對于TCP&#xff0c;UDP則是面向無連接的協議&#xff0c;不需要建立連接&#xff0c;只需要知道對方IP地址和端口號&#xff0c;就可以直接發送數據包。但是只管發送不保證到達。 雖然UDP傳輸數據…

Docker快速部署Seata的TC服務以及微服務引入Seata教程

目錄 一、使用docker部署Seata的TC服務 1、拉取TC服務鏡像 2、創建并運行容器 ?3、修改配置文件 4、在Nacos中添加TC服務的配置 5、重啟TC服務 二、微服務集成Seata 1、引入依賴 2、修改配置文件 Seata是阿里的一個開源的分布式事務解決方案&#xff0c;能夠為分布…

STM32學習和實踐筆記(31):輸入捕獲實驗

1.輸入捕獲介紹 在定時器中斷實驗章節中我們介紹了通用定時器具有多種功能&#xff0c;輸入捕獲就是其中一種。STM32F1除了基本定時器TIM6和TIM7&#xff0c;其他定時器都具有輸入捕獲功能。輸入捕獲可以對輸入的信號的上升沿&#xff0c;下降沿或者雙邊沿進行捕獲&#xff0c;…

【博客主頁】博客主旨 精華

前言 與博客園不同, 最近CSDN在進行資本化的轉型.其一部分的VIP代碼和小冊我也有相關消費, 個人認為是一部分做的比較成過, 另一部分又不是特別成功. 其CSDN博客已經失去其原本技術交流的意義, 變成一種免費的知識引流和收費交流. 這其實與我們的開源社區背道而馳, 但是又吸引…

世界電信日 | 紫光展銳以科技創新支撐數字經濟可持續發展

專注科技創新&#xff0c;打造全球數字經濟技術基石 紫光展銳堅持科技創新,為數字經濟蓬勃發展提供基石力量。 面對5G-A技術的巨大潛力&#xff0c;紫光展銳與眾多生態伙伴緊密合作&#xff0c;積極推動5G-A的商用進程。紫光展銳提出的兩項R18 eRedCap演進方案已被3GPP標準采…

為什么要實現設備之間的互通?

設備之間的互通是電信設備的普遍性要求&#xff0c;特別是在接入網領域中&#xff0c;不同廠商的局端設備與用戶端&#xff08;終端&#xff09;設備之間的互通顯得尤其重要。 一、互通能為產業鏈的各個環節帶寬積極影響。 &#xff08;1&#xff09;對用戶而言&#xff0c;互…

安裝新版的Ubuntu WSL以使能BBR擁塞控制算法

【多次嘗試成功的方案】通過> wsl - -list -online列出可以安裝的版本&#xff0c;用命令> wsl --install -d Ubuntu-24.04 安裝。 【未成功的方案】通過掛在ubuntu24.04.iso到E盤后&#xff0c;用命令> wsl --import Ubuntu24.04 C:\WSL\Ubuntu24.04\ E:\ --versio…

Redis系統架構中各個處理模塊是干什么的?no.19

Redis 系統架構 通過前面的學習&#xff0c;相信你已經掌握了 Redis 的原理、數據類型及訪問協議等內容。本課時&#xff0c;我將進一步分析 Redis 的系統架構&#xff0c;重點講解 Redis 系統架構的事件處理機制、數據管理、功能擴展、系統擴展等內容。 事件處理機制 Redis…

API-BigInteger、BigDecimal

BigInteger&#xff1a; demo1: package BigInteger;import java.math.BigInteger; import java.util.Random;public class demo1 {public static void main(String[] args) {//獲取一個隨機最大整數BigInteger bd1 new BigInteger(5, new Random());System.out.println(bd1…