前几天碰到了一个很奇怪的问题,公司内网技术部只有我一个人网络状况出现问题,连git的pull和push都成了问题。排查过后发现是dns解析的时间非常长,导致网络整体变慢。后来发现同事们都用的路由器作为dns服务器,而我单独配置了114.114.114.114作为dns解析服务器。以下是此次问题的总结。
浏览器进行网络请求步骤
- 首先访问的是本地dns缓存记录,而浏览器dns本地缓存不已dns服务商的ttl为准,各家浏览器有自己的实现机制,chrome约60s,safari约10s。
- 如果没有命中当前浏览器的缓存记录,那么此次查询会到os层级缓存去找,win默认一天缓存时间,macos按照dns服务商给的ttl时间进行处理。在寻找缓存之前会优先读取当前os:/etc/hosts内的域名映射。
- 如果本地也没有命中缓存记录,那么就会去dns服务器去解析,这里考虑两种情况:
1.路由器内网中使用路由器作为dns服务器,那么这个时候会去路由器中读取缓存,如果没有再去上一级外网dns服务器去请求。
2.直接以外网dns服务器作为当前os的dns服务器,这个时候在请求过程中会直接跳过路由器的缓存记录,而直接去外网dns服务器解析。 - 之后就是各级dns服务器之间的跳转了,这里忽略这部分操作。
推测
因为macos的dns缓存时间是跟着dns Server的ttl时间来设置的,那么很有可能是114的服务器出现某些问题(或者是某些优化逻辑)导致当前需要访问域的dns的ttl时间极短,前一分钟才刚访问过的域名又需要重新向114发起解析请求。