前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么域名能够访问网站,而直接使用IP不可以

为什么域名能够访问网站,而直接使用IP不可以

作者头像
格姗知识圈
发布2019-07-19 16:12:10
9.5K0
发布2019-07-19 16:12:10
举报
文章被收录于专栏:格姗知识圈格姗知识圈

作者:逃离地球的小小呆 链接: https://blog.csdn.net/gui951753/article/details/83070180

01背景介绍

在访问杭电官网杭电官网的时候,直接在浏览器上,输入域名是可以得到访问结果的。因此,产生了一种猜测,既然网络中实际上是根据域名转换的IP来直接访问服务器的,那么我直接通过IP来访问杭电官网是否可以??

通过nslookup 解析出杭电官网的ip地址,然后在浏览器中手动输入相关ip地址,结果并不能得到访问结果,为什么?

解析到的ip地址有两个 218.75.123.182 218.75.123.181 初步怀疑可能是用这两个IP地址做了高可用 当其中某一个Ip地址访问不到的时候,另外一个ip地址可以访问到。

继而,我决定换个网站来试一下,看能否直接访问杭电OJ,高潮来了,惊讶的发现杭电OJ和杭电官网,这两个网站对应的IP地址是同一个。

02提出问题

由于上面的情况,我内心中充满了疑问,主要有两点。

1.为什么我直接访问www.hdu.edu.cn是能够访问到网站的,而当我输入218.75.123.182却访问不到?

2.为什么www.hdu.edu.cn和acm.hdu.edu.cn这两个网站使用dns解析出来的ip地址是一样的?

03分析原因

查阅众多资料后,基本能够分析出以上两个问题的原因所在。

04只输入ip地址访问不到域名的原因

使用nslookup对多个杭电下的网站进行解析,发现很多站点的ip地址是相同的,都是218.75.123.182,218.75.123.181这两个。如下图所示,杭电网站cloud.hdu.edu.cn和www.hdu.edu.cn以及杭电oj系统.www.hdu.edu.cn对应的是同一个公网ip地址(不知道公网ip和私网ip的,可以查一下百度)

这么多站点对应同一个ip地址,你只输入ip地址,浏览器当然不知道你到底要访问哪一个站点,这就是为什么你不能够使用ip地址去访问的原因所在。

05多个站点对应一个ip地址的问题

理论上来说,一个ip对应一个站点,这是很正常的,那为什么会出现上文中所描述的那样,一个ip地址对应多个站点的情况呢?

有两种技术可以实现描述的问题

1.虚拟主机技术

2.反向代理技术

06虚拟主机技术

虚拟主机技术是apache,nginx等服务器所特有的一种功能,也就是实现多个站点在同一台服务器上放置。假如说杭电是使用虚拟主机技术实现的一个IP对应多个web站点的话,那么实际情况应该是这个样子:

比如我现在有一台服务器,我可以在服务器里面描述这样一种站点和实际路径的关系:

站点

实际存放路径

acm.hdu.edu.cn

/var/www/acm

www.hdu.edu.cn

/var/www/html

cloud.hdu.edu.cn

/var/www/cloud

那么这样这三个站点就能够在同一台服务器上共存了,当你访问acm.hdu.edu.cn的时候,主要有这么几个步骤

1.dns做域名解析,然后得到解析后的结果,假如说是218.75.123.182。

2.浏览器开始与目标ip地址为218.75.123.182的服务器进行三次握手操作,建立TCP连接

3.浏览器开始构建HTTP请求报文,报文的头部格式为

代码语言:javascript
复制
Accept  
*/*
Accept-Encoding  
gzip, deflate
Accept-Language  
zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection  
keep-alive
Cookie  
PHPSESSID=v103qj5emvgv5j8hd85d2aro33
Host  
acm.hdu.edu.cn
Referer  
http://acm.hdu.edu.cn/
User-Agent  
Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/62.0

只需要关注这个报文头部的这么一段

代码语言:javascript
复制
Host  
acm.hdu.edu.cn

通过这个报文可以知道,浏览器要访问ip地址为218.75.123.182的服务器的哪一台HOST(这里有一个概念,服务器上面可以有一个站点,也可以由多个站点,有一个站点的话,服务器上就只有一个HOST,如果有多个站点的话,服务器上面就会有多个虚拟HOST)

4.服务器接受到这个报文之后,会进行分析,apache服务器会根据报文中的host,来匹配自己的配置文件。假设,服务器中的配置文件是这样写的:

代码语言:javascript
复制
<VirtualHost *:80>
 DocumentRoot /var/www/acm
 ServerName acm.hdu.edu.cn
</VirtualHost>
<VirtualHost *:80>
 DocumentRoot /var/www/html
 ServerName www.hdu.edu.cn
</VirtualHost>
<VirtualHost *:80>
 DocumentRoot /var/www/cloud
 ServerName cloud.hdu.edu.cn
</VirtualHost>

那么当请求报文中的HOST是acm.hdu.edu.cn的时候,apache服务器就会根据自己的配置文件所写的那样,去/var/www/acm目录下寻找站点内容。

5.服务器处理请求,构建响应报文,发送响应报文到客户端

07反向代理技术

当我以为我已经接近了事实真相的时候,意外的发现了另外一个问题,我登录到校园网,然后继续使用nslookup进行域名解析,发现了一个惊讶的事情,解析之后,上文中所提到的那三个站点的ip完全不一样。也就是说实际上这三个站点完全放在了不同的服务器上,即不可能是使用的虚拟主机技术(如果使用虚拟主机技术,这几个站点肯定是在同一台服务器上的)。

如下图所示

内网、外网解析文中所述三个站点的情况如下表所示

网站域名

外网解析

内网解析

acm.hdu.edu.cn

218.75.123.182,218.75.123.181

192.168.102.19

www.hdu.edu.cn

218.75.123.182,218.75.123.181

192.168.102.6

cloud.hdu.edu.cn

218.75.123.182,218.75.123.181

10.1.18.137

既有192.168开头的私网ip地址,又有10.1开头的私网ip地址,这种特殊的网络结构是由于杭电的网络规划造成的,一开始杭电使用的是192.168开头的私网ip地址,后来发现不够了,继而进行扩展,使用10.1开头的私网ip地址。这里对于这一部分内容不做深究

由此,我们基本可以推断出,杭电实际的网络结构是下图所示的样子。而不是上文中,我所推测的虚拟主机。

当我在外网访问acm.hdu.edu.cn的时候,主要经历了这么几个步骤。

通过dns解析获得acm.hdu.edu.cn的反向代理ip地址 218.75.123.181。

1.客户端发送报文到ip地址为218.75.123.181的服务器上,中间要经过NAT路由器,做NAT转化,把私网IP地址转化为公网IP地址。

2.数据包在因特网中进行路由准发

3.数据包最终到达218.75.123.181的apache服务器,这个服务器实际上并不承担web站点任务,主要是作为一个WEB网站的网关角色(反向代理角色)。

4.请求报文中的HOST是acm.hdu.edu.cn,因此,反向代理服务器会将请求报文转发至域名为acm.hdu.edu.cn的主机上。acm主机处理完请求之后,会将处理后的结果返回至客户端。

08小结

本文主要讲了两方面:

1.直接使用ip地址访问不了站点的原因

原因就在于该ip地址可能对应着多个web站点,单单依靠ip地址是不知道如何匹配到哪个web站点的。但是通过域名,我们就能够知道具体要访问哪一个HOST。如果使用虚拟主机,直接找到相关virtual HOST即可,如果使用反向代理,那么通过代理找到HOST的实际私网地址也可以。

2.只有一个公网ip如何实现多个WEB站点的访问

有两种办法可以实现,其一是虚拟主机,其二就是反向代理。通过目前来看,虚拟主机的实现方式已然不多,更多的企业或者学校使用的是反向代理技术

针对本案例(杭电若干网站),这若干网站经过DNS解析后对应的是同一个ip218.75.123.182或者218.75.123.181,用户请求接入到这个公网ip的时候,该服务器会进行反向代理,根据请求报文中的HOST名字,将请求报文转发至具体的局域网内部的主机进行处理,然后再将处理结果进行返回。

- End -

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 格姗知识圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档