域名、IP、DNS、Hosts、Nginx

在这里插入图片描述
先从最熟悉,也是最表层的域名ip说起:
比如你和我,你叫张三,我叫李四,名字类似于域名。你在网吧玩,很多太多台电脑各自都有个座位号,座位号就类似于ip,我想去网吧找你去玩电脑,光知道名字,但不知道你位置,所以,就需要DNS。

DNS
DNS就是说ip一长串,不好记啊,想个办法弄个简单名字,所以他的主要功能就是把域名转换成具体的ip地址,就是说找你位置,我光知道名字不行,我还得找到具体的座位ip才行。
域名系统作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网
注意:这域名可以和ip地址绑定,一个ip地址可以被多个域名绑定

HOSTS
再说hosts,这个是个本地域名解析文件,不管你是windwos还是linux,那都是有的,没有就自己建一个。

windows一般在:C:/Windows/System32/drivers/etc/hosts

Linux的hosts文件路径一般:/etc/hosts

范例:

127.0.0.1 localhost

127.0.0.1 www.test.com

这个文件其实也是配置了ip和域名之间的映射关系的数据库,有啥作用呢,就是说,本地要是有这个文件,就优先用这个文件中的配置去解析,如果没有,那就通过nds解析。

注意:hosts文件只能配置ip和域名的映射关系,但是不能配置端口号,默认访问80端口

Nginx
因为要解决端口问题,这里就得使用大名鼎鼎的反向代理软件:Ngin,至于Nginx是什么,怎么安装配置,可以在我以前的文章查看或者度娘搜索。

简单的范例:

//nginx.conf

server {

listen 80; //监听的端口

server_name test.com; //监听的域名

proxy_set_header Cookie $http_cookie; //头信息

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header REMOTE-HOST $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

location / {

proxy_pass http://localhost:8080; //代理转发,所有到test.com 80端口访问的请求,都会转发到本地8080端口处理

}

}

------------------------------------------------------------- 重点 -------------------------------------------------------
在这里插入图片描述

域名结构:
http://www.sina.com.cn./

http://主机名.二级域. 顶级域。根域/

树状结构最顶层称为根域,用“."表示,相应服务器称为根服务器,整个域名空间解析权都归根服务器所有,但根服务器,无法承担庞大的负载,采用“委派"机制,在根域下设置了一些顶级域,然后将不同顶级域解析权分别委派给相应的顶级域服务器,如将com域的解析权委派给com域服务器,以后但凡根服务器收到以com结尾的域名解析请求,都会转发给com域服务器,同样道理,为了减轻顶级域的压力,又下设了若干二级域,二级域又下设三级域或主机。

问题:
当我们在浏览器输入一个 URL 地址时,浏览器要向这个 URL 的主机名对应的服务器发送请求,就得知道服务器的 IP,对于浏览器来说,DNS 的作用就是将主机名转换成 IP 地址。

DNS域名解析流程
DNS 域名解析,简单地说就是把域名翻译成 IP 地址。例如:把 www.baidu.com 这个域名翻译成对应 IP 220.181.38.251,这里只是举个例子
在这里插入图片描述
域名解析流程:(以Chrome浏览器为例)

① Chrome浏览器 会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否有https://www.xxx.com 对应的条目,而且没有过期,如果有且没有过期则解析到此结束。

注:我们怎么查看Chrome自身的缓存?可以使用 chrome://net-internals/#dns 来进行查看

② 如果浏览器自身的缓存里面没有找到对应的条目,那么Chrome会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束.

注:怎么查看操作系统自身的DNS缓存,以Windows系统为例,可以在命令行下使用 ipconfig /displaydns 来进行查看

③ 如果在Windows系统的DNS缓存也没有找到,那么尝试读取hosts文件(位于C:\Windows\System32\drivers\etc),看看这里面有没有该域名对应的IP地址,如果有则解析成功。

④ 如果在hosts文件中也没有找到对应的条目。浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器(一般是电信运营商提供的,也可以使用像Google提供的DNS服务器)发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求,也就是运营商的DNS服务器必须得提供给我们该域名的IP地址),运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。
如果没有找到对应的条目,则运营商的DNS代我们的浏览器发起迭代DNS解析请求,它首先是会找根域的DNS的IP地址(这个DNS服务器都内置13台根域的DNS的IP地址),找到根域的DNS地址,就会向其发起请求(请问www.xxx.com这个域名的IP地址是多少啊?),根域发现这是一个顶级域com域的一个域名,于是就告诉运营商的DNS我不知道这个域名的IP地址,但是我知道com域的IP地址,你去找它去,于是运营商的DNS就得到了com域的IP地址,又向com域的IP地址发起了请求(请问www.xxx.com这个域名的IP地址是多少?),com域这台服务器告诉运营商的DNS我不知道www.xxx.com这个域名的IP地址,但是我知道xxx.com这个域的DNS地址,你去找它去,于是运营商的DNS又向xxx.com这个域名的DNS地址(这个一般就是由域名注册商提供的,像万网,新网等)发起请求(请问www.xxx.com这个域名的IP地址是多少?),这个时候xxx.com域的DNS服务器一查,诶,果真在我这里,于是就把找到的结果发送给运营商的DNS服务器,这个时候运营商的DNS服务器就拿到了www.xxx.com这个域名对应的IP地址,并返回给Windows系统内核,内核又把结果返回给浏览器,终于浏览器拿到了www.xxx.com 对应的IP地址,该进行一步的动作了。

注:一般情况下是不会进行以下步骤的

如果经过以上的4个步骤,还没有解析成功,那么会进行如下步骤(以下是针对Windows操作系统):

⑤ 操作系统就会查找NetBIOS name Cache(NetBIOS名称缓存,就存在客户端电脑中的),那这个缓存有什么东西呢?凡是最近一段时间内和我成功通讯的计算机的计算机名和Ip地址,就都会存在这个缓存里面。什么情况下该步能解析成功呢?就是该名称正好是几分钟前和我成功通信过,那么这一步就可以成功解析。

⑥ 如果第⑤步也没有成功,那会查询WINS 服务器(是NETBIOS名称和IP地址对应的服务器)

⑦ 如果第⑥步也没有查询成功,那么客户端就要进行广播查找

⑧ 如果第⑦步也没有成功,那么客户端就读取LMHOSTS文件(和HOSTS文件同一个目录下,写法也一样)

如果第八步还没有解析成功,那么就宣告这次解析失败,那就无法跟目标计算机进行通信。只要这八步中有一步可以解析成功,那就可以成功和目标计算机进行通信。

另外注意:
从代码层面,实现域名到ip解析的环节如下图:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值