一文解析服务器域名无法解析 && 连接超时 && 访问受限问题

你可能遇到过,某国外站点(例如 Github)经常无法访问;某些包库管理器无法成功 Install / Update/ Upgrade(例如 pip/conda/wsl)产生服务器域名无法解析或连接超时的异常信息,究其根本均属于网络问题。

↓↓↓↓↓↓ 网络问题说明 ↓↓↓↓↓↓

上述的访问站点,或包管理器官方 Channel 均位于国外。在访问时,除了受到国家防火墙的限制原因外,国内运营商或多或少也会有一定的限制(你可能碰到过学校或公司可以正常访问,而回到老家省份后无法使用的情况)。

👇👇👇 本文主要目标 👇👇👇

给出 >>>> 当遇到 服务器地址无法解析 && 连接超时 && 访问受限等网络问题时的解决思路


解决上述网络问题之前,你需要对 Domain & DNS & Hosts 等相关概念有基础的了解,才能更好的根据实际情况分析出出现网络问题的原因并予以解决。

Domain & DNS & Hosts

我们知道,不管是访问站点,亦或 Install / Update/ Upgrade 等操作,都是向提供相关服务的 WEB 服务器请求相应资源(页面/类库包等)。

更详细的描述 >>>> 执行上述操作时,首先会向 WEB 服务器地址发送网络请求,只有成功建立了连接后才可以完成访问/Install / Update/ Upgrade等操作。这时依据你的实际网络情况,可能产生服务器地址无法解析 && 连接超时 && 访问受限等问题。

也就是说,当发生上述网络问题后,你 首先需要明确操作所访问的 WEB 服务器地址 >>> 域名

[1] >>>> Domain

域名(Domain),就是用来定义 WEB 服务器地址的,也是 WEB 服务器 IP 地址的别名(一般的 IP 地址都是长串的数字,为了用户方便记忆所以使用域名进行替代)。

例如 Github 站点域名:github.com,百度搜索域名:baidu.com

拿到目标 WEB 服务器的域名(Domain)或 IP 地址是网络访问的第一步!!!更多关于 Domain 的说明,请参见【网站基础之 URL 结构解析】中关于域名(Domain)的描述。

| ================================================== Split Line =============================================== |

[2] >>>> DNS

实际上使用域名(Domain)访问网站时,浏览器会先通过 DNS 域名解析服务器(DNS 服务器) 拿到域名对应的 IP 地址(域名解析),然后再通过 IP 地址请求服务器上的文件。

| ================================================== Split Line =============================================== |

[3] >>>> Hosts

而根据 Windows/Linux 系统规定,在进行 DNS 请求以前,Windows 系统会先检查自己的 hosts 文件中是否有当前网络域名的映射关系(域名和 IP 的映射,例如:140.82.113.3 github.com)。

如果有,则调用这个 IP 地址映射;如果没有,再向网络运营商或已设置的 DNS 服务器提出域名解析获取 IP 地址。

也就是说,hosts 的请求级别比 DNS 高!!!


网络问题解析

这一小节,我们来解析发生各种网络问题的解决思路:

域名无法解析

当发生 “无法解析服务器的名称或地址” 或 “找不到主机” 异常时,意外着当前网络运营商提供的 DNS 服务器,或当前设置的【首选/备用 DNS 服务器】,无法解析服务器域名,导致无法访问站点。

解决思路

  • 更换为其它可供解析的 DNS 服务器
  • 添加 hosts 域名映射

配置 DNS 服务器

具体步骤如下:

👇👇👇 For Windows 👇👇👇

打开【Windows 搜索框】>>> 搜索【控制面板】,并打开 >>>【网络和 Internet】>>>【网络和共享中心】>>> 选择【更改适配器设置】>>> 双击链接的网络,例如【以太网】>>> 点击【属性】>>> 双击【Internet 协议版本 4 (TCP/IP)】>>> 将【自动获取 DNS 服务器地址】修改为【使用下面的 DNS 服务器地址】>>> 然后在【首选/备用服务器】地址中分别输入如下(任选其二):

1
2
3
4
5
6
7
8
# Microsoft
4.2.2.1

# Google
8.8.8.8

# China
114.114.114.114

👇👇👇 Ubuntu 👇👇👇

关于 Ubuntu Linux 中 DNS 服务器的设置可参见【Ubuntu Server: Quick Configuration Guide】中关于【配置系统网络以及网络代理】的说明。


添加 Hosts 域名映射

hosts 文件采用 ascii 编码方式,没有后缀名的!!!你可以使用任意一款文本编辑器打开修改它。

Windows 中 hosts 文件的位置: C:\windows\system32\drivers\etc\hosts,Linux 中 hosts 文件的位置: /etc/hosts

| ================================================== Split Line =============================================== |

↓↓↓↓↓↓ hosts 文件的域名映射记录如何写 ↓↓↓↓↓↓

  • IP 地址与域名间至少要有一空格;
  • 最后一行书写域名映射时,一定要加上回车再保存以避免最后一行不生效;
  • 注释:如果某条映射记录暂时不用,只需要在它前面加一个 # 号即可。

以 Github 域名映射为例,其域名映射记录为:

1
140.82.113.3 github.com

表示访问 https://github.com 这个网址时,将解析到 64.233.162.83 这个 IP 上。

| ================================================== Split Line =============================================== |

关于域名所对应的 IP,你可以通过访问站点 |>>>> Ipaddress <<<<| 进行获取:

找到【Domain 搜索框】 >>> 输入待查询域名【github.com】>>> 确认【Enter】>>> 页面中 DNS Resource Records 中记录的就是域名对应的 IP(可能有多个)

完整 hosts 文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost

# GitHub Start
140.82.113.3 Build software better, together # github.com 可写成 Build software better, together
# GitHub End

这里再提供一份包含 Github 相关域名映射的完整 hosts 文件内容,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost

# GitHub Start
140.82.113.3 Build software better, together
140.82.113.4 gist.github.com
185.199.108.133 assets-cdn.github.com
185.199.108.133 raw.githubusercontent.com
185.199.108.133 gist.githubusercontent.com
185.199.108.133 cloud.githubusercontent.com
185.199.108.133 camo.githubusercontent.com
185.199.108.133 avatars0.githubusercontent.com
185.199.108.133 avatars1.githubusercontent.com
185.199.108.133 avatars2.githubusercontent.com
185.199.108.133 avatars3.githubusercontent.com
185.199.108.133 avatars4.githubusercontent.com
185.199.108.133 avatars5.githubusercontent.com
185.199.108.133 avatars6.githubusercontent.com
185.199.108.133 avatars7.githubusercontent.com
185.199.108.133 Build software better, together
# GitHub End

hosts 文件修改保存后,如果不生效,可执行如下操作:

1
2
3
4
5
6
# For Windows
# 刷新 DNS 缓存
$ ipconfig /flushdns

# For Linux
# 重启机器,或者重启 Network 网络服务

连接超时

当发生 “连接超时”、“操作超时” 或 “ConnectTimeout” 等超时异常时,主要讨论以下两种情况:

  • 本地网络引发超时
  • 目标服务器网络引发超时

| ================================================== Split Line =============================================== |

[1] >>> 本地网络引发的超时情况分析

[1.1] >>> 检查请求默认超时时间是否合理?!!

  • 过短:请求还未处理完成,你就急不可待了!
  • 过长:请求早已超出正常响应时间而挂了

更多是由于默认超时时间过短引发,你可以通过适当设置延长超时等待时间来进行多次尝试~~~

[1.2] >>> 本地网络不稳定

通过是由于,本地网络不通或不稳定,引发超时。超时后一直请求重试仍产生超时。

此时,你需要检查本地的网络环境是否正常,确保本地网络正常后再重试(多尝试几次)~~~

| ================================================== Split Line =============================================== |

[2] >>> 服务器网络引发的超时情况分析

服务器网络引发的超时,你是无法控制和解决的,需要等待服务器官方人员进行维护:

[2.1] >>> 对于高并发访问服务器,访问服务器达到并发连接数上限,产生超时

一般情况下,服务器并发连接数是可以满足日常客户端访问的。但当出现热点事件(例如:淘宝双十一),会使得服务器达到并发连接数上限,从而产生超时。

此时,你需要等待服务器访问流量下降后再进行尝试。

[2.2] >>> 访问服务器网络不稳定

极少出现(服务器网络挂了),由于受限于待访问服务器网络环境,你需要等待相应服务器网络恢复正常后再进行尝试。


如果你已经排除了 “域名无法解析”,并且本地网络环境正常,目标访问服务器正常,但仍然无法访问目标服务器,或显示 “访问受限”,参照下文

访问受限

导致 “访问受限” 的原因很多,例如:本地防火墙限制、国内运营商网络限制、国家防火墙的限制,以及目标服务器对访问客户端通过认证后才允许登入的限制(例如 SSH 访问 Github,你需要配置密钥)…

[1] >>> 本地防火墙限制

对于本地防火墙所引发的访问受限,你可以通过关闭防火墙得以解决。

[2] >>> 国内运营商网络限制、国家防火墙限制

你可能碰到过,同一台电脑某个网站在学校或公司可以正常访问,而回到老家省份后无法访问的情况,这很大可能就是由于网络运营商限制引发。

而对于国家防火墙限制的情况,例如在国内无法访问某些国外网站,例如 google.com & youtube.com 等。

解决方法 >>> 最简单、快捷,究极的方法,你可以通过开启科学上网工具来解决上述问题。


科学上网

如果你:

  • 本地网络环境正常
  • 访问国外网站(例如 github/google.com)
  • 工具官方源站点位于国外(例如 apt-get/conda/pip/wsl)

当遇到网络问题时,科学上网 >>>> 是最简单、最快捷、最究极的解决方法!!!


Author

Waldeinsamkeit

Posted on

2022-07-01

Updated on

2024-03-05

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.