博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为啥用ip不可以访问知乎,而百度却可以?
阅读量:4318 次
发布时间:2019-06-06

本文共 1103 字,大约阅读时间需要 3 分钟。

我们先来ping知乎的域名,然后可以得到响应的服务器的ip

1686636d5cef4a8b?w=598&h=164&f=png&s=125513

之后我们用浏览器来访问这个ip,结果如下

1686646e7fe2bcf6?w=1080&h=250&f=png&s=151096

被拒绝访问了。

而用ip来访问百度,则没啥问题,如图

16866472ff25ae12?w=570&h=167&f=png&s=128605

1686647fb6fe7209?w=1080&h=359&f=png&s=167180

访问知乎的时候,域名可以访问,ip不可以访问,这究竟是为啥?

我们知道,ipv4的ip地址是非常有限的,如果每个人都想拥有一个全球ip,那肯定是不够分配的,不知道啥是全球ip的可以看我这篇文章:

所以,很多网站在发布的时候,是有可能几个域名共用一个CDN服务器的。

1686648c0d038935?w=501&h=249&f=png&s=33784

稍微解释下CDN是啥: CDN服务器可以说是一种缓存服务器。当我们要访问某个网站的资源时,如果该网站的服务器离我们很远,这样的话响应速度就会很慢,为了让响应速度快一些,我们可以把资源分布放在各个地方,然后响应客户端的时候,把离客户端较近的资源传送给他

当我们用域名访问知乎的时候,CDN服务器可以根据访问的域名知道你想要的是哪个网站的资源,然后直接给你返回对应的资源。

但是当你用公网ip访问就不一样了,由于一个CDN服务器的公网ip对应多个域名网站,他不知道你想要的是哪个网站的资源,也就是说,当你用 118.89.204.192 去访问知乎的时候,CDN服务器不知道你要访问的是 zhihu.com,还是访问 a.com 或 b.com,所以他也干脆明了点,直接拒绝你的访问。

有人可能会问,我输入域名之后,DNS服务器帮我自动解析成对应的ip,去访问知乎的时候,也还是用ip访问的啊,这貌似和ip访问没啥区别啊。

确实,访问的时候,DNS服务器都会帮们我把域名解析成ip去访问,CDN服务器之所以能够检测到对应的域名,其实是这样的:

当客户端用域名访问知乎的时候,DNS会解析成对应的ip去访问CDN服务器,然后CDN服务器可以根据SNI机制获得该ip对应的来源域名,然后返回对应的资源。

这里稍微简单粗暴解释下SNI机制:该机制主要是用来解决一个服务器对应多个域名时产生的一些问题,通过这种机制,服务器可以提前知道(还没建立链接)客户端想要访问的网站,想要知道更加具体的我已经给你们准备好文章:

知道了用域名可以访问知乎,而用ip不可以访问知乎之后,我们再来说说百度。

为啥百度ip和域名都可以访问呢?

这其实很简单,就是百度用的CDN服务器,只对应一个网站域名呗,说白了,就是百度有钱!

有收获?不妨点个赞,让更多的人看到这篇文章!

文章目录导航:

文章首发于我的公众号「苦逼的码农」,更多精彩文章可以关注下我哦。后台回复「666」送你一份我整理的电子书单

168665fac589ed71?w=430&h=430&f=png&s=58558

转载于:https://www.cnblogs.com/kubidemanong/p/10293414.html

你可能感兴趣的文章
获取设备实际宽度
查看>>
Notes on <High Performance MySQL> -- Ch3: Schema Optimization and Indexing
查看>>
Alpha冲刺(10/10)
查看>>
数组Array的API2
查看>>
为什么 Redis 重启后没有正确恢复之前的内存数据
查看>>
No qualifying bean of type available问题修复
查看>>
第四周助教心得体会
查看>>
spfile
查看>>
Team Foundation Service更新:改善了导航和项目状态速查功能
查看>>
WordPress资源站点推荐
查看>>
Python性能鸡汤
查看>>
android Manifest.xml选项
查看>>
Cookie/Session机制具体解释
查看>>
ATMEGA16 IOport相关汇总
查看>>
JAVA基础-多线程
查看>>
面试题5:字符串替换空格
查看>>
[Codevs] 线段树练习5
查看>>
Amazon
查看>>
component-based scene model
查看>>
Echart输出图形
查看>>