知乎回答1:
为了方便用户记忆,我们将IP变成一个个的域名来输入到浏览器进行访问。而这使得访问网站时要先将其域名解析成 IP 。DNS (Domain Name Server) 的作用就是进行 IP 解析,把域名对应到 IP。 在 Great FireWall 的 5 种封锁方法中,有一种简单而效果很好的方法是 DNS 污染。GFW 会对 DNS 的解析过程进行干扰,这会使对某些被干扰的域名返回一个错误的 IP 地址给你的主机,使你无法正确连接到你要的服务器上读取正确的信息。 Hosts 文件本来是用来提高解析效率。在进行 DNS 请求以前,系统会先检查自己的 Hosts 文件中是否有这个地址映射关系,如果有则调用这个 IP 地址映射,如果没有再向已知的 DNS 服务器提出域名解析。也就是说 Hosts 的请求级别比 DNS 高。当你的 Hosts 文件里面有对应的 IP 时,它就会直接访问那个 IP,而不用通过 DNS。 所以,当我们直接将 Google、Twitter、Facebook 之类的 IP 放入 Hosts 文件后,就可以跳过 DNS 的解析这一步,直接就行 IP 访问,不受 GFW 的 DNS 污染干扰了。
补充一条,就是为什么 Hosts 的 IP 要时不时更改,为什么 FB、Twitter 会仍旧上不去。是因为 GFW 的第二个大招,IP 封锁。比如访问国外一个 IP 无法访问,Ping 不通,tracert 这个 IP 后发现,全部在边缘路由器 (GFW) 附近被拦截。换言之,GFW 直接拦截带有这个 IP 头的数据包。所以,如果你更改的 IP 被封锁了,就算你过了 DNS 这一关,也仍旧不能翻过 GFW。
知乎回答2:
一个最通俗易懂的比喻:
hosts=传统的电话簿
DNS(递归)=传统查号台的接线员(如114)
目标网站(域名)=需要查询其电话号码的电话用户(个人/单位)
目标网站对应的IP=电话用户的电话号码
如果手头(本机)没有电话簿(即hosts),你需要打电话到114查号台(即网络上的DNS)查询某个敏感用户(即目标网站)的电话号码(即网站对应的IP)。接线员(即递归DNS)根据机房记录(墙内污染池)告诉你一个错误的号码或空号(即404),于是,你无法接通电话。
反之,如果你手里有电话簿(即本机有hosts文件),你不需要打电话到查号台(DNS),直接在电话簿(hosts)中找到用户(目标网站),并直接拨打对应的电话号码(访问目标网站对应的IP)。
小结:hosts就是网络的电话簿,DNS是网络查号台,404是空号或错号,如果你有了电话簿,就不需要查号台,就可以直接拨打正确的电话号码。——,这,就是hosts的作用。
知乎回答3:
现在去看医生,好多医院是不允许“点”医生的,挂号时指派。
患者好比是查询者,挂号员好比是DNS,医生好比是要找到的服务器IP。 医生来上班第一件事是什么?打卡!挂号员就知道这个医生到了,一会给他分配患者!有的挂号员生病了,尤其有某些挂号员故意使坏,把痔疮患者分到了口腔科,扰乱正常就诊秩序,破坏医患关系,最恨这样的人了!怎么办?去医院多了就明确知道某个大夫天天在、且能看我的病,那以后这个病到这个医院就直接找这个大夫了!这就是host文件中将某域名“定死了”某个IP,越过“挂号员”,不会被挂号员耍了。
这样的坏处也不是没有,如果哪天这个医生跳槽了,或去卖水果了,你还去原来医院找那个医生,那你的病就被耽误了。
看完上述你懂了吗?