乐趣区

关于java:从解决Github-TimeOut到经典面试题从输入URL到浏览器显示页面发生了什么

问题形容

Windows 操作系统上,push 代码到 git 的时候,呈现了 Failed to connect to github.com port 443: Timed out 的谬误。一脸懵逼,浏览器网页也拜访不了。

思路以及解决方案
一开始,我认为本人代理网络呈现了问题,关掉之后,还是一样的问题。首先咱们能够应用以下的命令,删除代理配置:

git config --global --unset http.proxy

而后关上ipaddress.com, 查问以下的域名,记录其 ip:

  • github.com
  • github.global.ssl.fastly.net


而后关上 C:\Windows\System32\drivers\etc\hosts 文件,把两个 ip 配置进去:

保留之后,关上CMD,刷新DNS, 从新push

ipconfig /flushdns


以上做法能够解决局部连贯 github 慢的问题,次要是超时的问题,如果不是超时的问题,下面的做法是不会起作用的,这个只是把对应的域名和 ip 的对应关系间接映射在 DNS 配置上,不必去查找了,间接找到 ip 地址。

为什么刷新 DNS 就失效了呢 ?
这就波及到一个面试常常问的一个问题了,先把问题变成:在浏览器输出一个www.baidu.com, 会产生什么?间不固定。

为什么刷新 DNS 就失效了呢?这就波及到一个面试常常问的一个问题了,先把问题变成:在浏览器输出一个www.baidu.com, 会产生什么?

  1. 解析域名:首先须要依据域名去查找该域名的 ip 地址,解析前会先查看浏览器的缓存,浏览器会保留一段时间拜访的网址的 DNS 地址,依据浏览器不同工夫不固定(在 chrome 浏览器中输出 :chrome://dns/,能够看到chrome 浏览器的 DNS 缓存。)。
  2. 如果浏览器的缓存没有这个记录,那么就回去查找零碎的缓存,零碎缓存没有的状况会去查找 hosts 文件外面的 ip 地址(如果存在的话)。
  3. 如果本地的 hosts 文件外面没有该域名对应的 ip 地址,那么就会发送一个 DNS 申请到本地 DNS 服务器,个别是由网络接入服务器商提供(譬如中国移动)。
  4. 申请达到本地 DNS 服务器之后,也会先查问缓存,缓存有则间接返回,没有则递归查问,本地 DNS 服务器须要向根服务器查问。
  5. 根服务器不记录具体的域名和 ip 对应关系,会通知 DNS 服务器,到域服务器(给出地址)上查问。
  6. 持续往域服务器查问,譬如“baidu.com”. -> .com -> baidu.com. -> www.baidu.com., 查问到之后,写入缓存并且返回 ip。
  7. 拿到 ip 之后,会建设 TCP 链接,也就是三次握手。
  8. 三次握手胜利之后,浏览器发动 HTTP 申请,申请包含三局部:申请办法 URI 协定 / 版本,申请头,注释。
  9. 服务器解决申请,返回。
  10. 敞开 TCP 链接,四次握手(或称四次挥手)。
  11. 浏览器解析报文或者资源,渲染。

上述只是一个概述,具体的细节很多,这个下次具体聊聊,然而咱们能够看出,在这个过程中的确波及到了 DNS 的服务器以及缓存,所以咱们刷新缓存之后,拜访 github 就能够申请到对应的 ip 下来。

【刷题笔记】
Github 仓库地址:https://github.com/Damaer/cod…
笔记地址:https://damaer.github.io/code…

【作者简介】
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使迟缓,驰而不息。集体写作方向:Java 源码解析,JDBC,Mybatis,Spring,redis,分布式,剑指 Offer,LeetCode 等,认真写好每一篇文章,不喜爱题目党,不喜爱花里胡哨,大多写系列文章,不能保障我写的都完全正确,然而我保障所写的均通过实际或者查找材料。脱漏或者谬误之处,还望斧正。

2020 年我写了什么?

开源刷题笔记

素日工夫贵重,只能应用早晨以及周末工夫学习写作,关注我,咱们一起成长吧~

退出移动版