Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

背景介绍

我们在访问一个网页时,url 中的主机是域名,但是域名是便于用户记忆和使用,在实际访问中是是需要将域名转化成其对应的 ip 地址访问,那么是否可以直接使用 ip 地址访问服务器,而不是通过域名去访问呢?

获取 ip 地址

以访问百度为例,使用*** nslookup*** 命令找到百度的权威域名服务器,在权威域名服务器中存在百度的域名和 ip 地址的映射关系。

1-1

任意在一个权威域名服务器中找到baidu.com的 ip 地址,可以发现权威域名服务器中存在两个(39.156.66.10,110.242.68.66)ip地址,也就是说一个域名对应了多个ip地址

1-2

发现在浏览器中输入域名去访问百度服务器是可以的,但是确无法通过ip地址去访问这是为什么呢?域名创造的核心思想难道不是说避免用户记住复杂的ip地址,只要记住好记的域名吗?这其中存在什么样的机制?为什么设置这些机制呢?

3

4

wireshark抓包分析

在浏览器中输入https://39.156.66.10的方式访问百度网页,抓包分析,首先进行TCP的三次握手建立连接,因为使用了HTTPS 协议,所以还需要进行TSL握手,但是当客户端 192.168.1.6 发送hello给百度时,百度并没有发送包含其数字证书等信息的包,而是直接发送 RST 包断开连接,后续因为客户端一直没有收到ACK就触发了重传机制,当达到重传次数设定值时,客户端也就断开连接了。这说明无法通过ip地址去访问百度页面

5

分析原因

  1. 请求方法不允许

    服务器仅可以通过域名访问,不可以通过ip直接访问,前面使用 ip 地址直接访问的时候返回了 405错误,表示服务器不允许请求者使用这种方法访问。

  2. 负载均衡

    大型公司的服务器不止一个,但是服务器域名只有一个,存在一个域名到多个ip地址的映射,主要用于解决负载均衡的问题,由CDN进行分配。

  3. 反向代理技术

    向百度这种大型公司,一定是存在一个服务器集群以解决高并发请求的问题,内部服务器使用的是私网地址,通过使用公网 ip 地址将服务端的请求转发给内部服务器,而我们通过 nslookup 命令查找到的 baidu.com域名对应的 ip 地址是反向代理服务器的地址,反向代理服务器收到客户端的数据包时根据HTTP头部的host或者遵循自己制定的规则,将请求分配给内部的服务器,内部服务器构造好HTTP响应包时,通过反向代理服务器再发送出去。这样自然就无法直接通过 ip 地址在浏览器中访问了。公网ip、私网ip传输简要图如下。

    6

评论