为什么域名访问比IP慢?

来源:互联网 发布:sql server好学吗 编辑:程序博客网 时间:2024/05/23 23:29



作者:姚冬
链接:https://www.zhihu.com/question/55707634/answer/145902300
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

如今互联网的基础协议是 IP 协议,在IP之上是 TCP/UDP,再往上是 HTTP等应用协议。

IP的传输的基础是IP地址,路由器都是只认IP地址,不认域名的。

域名是为了方便理解而存在的,也解决了IP地址和网络服务设备的关系不固定的问题。

在使用域名访问网络的时候先要把 域名解析成IP地址,这个解析服务就是DNS。

访问DNS一般来说是很快的,就是一个UDP包来回,但是总要花点时间,所以用域名注定比用IP慢一点。

但是DNS不总是很快的,有时会非常慢,甚至根本就无法使用,这就造成了用域名访问网络会遇到各种不稳定问题。

每台互联网终端设备,比如 PC 手机,都会有一个默认DNS,你在PC上输入

ipconfig /all

就可以看到默认DNS的IP地址。

所谓域名解析服务就是通过查表把 域名换算成IP的过程,访问网络的时候把域名发送到DNS服务器,然后从DNS获取解析后的IP地址,如果DNS服务器上有域名到IP的对照表,那么这个解析就很快,如果没有,DNS服务需要向它的上层服务去询问,这样一层一层问上去,直到找到这个对照表为止,这个过程时间就很不可控了,有时几百毫秒,慢起来10秒钟都可能。

所以上规模的互联网服务商都会自建DNS,就是防止网络服务商的域名解析服务不靠谱的问题。

有时候DNS解析失败也不是网络服务商的责任,有可能是中间某个路由的问题把DNS包搞丢了,屏蔽了,或者导入到流量黑洞去了。因为UDP包并不可控。

有的厂商实现了HTTP DNS,这个HTTP请求是基于IP地址的本身不需要再解析一次域名,基于HTTP协议就很少被拦截,如果HTTP都被拦截就是断网了。

DNS服务不仅仅解决域名和IP的对应问题,还会解决就近接入和负载均衡问题。你会发现用同一个域名在不同地方,不同上网方式下得到的IP地址都不一样,比如用电信宽带和移动4G上网会得到不同的IP,你在北京和上海访问同一个网站IP也不一样,甚至同一个地点同一个网络不同时间得到的IP也不一样。这就是DNS服务根据需要给你选择了最佳接入的IDC,并且根据服务器负载选择了最佳服务器。这个决策过程也是需要时间的。





原创粉丝点击