姚冬同学回答的很棒,补充一点个人看法。
题主的问题其实有点模糊,如果访问服务器先采用域名访问很慢,然后题主通过本地nslookup 获得DNS本地缓存映射(域名-IP),直接用IP地址访问很快,即两次访问使用相同的IP地址,两次访问的客户端为同一台机器,那么两次访问的唯一不同:
第一次DNS,DNS域名解析会介入一次到多次DNS迭代、递归查询,一句话:会有多次RTT延时的引入。
第二次IP,直接就IP封包出去了,所以会快的多。
但还有一种场景,有多个服务器(域名一样,但IP不一样)提供服务,有的使用电信的IP,而有的使用联通的IP,如果客户端是电信的,那么域名解析最好是电信的服务器,那么客户端和服务器在电信网络里,访问会快,同理联通的客户端则访问位于联通网络的服务器,智能DNS会根据客户端IP来做出以上的决策。
但如果客户端位于电信网络,而返回的服务器IP却位于联通,则流量必须经过电信与联通的互联通道,这个通道比较窄,容易堵车、丢包,给用户的感受就是访问特别慢(丢包特别影响性能)。
我的怀疑是: 采用IP访问快,是因为客户端与服务器IP在一个网络,而DNS域名解析的服务器IP与客户端不在一个网络,丢包、延迟大都会造成题主所说的访问慢。
如今互联网的基础协议是 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,并且根据服务器负载选择了最佳服务器。这个决策过程也是需要时间的。
ip=直接拨打电话号,域名=查通讯录,通讯录不在你手里,还尼玛是草稿纸手抄的
所有说dns解析慢的,动脑子了吗?dns解析一次后,就会缓存到操作系统和浏览器中。
应该是解析的地址不好,返回了一个速度很慢的地址,比如解析了一个国外的地址。可以nslookup看一下dns解析的ip地址,跟你直接访问的ip地址是不是不一样。推测提问者的微信项目部署在某个云服务器上,CDN加速出现问题的可能性最大。但是给的信息太少,无法明确。至少把域名,ip给出来抓包看一下。
最后,平常建议使用114.114.114.114做dns,谷歌的dns不符合我国的特殊国情。。。
鉴于很多人一点不懂网络,还要强答或者强评,我就截个图多说点。下面是多地ping
的域名解析结果。可以看到2个不同的ip,这就是基于dns的网站负载均衡。但是很奇怪为什么淘宝这个体量的网站,只能看到很少的ip,是不是?这是淘宝又用了bgp Anycast技术,多个服务器用同一个ip~
换个DNS?
1、dns服务器访问慢。这种情况有个特点,第一次访问时慢,但是由于有dns缓存,短时间内再次访问/刷新等操作会很快。
2、虚拟主机处理域名慢。访问ip时直接给默认目录结果,带主机的访问会根据host查找返回特定目录结果,如果一个服务器下有大量主机,并且服务器进程处理查找目录的效率不高,就会慢。
3、域名证书相关。访问域名时使用https加密,但是证书是域名证书,访问ip时会使用http。
4、服务器程序内有需要处理host部分的代码慢,这需要对服务器程序或者脚本做个测试。
可能是dns服务器连接比较慢,你用域名访问,实际上是先访问dns服务器,获取对应域名的ip地址,然后再通过ip地址去访问对应域名的服务器,事实上访问dns服务器来获取ip地址可能要通过多层dns服务器层层询问,比如离你最近的dns服务器不知道你所问的域名ip地址是多少,它就要往上一级回溯,一直到明确知道对应dns所表示的ip位置,然后返回给你的机器。
已经回答的差不多了。主要就是dns解析。虽然有人说了dns解析有本地缓存,但是本地缓存依然需要时间的,而且本地缓存一般有个缓冲池大小限制。比如dnsmasq默认是100个。加上默认还会有ip到domain的反解,还要去掉你本地局域网的一些ip,其实默认设置下也就二三十个域名能用上。现行的cdn优化导致很多图片域名都是拆分成http://pic001-999.example.com这种,所以你上一个网站,可能全部本地缓存就要换一遍了。
另外,如果题主还要关心更狠一点的细微影响的可能性:domain解析不单在dns层面做,在webserver乃至更后面的web framework都要不断重复的做路由解析,这些都是重复的CPU消耗。
打个比方,甲乙两人现在从同一地点出发想去一个 地点A ,甲有这个地方的 门牌号 (ip地址),而乙只知道这个地点叫什么(域名),他 需要去某个办事处(dns)去查询这个地方的门牌号 ,并且他已知这个办事处的门牌号(dns的ip),甲乙两人在的位置有 直达A地点的地铁 (很快很快), 而到办事处需要坐公交还要走路(很慢很慢),而且工作人员动作可能很慢,之后再坐另一辆公交去A地点 。现在,你觉得甲乙谁先抵达地点A呢?
虽然这事看起来和dns相关 但说实话由于dns解析引起的慢还真少见 服务器在自己手中的话先确认你的服务器应用层上是否对域名访问有代理 过滤之类的处理
在本地hosts文件里写好域名和ip 再试试咯 依然慢的话就可以认为不是dns的问题了
因为你没选Bluecat,专业DDI解决方案
多一个步骤,当然慢
因为电脑不认识域名啊, 它只认识IP地址.
然后就像查找地址本一样, 访问一个域名得先到一个叫"DNS服务器"的地址本上找到域名对应的IP地址, 然后你的电脑才能去访问那个网站.
所以, 你的电脑唯一知道的就是DNS服务器的地址而已. 这个地址是通过网络广播而发布给所有网络客户端的.
当然, 电脑也会有DNS缓存服务, 一些常用的域名在访问之后直接就留在你的电脑里了. 这个是由系统服务来完成的.
很多人还知道一个叫做hosts的文件, 实际上就是一个"本地地址本", 里面可以手工指定一些域名的IP地址.
计算机查"地址本"的顺序一般是: 先找hosts文件, 然后再找DNS缓存, 最后再去DNS服务器查询.
所以, 直接访问ip地址要比访问域名快.
因为域名解析到IP需响应时间,而且打开一个网站面临的不是一次域名解析,而是十几次或几十次的解析,这样跟直接访问iP的时间差就体现更明显了。(用软件看打开网易的过程至少十几个解析动作,广告越多解析越多)
因为访问域名的话流程是先向DSN服务器请求域名,然后DNS服务器返回IP,设备在访问IP获得内容。按题主说的应该是解析域名的时间过长所致。
建议:1.更换电脑的DNS为114.114.114.114等试试。
2.如果有域名管理权限的话建议新增主流DNS解析。(以万网修改为例)
不要高估了域名解析的速度,就算你在美国洛杉矶用了8.8.8.8这样的DNS,没有本地缓存,速度依然可能爆炸。而且有时候本地缓存可能还有额外的问题,建议先抓包看看是哪个步骤比较耗时。
我之前在自己的Linux服务器上,本机ip没有写127.0.0.1,写了服务器的域名,结果每次运行相关命令的时候都要好几秒。
后来老老实实把域名写到本机的hosts里,一切恢复正常。本机开发的时候改hosts还是比较方便有效的。
因为域名要解析出IP啊
不可能DNS没有缓存啊
域名访问需要经过DNS服务器对这个域名进行一个解析,解析成相应的IP地址然后访问相应的IP地址,所以会慢,但是一般慢的时间可以忽略不计,现在的网速很难察觉出来差距,如果网络非常非常慢的时候会有一定的影响。
域名注册:
近几天换了个千兆路由器,用主机名访问NAS非常慢只有2M/s,用ip访问很快占满千兆。折腾了一圈整明白了,因为路由给NAS共享主机分配了两个ip,ipv4和ipv6,于是在路由器内把IPV6分配关闭,NAS主机这边ipv6也关闭,让主机只有一个IP,问题就解决了。
标签:IP,域名,访问