互联网网络传输协议理解坑点
DNS 协议的用途和解析方式是什么样的?
所有应用层层面的数据,如果需要进行网络传输,必定需要 ip 地址这个核心参数。没有 ip 地址的包,是不可能发出去的,都过不了网卡。因为网卡不知道要把这个包传到哪里去。
而 ip 地址人类很难记忆,所以很多服务都是通过域名进行访问。域名是比较方便记忆,但是网络又不认,因为网络无法根据域名进行数据传输,即域名没有定位功能。
所以所有的应用层的域名访问,都需要 DNS 协议解析成 ip 地址后才能够封包发送,ip 有定位功能。如果一个应用层服务直接通过 ip 地址访问另一个服务,那么是完全不用 DNS 做一次 ip 地址解析的。
我们的域名是需要从特定的服务商进行购买,在服务商处会进行 ip 地址的配置。而 DNS 协议的根据就是层层服务商解析,问根域,返回顶级域,问顶级域,返回权威域,这样通过.com
、.cn
等不同服务商的判断,最终落实并返回一个确定的 ip 地址。
DNS 协议是系统层级的操作,应用层无需关心,系统通过 DNS 协议拿到 ip 地址后会给到应用层,然后应用层将 ip 地址传递到传输层进行网络数据封包。
为了效率问题,系统会进行 DNS 的缓存以加快解析速度,并且还会设置有效期以较少误差。
比较例外的是 hosts 文件。在这里配置的信息具有第一优先级,系统如果在 hosts 中找到了对应的域名和 ip 地址的映射,则不再进行 DNS 请求而直接返回映射数据。
DNS 会有劫持问题,在移动端会使用 HTTPDNS 技术。DNS 有一个非常重要的大杀器,就是做负载均衡。