Linux--網絡通信(一)概述

網絡通信概述

網絡通信本質上是一種進程間通信是位于網絡中不同主機上的進程之間的通信,屬于 IPC 的一種, 通常稱為 socket IPC。所以網絡通信是為了解決在網絡環境中,不同主機上的應用程序之間的通信問題。
大概可以分為三個層次,如下所示:
1 )、硬件層:網卡設備,收發網絡數據
2 )、驅動層:網卡驅動( Linux 內核網卡驅動代碼)
3 )、應用層:上層應用程序(調用 socket 接口或更高級別接口實現網絡相關應用程序)
在硬件上,兩臺主機都提供了網卡設備,也就滿足了進行網絡通信最基本的要求,網卡設備是實現網絡數據收發的硬件基礎。并且通信的兩臺主機之間需要建立網絡連接,這樣兩臺主機之間才可以進行數據傳輸,譬如通過網線進行數據傳輸。網絡數據的傳輸媒介有很多種,大體上分為有線傳輸(譬如雙絞線網線、光纖等)和無線傳輸(譬如 WIFI 、藍牙、 ZigBee 4G/5G/GPRS 等), PC 機通常使用有線網絡,而手機等移動設備通常使用無線網絡。
在內核層,提供了網卡驅動程序,可以驅動底層網卡硬件設備,同時向應用層提供 socket 接口。
在應用層,應用程序基于內核提供的 socket 接口進行應用編程,實現自己的網絡應用程序。需要注意的是,socket 接口是內核向應用層提供的一套網絡編程接口,所以我們學習網絡編程其實是學習 socket 編程,如何基于 socket 接口編寫應用程序。
除了 socket 接口之外,在應用層通常還會使用一些更為高級的編程接口,譬如 http 、網絡控件等,那么這些接口實際上是對 socket 接口的一種更高級別的封裝。

1.1? ? 所有的數據傳輸都有三要素:目的長度

所以,在網絡傳輸中需要使用“ IP 和端口”來表示源或目的。

1.2? sever 和 client?

1.3? 網絡互聯模型:OSI七層模型

七層模型,亦稱 OSI Open System Interconnection )。 OSI 七層參考模型是國際標準化組織( ISO )制定的一個用于計算機或通信系統間網絡互聯的標準體系,一般稱為 OSI 參考模型或七層模型。 OSI 七層模型是一個網絡互連模型,從上到下依次是:
從上可知,網絡通信的模型分了很多層,為什么需要分為這么多層次?原因就在于網絡是一種非常復雜的通信,需要進行分層,每一層需要去實現不同的功能。下面我們來詳細看下 OSI 參考模型中每一層的作用。
?兩種傳輸方式:TCP/UDP
在一般的網絡書籍中,TCP/IP五層模型 分為 5 層,事實上, TCP/IP 模型是 OSI 模型的簡化版本
應用層:它是體系結構中的最高層,直接為用戶的應用進程(例如電子郵件、 文件傳輸和終端仿真)提供服務。在因特網中的應用層協議很多,如支持萬維網應用的 HTTP 協議,支持電子郵件的 SMTP 協議,支持文件傳送的 FTP 協議, DNS ,POP3, SNMP Telnet 等等。
運輸層:負責向兩個主機中進程之間的通信提供服務。
運輸層主要使用以下兩種協議:
傳輸控制協議 TCP(Transmission Control Protocol) :面向連接的,數據傳輸的單位是報文段,能夠提供可靠的交付。
用戶數據包協議 UDP(User Datagram Protocol) 無連接的,數據傳輸的單位是用戶數據報,不保證提供可靠的交付,只能提供“ 盡最大努力交付
網絡層:負責將被稱為數據包( datagram )的網絡層分組從一臺主機移動到另一臺主機。
鏈路層:因特網的網絡層通過源和目的地之間的一系列路由器路由數據報。
物理層:在物理層上所傳數據的單位是比特。物理層的任務就是透明地傳送比特流。
這些層對于初學者來說很難理解,我們只需要知道:我們需要使用“運輸層” 編寫應用程序,我們的應用程序位于“應用層”。使用“運輸層”時,可以選擇 TCP 協議,也可以選擇 UDP 協議。
數據的封裝與拆裝
網絡通信中,數據從上層到下層交付時,要進行封裝;同理,當目標主機接收到數據時,數據由下層傳遞給上層時需要進行拆封。這就是數據的封裝與拆封。
1)當用戶發送數據時,將數據向下交給傳輸層,但是在交給傳輸層之前,應用層相關協議會對用戶數據進行封裝,譬如 MQTT HTTP 等協議,其實就是在用戶數據前添加一個應用程序頭部,這是處于應用層的操作,最后應用層通過調用傳輸層接口來將封裝好的數據交給傳輸層。
2)傳輸層會在數據前面加上傳輸層首部(此處以 TCP 協議為例,圖中的傳輸層首部為 TCP 首部,也可以是 UDP 首部),然后向下交給網絡層。
3)同樣地,網絡層會在數據前面加上網絡層首部( IP 首部),然后將數據向下交給鏈路層,鏈路層會對數據進行最后一次封裝,即在數據前面加上鏈路層首部(此處使用以太網接口為例,對應以太網首部),然后將數據交給網卡。
4)最后,由網卡硬件設備將數據轉換成物理鏈路上的電平信號,數據就這樣被發送到了網絡中。這就是網絡數據的發送過程,從圖中可以看到,各層協議均會對數據進行相應的封裝,可以概括為 TCP/IP 模型中的各層協議對數據進行封裝的過程。
5)以上便是網絡數據的封裝過程,當數據被目標主機接收到之后,會進行相反的拆封過程,將每一層的首部進行拆解最終得到用戶數據。所以,數據的接收過程與發送過程正好相反,可以概括為 TCP/IP 模型中的各層協議對數據進行解析的過程。

1.4? IP 地址

Internet 依靠 TCP/IP 協議,在全球范圍內實現不同硬件結構、不同操作系統、不同網絡系統的主機之間的互聯。在 Internet 上,每一個節點都依靠唯一的 IP 地址相互區分和相互聯系, IP 地址用于標識互聯網中的每臺主機的身份,設計人員為每個接入網絡中的主機都分配一個 IP 地址( Internet Protocol Address ),只有合法的 IP 地址才能接入互聯網中并且與其他主機進行網絡通信, IP 地址是軟件地址,不是硬件地址,硬件 MAC 地址是存儲在網卡中的,應用于局域網中尋找目標主機。
IP地址的編址方式
互聯網中的每一臺主機都需要一個唯一的 IP 地址以標識自己的身份,那么 IP 地址究竟是什么,如何去定義一個 IP 呢?我們需要對 IP 地址的編址方式進行了解。
傳統的 IP 地址是一個 32 位二進制數的地址,也叫 IPv4 地址,由 4 8 位字段組成。除了 IPv4 之外, 還有 IPv6 IPv6 采用 128 位地址長度, 8 16 位字段組成,本小節我們暫時不去理會 IPv6 地址。
在網絡通信數據包中,IP 地址以 32 位二進制的形式表示;而在人機交互中,通常使用點分十進制方式表示,譬如 192.168.1.1 ,這就是點分十進制的表示方式。
IP 地址中的 32 位實際上包含 2 部分,分別為網絡地址和主機地址,可通過子網掩碼來確定網絡地址和主機地址分別占用多少位。
補充:
  1. 子網掩碼:

    • 子網掩碼也是32位的二進制數,表示方式與IP地址相同(如255.255.255.0)。
    • 子網掩碼中的連續的1表示網絡部分,連續的0表示主機部分。

子網掩碼的主要作用是確定一個IP地址屬于哪個子網,從而實現網絡分段和管理。具體來說,子網掩碼將IP地址劃分為網絡地址和主機地址兩部分:

  • 網絡地址:子網中的所有主機共有的部分,用于標識子網。
  • 主機地址:子網中每個主機獨有的部分,用于標識子網內的具體主機。

? ? 2.子網劃分:

通過使用子網掩碼,可以將一個大網絡劃分為多個較小的子網,每個子網有自己的網絡地址和主機范圍。這種劃分有助于:

  • 減少廣播域:廣播只在一個子網內傳播,減少網絡流量。
  • 提高網絡安全:不同子網可以有不同的訪問控制策略。
  • 更好地管理網絡:網絡劃分使得網絡管理更加靈活和高效。

IP 地址的分類
根據 IP 地址中網絡地址和主機地址兩部分分別占多少位的不同,將 IP 地址劃分為 5 類,分別為 A 、B、 C D E 五類。
A 類地址范圍為: 1.0.0.1 ~ 127.255.255.254;默認網絡掩碼為: 255.0.0.0
B 類地址范圍:128.0.0.1 ~ 191.255.255.254;默認網絡掩碼為: 255.255.0.0
C 類地址范圍為:192.0.0.1 ~ 223.255.255.254;默認網絡掩碼為: 255.255.255.0
D 類地址范圍: 224.0.0.1 ~ 239.255.255.254;
E 類地址范圍: 240.0.0.1 ~ 255.255.255.254;
如何判斷 2 IP 地址是否在同一個網段內
如何判斷兩個 IP 地址是否處于同一個子網,可通過網絡標識來進行判斷,網絡標識定義如下:
網絡標識 = IP 地址 & 子網掩碼
2 IP 地址的網絡標識相同,那么它們就處于同一網絡。譬如 192.168.1.50 192.168.1.100 ,這 2 個都是 C 類地址,對應的子網掩碼為 255.255.255.0 ,很明顯,這兩個 IP 地址與子網掩碼進行按位與操作時得到的結果(網絡標識)是一樣的,所以它們處于同一網絡。

1.5、TCP/IP協議

TCP/IP 協議它其實是一個協議族,包含了眾多的協議,譬如應用層協議 HTTP 、 FTP、 MQTT …以及傳輸層協議 TCP UDP 等這些都屬于 TCP/IP 協議
所以,我們一般說 TCP/IP 協議,它不是指某一個具體的網絡協議,而是一個協議族。網絡通信當中涉及到的網絡協議實在太多了,對于應用開發來說,可能使用更多的是應用層協議,譬如HTTP FTP SMTP 等
HTTP 協議
HTTP 超文本傳輸協議(英文: HyperText Transfer Protocol ,縮寫: HTTP )是一種用于分布式、協作式 和超媒體信息系統的應用層協議。HTTP 是萬維網數據通信的基礎。 HTTP 的應用最為廣泛,譬如大家經常會打開網頁瀏覽器查詢資料,通過瀏覽器便可開啟 HTTP 通信。
HTTP 協議工作于客戶端(用戶)、服務器端(網站)模式下,瀏覽器作為 HTTP 客戶端通過 URL 向HTTP 服務端即 WEB 服務器發送請求。 Web 服務器根據接收到的請求后,向客戶端發送響應信息。借助這種瀏覽器和服務器之間的 HTTP 通信,我們能夠足不出戶地獲取網絡中的各種信息。
FTP 協議
FTP 協議的英文全稱為 File Transfer Protocol ,簡稱為 FTP ,它是一種文件傳輸協議,從一個主機向一 個主機傳輸文件的協議。FTP 協議同樣也是基于客戶端 - 服務器模式,在客戶端和服務器之間進行文件傳輸, 譬如我們通常會使用 FTP 協議在兩臺主機之間進行文件傳輸,譬如一臺 Ubuntu 系統主機和一臺 Windows 系統主機,將一臺主機作為 FTP 服務器、另一臺主機作為 FTP 客戶端,建立 FTP 連接之后,客戶端可以從服務器下載文件,同樣也可以將文件上傳至服務器。
FTP 除了基本的文件上傳 / 下載功能外,還有目錄操作、權限設置、身份驗證等機制,許多網盤的文件傳輸功能都是基于 FTP 實現的。
TCP 協議
TCP Transmission Control Protocol ,傳輸控制協議)是一種面向連接的、可靠的、全雙工的基于 IP 的傳輸協議。 TCP 協議工作在傳輸層,對上服務 socket 接口,對下調用 IP 層(網絡層)。
關于 TCP 協議我們需要理解的重點如下:
①、 TCP 協議工作在傳輸層,對上服務 socket 接口,對下調用 IP 層;
②、 TCP 是一種面向連接的傳輸協議,通信之前必須通過三次握手與客戶端建立連接關系后才可通信;
③、 TCP 協議提供可靠傳輸,不怕丟包、亂序。
????????TCP 協議如何保證可靠傳輸?
①、 TCP 協議采用發送應答機制,即發送端發送的每個 TCP 報文段都必須得到接收方的應答,才能認
為這個 TCP 報文段傳輸成功。
②、 TCP 協議采用超時重傳機制,發送端在發送出一個 TCP 報文段之后啟動定時器,如果在定時時間
內未收到應答,它將重新發送該報文段。
③、由于 TCP 報文段最終是以 IP 數據報發送的,而 IP 數據報到達接收端可能亂序、重復、所以 TCP
協議還會將接收到的 TCP 報文段重排、整理、再交付給應用層。
????????TCP 報文格式
當數據由上層發送到傳輸層時,數據會被封裝為 TCP 數據段,我們將其稱為 TCP 報文(或 TCP 報文段), TCP 報文由 TCP 首部 + 數據區域組成,一般 TCP 首部通常為 20 個字節大小,具體格式如下圖所示:
????????源端口號和目標端口號
源端口號和目標端口號各占 2 個字節,一個 4 個字節
每個 TCP 報文都包含源主機和目標主機的端口號,用于尋找發送端和接收端應用進程,這兩個值加上 IP 首部中的源 IP 地址和目標 IP 地址就能確定唯一一個 TCP 連接。有時一個 IP 地址和一個端口號也稱為 socket (插口)。
????????建立 TCP 連接:三次握手
TCP 協議是一個面向連接的協議,雙方在進行網絡通信之間,都必須先在雙方之間建立一條連接,俗稱“握手”“三次握手”其實是指建立 TCP 連接的一個過程,通信雙方建立一個 TCP 連接需要經過“三次握手”這樣一個過程。
首先建立連接的過程是由客戶端發起,而服務器會時刻監聽、等待著客戶端的連接,其示意圖如下所示:
TCP 連接一般來說會經歷以下過程:
? 第一次握手
客戶端將 TCP 報文標志位 SYN(Synchronize,同步) 置為 1 ,隨機產生一個序號值 seq=J ,保存在 TCP 首部的序列號 (Sequence Number)字段里,指明客戶端打算連接的服務器的端口,并將該數據包發送給服務器端,發送完畢后,客戶端進入 SYN_SENT 狀態,等待服務器端確認。
? 第二次握手
服務器端收到數據包后由標志位 SYN=1 知道客戶端請求建立連接,服務器端將 TCP 報文標志位 SYN 和 ACK 都置為 1 ack=J+1 ,隨機產生一個序號值 seq=K ,并將該數據包發送給客戶端以確認連接請求,服務器端進入 SYN_RCVD 狀態。
? 第三次握手
客戶端收到確認后,檢查 ack 是否為 J+1 ACK 是否為 1 ,如果正確則將標志位 ACK 置為 1 ack=K+1 ,并將該數據包發送給服務器端,服務器端檢查 ack 是否為 K+1 ACK 是否為 1 ,如果正確則連接建立成功,
客戶端和服務器端進入 ESTABLISHED 狀態,完成三次握手,隨后客戶端與服務器端之間可以開始傳輸數據了。在完成握手后,客戶端與服務器就成功建立了連接,同時雙方都得到了彼此的窗口大小,序列號等信息,在傳輸 TCP 報文段的時候,每個 TCP 報文段首部的 SYN 標志都會被置 0 ,因為它只用于發起連接,同步序號。
注意:上面寫的 ack 和 ACK,不是同一個概念:
小寫的 ack 代表的是頭部的確認號 Acknowledge number,ack。
大寫的 ACK,則是 TCP 首部的標志位,用于標志的 TCP 包是否對上一個包進行了確認操作,如果確認 了,則把 ACK 標志位設置成 1。
總結梳理:
發起:客戶端發起第一次握手,將報文中的同步標志位置1,并隨機產生一個序號,告訴服務端我要與你的某一個端口創建連接了;
應答:服務端收到數據包后根據同步標志位知道了客戶端在請求建立連接,服務端發起第二次握手,將報文標志位SYN和應答位ACK都置1,告訴客戶端我確認收到你的請求了;
連接:客戶端收到應答報文后,檢查應答標志位是否為1,是的話就發送帶有特定確認序號的數據包,服務端再檢查一下無誤就成功建立連接。這一次握手就是互相最后再確認一下。
為什么需要三次握手?
其實 TCP 三次握手過程跟現實生活中的人與人之間的電話交流是很類似的,譬如 A 打電話給 B
A :“喂,你能聽到我的聲音嗎?
B :“我聽得到呀,你能聽到我的聲音嗎?”
A :“我能聽到你,………”
……
經過三次的互相確認,大家就會認為對方對聽的到自己說話,才開始接下來的溝通交流,否則,如果不 進行確認,那么你在說話的時候,對方不一定能聽到你的聲音。所以,TCP 的三次握手是為了保證傳輸的安全、可靠。
關閉 TCP 連接:四次揮手
除了“三次握手”,還有“四次揮手”,“四次揮手”(有一些書也會稱為四次握手)其實是指關閉 TCP
連接的一個過程,當通信雙方需要關閉 TCP 連接時需要經過“四次揮手”這樣一個過程。
四次揮手即終止 TCP 連接,就是指斷開一個 TCP 連接時,需要客戶端和服務端總共發送 4 個包以確認連接的斷開。在 socket 編程中,這一過程由客戶端或服務端任一方執行 close 來觸發。
由于 TCP 連接是全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成數據發送任務后,發送一個 FIN 來終止這一方向的連接,收到一個 FIN 只是意味著這一方向上沒有數據流動了,即不會再收到數據了,但是在這個 TCP 連接上仍然能夠發送數據,直到這一方向也發送了 FIN 。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉。
? 第一次揮手
Client 端發起揮手請求,向 Server 端發出一個 FIN 報文段主動進行關閉連接,此時報文段的 FIN 標志位被設置為 1 。此時, Client 端進入 FIN_WAIT_1 狀態,這表示 Client 端沒有數據要發送給 Server 端了。
? 第二次揮手
Server 端收到了 Client 端發送的 FIN 報文段,向 Client 端返回一個 ACK 報文段,此時報文段的 ACK 標志位被設置為 1 ack 設為 seq 1 Client 端進入 FIN_WAIT_2 狀態, Server 端告訴 Client 端,我確認并同意你的關閉請求。
? 第三次揮手
Server 端向 Client 端發送一個 FIN 報文段請求關閉連接,此時報文段的 FIN 標志位被設置為 1 ,同時 Client 端進入 LAST_ACK 狀態。
? 第四次揮手
Client 端收到 Server 端發送的 FIN 報文段后,向 Server 端發送 ACK 報文段(此時報文段的 ACK 標志 位被設置為 1 ),然后 Client 端進入 TIME_WAIT 狀態。 Server 端收到 Client 端的 ACK 報文段以后,就關 閉連接。此時,Client 端等待 2MSL 的時間后依然沒有收到回復,則證明 Server 端已正常關閉,那好, Client 端也可以關閉連接了。
總結:本質上,TCP協議中的揮手握手的目的就是確保通信的雙方對連接的理解狀態保持一致,也就是實現雙方對連接狀態的同步。
UDP 協議
除了 TCP 協議外,還有 UDP 協議,想必大家都聽過說, UDP User Datagram Protocol 的簡稱,中文名是用戶數據報協議,是一種無連接、不可靠的協議,同樣它也是工作在傳順層。它只是簡單地實現從一端主機到另一端主機的數據傳輸功能,這些數據通過 IP 層發送,在網絡中傳輸,到達目標主機的順序是無法預知的,因此需要應用程序對這些數據進行排序處理,這就帶來了很大的不方便,此外,UDP 協議更沒有 流量控制、擁塞控制等功能,在發送的一端,UDP 只是把上層應用的數據封裝到 UDP 報文中,在差錯檢測方面,僅僅是對數據進行了簡單的校驗,然后將其封裝到 IP 數據報中發送出去。而在接收端,無論是否收到數據,它都不會產生一個應答發送給源主機,并且如果接收到數據發送校驗錯誤,那么接收端就會丟棄該UDP 報文,也不會告訴源主機,這樣子傳輸的數據是無法保障其準確性的,如果想要其準確性,那么就需要應用程序來保障了。
UDP 雖然有很多缺點,但也有自己的優點,所以它也有很多的應用場合,因為在如今的網絡環境下, UDP 協議傳輸出現錯誤的概率是很小的,并且它的實時性是非常好,常用于實時視頻的傳輸,比如直播、 網絡電話等,因為即使是出現了數據丟失的情況,導致視頻卡幀,這也不是什么大不了的事情,所以,UDP協議還是會被應用與對傳輸速度有要求,并且可以容忍出現差錯的數據傳輸中。
?TCP UDP 原理上的區別
TCP 向它的應用程序提供了面向連接的服務。這種服務有 2 個特點:可靠傳輸、流量控制(即發送方/ 接收方速率匹配)。它包括了應用層報文劃分為短報文,并提供擁塞控制機制。
UDP 協議向它的應用程序提供無連接服務。它沒有可靠性,沒有流量控制,也沒有擁塞控制。
????????既然 TCP 提供了可靠數據傳輸服務,而 UDP 不能提供,那么 TCP 是否總是首選呢?
答案是否定的,因為有許多應用更適合用 UDP ,舉個例子:視頻通話時,使用 UDP ,偶爾的丟包、偶爾的花屏時可以忍受的;如果使用 TCP ,每個數據包都要確保可靠傳輸,當它出錯時就重傳,這會導致后續的數據包被阻滯,視頻效果反而不好。TCP保證數據的質、UDP保證數據的速和量。
使用 UDP 時,有如下特點:
1)關于何時發送什么數據控制的更為精細
采用 UDP 時只要應用進程將數據傳遞給 UDP UDP 就會立即將其傳遞給網絡層。而 TCP 有重傳機制,而不管可靠交付需要多長時間。但是實時應用通常不希望過分的延遲報文段的傳送,且能容忍一部分數據丟失。
2)無需建立連接,不會引入建立連接時的延遲。
3)無連接狀態,能支持更多的活躍客戶。
4)分組首部開銷較小。
端口號的概念
互聯網中的每一臺主機都需要一個唯一的 IP 地址以標識自己的身份,網絡中傳輸的數據包通過 IP 地址找到對應的目標主機;一臺主機通常只有一個 IP 地址,但主機上運行的網絡進程卻通常不止一個,譬如 Windows 電腦上運行著 QQ 、微信、釘釘、網頁瀏覽器等,這些進程都需要進行網
絡連接,它們都可通過網絡發送 / 接收數據,那么這里就有一個問題?主機接收到網絡數據之后,如何確定該數據是哪個進程對應的接收數據呢?其實就是通常端口號來確定的。

端口號本質上就是一個數字編號,用來在一臺主機中唯一標識一個能上網(能夠進行網絡通信)的進程,端口號的取值范圍為 0~65535 。一臺主機通常只有一個 IP 地址,但是可能有多個端口號,每個端口號表示一個能上網的進程。一臺擁有 IP 地址的主機可以提供許多服務,比如 Web 服務、 FTP 服務、 SMTP 服務等,這些服務都是能夠進行網絡通信的進程,IP 地址只能區分網絡中不同的主機,并不能區分主機中的這些進程,顯然不能只靠 IP 地址,因此才有了端口號。通過“ IP 地址+端口號”來區分主機不同的進程。

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

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

相關文章

優化關聯查詢

三個表的創建語句 CREATE TABLE test.afx_output_source_item (cheadguid INT NOT NULL,goodsid INT NULL,goodsno VARCHAR(45) NULL,goodsname VARCHAR(45) NULL,model VARCHAR(45) NULL,goodstaxno VARCHAR(45) NULL,PRIMARY KEY (cheadguid));CREATE TABLE test.afx_output…

23種設計模式之一————外觀模式詳細介紹與講解

外觀模式詳細講解 一、概念二、 外觀模式結構核心思想及解釋模式的UML類圖模式角色應用場景模式優點模式缺點 三、實例演示圖示代碼展示運行結果 一、概念 外觀模式(Facade Pattern)是一種結構型設計模式,它提供了一個統一的接口&#xff0c…

【問題解決】Android Studio Jellyfish新建Kotlin項目后Gradle Sync及Maven下載很慢

創建新項目之后,Gradle Sync和Build都很慢,因為下載Gradle和Maven等工具。 代碼默認配置 settings.gradle.kts pluginManagement {repositories {google {content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.g…

ASSM是Automatic Segment Space Management(自動段空間管理)解析

ASSM是Automatic Segment Space Management(自動段空間管理)的縮寫,是Oracle數據庫引入的一項重要特性,首次出現在Oracle 9i中。ASSM旨在簡化空間管理和提高數據庫性能,特別是對于表和索引段的空間分配和回收過程。 在…

Android Activity 設計詳解

文章目錄 Android Activity 設計說明1. Activity 的生命周期2. Activity 的啟動模式3. Activity 的通信4. Activity 的布局和視圖管理5. Activity 的配置變化處理6. Activity 的保存和恢復狀態7. Activity 的任務和返回棧 總結 Android Activity 設計說明 在 Android 中&#…

Ansible01-Ansible的概述、實驗環境初始化、Inventory

目錄 寫在前面1. Ansible是什么1.1 簡介與來歷1.2 Ansible的特點1.3Ansible的架構與工作流程1.3.1 ansible 任務執行模式1.3.2 ansible 執行流程1.4 Ansible的模塊 2. Ansible實驗初始化2.1 實驗環境2.2Ansible的安裝2.2.1 Ansible的程序結構 2.3 修改Ansible配置文件2.3.1 配置…

【408精華知識】頁、頁面、頁框、頁幀、內存塊、物理塊、物理頁面還傻傻分不清?

在做題過程中,我們經常能看到頁、頁框、塊等概念,初接觸時,常感覺傻傻分不清,這篇文章將簡潔地介紹它們之間的聯系與區別。 這些概念之間的根本區別,在于是物理上的概念還是邏輯上的概念,也即是虛地址還是實…

匯聚榮:新手做拼多多應該注意哪些事項?

新手在拼多多開店,面臨的是競爭激烈的市場和復雜的運營規則。要想在這個平臺上脫穎而出,必須注意以下幾個關鍵事項。 一、市場調研與定位 深入了解市場需求和競爭對手情況是新手開店的首要步驟。選擇有潛力的細分市場,并針對目標消費者群體進…

華為云服務培訓

一、存儲類服務實踐 是什么: 云硬盤( Elastic Volume Service )是一種為 ECS(彈性云服務器)、BMS(裸金屬服務器) 等計算服務提供持久性存儲的服務。 作用: 它通過數據冗余和緩存加速等多項技術&#xf…

卷積報錯:AttributeError: ‘Conv2d‘ object has no attribute ‘total_ops‘ (已解)

AttributeError: ‘Conv2d’ object has no attribute ‘total_ops’ File "/home/...../..._encoder.py", line 34, in forwardx = self.conv(x)File "/home/...../python3.8/site-packages/torch/nn/modules/module.py", line 1511, in _wrapped_call_im…

Spring系列-03-BeanFactory和Application接口和相關實現

BeanFactory BeanFactory和它的子接口們 BeanFactory 接口的所有子接口, 如下圖 BeanFactory(根容器)-掌握 BeanFactory是根容器 The root interface for accessing a Spring bean container. This is the basic client view of a bean container; further interfaces such …

windows 11上自帶時間管理-番茄工作法

在 Windows 11 中,你可以使用 專注 功能來最大程度地減少干擾,幫助你保持專注。 專注的工作原理 專注時段打開后,將會出現以下情況: 專注計時器將顯示在屏幕上 請勿打擾將打開 任務欄中的應用不會閃爍發出提醒 任務欄中應用的…

內網穿透原理解析

在互聯網信息時代的今天,我們經常會聽到“內網穿透”,卻有很多人對此并不了解,下面小編給大家介紹一下內網穿透的工作原理。 1. 什么是內網穿透? 在了解內網穿透原理之前,我們先說什么是內網穿透。內網,就是在公司或…

SpringCloud系列(23)--手寫實現負載輪詢算法

前言:在上一篇文章中我們介紹了關于負載輪詢算法的原理以及看了源代碼,而本章節內容則是著重于我們自己手寫一個負載輪詢算法 1、分別編寫provider-payment8001、provider-payment8002這兩個子項目的PaymentController類,增加一個/payment/lb…

C++中引用的全面解析與實戰應用

C中的引用作為一種強大的特性,不僅能夠提升代碼的效率和清晰度,還能在一定程度上保障數據的安全性。本文將深入探討引用的各個方面,包括其定義、使用場景、類型、與指針的區別,并通過實例加以說明。 引用的定義與基本概念 引用可…

探究Python中的元組:不可變性與多重用途

元組是 Python 中的另一種重要數據結構,與列表相似,但具有一些關鍵區別。讓我們來詳細了解一下 Python 中的元組,包括基本語法、常用命令、示例代碼、應用場景、注意事項和總結。 基本語法 創建元組 在 Python 中,元組使用圓括…

Py之llama-parse:llama-parse(高效解析和表示文件)的簡介、安裝和使用方法、案例應用之詳細攻略

Py之llama-parse:llama-parse(高效解析和表示文件)的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 llama-parse的簡介 llama-parse的安裝和使用方法 1、安裝 2、使用方法 第一步,獲取API 密鑰 第二步,安裝LlamaIndex、LlamaParse L…

AI爆文寫作:經常做這四個小練習,讓你解鎖爆文標題的秘籍,讓你的標題炸裂吸晴!

文章目錄 一、無法吸引眼球的標題二、標題炸裂的秘籍練習1:洞察受眾的渴望與恐懼。練習2:運用感官語言,用生動的描述和具體細節,在讀者心中勾勒出一幅畫面。練習3:展示變化。練習4:用意外轉折激發好奇心。一、無法吸引眼球的標題 這樣的標題: [如何通過閱讀改變人生」「…

LeetCode 1542.找出最長的超贊子字符串:前綴異或和(位運算)

【LetMeFly】1542.找出最長的超贊子字符串:前綴異或和(位運算) 力扣題目鏈接:https://leetcode.cn/problems/find-longest-awesome-substring/ 給你一個字符串 s 。請返回 s 中最長的 超贊子字符串 的長度。 「超贊子字符串」需…

<string.h>中部分庫函數的模擬實現

前言 嗨&#xff0c;我是firdawn&#xff0c;本章將簡單介紹&#xff0c;<string.h>中部分庫函數的模擬實現&#xff0c;如strncpy&#xff0c;strncat&#xff0c;memcpy&#xff0c;memmove。在本文片末&#xff0c;還講簡單介紹判斷機器大小端的函數實現&#xff0c;…