域名和hostname

最近用git克隆远程仓库时总是超时,报错说是代理的问题,但打开和关闭代理都没能解决问题,后面了解到可以关闭git命令的全局代理:

git config --global --unset http.proxy
git config --global --unset https.proxy

如果下次要用的话也可以重新打开:

git config --global http.proxy http://127.0.0.1:4780
git config --global https.proxy http://127.0.0.1:4780

这里的http://127.0.0.1感觉挺有趣的,我们上网的时候地址中常常不会出现具体的ip地址,而是使用便于记忆的域名。这种情况下,首先需要经过dns服务器对域名进行解析,得到对应的ip地址,再根据这个ip地址从客户端向服务器发起网络连接。

比如访问https://github.com,首先是浏览器会在后台请求dns服务器或从本地缓存中获取它具体的ip地址。我们可以采用ping github.com的方式获取对应的服务器地址:

$ ping github.com

正在 Ping github.com [20.205.243.166] 具有 32 字节的数据:
来自 20.205.243.166 的回复: 字节=32 时间<1ms TTL=64
...

可以看到github.com对应的服务器ip地址是20.205.243.166 ,那么,我们就可以采用https://20.205.243.166 的方式来访问github,它等效于https://github.com,而前者不需要经过dns解析过程。

在本地的主机中,我们也可以设置一个ip地址的hostname,这个hostname和域名类似。比如在linux中通过在/etc/hosts文件中设置127.0.0.1地址的hostname为localhost,于是当我们访问https://localhost时,等价于访问https://127.0.0.1,但这个过程不需要经过dns解析,因为hostname是我们自己定义在/etc/hosts文件中的,所以首先会去查询/etc/hosts文件,如果没有结果,再去进行dns解析。

Reference:

git fatal: unable to access Failed to connect to localhost port 1080: Connection refused

DNS/HOST 详解

你可能感兴趣的:(网络,dns)