接下来一个大环节,就是学习网站的所有知识点了
用户访问网站,主要分两大块知识点
客户端输入http://www.yuchaoit.cn后,是如何看到网页的,其中原理流程
服务端是如何提供网站服务的?其中原理流程
浏览器输入网址后发生了什么
这是一个经典的问题,通过回答的细致程度,可以判断出,小白、新手、中级玩家、高端玩家。
关于这个问题,小到三两句话,大到你用三个月都说不完的知识点,知识深似海。
1.梳理用户访问网站流程
0.客户端 确保你的机器可以上外网
1.客户端 浏览器输入网站url,点击回车 www.yuchaoit.cn
2.客户端 本地进行dns域名查找、查找域名对应的ip地址
3.客户端 直接访问该服务器的ip,开始tcp三次握手过程
4.客户端 建立tcp连接后,发起http请求,构造请求报文,会发出多次请求
5.服务端 接收到http请求后,解析请求,响应请求,回复多次
6.客户端 浏览器看到响应内容,浏览器解析响应数据,渲染结果在屏幕上
7.客户端 结束访问,关闭网站,完成tcp四次挥手
2.抓技术名词关键字
1.域名
2.域名解析
3.TCP/IP 三次握手
4.TCP/IP 四次挥手
5.HTTP请求发出
6.HTTP响应报文
1.DNS域名结构
由于互联网中的域名太多,全球的用户也太多,因特网的域名采用的是树状结构命名。任何一个连接到网络中的机器,都有一个唯一的层次结构名字,叫做域名(domain name)。
域、就是名字空间中可被划分、管理的部分。
语法上要求,域名由标号(label)组成,每一个label之间通过小数点隔开。
域名可以被分为多个子域,子域还可以继续划分子域的子域,因此形成了
顶级域
主域名
子域名
根域 .
在整个 DNS 系统的最上方一定是 . (小数点) 这个 DNS 服务器 (称为 root),也叫”根域“。
根域 (13台 全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。)
顶级域名(一级域名)
顶级域名是域名的最后一个部分,即是域名最后一点之后的字母,例如在http://yuchaoit.cn这个域名中,顶级域是.cn(或.COM),大小写视为相同。%2C-iq1hk5rmsf9xnujhg63fqf5b./)
二级域名
二级域名是域名的倒数第二个部分,例如在http://yuchaoit.cn这个域名中,二级域名是yuchaoit。以此类推。
三级域名
子域名
2. DNS服务器分层结构(DNS解析流程)
文字描述DNS解析流程
##DNS域名解析
浏览器客户端需要正确查询、解析出域名的的ip地址,才能建立与服务器的连接
1.浏览器需要解析域名,首先查看本地的hosts文件,查看是否有固定的解析规则,有则直接使用该ip信息
2.本地的hosts文件没有解析关系,浏览器会发出一个dns请求到本地设置的dns服务器
本地dns服务器一般默认会是你接入的网络运营商,如电信dns,移动dns
3.域名解析的请求到达dns服务器之后,dns服务器优先查找它自己的缓存记录,如果有直接返回结果
如果dns服务器本地没有结果,递归的向上查找DNS根服务器,是否有解析记录。
4.根DNS服务器的作用只是提供域服务器的地址(不提供域名和ip的关系解析)
5.本地dns服务器此时向域服务器继续发出请求,此时请求的服务器就是如.com .cn这样的域服务器了
域服务器也不会直接返回你要访问的域名、以及它对应的IP地址的关系,而是告诉本地dns服务器,该域名对应的解析服务器的地址,
如163.com
6.最后本地dns服务器,向该域名对应的解析服务器发出请求,此时才能正确的拿到该域名对应的ip地址关系
此时本地dns服务器会把ip告诉浏览器
以及这个域名、ip的对应关系会被存储在本地缓存中,便于下次访问,可以直接看到这个域名、ip的对应关系,加速访问
3. DNS专业名词
递归查询
就好比我们递归创建文件夹一样
mkdir -p /opt/linux/0224/chaoge666.log
1.我们本地进行域名解析时,如ping baidu.com,本地的/etc/resolv.conf指定的服务器接收到用户请求,必须返回给用户一个精准的ip结果。
2.如果指定的DNS服务器没有存储这个解析关系,就会以上述于超老师讲解的dns解析流程,开始向根域服务器发出请求,因此反复循环,直到拿到结果。
迭代查询
也就是DNS服务器/etc/resolv.conf没有直接返回查询域名-ip的对应结果,而是告诉另外一台服务器,另外一台服务器,再去请求另外一台机器,反复发请求,直到获取正确结果。
DNS缓存
指的是将域名、ip的解析关系存储在离用户最近的一个客户端上,这个位置可以是任意的地方,目的都是为了减少递归查询的次数,更快的获取查询结果。
TTL值
英文名 time to live
告诉本地dns服务器,该解析记录的可用时长,到期后本地缓存会自动删除该解析关系,重新发起迭代/递归查询,获取新的域名、ip解析结果。
4. dig命令查看解析关系
使用dig命令,可以验证上述的原理流程。
yum install bind-utils -y
使用dig命令追踪域名解析全流程
1.首先确定本地dns服务器
[root@master-61 /etc/ansible/roles]#cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
dig追踪解析
[root@master-61 /etc/ansible/roles]#dig +trace www.yuchaoit.cn
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> +trace www.yuchaoit.cn
;; global options: +cmd
. 2974 IN NS d.root-servers.net.
. 2974 IN NS b.root-servers.net.
. 2974 IN NS l.root-servers.net.
. 2974 IN NS e.root-servers.net.
. 2974 IN NS a.root-servers.net.
. 2974 IN NS k.root-servers.net.
. 2974 IN NS g.root-servers.net.
. 2974 IN NS i.root-servers.net.
. 2974 IN NS j.root-servers.net.
. 2974 IN NS h.root-servers.net.
. 2974 IN NS f.root-servers.net.
. 2974 IN NS m.root-servers.net.
. 2974 IN NS c.root-servers.net.
;; Received 228 bytes from 223.5.5.5#53(223.5.5.5) in 14 ms
cn. 172800 IN NS d.dns.cn.
cn. 172800 IN NS ns.cernet.net.
cn. 172800 IN NS c.dns.cn.
cn. 172800 IN NS a.dns.cn.
cn. 172800 IN NS b.dns.cn.
cn. 172800 IN NS f.dns.cn.
cn. 172800 IN NS e.dns.cn.
cn. 172800 IN NS g.dns.cn.
cn. 86400 IN DS 57724 8 2 5D0423633EB24A499BE78AA22D1C0C9BA36218FF49FD95A4CDF1A4AD 97C67044
cn. 86400 IN RRSIG DS 8 1 86400 20220514050000 20220501040000 47671 . nAeYXDNUTAmlFxLfXot6fdnx05UZ/KU4cj1cy3zU5rrGBh2qFLrPGNQr 8QpZU2vPoydZZZSzcRT6vpyaFGPJhAGsqi+cs2JOMMZNQYlkKdxO3Q3D x9yLXJOVAnnH6iGWglIVnonFsgtcNqGjSeJ/Th9tHbOMD+n/6cumezNy 1HOGrFW1dYQ9lfHjbnxox8EMmGKQ3nejtjIVS9GvHCBp3uisQdDTCook f+MT7qN9P86QJqtgDO+GctD90KIA4u311RQM+tBk9YDEMqXxPcsSiD98 bArR/hUpvnRRbU2t2mk6cmv7ZVAy3ofv6u1fMiwS6YzXneb1i8kLtoUQ zOoqNQ==
;; Received 706 bytes from 192.33.4.12#53(c.root-servers.net) in 1109 ms
yuchaoit.cn. 86400 IN NS net.dnspod.net.
yuchaoit.cn. 86400 IN NS tulip.dnspod.net.
3QDAQA092EE5BELP64A74EBNB8J53D7E.cn. 21600 IN NSEC3 1 1 10 AEF123AB 3QHKTF6LTFG8AAFUUAJSR8RVAJP99SFU NS SOA RRSIG DNSKEY NSEC3PARAM
3QDAQA092EE5BELP64A74EBNB8J53D7E.cn. 21600 IN RRSIG NSEC3 8 2 21600 20220513133757 20220413130511 38388 cn. g+AhBfqp/RPdA6q61n4JFsO24Go4jkNZYEyTjW0nezf+wN+jj1N9CN87 sBDEwljwudxVhyjHBODdZTdlV0ZSyMYUvgZXfoIh90AR/bu8kzDhUdq+ wVdMye86MQts52L9oZq+SBywnYjW6MwJwkaPwtqoGUzit1xi0DogjaRB T8I=
QJ2D47AGKKDJ0JBA02ILNHBNVEF3DQUS.cn. 21600 IN NSEC3 1 1 10 AEF123AB QK2TQPG7N1M4FC702TM02B2P08FPDJN0 NS DS RRSIG
QJ2D47AGKKDJ0JBA02ILNHBNVEF3DQUS.cn. 21600 IN RRSIG NSEC3 8 2 21600 20220513132930 20220413130455 38388 cn. UBB5On9znmA5pY7aGkeL8Aa31+fkgq82ruaLZUwike9Pbdr4WbiYFjpH IhGz4mijkCeNwWm+bNPA0TtzpL10lVDJp4Zo0DEKQD8NBejGFHQUpY/d BZvG15tM6rXY6I0NjgKa/7d8zyrV4jgZn+r8qJadps3ixLUPZPypbsX+ t7I=
;; Received 583 bytes from 203.119.25.1#53(a.dns.cn) in 12 ms
www.yuchaoit.cn. 600 IN A 123.206.16.61
yuchaoit.cn. 86400 IN NS net.dnspod.net.
yuchaoit.cn. 86400 IN NS tulip.dnspod.net.
;; Received 118 bytes from 58.247.212.48#53(tulip.dnspod.net) in 33 ms
解析
1.先去找了13个根域服务器,没有排序关系
2.然后确认顶级域的范围,是.cn
3.然后确认权威域名服务器地址net.dnspod.net
4.最后通过权威域名服务器拿到域名、ip的解析关系
www.yuchaoit.cn. 600 IN A 123.206.16.61
yuchaoit.cn. 86400 IN NS net.dnspod.net.
yuchaoit.cn. 86400 IN NS tulip.dnspod.net.
云解析DNS的手册
阿里云DNS解析
腾讯云DNS解析
各记录类型使用目的
实践添加腾讯云dns解析
https://console.cloud.tencent.com/cns
最常用的就是添加A记录
➜ ~ dig +trace http://0224.yuchaoit.cn
.域名需要备案
https://beian.aliyun.com/ 阿里云
https://cloud.tencent.com/product/ba 腾讯云
实践添加腾讯云的A记录三级域名
添加一个三级域名
linux.yuchaoit.cn
123.206.16.61
正统用法,应该解析到你自己的服务器地址
当然这个ip地址,你可以指定为其他的
这个事,没什么奇怪的,只是做了一个域名的解析关系
4399.yuchaoit.cn 在权威服务器上添加了解析关系,A记录(记录值是4399服务器的地址)
自己搭建dns服务器
bind软件
1.准备好机器 172.16.1.61机器服务端
客户端 172.16.1.7 这个机器作为客户端
2.部署bind软件
yum install bind bind-utils -y
# bind软件是dns服务器的主软件 bind-utils 是提供dns解析的命令,如dig,这个命令
3.安装完毕后,检查防火墙,别禁止了dns查询请求
[root@master-61 ~]#getenforce
Disabled
[root@master-61 ~]#
[root@master-61 ~]#
[root@master-61 ~]#iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
4.创建dns配置文件即可 ,先操作主配置文件,然后修改子配置文件(二级域名的配置文件)
/etc/named.conf # 主配置文件
允许dns服务端,运行在0.0.0.0:53 上
12 options {
13 listen-on port 53 { 127.0.0.1; any; };
还差一个允许客户端的访问
21 allow-query { localhost;any; };
第二,查看主配置文件导入了,子配置文件,域配置文件
# 想去权威服务器上注册一个 laoliulinux.cn
# 权威服务器是谁?在内网中搭建的 bind服务 172.16.1.61
59 include "/etc/named.rfc1912.zones";
第三部,创建 laoliulinux.cn的域配置文件即可
去这个/etc/named.rfc1912.zones 配置文件中创建即可
第四步,修改配置文件
# 写入如下内容
# 定义二级域名,以及二级域名的配置文件
vim /etc/named.rfc1912.zones
zone "laoliulinux.cn" IN {
type master;
file "laoliulinux.cn.zone";
allow-update { none; };
};
第五步,创建该二级域名的 主机记录配置文件
laoliulinux.cn.zone
需要以主机记录的格式去创建,且必须存放在 /var/named/目录下才行
# cp -p 保持原文件的属性
cp -p /var/named/named.localhost /var/named/laoliulinux.cn.zone
第六步,添加 A记录即可
一般的网站首页,都会叫做 www.二级域名.com
[root@master-61 ~]#cat /var/named/laoliulinux.cn.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 172.16.1.61
AAAA ::1
www A 172.16.1.61
linux A 172.16.1.61
第七步,这里就是添加了2个三级域名
只需要启动bind程序即可
[root@master-61 ~]#systemctl start named
第八步,检查named程序状态
[root@master-61 ~]#netstat -tunlp |grep named
[root@master-61 ~]#ps -ef|grep named
第九步,需要设置该dns地址,方可使用该dns解析查询
在给172.16.1.61机器部署dns服务端(权威服务器的角色)
[root@master-61 ~]#cat /etc/resolv.conf
nameserver 172.16.1.61
解释
1.关闭防火墙
[root@dns-server ~]# systemctl stop firewalld
[root@dns-server ~]#
[root@dns-server ~]# iptables -F
[root@dns-server ~]#
[root@dns-server ~]# getenforce
Disabled
2.配置yum源,用于安装bind软件。
[root@dns-server ~]# ls /etc/yum.repos.d/
3.安装bind
[root@dns-server ~]# yum install bind -y
4.查看软件
[root@dns-server ~]# rpm -qi bind
5.查看dns配置文件
[root@dns-server ~]# rpm -ql bind
# 日志轮转文件
/etc/logrotate.d/named
# 配置文件目录
/etc/named
# 主配置文件
/etc/named.conf
# zone文件,定义域
/etc/named.rfc1912.zones
# 服务管理脚本
/usr/lib/systemd/system/named.service
# 二进制程序文件
/usr/sbin/named
# 检测配置文件
/usr/sbin/named-checkconf
# 检测域文件
/usr/sbin/named-checkzone
# 根域服务器
/var/named/named.ca
# 正向解析区域文件模板
/var/named/named.localhost
# 反向解析区域文件模板
/var/named/named.loopback
# dns服务器下载文件的默认路径
/var/named/slaves
# 进程pid
/var/rum/named
客户端想使用自建的这个dns服务器
[root@web-7 ~]#
[root@web-7 ~]#cat /etc/resolv.conf
nameserver 172.16.1.61
访问局域网内的域名,能够直接在 master-61机器上查询到
如果访问的是互联网中的域名,该bind软件,默认会递归查询,继续向上, 从dns解析流程走一遍
dnsmasq软件
先把bind软件给停了
[root@master-61 ~]#systemctl stop named
注意恢复你的dns设置
[root@master-61 ~]#cat /etc/resolv.conf
nameserver 223.5.5.5
这是一个轻量级,很容易就实现dns服务器的一个软件,部署简单,不像bind那么复杂,重量级
很多软件,大型软件的集群,内部需要部署dns环境,都是通过dnsmasq
1.安装
yum install dnsmasq -y
2.创建dnsmasq配置文件,设置上游dns服务器地址,设置本地域名解析记录
[root@master-61 ~]#vim /etc/dnsmasq.conf
修改如下参数即可
# 1.指定上游dns服务器地址,指定一个配置文件即可
# 2.指定运行地址是内网环境
# 3.需要指定你想要添加的本地 域名解析记录,默认 /etc/hosts文件
参考,修改如下几个配置即可
[root@master-61 ~]#grep -Ev '^($|#)' /etc/dnsmasq.conf
resolv-file=/etc/resolv.dnsmasq.conf
listen-address=172.16.1.61
addn-hosts=/etc/hosts.dnsmasq.conf
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
3.创建对应的数据文件即可
echo "nameserver 223.5.5.5" > /etc/resolv.dnsmasq.conf
cat >/etc/hosts.dnsmasq.conf <<EOF
172.16.1.61 master-61
172.16.1.5 slb-5
172.16.1.6 slb-6
172.16.1.7 web-7
172.16.1.8 web-8
172.16.1.9 web-9
172.16.1.31 nfs-31
172.16.1.41 rsync-41
172.16.1.51 db-51
EOF
4.启动dnsmasq服务,即可生效如上的自定义记录
systemctl start dnsmasq
5.测试该dnsmasq是否可用,你还得主动的指定本地dns配置文件的记录,使用这个dnsmasq的服务端地址(172.16.1.61)
[root@web-7 ~]#cat /etc/resolv.conf
nameserver 172.16.1.61
链接:https://www.cnblogs.com/btcm409181423/p/18075535
(版权归原作者所有,侵删)
本文链接:https://www.yunweipai.com/46980.html