網路中的NAT模式

来源:https://www.cnblogs.com/linhaostudy/archive/2019/02/07/10355614.html
-Advertisement-
Play Games

一、概述 NAT英文全稱是“Network Address Translation”,中文意思是“網路地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標準,允許一個整體機構以一個公用IP(Internet Protocol) ...


一、概述

NAT英文全稱是“Network Address Translation”,中文意思是“網路地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標準,允許一個整體機構以一個公用IP(Internet Protocol)地址出現在Internet上。顧名思義,它是一種把內部私有網路地址(IP地址)翻譯成合法網路IP地址的技術。NAT 可以讓那些使用私有地址的內部網路連接到Internet或其它IP網路上。NAT路由器在將內部網路的數據包發送到公用網路時,在IP包的報頭把私有地址轉換成合法的IP地址。

RFC1918規定了三塊專有的地址,作為私有的內部組網使用:

  • A類:10.0.0.0—10.255.255.255 10.0.0.0/8
  • B類:172.16.0.0—172.31.255.255 172.16.0.0/12
  • C類:192.168.0.0—192.168.255.255 192.168.0.0/16

這三塊私有地址本身是可路由的,只是公網上的路由器不會轉發這三塊私有地址的流量;當一個公司內部配置了這些私有地址後,內部的電腦在和外網通信時,公司的邊界路由會通過NAT或者PAT技術,將內部的私有地址轉換成外網IP,外部看到的源地址是公司邊界路由轉換過的公網IP地址,這在某種意義上也增加了內部網路的安全性。

Basic NAT是一種把一組IP地址映射成另一組IP地址的方法,映射的過程在IP中繼設備上完成,對用戶完全透明。NAPT則要複雜一些,它把許多(不能太多)IP地址連同TCP/UDP埠號映射到單獨一個IP地址和埠號上。無論是Basic NAT還是NAPT都提供一種把內部的私有地址轉換成在公網上可用的全球唯一IP地址的方法。

分類

image

NAT有三種類型:

  1. 靜態NAT(Static NAT)(一對一)。將內部網路的私有IP地址轉換為公有IP地址,IP地址對是一對一的,是一直不變的;
    image

  2. 動態地址NAT(Pooled NAT)(多對多)。將內部網路的私有IP地址轉換為公用IP地址時,IP地址是不確定,隨機的。所有被授權訪問Internet的私有IP地址可隨機轉換為任何指定合法的IP地址。也就是說,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作為外部地址時,就可以進行動態NAT轉換。動態NAT是在路由器上配置一個外網IP地址池,當內部有電腦需要和外部通信時,就從地址池裡動態的取出一個外網IP,並將他們的對應關係綁定到NAT表中,通信結束後,這個外網IP才被釋放,可供其他內部IP地址轉換使用,這個DHCP租約IP有相似之處。當ISP提供的合法IP地址略少於網路內部的電腦數量時。可以採用動態轉換的方式。
    image

  3. 網路地址埠轉換NAPT(Network Address Port Translation)(Port-Level NAT)(多對一)。改變外出數據包的源埠併進行埠轉換,採用埠多路復用方式。內部網路的所有主機均可共用一個合法外部IP地址實現對Internet的訪問,可以最大限度地節約IP地址資源。同時,也可以隱藏網路內部的所有主機,有效避免來自Internet的攻擊。因此,目前網路中應用最多的就是PAT規則。這是最常用的NAT技術,也是IPv4能夠維持到今天的最重要的原因之一,它提供了一種多對一的方式,對多個內網IP地址,邊界路由可以給他們分配一個外網IP,利用這個外網IP的不同埠和外部進行通信。NAPT 與 動態NAT 不同,它將內部連接映射到外部網路中的一個單獨的IP地址上,同時在該地址上加上一個由NAT設備選定的埠號。

image

NAPT是使用最普遍的一種轉換方式,在HomeGW中也主要使用該方式。它又包含兩種轉換方式:SNAT和DNAT。

  1. 源NAT(Source NAT,SNAT):修改數據包的源地址。源NAT改變第一個數據包的來源地址,它永遠會在數據包發送到網路之前完成,數據包偽裝就是一具SNAT的例子。
  2. 目的NAT(Destination NAT,DNAT):修改數據包的目的地址。Destination NAT剛好與SNAT相反,它是改變第一個數據懈的目的地地址,如平衡負載、埠轉發和透明代理就是屬於DNAT。

對於網路地址轉換技術來講,最重要的一點是,在配置 NAT 的路由器上形成了 NAT 轉換表,這個轉換表的形成是非常關鍵的。配置 NAT 後,能形成正確的轉換表,那麼我們的工作就算成功了。

NAT的三個方向:

NAT 在outside口生效,所有在inside口需要先路由,在outside口先nat。

  • ip nat inside source:

將內部局部地址轉換為內部全局地址;數據方向inside->outside,在outside上執行轉換;

  • ip nat inside destination:

將內部全局地址轉換為內部局部地址;數據方向outside->inside,在outside上執行轉換

  • ip nat outside source:

將外部全局地址轉換為外部局部地址;數據方向outside->inside,在outside上執行轉換;

NAT的應用分類:

ip nat source:

(1) 靜態 nat的映射:永遠一個ip對應另外一個ip。

ip nat inside source static A.B.C.D A.B.C.D

(2) 動態 nat的映射:每次一個IP會對應另外一個公網的IP;

ip nat inside source list 2 pool qing

(3) 動態PAT映射:pool裡面只有一個IP。

ip nat inside source list 2 pool qing overload

(4) 靜態PAT映射:

ip nat inside source list 3 interface fastEthernet 0/0 overload

ip nat inside destination:

tcp負載均衡,外網主動發起流量訪問內網伺服器。只用動態,沒有靜態。

ip nat inside destination list 10 pool feng

ip nat outside source:

當兩端同時做nat既inside和outside需要同時翻譯並出現地址衝突的時候需要用outside source和其他同時命令同時實現。

Cisco路由器配置3中NAT的主要命令:

靜態NAT:

1、指定NAT內部介面
    在內網相應介面的介面配置模式下執行:ip nat inside
2、指定NAT外部介面
   在外網相應介面的介面配置模式下執行:ip nat outside
3、在內部本地地址與內部全局地址之間建立靜態地址轉換關係:
    ip nat insde source static 內部本地地址 內部全局地址

動態地址NAT:

  1. 指定NAT內部介面
    在內網相應介面的介面配置模式下執行:ip nat inside
    2. 指定NAT外部介面
    在外網相應介面的介面配置模式下執行:ip nat outside
    3. 在全局配置模式下,定義一個標準的access-list規則,聲明允許哪些內部本地地址可以進行動態地址轉換:
    access-list list-number permit 源地址 通配符
    其中,list-number為1-99之間的一個任意整數。
    4. 在全局配置模式下,定義內部全局地址池:
    ip nat pool 地址池名 起始IP地址 終止IP地址 netmask 子網掩碼
    其中,地址池名可以任意設定,但最好有一定的說明意義。
    5. 在全局配置模式下,定義符合先前定義的access-list規則的IP數據包與先前定義的地址池中的IP地址進行轉換:
    ip nat inside source list list-number pool 內部全局地址池名

網路地址埠轉換NAPT:

1. 指定NAT內部介面
在內網相應介面的介面配置模式下執行:ip nat inside

2. 指定NAT外部介面
在外網相應介面的介面配置模式下執行:ip nat outside

3. 在全局配置模式下,定義內部全局地址池:
ip nat pool 地址池名 起始IP地址 終止IP地址 netmask 子網掩碼

其中,地址池名可以任意設定,但最好有一定的說明意義。

4. 在全局配置模式下,定義一個標準的access-list規則,聲明允許哪些內部本地地址可以進行復用地址轉換:
access-list list-number permit 源地址 通配符
其中,list-number為1-99之間的一個任意整數。

5. 在全局配置模式下,定義符合先前定義的access-list規則的IP數據包與先前定義的地址池中的IP地址進行復用地址轉換:
ip nat inside source list list-number pool 內部全局地址池名 overload

二、工作原理

瞭解原理之前先瞭解下NAT 術語。

在配置了 NAT 的路由器上,可以把整個網路分成兩部分:內部網路 和 外部網路。

NAT 技術中有四個術語:

  1. 內部本地地址(Inside Local):內網中設備所使用的IP地址
  2. 內部全局地址(Inside Global):對於外部網路來說,區域網內部主機所表現的 IP 地址。
  3. 外部本地地址(Outside Local):外部網路主機的真實地址。
  4. 外部全局地址(Outside Global):對於內部網路來說,外部網路主機所表現的 IP 地址。外網設備所使用的真正的地址。

image

local 、global 是相對於埠狀態說的,local是inside部分可以被路由的,global是outside部分可以被路由的。

網路地址轉換常常和代理服務搞混,但是它們之間有明確的不同。NAT 對源和目的電腦都是透明的。沒有任何一方會意識到它正在和第三方設備打交道。但是代理服務卻不是透明的。源電腦知道它正向代理伺服器發起一個請求,而且你還必須進行配置才能這樣做。目的電腦會認為代理伺服器就是與它直接通信的源電腦。還有,代理服務通常工作在 OSI 參考模型的第 4 層 (傳輸層) 或更高,而 NAT 工作在第 3 層 (網路層)。由於代理服務工作在更高層,所以通常它將比 NAT 要慢。

NAT 工作在 OSI 參考模型的網路層 (第3層) 是有道理的,因為路由器就工作在這一層:
image

NAT 原理

NAT設備維護一個狀態表,用來把非法的IP地址映射到合法的IP地址上去。每個包在NAT設備中都被翻譯成正確的IP地址,發往下一級,這意味著給處理器帶來了一定的負擔。但對於一般的網路來說,這種負擔是微不足道的。在運行NAT的路由器中,當數據包被傳送時,NAT可以轉換數據包的IP地址和TCP/UDP數據包的埠號。設置NAT功能的路由器至少要有一個Inside(內部)埠和一個Outside(外部)埠。內部埠連接內網的用戶,外部埠一般連接到Internet。當IP數據包離開內部網路時,NAT負責將內網IP源地址(通常是專用地址)轉換為合法的公共IP地址。當IP數據包進入內網時,NAT將合法的公共IP目的地址轉換為內網的IP源地址。

NAT的基本工作原理是:當私有網主機和公共網主機通信的IP包經過NAT網關時,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉換。

當內部網路中的一臺主機想傳輸數據到外部網路時,它先將數據包傳輸到NAT路由器上,路由器檢查數據包的報頭,獲取該數據包的源IP信息,並從它的NAT映射表中找出與該IP匹配的轉換條目,用所選用的內部全局地址(全球唯一的IP地址)來替換內部局部地址,並轉發數據包。

當外部網路對內部主機進行應答時,數據包被送到NAT路由器上,路由器接收到目的地址為內部全局地址的數據包後,它將用內部全局地址通過NAT映射表查找出內部局部地址,然後將數據包的目的地址替換成內部局部地址,並將數據包轉發到內部主機。

其實主要就是 修改 IP 數據包中的源 IP 地址,或目的 IP 地址。主要目的是把 RFC1918所提議的私有地址轉變成在 Internet 上可路由的公有合法地址。對於某些有限的應用(如 DNS、 FTP 等),它也可以修改 IP 數據包有效載荷中的地址。由於應用的複雜性, NAT 目前支持的應用有限,當然,如果需要,完全可以針對新的應用做相應的開發工作。

總體來說,NAT進行地址轉換的過程就是“本地地址”與“全局地址”之間的轉換過程,無論數據包是從內部網路發往外部網路,還是從外部網路發往內部網路。不同的只是本地地址和全局地址所對應的網路不同,以及數據包重新封裝的源和目的地址不同。具體如圖所示。

image

NAT基本地址轉換原理

這個過程是通過NAT中的本地址與全局地址映射條目來實現的,所以事先要在NAT路由器上配置這樣的映射條目。

NAT中的轉換方式:

  1. 從內網中設備上發出的IP包是以“inside local address”作為源地址,以“outside local address”作為目的地址。當數據包到達NAT設備的“inside”介面後,地址分別被翻譯成“inside global address”和“outside global address”並從“outside”介面送出。

  2. 外網設備上發出的IP包以“outside global address”作為源地址,以“inside global address”作為目的地址。當數據包到達NAT設備的“outside”介面後,地址分別被翻譯成“outside local address”和“inside local address”並從“inside”介面送出。

當內部網路用戶訪問外部網路時,所進行的是“內部本地地址”和“內部全局地址”之間的轉換。

在NAT路由器接收到來自內部網路主機發送的數據包時,其源IP地址(SA)為“內部本地地址”,目的IP地址(DA)為“外部本地地址”。當數據包被轉發到外部網路時,數據包的源IP地址(SA)就會轉變為“內部全局地址”,而目的IP地址(DA)被轉變為“外部全局地址”。也就是把數據包的所有源IP地址(SA)和目的IP地址(DA)全部由本地地址轉換為全局地址。如圖6-9上部分數據包IP地址轉換示意圖。

相反,當外部網路用戶訪問內部網路時,所進行的是“外部本地地址”和“外部全局地址”之間的轉換。

在NAT路由器接收到來自外部網路主機發送的數據包時,其源IP地址(SA)就是“外部全局地址”,目的IP地址(DA)就是“內部全局地址”。相當於由內部網路向外部網路發送數據包時數據包中的源IP地址(SA)和目的IP地址(DA)的互換。而當數據包被路由器轉發到本地網路時,源IP地址(SA)被轉變為“外部本地地址”,目的IP地址(DA)被轉變為“內部本地地址”,也相當於由內部網路向外部網路發送數據包時數據包中的源IP地址(SA)和目的IP地址(DA)的互換。如圖6-9下部分數據包IP地址轉換示意圖

image

NAT基本IP地址轉換原理

以上是從總體上介紹NAT的IP地址轉換原理的,實際NAT應用有時並不需要對源IP地址和IP地址進行全面替換,僅需要對源IP地址或者僅需要對目的IP地址進行轉換即可達到所需的目的。下麵予以介紹。

內部地址NAT轉換原理

多數情況下使用NAT的目的就是為了使內部網路中的多個用戶能使用一個註冊IP地址訪問外部網路,所以僅需要配置內部地址NAT轉換。即通過ip nat inside source命令實現“內部本地地址”到“內部全局地址”之間的轉換(既可以採用靜態NAT方式實現,也可以採取動態NAT方式實現),只需要定義內部本地址與內部本局地址的映射。

image

一個簡單的NAT轉換示例

這是一個簡單的NAT轉換示例。要實現以下目的:當NAT路由器的內部網路s0介面上接收到一個源地址為內部本地地址10.10.10.1,目的IP地址為外部本地地址171.16.68.1的數據包時,在轉發到s1介面時,原來數據包源地址的內部本地地址10.10.10.1被轉換成內部全局地址171.16.68.5,但目的地址不變,然後繼續發送。在這個過程中,所進行的只是數據包中源IP地址的轉換,由內部本地地址向內部全局地址轉換,且只是內部地址之間的轉換。

相反,當在NAT路由器的外部網路介面s1上接收源地址為172.16.68.1外部本地地址,目的地址為內部全局地址172.16.68.5的外部伺服器響應數據包時,目的地址將被轉換成10.10.10.1這個內部本地地址,然後繼續發送。在這個過程中,所進行的只是數據包中目的IP地址的轉換,由內部全局地址向內部本地地址轉換,也只是內部地址之間的轉換。

下麵僅以靜態NAT轉換方式為例介紹內部地址轉換的配置步驟,詳細的NAT配置方法將在本章後面具體介紹。

(1)使用“ip nat inside source static”全局配置命令啟用基於內部源IP地址的靜態NAT IP地址轉換。也就是定義內部本地地址和內部全局地址,使它們之間形成一一對應的映射關係。

Router(config)#ip nat inside source static 10.10.10.1 171.16.68.5   
 !--- 在內部本地地址10.10.10.1與內部全局地址171.16.68.5之間建立靜態NAT映射關係,使內部網路主機知道要以171.16.68.5這個地址到達外部網路主機

(2)使用以下兩條語句配置路由器的s0為NAT的內部網路介面。

Router(config)#interface s0    !---  進入s0串口配置模式
Router(config-if)#ip nat inside    !--- 把s0串口指定為內部網路介面

(3)使用以下兩條語句配置路由器的s1為NAT的外部網路介面。

Router(config)#interface s1    !--- 進入s1串口配置模式
Router(config-if)#ip nat outside   !--- 把s1串口指定為外部網路介面

(4)使用show ip nat translations特權模式命令驗證上述進行的路由器NAT配置。輸出信息中顯示以上配置的NAT條目配置為:內部本地地址為10.10.10.1,內部全局地址為171.16.68.5。這與上面的配置是一致的,證明配置是成功的。

Router#show ip nat translations   !--- 在特權模式下顯示當前路由器NAT配置
 
Pro     Inside global      Inside local       Outside local      Outside global
---     171.16.68.5        10.10.10.1            ---                 ---

此時如果對外部網路目的主機進行ping操作,就會有數據包從內部網路轉發到外部網路。然後再在路由器特權模式下執行“show ip nat translations”命令,顯示的NAT信息如下。多了一條icmp協議類型數據包(執行ping操作後加的)顯示,但因為此時沒有配置外部網路的本地地址和全局地址,所以顯示的外部本地地址和外部全局地址都是一樣的,都是ping操作目的主機地址171.16.68.1。

Router#show ip nat translations
 
Pro       Inside global          Inside local        Outside local      Outside global
icmp     171.16.68.5:15         10.10.10.1:15       171.16.68.1:15     171.16.68.1:15
---       171.16.68.5            10.10.10.1             ---                 ---

通過以上配置後,從內部網路發往外部網路的數據包只是源地址(SA)將在經過路由器後進行轉換(由內部本地地址10.10.10.1轉換成內部全局地址171.16.68.5),但目標地址(DA)不變,但從外部網路發往內部網路的應答數據包的源地址沒有改變,只是經過路由器後的數據包目的地址發生了轉換(由內部全局地址172.16.68.5轉換成內部本地地址10.10.10.1),但源地址(SA)不變。因為此時還沒有為NAT路由器配置外部網路的本地地址和全局地址轉換。

此時,數據包在內、外部網路中的源地址、目的地址的轉換方式參如圖

image

在內部地址的NAT轉換中,無論數據包來自哪裡,數據包中地址變化的只是內部地址之間的轉換。但要註意,地址變化所對應的是源地址,還是目的地址是要看數據包是來自內部網路,還是來自外部網路:如果是來自內部網路,轉換是源地址;如果是來自外部網路,轉換的是目的地址。

外部地址NAT轉換原理

當公司伺服器位於內部網路,使用內部網路私有IP地址,為了方便外部網路用戶對內部網路伺服器進行訪問,則需要使用ip nat outside source命令配置“外部全局地址”與“外部本地地址”之間的轉換(既可以採用靜態NAT方式實現,也可以採取動態NAT方式實現)。外部地址NAT轉換與上節介紹的內部地址NAT轉換是相反的,它僅需要定義外部地址(包括外部本地地址和外部全局地址)。

下麵同樣以上面那個簡單的NAT轉換示例進行介紹。本示例要實現的目的是:當NAT路由器外部網路介面s1接收到來自外部網路用戶發送的源IP地址為外部全局地址171.16.68.1,目的地址為外部本地地址10.10.10.1的數據包在被路由器轉發到s0介面時,數據包中的源IP地址轉變為外部本地地址10.10.10.5(即由外部全局地址轉換成外部本地地址),目的IP地址不變,即也只是源IP地址的轉換;而由內部網路用戶發送的響應數據包中,卻只是目的IP地址(即由外部本地地址轉換為外部全局地址)的轉換,源IP地址不變。
下麵僅以靜態NAT轉換方式為例介紹外部地址NAT轉換的配置步驟,詳細的NAT配置方法將在本章後面具體介紹。

(1)使用ip nat outside source static全局配置命令啟用基於外部源IP地址的靜態NAT IP地址轉換。也就是定義外部全局地址和外部本地地址之間的映射關係。

Router(config)#ip nat outside source static 171.16.68.1 10.10.10.5     
    !--- 在外部全局地址171.16.68.1與外部本地地址10.10.10.5之間建立靜態NAT轉換關係,使外部網路主機知道要以10.10.10.1這個地址到達內部網路主機

(2)使用以下兩條語句配置路由器的s0作為NAT的內部網路介面。

 

Router(config)#interface s0
Router(config-if)#ip nat inside

(3)使用以下兩條語句配置路由器的s1作為NAT的外部網路介面。

Router(config)#interface s1
Router(config-if)#ip nat outside

【註意】對於特定的NAT網路來說,路由器上的內、外部網路介面是固定的,不會隨著通信方向的改變而改變。如在上節介紹的內部地址的NAT轉換示例中,我們同樣是把s0介面作為內部網路介面,s1介面作為外部網路介面。

(4)使用show ip nat translations特權模式命令驗證上述進行的路由器NAT配置。從中可以看出,此時NAT的外部本地地址為10.10.10.5,外部全局地址為171.16.68.1。這與上面的配置是一致的,證明配置是成功的。

 

Router#show ip nat translations
 
Pro    Inside global          Inside local          Outside local      Outside global
         --- ---                   ---               10.10.10.5          171.16.68.1

同樣,如果此時執行一個從外部網路主機(171.16.68.1)到內部網路主機(10.10.10.1)的ping操作,然後再在路由器特權模式下執行“show ip nat translations”命令,則顯示如下結果。因為此時僅配置了外部本地地址和外部全局地址,所以結果中顯示的內部本地地址和全局地址都是一樣的,都是ping操作目的主機地址10.10.10.1。

Router#show ip nat translations
 
Pro        Inside global       Inside local         Outside local        Outside global
             --- ---             ---                10.10.10.5           171.16.68.1
icmp       10.10.10.1:37       10.10.10.1:37      10.10.10.5:37        171.16.68.1:37

與上節介紹的僅配置內部地址相反,此處從外部網路發往內部網路的數據包的源IP地址(SA)將在經過路由器後進行轉換(由外部全局地址171.16.68.1轉換成外部本地地址10.10.10.5),但目標地址(DA)不變;但從內部網路發往外部網路的響應數據包的源IP地址沒有改變,只是經過路由器後的數據目的IP地址發生了改變(由外部本地地址10.10.10.5轉換成外部全局地址171.16.68.1)。因為此時還沒有為NAT路由器配置內部本地地址和內部全局地址轉換。此時,數據包在內、外部網路中的源IP地址、目的IP地址的轉換方式如圖6-12所示。

【經驗之談】在僅進行外部地址NAT轉換時,無論數據包來自哪裡,數據包中地址變化的只是外部地址之間的轉換。同樣也需註意,地址變化所對應的是源IP地址,還是目的IP地址是要看數據包是來自內部網路,還是來自外部網路:如果來自內部網路,轉換是目的IP地址;如果來自外部網路,轉換的是源IP地址。這與前面的內部地址NAT轉換是對應相反的。

image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 恢復內容開始 Python的作者,Guido von Rossum,確實是荷蘭人。1982年,Guido從阿姆斯特丹大學(University of Amsterdam)獲得了數學和電腦碩士學位。然而,儘管他算得上是一位數學家,但他更加享受電腦帶來的樂趣。用他的話說,儘管擁有數學和電腦雙料資質 ...
  • 上章節我們介紹瞭如何通過圖形化界面實現用戶加域操作,本章節為大家簡單介紹如何通過netdom join命令實現電腦加域操作。具體信息如下:將工作站或成員伺服器加入域。將電腦加入域的行為會為域中的電腦創建一個帳戶(如果該帳戶尚不存在)。Netdom是一個內置於Windows Server 200... ...
  • 要使用域環境,您必須將電腦加入域。只有加入域的電腦才能使用域資源。在連接期間,將在域中創建一個電腦帳戶,以便將電腦作為成員進行身份驗證。前邊兩節我們寫到Windows Server 2016-客戶端加域埠彙總及Windows Server 2016-客戶端加域準備工作,那接下來三章我們簡單... ...
  • 本人研究linux的防火牆系統也有一段時間了,由於近來涉及到的工作比較紛雜,久而久之怕生熟了。趁有時間,好好把這方面的東西總結一番。一來是給自己做個沉澱,二來也歡迎這方面比較牛的前輩給小弟予以指點,共同學習,共同進步。 能在CU上混的人絕非等閑之輩。因此,小弟這裡說明一下:本系列博文主要側重於分析N ...
  • 5.11 庫的使用 代碼的復用是電腦程式設計語言中的一個重要的概念。可以把編譯好的目標文件模塊統一放到一個庫中,使得程式員可以在不同的程式中共用這些代碼。 在Linux操作系統下,最後連接生成可執行文件時,如果鏈接的是一般的.o文件,則整個文件的內容都會被裝入可執行文件中;如果鏈接的是庫,則只是從 ...
  • 實現在文件目錄下(包括桌面)通過 Shift+右鍵打開管理員模式的 Powershell 視窗 ...
  • 一、bind伺服器安裝 bind:開源、穩定、應用廣泛的DNS服務。bind的軟體包名bind,服務名稱named. 查看是否安裝bind, 安裝bind包: bind服務主要配置文件: /etc/named.conf //主配置文件 /etx/named.rfc1912.zones //區域配置文 ...
  • 前話:因為感興趣吧也是專業需要,所以自學了U盤重裝系統以及在win10的情況下安裝Ubuntu16.04雙系統。藉此博客,記錄下我安裝Ubuntu的過程,方便日後回憶。 正因如此,本篇博客會寫的十分簡略,如有不便請見諒。 如果你是一位新手,推薦一位大神的博客。 補充知識點:關於磁碟使用GUID格式分 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...