DNS常用记录类型和服务发现(DNS解析)
DNS
DNS(domain name system)主要用來把人類可識別的域名解析成網絡層的IP地址。這個過程中負責查詢的組件稱之為DNS Resolver,它會查詢本地cache和遠程的DNS server。DNS server的IP地址可通過DHCP協議獲取或者人為配置,端口號固定為53,傳輸層協議為UDP。
DNS server
DNS resolver
https://www.jianshu.com/p/5f9e245e0453
DNS record type
- A Record: 域名的IPv4地址。
- AAAA Record: 域名的IPv6地址。
- CNAME Record: 域名的別名。可以理解為域名的重定向吧,主要方便IP地址的變更。比如cdn廠商會給客戶企業分配固定的cname而不是IP,如果分配IP,cdn廠商做IP調整就受限哪些客戶企業的哪些域名綁定了這個IP,需要溝通服務遷移。還有在企業多個域名(www/mail/ftp或其他業務分類的域名)對應一個入口IP地址時候,也可以給多個域名做cname,便于后期的IP調整??傊?#xff0c;別名是一種松耦合的處理辦法。
- MX Record: smtp郵箱域名的IP地址。給client端指明某個域名的郵件服務器地址。
- PTR Record: 根據IP反向查找域名。
- SRV Record: 服務的IP地址記錄,包含ip、port、priority、weight。
- TXT Record:域名的文本記錄??梢杂涗浡撓捣绞?、服務版本信息、反垃圾郵件等。
- NS Record: dns zone。指定哪個域名服務器可以解析該域名的子域名。
- SOA Record: 授權機構記錄,記錄ns中哪個是主服務器。
dig命令
-
A Record
- CNAME Record
- MX Record
- SRV Record
- TXT Record
wireshark抓包?
go demo
package mainimport ("fmt""net" )func main() {ips, _ := net.LookupIP("www.bing.com")fmt.Println(ips)cname, _ := net.LookupCNAME("www.bilibili.com")fmt.Println(cname)cname, srvs, _ := net.LookupSRV("xmpp-server", "tcp", "google.com")fmt.Println(cname)fmt.Println("優先級 權重 目標 端口")for _, value := range srvs {fmt.Printf("%d %d %s %d\n", value.Priority, value.Weight, value.Target, value.Port)} }執行結果:
[202.89.233.100 202.89.233.101] js-cmcc-v4v6.biliapi.com. _xmpp-server._tcp.google.com. 優先級 權重 目標 端口 5 0 xmpp-server.l.google.com. 5269 20 0 alt1.xmpp-server.l.google.com. 5269 20 0 alt4.xmpp-server.l.google.com. 5269 20 0 alt2.xmpp-server.l.google.com. 5269 20 0 alt3.xmpp-server.l.google.com. 5269基于dns的服務發現
-
A Record
該方式只適合發現服務的IP地址,因此服務的端口是固定唯一的。 -
SRV Record
該方式不僅可以發現服務IP和端口,還可以獲取服務的優先級和權重。
使用該方式的開源產品:etcd
etcd cluster在對外提供服務發現能力的同時,member之間的服務發現,客戶端發現服務端集群所采用的一種方式就是DNS srv記錄,源碼請參考go.etcd.io/etcd/pkg/srv這個package。etcd集群服務發現的其他方式見
https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/clustering.md#dns-discovery, -
TXT Record
因為是文本記錄,所以可以自定義服務發現的協議字段等信息,較為靈活。
使用該方式的開源產品:eureka
總之,不管使用dns的哪種record,dns做服務發現天然缺少推送機制,需要消費端輪詢dns記錄。同時,因為應用不同、開發語言sdk不同、操作系統不同,dns resolver的實現和封裝也就不同,name resolve整個過程中會遇到不同層面的cache,導致獲取最新ip地址有延時。因此在服務發現的場景下,name resolver要繞過操作系統或語言sdk的cache,api的選擇要謹慎。
?
總結
以上是生活随笔為你收集整理的DNS常用记录类型和服务发现(DNS解析)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pymongo 增删改查基本操作汇总(基
- 下一篇: Python 判断字符串是否为IP(字符