为什么直接ping知乎的ip不能访问知乎的网站,而百度就可以?
结论:
简单的说,就是baidu有钱。
正文:
大型网站依靠自身稀稀落落的服务器很难满足网页“秒开”的用户需求,会加入CDN加速的队伍。
当用户访问 http://www.zhihu.com
时,域名解析到距离用户最近的CDN服务器的公网IP,浏览器于是与公网IP对应的CDN服务器建立连接。
问题来了,CDN服务器一个公网IP,可能hosted多个客户网站(a.com, b.com, c.com),当浏览器主动连接时,CDN服务器如何知道是连接哪个客户网站呢?
这时,就需要 SNI(Server Name Indication)登场了。
用户浏览器只要填入:SNI = “www.zhihu.com”
CDN服务器可以根据SNI的值知晓,浏览器原来想连接知乎的网站,完成TLS安全连接,并把资源返回浏览器。
而用户突然不使用域名,而是直接使用IP地址访问了,这就让CDN服务器有点茫然失措。
SNI = “54.223.189.245”
SNI已经无法帮助CDN服务器,分辨用户到底是想访问哪个网站了。
与其返回错误的资源,还不如拒绝服务。
那么,为什么直接使用IP=111.13.101.208为何可以访问 http://baidu.com
?
计算机通信里,如果一个地址或端口会引起歧义或冲突,是需要坚决避免的。
反过来说,如果一个地址不会引起歧义,可以放心大胆使用。
如果IP=111.13.101.208对应的就是 http://baidu.com
网站服务器,或专用CDN服务器(只服务 http://baidu.com
),即使使用IP访问又有何不可呢?
问题又来了,百度服务器需要提供“111.13.101.208”的数字证书,如果提供不出,依然无法https访问网站!
通常数字证书都是为域名签发的,很少会为IP地址签发证书。但也有为IP地址签发证书的,只要IP地址在签发期间专属于客户。
<原文转载自chexiaopangnetwork>