DNS 协议

这是一篇关于 DNS 协议的文章。

DNS 协议

计算机网络虽然理论部分在实际应用基本不会用到,在实际开发中,我们往往掌握一些库和工程性的框架和API就可以了。但是,在面试当中,我们还是需要了解一些基础的网络知识,比如 DNS 协议。

域名

DNS 协议(Domain Name System Protocol,域名系统协议)

域名的含义

我们知道,在网络当中,区分每个地址的唯一标识就是IP地址。但是 IPv4 和 IPv6 都是一堆难以记忆,没有什么规律的数字。所以,人们就想到一种更容易记忆的地址,就是域名。域名就是人们可以记忆的名字,比如 www.baidu.com。

域名的层级结构

域名的层级结构是通过点号来表示的,比如 www.baidu.com。

  • 顶级域名(TLD):比如 com,net,org,edu,mil,gov,arpa,info,biz,name,pro,aero,coop,museum。
  • 二级域名(SLD):比如 baidu,google,taobao,sina,sohu,jd,wiki,sogou,ifeng,yahoo,amazon,tmall。
  • 三级域名(TLD):比如 www,mail,blog,news,shop,wiki,doc,download,video。

DNS

DNS 服务器

DNS 服务器是域名解析服务的提供者,它负责把域名转换成 IP 地址。当我们输入一个域名,比如 www.baidu.com,DNS 服务器会把域名解析成 IP 地址,比如 192.168.3.11。

DNS 协议

DNS 协议是基于 TCP/IP 协议族的,它运行在 UDP 端口 53 上。 这里注意,DNS 协议是基于 UDP 协议的

DNS 解析的过程

比如我们要查看 www.baidu.com 的 IP 地址,那么 DNS 解析的过程如下:

  1. 本地浏览器或应用发送解析请求给本地 DNS 服务器(解析器)。

  2. DNS 服务器查询缓存,如果有缓存记录,则直接返回 IP 地址。

  3. 如果本地 DNS 服务器没有缓存记录,则向 DNS 根服务器发出请求。

  4. 通过根域名服务器查询到com服务器地址,得到com

  5. 通过com域名服务器查询到baidu服务器地址,得到baidu

  6. 通过baidu域名服务器查询到www服务器地址,得到www.baidu.com的IP地址。

  7. 本地 DNS 服务器把 IP 地址返回给本地浏览器或应用。

多播和任播

任播 (Anycast)

任播是一种网络通信方式,允许一个发送者将数据包发送给一组接收者中的任意一个,通常是距离最近或响应最快的接收者。任播常用于内容分发网络(CDN)、DNS服务等需要快速响应的应用场景。

特点:

  1. 数据包被路由到距离发送者最近的接收者,或根据其他优化策略选择接收者。
  2. 使用相同的IP地址分配给多个节点,网络路由协议决定数据包的最佳传输路径。
  3. 提高了服务的可用性和响应速度,减少了延迟。

多播 (Multicast)

多播是一种网络通信方式,允许一个发送者将数据包发送给多个接收者,但不是所有的网络节点都接收数据包。它的目的是提高网络效率,减少带宽消耗。多播通常用于视频会议、直播、在线游戏等需要将相同的数据发送给多个接收者的应用场景。

特点:

  1. 数据包只在需要的网络节点之间传输,减少了不必要的带宽使用。 使用特定的多播地址范围(IPv4中为224.0.0.0到239.255.255.255)。
  2. 需要网络设备(如路由器)支持多播协议(如IGMP,PIM)。

总结一下,多播是将数据发送给多个接收者,而任播是将数据发送给多个潜在接收者中的一个。两者都旨在提高网络效率,但应用场景和实现方式有所不同。

常见的神秘代码

  1. 127.0.0.1:localhost,它是一个特殊的 IP 地址,它表示本机,用于本地计算机的网络通信。

  2. 255.255.255.255:broadcast,它是一个特殊的 IP 地址,它表示整个网络,用于网络广播。

  3. 0.0.0.0:any,它是一个特殊的 IP 地址,它表示任何 IP 地址,用于网络地址转换。

  4. 8.8.8.8:Google Public DNS,它是一个公共 DNS 服务器,用于域名解析。另外的8.8.4.4也是另外一个谷歌提供的公共 DNS 服务器。

  5. 114.114.114.114: 国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告,解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用的DNS。