Linux 功能變數名稱和DNS

来源:https://www.cnblogs.com/heyongshen/archive/2022/08/15/16584669.html
-Advertisement-
Play Games

名字解析的作用: TCP/IP網路中,設備之間的通信依賴IP地址來實現,但是IP地址不好記憶,所以就將每一臺設備用一個名字來進行標識,但是這個名字電腦不能解析。所以就需要藉助名字解析服務來實現將名字解析為IP地址。 主機名和功能變數名稱的聯繫 主機名: 主機名:電腦的名字,用於唯一標識一臺設備 功能變數名稱: ...


名字解析的作用:

TCP/IP網路中,設備之間的通信依賴IP地址來實現,但是IP地址不好記憶,所以就將每一臺設備用一個名字來進行標識,但是這個名字電腦不能解析。所以就需要藉助名字解析服務來實現將名字解析為IP地址。

主機名和功能變數名稱的聯繫

主機名:

主機名:電腦的名字,用於唯一標識一臺設備

功能變數名稱:

功能變數名稱:domain name,是由一串用點分隔的名字,表示互聯網上的一臺或者一組設備。

完全限定功能變數名稱:FQDN

FQDN:full qualified domain name,完全限定功能變數名稱。FQDN=主機名+功能變數名稱

一個域下麵就包含了很多主機。比如baidu.com這個功能變數名稱下麵可能就包含了www.baidu.com,mail.baidu.com等主機名。
例如:如www.baidu.com. 就是一個完全限定功能變數名稱(註意最後有一個點,預設結尾點可以省略不寫。最末尾的點所有名稱的最上級的根)。

在查看完全限定功能變數名稱時,主機名通常位於功能變數名稱之前。

主機名錶示用於將用戶傳送到某個地址或位置的網路或系統。

功能變數名稱代表用戶正在訪問的站點或項目。

比如www.baidu.com就告訴我們,baidu.com這個域中,有一臺名叫www的機器.

常見的www就是主機名,標識的對應主機,還有blog、study等都是主機名。
#www
www:World Wide Web,萬維網。由www客戶端和www服務端組成。

	#www客戶端指的是設備上的瀏覽器。

	#www服務端指的是伺服器(存放資源的主機)。

	#www經常被簡稱作web,所以www客戶端、www服務端又叫web客戶端、web服務端

	#www的作用就是:web客戶端訪問web服務端

#所以www表示訪問指定web伺服器上面的資源,故www表示的是一臺主機。

範例

#www.baidu.com
			.    #根域
			|
			|
	    gov  edu   com  net org cn  #頂級域:最初只有七個
			|
			|
		360   baidu  google  sougou #二級域
			|
			|
		       www    #主機

功能變數名稱的分類

  • 根域

  • 頂級域

  • 二級域

  • ....

  • 最多可達到127級功能變數名稱

#常見的頂級功能變數名稱

com(商業公司)、

net(互聯網組織)、

edu(教育)、

org(非營利性組織)、

int(internet)、

mil(軍事)、

gov(政府)、

cn(國家地區功能變數名稱,cn表示中國)

DNS:Domain Name Server

利用名稱分散式的特性,在每一級域都搭建對應的DNS伺服器,每個DNS伺服器只負責一部分名稱和ip的解析。

DNS伺服器存放的是它的下級域DNS的名稱和IP。如果一個DNS的下級是主機,就存放主機的名稱和ip

DNS查詢的類型

  • 遞歸查詢

  • 迭代查詢

遞歸查詢:一般客戶機和本地DNS伺服器之間屬於遞歸查詢,即當客戶機向DNS伺服器發出請求後, 若DNS伺服器本身不能解析,則會向另外的DNS伺服器發出查詢請求,得到最終的肯定或否定的結
果後轉交給客戶機。此查詢的源和目標保持不變,為了查詢結果只需要發起一次查詢

迭代查詢:一般情況下(有例外)本地的DNS伺服器向其它DNS伺服器的查詢屬於迭代查詢,如:若對
方不能返回權威的結果,則它會向下一個DNS伺服器(參考前一個DNS伺服器返回的結果)再次發起
進行查詢,直到返回查詢的結果為止。此查詢的源不變,但查詢的目標不斷變化,為查詢結果一般需要發起多次查詢.

DNS名稱請求的流程

1.客戶端需要解析一個名稱會先查詢hosts文件,如無對應內容就下一步

2.查詢本地的緩存(linux預設沒有設置緩存,windows預設設置了緩存)

3.向指定的DNS伺服器發起請求,如果這個DNS伺服器沒找到就像根查找,然後進行迭代查詢,找到結果以後由這個DNS返回給客戶端

#權威DNS:存放要訪問的功能變數名稱和ip的對應關係的伺服器就叫做權威DNS伺服器

image

緩衝和緩存

緩存:Cache,為了提升性能開闢一塊空間,緩存是將反覆使用的數據存儲起來,在有效期之內供系統去調用。

緩衝:Buffer,緩衝的作用是協調上下層應用之間的性能差異。

#比如A-->B,A的流量大速度快,但是B的流量小速度慢,A-->B的時候B接收不了這麼多的數據,所以中間加一個緩衝區,A把數據放在緩衝區,B再到緩衝區去拿數據。解決了兩這性能不一樣的問題。

範例:

#瀏覽器輸入一個功能變數名稱回車以後背後所作的工作:

名稱解析為ip地址:DNS工作過程

連接到對應的主機:TCP三次握手

數據傳輸:HTTP工作過程

linux DNS服務的實現

提供DNS伺服器軟體:bind,powerdns,dnsmasq,unbound,coredns(主要用在k8s環境中)

bind實現DNS服務

1.安裝bind軟體
yum install bind bind-utils
bind-utils是bind的一個管理工具(客戶端)。
BIND的相關程式包:yum list all bind*
BIND包相關文件: rpm -ql bind

bind的配置文件:/etc/named.conf

可以通過rpm -ql bind來查看他的對應文件。

配置文件的格式

由三部分組成:

  • 選項:配置相關功能

  • 日誌:(基本不用改)

  • 區域:本機能夠為哪些zone進行解析(域下麵就有很多區域)


/var目錄:var:variable(變數、可變的)。目錄存放的就是可變的數據

/etc/services文件是記錄網路服務名和它們對應使用的埠號及協議的對應關係(相當於一個手冊,記錄大部分服務使用的預設埠,不用更改)

/etc/services文件:四個欄位組成:服務名稱”、“使用埠”、“協議名稱”以及“別名

查看dns是否生效: /etc/reslve文件
/etc/resolv.conf是DNS客戶機的配置文件,用於設置DNS伺服器的IP地址及DNS功能變數名稱

dns服務基礎配置實現互聯網訪問

只需要正確安裝bind這個軟體包,修改配置文件的一下內容即可。
options {
        listen-on port 53 { localhost; }; #需要監聽的指定地址埠,可以直接註釋掉表示所有iplocalhost表示監聽本地所有地址的53埠
		......
        allow-query     { any; };  #允許誰查詢 any:代表所有的ip,所有的ip都可以查(包括遠程的ip) 註釋掉這一行也表示所有ip都能訪問
		}
		
		
#dns配置文件中的:localhost:表示本機配置的所有ip
#hosts中的localhost表示的是127.0.0.1這個地址
#dns務基礎配置實現互聯網訪問:註釋掉allow-query和listen-on 表示預設允許所有

DNS服務的管理工具 rndc

rndc 監聽埠: 953/tcp

#命令格式:
rndc COMMAND
COMMAND:
 status: 查看狀態
 reload: 重載主配置文件和區域解析庫文件
 reload zonename: 重載區域解析庫文件
 retransfer zonename: 手動啟動區域傳送,而不管序列號是否增加
 notify zonename: 重新對區域傳送發通知
 reconfig: 重載主配置文件
 querylog: 開啟或關閉查詢日誌文件/var/log/message
 trace: 遞增debug一個級別
 trace LEVEL: 指定使用的級別
 notrace:將調試級別設置為 0
 flush:清空DNS伺服器的所有緩存記錄

DNS解析服務的測試和診斷工具

由bind-utils這個客戶端提供。於測試dns系統,不會查詢hosts文件進行解析

  • dig

  • host

  • nslookup

例如:查詢dns能否正常解析:www.baidu.com
dig www.baidu.com
host www.baidu.com
nslookup www.baidu.com

#查詢指定的DNs伺服器能否正常解析:www.baidu.com
dig www.baidu.com @10.10.0.11 #伺服器的ip地址

搭建私有DNS實現正向解析dns服務(正向主伺服器)

需要實現正向解析:FQDN-->IP ,就需要配置對應的區域。
域是一個概念,比如baidu就是一個域,在這個域之下還有區域

bind區域的配置方法

  1. 在主配置文件中定義區域

  2. 定義區域解析庫文件(區域資料庫),由一條條資源記錄(RR)組成。

搭建DNS正向主伺服器,實現web伺服器基於FQDN的訪問

環境配置:
關閉SElinux
關閉防火牆
時間同步

設備:
需要三台主機
DNS服務端:10.0.0.8
web伺服器:10.0.0.7
DNS客戶端:10.0.0.6

修改住配置文件,定義需要解析得區域:
zone "redhat.org" IN {  #redhat.org:表示需要管理的域的功能變數名稱
   type master; #DNS的類型  master slave frawalld
   file  "magedu.org.zone"; #指定定義區域資料庫的文件


#區域資料庫配置
$TTL 1D 	#表示有效時間 1D:表示1D內有效
			@       IN SOA  @ admin.redhat.org. (
			0       ; serial 
			1D      ; refresh
			1H      ; retry
			1W      ; expire
			3H )    ; minimum
			NS      master
master		 A      192.168.26.129  #需要解析的區域
www    		A		192.168.26.130  #需要解析的區域
資源記錄的格式及類型
資源記錄的格式:name [TTL] IN rr_type value
資源記錄的類型:
  • SOA:說明當前這個區域解析庫為哪一個區域所用,由誰負責

  • A:作用是把FQDN解析成為IPV4的IP地址

  • NS:name server 專用於標識當前區域的DNS伺服器

  • MX:Mail eXchanger,郵件交換器

  • CNAME: Canonical Name,別名記錄

  • PTR:作用是把IP解析成為FQDN,反向解析

#SOA  name [ttl] in rr_type value 

(1)name:表示的是當前這個區域解析庫的功能變數名稱。用@可表示當前區域的名字

(2)TTL:表示緩存過期的時間

(3)IN:代表internet,沒有實際意義,可以當做固定格式

(4)SOA:表示資源記錄的類型為SOA

(5)value: 當前這個域的DNS伺服器是誰,可以直接寫區功能變數名稱字,會自動把功能變數名稱補齊。
#使用value指定當前域的DNS伺服器以後,還要使用A這種類型來指定這個DNS伺服器的IP地址。
#SOA記錄與其它記錄不同的是就是value部分,SOA的value部分由很多的欄位組成


value:由以下三部分組成:
1.負責當前這個域的主(master)DNS伺服器是誰。  可以是FQDN,也可以是當前 域 的名字(用@可表示當前 域的名字),這個名字隨便起,但是需要配置A來指定它的ip地址。

2.當前區域管理員的郵箱地址,但是地址不能有@符號,一般用.來代替,例如15069028007.163.com

3.(主從伺服器協調屬性的定義以及否定的答案的統一的TTL)
#例如:
10235.com   86400  IN SOA  ns1.abc.com.  root.ns1.abc.com. (
                                2007061402 ; serial
                                3600       ; refresh (1 hour)
                                900        ; retry (15 minutes)
                                1209600      ; expire (2 weeks)
                                3600         ; minimum (1 hour)
                                )

10235.com:代表當前區域的功能變數名稱,可以用@代替(因為在配置文件中定義區域的時候就定義了功能變數名稱)

86400:代表86400秒後緩存過期

ns1.abc.com.:指定當前域的主DNS SERVER  #主DNS:master,這個名字可以隨便起,下麵還需要使用A這種類型的資源記錄來指定主DNS的ip地址 d

root.ns1.abc.com.:管理員郵箱(@使用.代替),等同於[email protected].

Serial :數值Serial代表這個Zone的序列號。供Slave DNS判斷是否從Master DNS獲取新數據。每次Zone文件更新,都需要修改Serial數值

refresh:數值Refresh設置Slave DNS多長時間與Master Server進行Serial核對。目前Bind的notify參數可設置每次Master DNS更新都會主動通知Slave DNS更新

retry:數值Retry設置當Slave DNS試圖獲取Master DNS Serial時,如果Master DNS未響應,多長時間重新進行檢查

expire:數值Expire將決定Slave DNS在沒有Master DNS的情況下權威地提供功能變數名稱解析服務的時間長短

minimum:否定答案的TTL,當伺服器沒有解析到功能變數名稱時,設置客戶端緩存時間

配置文件檢查

  • named-checkconf

  • named-checkzone

#檢查配置文件
named-checkconf  #檢查的是named.conf這個配置文件

named-checkzone xxx.org /var/named/redhat.org.zone # 功能變數名稱 功能變數名稱對應的區域資料庫文件

資源記錄的類型詳解

NS記錄定義規則
  • name: 當前功能變數名稱(通過定義區域規則的時候指定的功能變數名稱)。用來標識當前的功能變數名稱中那些是DNS

  • value: 當前區域的某DNS伺服器的名字,例如: ns.redhat.org.

#value的名字是隨便起的。只需要添加A這種資源記錄的時候,對應上指定的ip地址就可以了。

1. 相鄰的兩個資源記錄的name相同時,後續的可省略。#會自動繼承上一條記錄的一些信息

2. 對NS記錄而言,任何一個ns記錄後面的伺服器名字,都應該在後續有一個A記錄 
#表示當前區域中誰是DNS伺服器,因為可能存在多個dns伺服器,soa只標識了主dns伺服器

3. 一個域可以有多個NS記錄(一個功能變數名稱可以有多個dns伺服器)

範例:
redhat.org. IN NS ns1.redhat.org. #前面的FQDN可以只寫主機名,功能變數名稱會自動補全
               NS ns2.redhat.org. #完整:redhat.org. IN NS ns2.redhat.org.會自動繼承上面的內容
A記錄定義規則
  • name: 某主機的FQDN,例如:www.redhat.org.

  • value: 主機名對應主機的IP地址

www.redhat.org. IN A 1.1.1.1

www.redhat.org. IN A 2.2.2.2

mx1.redhat.org. IN   A 3.3.3.3

mx2.redhat.org. IN   A 4.4.4.4

$GENERATE 1-254 HOST$   IN A 1.2.3.$

*.redhat.org. IN A 5.5.5.5  #表示輸入任何的子功能變數名稱都可以解析。例如 wwwwwwwww.redhat.com

redhat.org. IN   A 6.6.6.6 #直接輸入功能變數名稱便可解析

#註意:如果有和DNS的IP相同的多個同名的A記錄,優先返回DNS的本機IP

#避免用戶寫錯名稱時給錯誤答案,可通過泛功能變數名稱解析進行解析至某特定地址
CNAME別名記錄
  • name: 別名的FQDN

  • value: 真正名字的FQDN

例如:www.magedu.org. IN CNAME   websrv.magedu.org.
PTR記錄
name: IP,有特定格式,把IP地址反過來寫,1.2.3.4,要寫作4.3.2.1;
而有特定尾碼:in-addr.arpa.,所以完整寫法為:4.3.2.1.in-addr.arpa.
value: FQDN

例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.org.
#如1.2.3為網路地址,可簡寫成:
4 IN PTR www.magedu.org.

#註意:網路地址及尾碼可省略;主機地址依然需要反著寫

反向解析的實現

反向區域:即將IP反向解析為FQDN
區功能變數名稱稱:網路地址反寫.in-addr.arpa.

www.baidu.com. 從上到下對應的為:.--com--baidu--www

172.16.100.10 --> 10.100.16.172.in-addr.arpa.

#功能變數名稱:172.16.100. --> 100.16.172.in-addr.arpa.
定義區域
zone "ZONE_NAME" IN {
 type {master|slave|forward};
 file "網路地址.zone"
};
zone "26.168.192.in-addr.arpa." IN {
        type master;
        file "192.168.26.zone";

};
定義解析庫:
[root@CentOS8 named]# cat 192.168.26.zone 
$TTL 1D
@	IN SOA	master rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	master
master  IN	A     	10.0.0.10
10	PTR	www.redhad.com
20	PTR     www.tom.com
30	PTR 	www.bob.com

啟用DNS客戶端緩存功能

客戶端啟用DNS緩存功能,可以大幅減輕DNS伺服器的壓力,同時也能提高DNS客戶端名稱解析速度。

nscd
CentOS 預設沒有啟用DNS客戶端緩存,安裝nscd(Name Service Cache Daemon,名稱服務緩存守護進
程)包可以支持DNS緩存功能

ubuntu 預設會啟用DNS客戶端緩存
[root@ubuntu1804 ~]#systemctl status systemd-resolved.service

#清空緩存
[root@ubuntu1804 ~]#systemd-resolve --flush-caches
[root@centos7 ~]#yum -y install nscd

[root@centos7 ~]#systemctl enable --now nscd

#查看緩存統計信息
[root@centos7 ~]#nscd -g

#清除DNS客戶端緩存
[root@centos7 ~]#nscd -i hosts

從伺服器的實現

DNS的類型:

  • 主伺服器

  • 從伺服器

  • 轉發伺服器

從伺服器:
(1)時間和主伺服器要同步(ntp)

(2)主伺服器的區域解析庫文件有一條NS資源記錄指向從伺服器

(3)從伺服器只需要定義區域,而無須提供解析庫文件(放置於/var/named/slaves/目錄)

(4)主伺服器需要允許從伺服器作區域傳送
從伺服器區域的定義
zone "ZONE_NAME" IN {
 type slave; #定義伺服器類型
 masters { MASTER_IP; }; #定義使用的主伺服器
 file "slaves/ZONE_NAME.zone"; #定義區域文件
};
範例:搭建從伺服器實現冗餘功能

主伺服器配置:

配置文件:
//#只允許從伺服器進行區域傳輸,如果不寫預設所有的伺服器都能進行傳輸
allow-transfer { 10.0.0.12;};

區域資料庫:
$TTL 1D
@       IN SOA  master rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
        NS      slave
master  IN  A 10.0.0.10
slave   IN  A 10.0.0.12 #指定slave伺服器的ip地址

www   IN A 10.0.0.11
blog  IN A 10.0.0.110
mail  IN A 10.0.0.111

從伺服器配置:

//#不允許其它主機進行區域傳輸,不寫就預設所有的主機都可以
allow-transfer { none;};
#指定區域
zone "redhad.com" IN {            #功能變數名稱和主伺服器的一樣
        type slave;               #DNS的類型
        masters {10.0.0.10;};     #指定主伺服器
        file "slaves/redhad.com"; #指定同步過來的資源記錄存放位置
};

驗證:

查看slaves/redhad.com中是否存在數據(亂碼)

停止掉主伺服器,指定從伺服器為測試及其的DNS,測試能否正常訪問www.redhad.com等。

DNS實現子域

子域委派授權

子域委派授權:將子域委派給其它主機管理,實現分散式DNS資料庫。

父域DNS配置:

#父域中指定子域的DNS伺服器和IP地址。然後再子域的DNS伺服器上面定義對應的解析規則就行了。
這樣通過父域的DNS地址也能找到子域的對應解析。

$TTL 1D
@       IN SOA  master  rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
         IN     NS      master 

shanghai IN     NS      shanghais #指定子域的區域使用的DNS伺服器名字

master    IN    A       10.0.0.10
shanghais IN    A       10.0.0.11 #子域DNS對應的IP地址
www IN A 10.0.0.11

子域DNS配置:

zone "shanghai.heyongshen.com" IN {
        type master;
        file "shanghai.heyongshen.zone";
};
#在子域中定義相應的解析規則
$TTL 1D
@       IN SOA  master  rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@        IN     NS      master
master   IN     A       10.0.0.11


www      IN     A       10.0.0.10

測試:

[root@CentOS8 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=10.0.0.12
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.10  #指定DNS伺服器

[root@CentOS8 ~]# ping www.heyongshen.com
[root@CentOS8 ~]# ping www.shanghai.heyongshen.com

DNS轉發(forward)(緩存)伺服器

將用戶的DNS請求,轉發至指定的DNS服務,而非預設的根DNS伺服器,並將指定
伺服器查詢的返回結果進行緩存,提高效率

#建議關閉加密驗證
dnssec-enable no; 
dnssec-validation no;

全局轉發:對非本機所負責解析區域的請求,全轉發給指定的伺服器

Options {
 forward first|only;
 forwarders { ip;};
};

特定區域轉發:僅轉發對特定的區域的請求,比全局轉發優先順序高

zone "ZONE_NAME" IN {
 type forward;
 forward first|only;
 forwarders { ip;};
};
兩種轉發類型:
  • first:先轉發至指定DNS伺服器,如果無法解析查詢請求,則本伺服器再去根伺服器查詢

  • only: 先轉發至指定DNS伺服器,如果無法解析查詢請求,則本伺服器將不再去根伺服器查詢

範例:實現DNs伺服器的轉發功能

// listen-on port 53 { 127.0.0.1; };  
// allow-query     { localhost; }; 允許查詢的主機

緩存伺服器主要配置:

#關閉加密驗證:
dnssec-enable no;
dnssec-validation no;

#配置轉發規則
forward  first; #轉發規則
forwarders {10.0.0.10; }; #主伺服器

主伺服器主要配置:

#關閉加密驗證:
dnssec-enable no;
dnssec-validation no;

#定義區域
zone "heyongshen.com" IN {
        type master;
        file "heyongshen.zone";
};


#配置規則
$TTL 1D
@       IN SOA master rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
master  A       10.0.0.10

www     IN A 10.0.0.2

智能DNS的實現

GSLB:
  • GSLB:Global Server Load Balance 全局負載均衡

  • GSLB是用戶發起請求後判斷由哪個地點的伺服器來提供服務

  • GSLB主要的目的:是在整個網路範圍內將用戶的請求定向到最近的節點(或者區域)

CND服務

CDN: (Content Delivery Network)內容分髮網絡

工作原理
1. 用戶向瀏覽器輸入www.a.com這個功能變數名稱,瀏覽器第一次發現本地沒有dns緩存,則向網站的DNS伺服器請求

2. 網站的DNS功能變數名稱解析器設置了CNAME,指向了www.a.tbcdn.com,請求指向了CDN網路中的智能DNS負載均衡系統

3. 智能DNS負載均衡系統解析功能變數名稱,把對用戶響應速度最快的IP節點返回給用戶;

4. 用戶向該IP節點(CDN伺服器)發出請求

5. 由於是第一次訪問,CDN伺服器會通過Cache內部專用DNS解析得到此功能變數名稱的原web站點IP,向原站點伺服器發起請求,併在CDN伺服器上緩存內容

6. 請求結果發給用戶
CDN服務商
  • 服務商:阿裡,騰訊,藍汛,網宿,帝聯等

  • 智能DNS: dnspod dns.la


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

-Advertisement-
Play Games
更多相關文章
  • 實現流程 1. 實現緩存文章 1.1 實體類 package com.intehel.demo.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import ...
  • 閑著沒事總想搞點事情,這不是web版的微信有專門的實時收發消息api,可以用Python直接調用,但是現在基本上登錄不了web版微信,所以就用不了了。 但這不是還有windows版的微信嗎,於是在基於前輩寫好的第三方庫,今天我們來實現一下實時收發信息,實現自動聊天機器人。 效果展示 微信實時收發消息 ...
  • 最近幾個月,毒教材被曝光引發爭議,那些編寫度教材的人著實可惡。咱程式員也沒有手繪插畫能力,但咱可以藉助強大的深度學習模型將視頻轉動漫。所以今天的目標是讓任何具有python語言基本能力的程式員,實現短視頻轉動漫效果。 效果展示 一、思路流程 讀取視頻幀 將每一幀圖像轉為動漫幀 將轉換後的動漫幀轉為視 ...
  • Python 絕對是一門易學難精的語言,打著簡單語法的旗號把我忽悠過來,最後發現它背後隱藏了許多複雜的實現。 如果不是作為 “玩具” 語言來學習,一定要看看全方位細緻講解的書《Python學習手冊第5版》。它涵蓋了 Python 的每一個角落,讓我明白了版本差異、作用域、函數式編程工具、相對導入、m ...
  • ​ /* *作者:呆萌老師 *☑csdn認證講師 *☑51cto高級講師 *☑騰訊課堂認證講師 *☑網易雲課堂認證講師 *☑華為開發者學堂認證講師 *☑愛奇藝千人名師計劃成員 *在這裡給大家分享技術、知識和生活 *各種乾貨,記得關註哦! *vx:it_daimeng */ 1 自定義標簽概述 1.1 ...
  • 面試官考察Java引用會問到強引用、弱引用、軟引用、虛引用,具體有什麼區別?本篇單獨來詳解 @mikechen Java引用 從JDK 1.2版本開始,對象的引用被劃分為4種級別,從而使程式能更加靈活地控制對象的生命周期,這4種級別由高到低依次為:強引用、軟引用、弱引用和虛引用。 強引用 強引用是最 ...
  • 如果程式用到了併發技術,那就要特別留意這種情況:一段代碼需要修改數據,同時其他代碼需要訪問同一個數據。 這種情況就需要考慮同步地訪問數據。 如果下麵三個條件都滿足,就必須用同步來保護共用的數據。 多段代碼正在併發運行; 這幾段代碼在訪問(讀或寫)同一個數據; 至少有一段代碼在修改(寫)數據。 一 阻 ...
  • .NetCore基於SqlSugar和Aop的工作單元模式(UnitOfWork)實現 Unit Of Work 是什麼 Unit Of Work模式,即工作單元,它是一種數據訪問模式。它是用來維護一個由已經被業務修改(如增加、刪除和更新等)的業務對象組成的列表。它負責協調這些業務對象的持久化工作及 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...