前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从解决Github TimeOut到经典面试题:从输入URL到浏览器显示页面发生了什么?

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

作者头像
秦怀杂货店
发布2022-02-16 14:41:34
8360
发布2022-02-16 14:41:34
举报
文章被收录于专栏:技术杂货店技术杂货店

Github仓库地址:https://github.com/Damaer/Coding 编程笔记地址:https://damaer.github.io/Coding/

问题描述

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

思路以及解决方案

一开始,我以为自己代理网络出现了问题,关掉之后,还是一样的问题。首先我们可以使用以下的命令,删除代理配置:

代码语言:javascript
复制
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

代码语言:javascript
复制
ipconfig /flushdns

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

拓展思路

为什么刷新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上去。

【作者简介】

秦怀,技术之路不在一时,山高水长,纵使缓慢,驰而不息。个人写作方向:Java源码解析,JDBC,Mybatis,Spring,redis,分布式,剑指Offer,LeetCode等,认真写好每一篇文章,不喜欢标题党,不喜欢花里胡哨,大多写系列文章,不能保证我写的都完全正确,但是我保证所写的均经过实践或者查找资料。遗漏或者错误之处,还望指正。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秦怀杂货店 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档