DNS 全名是 Domain Name System,中文的意思是域名系统,它的作用就是将域名转换成 IP 地址给电脑进行访问,整个过程也就叫做域名解析。
DNS 其实是基于 UDP 协议,因为 UDP 连接效率(不用三次握手才能建立连接)比较高,所以才能保证在进行域名解析的时候不会出现延迟的情况。
正是因为基于 UDP 协议,它也有一个安全问题,那就是域名在解析的过程中很可能被劫持,把跳转的链接替换成钓鱼网站,又或者篡改接口返回的数据,这样就有可能导致用户信息被泄露或者我们服务器受到攻击。
防 DNS 劫持最好的办法就是选择安全可靠的 DNS 服务器,例如阿里腾讯都有针对这块 SDK,我们只需要集成它们的 SDK 就可以避免这种情况的出现。
这种 SDK 的原理也十分简单,例如腾讯 DNS,它们用 URLConnection 通过访问腾讯域名解析地址(例如:
http://119.29.29.29,不用域名,直接用 IP 地址来访问)来获取某个域名所对应的 IP 列表,然后网络请求框架(OkHttp)通过获取到 IP 地址建立起 Socket 连接。