浏览器输入网址后发生了什么

浏览器输入网址后发生了什么

梳理用户访问网站流程

0.客户端  确保你的机器可以上外网
1.客户端  浏览器输入网站url,点击回车 www.haloyang.top
2.客户端  本地进行dns域名查找、查找域名对应的ip地址
3.客户端  直接访问该服务器的ip,开始tcp三次握手过程
4.客户端  建立tcp连接后,发起http请求,构造请求报文,会发出多次请求
5.服务端  接收到http请求后,解析请求,响应请求,回复多次
6.客户端  浏览器看到响应内容,浏览器解析响应数据,渲染结果在屏幕上
7.客户端  结束访问,关闭网站,完成tcp四次挥手

img

抓技术名词关键字

1.域名
2.域名解析
3.TCP/IP 三次握手
4.TCP/IP 四次挥手
5.HTTP请求发出
6.HTTP响应报文


DNS域名解析

DNS域名结构

由于互联网中的域名太多,全球的用户也太多,因特网的域名采用的是树状结构命名。 任何一个连接到网络中的机器,都有一个唯一的层次结构名字,叫做域名(domain name)。

  • 域、就是名字空间中可被划分、管理的部分。

  • 语法上要求,域名由标号(label)组成,每一个label之间通过小数点隔开。

  • 域名可以被分为多个子域,子域还可以继续划分子域的子域,因此形成了

    • 顶级域

    • 主域名

    • 子域名

img

根域 .

  • 在整个 DNS 系统的最上方一定是 . (小数点) 这个 DNS 服务器 (称为 root),也叫”根域“。

  • 根域 (13台 全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。)

顶级域名(一级域名)

顶级域名是域名的最后一个部分,即是域名最后一点之后的字母,例如在https://www.haloyang.top/这个域名中,顶级域是.top,大小写视为相同。

二级域名

二级域名是域名的倒数第二个部分,例如在https://www.haloyang.top/这个域名中,二级域名是haloyang。以此类推。

三级域名

子域名

域名机构

收费、新网https://www.xinnet.com/、万网https://www.hichina.com/

免费域名、tk域名等。

DNS服务器分层结构(DNS解析流程)

域名是分层结构,域名服务器也是分层结构,域名服务器其实就是一台部署了DNS域名解析系统的计算机,对外提供解析服务。

主要涉及的四个DNS服务器如下

分类

作用

根DNS服务器

读作root nameserver。当本地域名服务器在本地找不到解析记录时,第一步来这里找,能够拿到顶级域名服务器的信息。

顶级域名服务器

读作,top level domain nameserver(tld)。负责管理顶级域名下注册的二级域名。如当你访问www.yuchaoit.cn,首先找到顶级域名服务器.cn,然后找到二级域名yuchaoit.cn所在的权威域名服务器地址。

权威域名服务器

读作authoritative nameserver。维护该区域内的域名和ip之间的解析关系,也就是我们常见的如阿里云域名注册商,或是腾讯域名注册商。

本地域名服务器

读作local DNS或是DNS resolver。也就是用户本机自动获取的DNS地址,或是运营商提供的DNS,或是阿里、腾讯公共DNS服务器等。

img

如果你本地 /etc/hosts 文件做好了解析纳闷DNS解析会优先以hosts为准

通过dig命令,查看域名查找流程

1.首先确定本地dns服务器

[root@master-61 ~]#cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 223.5.5.5
yum install bind-utils -y

image-20240926191032860

解析

1.先去找了13个根域服务器,没有排序关系
2.然后确认顶级域的范围,是.top
3.然后确认权威域名服务器地址freens1.jdgslb.com.
4.最后通过权威域名服务器拿到域名、ip的解析关系
www.haloyang.top.       600     IN      A       117.72.37.183

文字描述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的对应关系,加速访问

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解析结果。

云解析DNS的手册

https://help.aliyun.com/document_detail/102237.html

阿里云DNS解析

腾讯云DNS解析

各记录类型使用目的

具体说明文档

记录类型

使用目的

A 记录

将域名指向一个 IP 地址(外网地址)。

CNAME 记录

将域名指向另一个域名,再由另一个域名提供 IP 地址(外网地址)。

MX 记录

设置邮箱,让邮箱能收到邮件。

NS 记录

将子域名交给其他 DNS 服务商解析。

AAAA 记录

将域名指向一个 IPv6 地址。

SRV 记录

用来标识某台服务器使用了某个服务,常见于微软系统的目录管理。

TXT 记录

对域名进行标识和说明,绝大多数的 TXT 记录是用来做 SPF 记录(反垃圾邮件)。

隐、显性 URL 记录

将一个域名指向另外一个已经存在的站点。

工作中经常需要加的记录类型

主机记录指的就是,主域名的前缀,通常会添加如下记录类型

  • www,如解析为www.haloyang.top,或者www.taobao.com

  • @,直接解析主域名,如haloyang.top,或taobao.com

  • ,泛解析,匹配其他所有子域名,如.haloyang.top

    • 一般适用于给域名绑定证书,一张证书,绑定*.haloyang.top,也就可以处理如

    • www.haloyang.top

    • api.haloyang.top

    • blog.haloyang.top

    • ...

  • mail,mail.haloyang.com,一般用于邮件服务器的绑定

  • 移动端网址,如https://www.haloyang.top/


DNS服务搭建

主流的dns服务器部署,有两种工具

  • bind(大型公司需要自建复杂的域名解析系统,存储解析记录,包括了设置根域、顶级域、二级域等区域功能)

  • dnsmasq(轻量级域名系统,提供域名、ip的对应解析关系,需要提供上游权威dns服务器地址)

bind服务部署

  • DNS 的==域名解析==都是 udp/53 ;主从之间的==数据传输==默认使用==tcp/53==;

  • DNS软件:

    Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley(伯克利)分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件,支持各种unix平台和windows平台。

    BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。

机器准备

172.16.1.61  dns服务端
172.16.1.7   dns客户端   web-server
172.16.1.8   dns客户端   web-server

部署bind(61机器)

[root@master-61 ~]#yum install bind bind-utils -y
​
解释
bind-utils:bind客户端程序集,例如dig, host, nslookup等;
​
bind:提供的dns server程序、以及几个常用的测试程序;
​
bind-libs:被bind和bind-utils包中的程序共同用到的库文件;

操作全流程

1.关闭防火墙
[root@master-61 ~]# systemctl stop firewalld
[root@master-61 ~]# iptables -F
[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 
[root@master-61 ~]# getenforce
Disabled
​
2.配置yum源,用于安装bind软件。
[root@master-61 ~]# ls /etc/yum.repos.d/
​
3.安装bind
[root@master-61 ~]# yum install bind -y
​
4.查看软件
[root@master-61 ~]# rpm -qi bind
​
5.查看dns配置文件
[root@master-61 ~]# 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区域文件

named.conf修改

1.备份原有文件
[root@master-61 ~]# cp /etc/named.conf /etc/named.conf.bak
[root@master-61 ~]# 
[root@master-61 ~]# cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak
​
2.修改主配置文件
​
# 定义监听端口、监听方式、允许查询来源
​
options {
        // 定义监听方式  any代表全网监听
        // 监听的地址和端口,localhost表示监听在本机所有地址上;
        listen-on port 53 { 127.0.0.1;any; };   #在这里添加 any;
        listen-on-v6 port 53 { ::1; };
        // 区域数据库文件存放的目录,存放解析记录的目录
        directory       "/var/named";
        // dns解析过内容的缓存文件
        dump-file       "/var/named/data/cache_dump.db";
        // 静态解析文件(几乎不用)
        statistics-file "/var/named/data/named_stats.txt";
        // 内存的统计信息
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        // 允许谁向本台DNS发起查询请求(localhost|ip|any);
        allow-query     { localhost;any; };     #在这里添加 any;
        ..
        ...
        ...
        省略
​
 // 控制日志输出级别,路径
 logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
​
// 区域设置,这是根域。
zone "." IN {
        type hint;
        file "named.ca";
};
​
​
 59 include "/etc/named.rfc1912.zones";  // 这里include表示,载入一个子配置文件
 60 include "/etc/named.root.key";
​
​
​
配置文件解析
主配置文件组成部分::
​
options {} :全局选项(监听端口、数据文件存储位置、缓存位置、权限等)
logging {} :服务日志选项
zone . {} :自定义区域配置
include :包含其他的文件
​
​
主配置文件注意事项:
​
语法非常严格。
文件权限属主 root ,属组 named ,文件权限 640;
​
[root@master-61 ~]# ll /etc/named.conf
-rw-r----- 1 root named 1812 Feb 19 17:10 /etc/named.conf

/etc/named.rfc1912.zones 修改

在named.conf中写入全局设置;

在include的配置文件中写入具体的dns解析设置,域名解析记录;

3.修改子配置文件,自定义区域配置文件
​
配置解析
zone "example.com" IN { 
    type master|slave; 
    #自定义区域类型 
    file /path/to/zonefile; 
    #绝对路径和相对路径 
    allow-update {ip|none}; 
    #允许哪个ip可以使用nsupdate动态更新 区域文件 
};
​
追加如下配置,注意格式,这里就是添加你的域名了。 一定不要落下分号
[root@master-61 ~]# tail -5  /etc/named.rfc1912.zones
zone "haloyang.top" IN {
        type master;
        file "haloyang.cn.zone";
        allow-update { none; };
};
​
​
4.创建zone区域文件 haloyang.cn.zone,先去复制一个模板,区域文件放在了/var/named
[root@master-61 ~]# cp -p /var/named/named.localhost /var/named/haloyang.cn.zone
​
​
5.修改区域文件
让这个域名和你要的IP地址对应起来,以及添加一个三级域名www.haloyang.cn。
[root@master-61 ~]# cat  /var/named/haloyang.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 192.168.1.100
​
​
6.修改完了后,务必修改zone文件的权限
[root@master-61 ~]# chmod 640 haloyang.cn.zone
[root@master-61 ~]# ll /var/named/
total 20
drwxrwx--- 2 named named    6 Nov 25 00:38 data
drwxrwx--- 2 named named    6 Nov 25 00:38 dynamic
-rw-r----- 1 root  named 2253 Apr  5  2018 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Nov 25 00:38 slaves
-rw-r----- 1 root  named  173 Feb 19 17:58 haloyang.top.zone
​
​
7.检查配置文件语法,不要有任何错误
[root@master-61 ~]# named-checkconf /etc/named.conf
[root@master-61 ~]# named-checkconf /etc/named.rfc1912.zones
[root@master-61 ~]#
​
​
8.启动named域名解析服务,注意名字是这个。
[root@master-61 ~]# netstat -tnlp|grep named
[root@master-61 ~]#
[root@master-61 ~]# systemctl start named
[root@master-61 ~]# netstat -tnlp|grep named
tcp        0      0 172.16.1.61:53          0.0.0.0:*               LISTEN      2901/named          
tcp        0      0 10.0.0.61:53            0.0.0.0:*               LISTEN      2901/named          
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      2901/named          
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      2901/named          
tcp6       0      0 ::1:53                  :::*                    LISTEN      2901/named          
tcp6       0      0 ::1:953                 :::*                    LISTEN      2901/named 
[root@master-61 ~]#
​
9.修改本地dns配置文件
[root@master-61 ~]#cat /etc/resolv.conf 
# Generated by NetworkManager
#nameserver 223.5.5.5
nameserver 172.16.1.61

备注:关于zone file区域档案的参数解释

http://dns-learning.twnic.net.tw/bind/intro6.html#cb

关于zone文件语法解析

time to live(TTL),ttl值主要是控制域名指向的ip地址在dns服务器上的缓存时间

@ 指的就是haloyang.top

$TTL 1D                      //定义一个TTL默认值为1天,下面数据直接引用此值.
@                            [TTL]    IN   SOA  主DNS服务器FQDN 管理员邮箱  (
​
​
                                        0       ; 序列号
                                        1D      ; 更新间隔
                                        1H      ; 更新失败后重试间隔
                                        1W      ; 过期时长
                                        3H )    ; 否定记录保存时长
​
资源类型:A(IPv4), AAAA(IPv6):定义FQDN的IP
          NS :   定义DNS服务器的FQDN
          SOA :   起始授权(每个zone首先要定义此值)
          MX:    定义邮件记录,有优先级概念(0-99),值越小优先级越高。
          CNAME:  定义别名
          PTR:   反向记录

客户端设置dns服务器地址

测试域名

1.客户端配置我们自己部署的dns服务器地址,写入配置文件,这个192.168.0.104是超哥部署的dns服务器IP。
​
[root@master-61 ~]# cat  /etc/resolv.conf
# Generated by NetworkManager
nameserver 172.16.1.61
​
​
2.检查解析关系
[root@master-61 ~]#nslookup www.haloyang.cn
Server:         172.16.1.61
Address:        172.16.1.61#53
​
Name:   www.haloyang.cn
Address: 192.168.1.100
​
2.1.其他机器也想访问www.haloyang.cn
[root@web-7 ~]#echo "nameserver 172.16.1.61" > /etc/resolv.conf 
[root@web-7 ~]#cat /etc/resolv.conf 
nameserver 172.16.1.61
[root@web-7 ~]#ping www.haloyang.cn
PING www.haloyang.cn (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100 (192.168.1.100): icmp_seq=1 ttl=128 time=0.770 ms
64 bytes from 192.168.1.100 (192.168.1.100): icmp_seq=2 ttl=128 time=0.659 ms


轻量级dnsmasq服务

1、dnsmasq是一款小巧且方便地用于配置DNS服务器和DHCP服务器的工具,适用于小型网络,它提供了DNS解析功能和可选择的DHCP功能。

2、dnsmasq可以解决小范围的dns查询问题,如果业务是跨机房、跨地区的话不建议使用dnsmasq做为dns解析服务器。

部署dnsmasq

使用之前先把bind服务停了

systemctl stop named

1.安装
yum install dnsmasq -y
#之前如果修改了DNS解析文件/etc/resolv.conf记得改回去 nameserver 223.5.5.5
​
2.修改配置文件
[root@master-61 ~]#ll /etc/dnsmasq.conf 
-rw-r--r-- 1 root root 26832 Jul 21  2021 /etc/dnsmasq.conf
​
修改为如下
[root@master-61 ~]#grep -Ev '^$|^[#;]' /etc/dnsmasq.conf
#第46行,定义dnsmasq从哪里获取上游DNS服务器的地址,默认是从/etc/resolv.conf获取
resolv-file=/etc/resolv.dnsmasq.conf
#第111行,定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址
listen-address=172.16.1.61
# 本地域名配置文件(不支持泛域名),添加内部需要解析的地址和域名(重新加载即可生效)
# 第131行,默认读取/etc/hosts
addn-hosts=/etc/dnsmasq.hosts
#记录dns查询日志服务器
log-queries
log-facility=/var/log/dnsmasq.log
#包含其他文件夹下所有配置文件
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
​
3.查询修改的配置
[root@master-61 ~]#grep -Ev '^$|^[#;]' /etc/dnsmasq.conf
resolv-file=/etc/resolv.dnsmasq.conf
listen-address=172.16.1.61
addn-hosts=/etc/dnsmasq.hosts
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig

添加上游dns服务器

#配置这个是为了能ping通外网
[root@master-61 ~]# echo "nameserver 223.5.5.5" > /etc/resolv.dnsmasq.conf
[root@master-61 ~]# cat  /etc/resolv.dnsmasq.conf
nameserver 223.5.5.5

添加dns解析记录

[root@master-61 ~]#cat >/etc/dnsmasq.hosts  <<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

启动dnsmasq

[root@master-61 ~]#systemctl start dnsmasq

测试局域dns记录

1.修改本地DNS解析文件
[root@master-61 ~]#cat /etc/resolv.conf 
nameserver 172.16.1.61
[root@web-7 ~]#cat /etc/resolv.conf 
nameserver 172.16.1.61
​
2.使用公网dns查询记录
[root@web-7 ~]#nslookup master-61 223.5.5.5
Server:         223.5.5.5
Address:        223.5.5.5#53
​
** server can't find master-61: NXDOMAIN
​
3.使用本地dns服务器查询
[root@master-61 ~]#nslookup web-7
Server:         172.16.1.61
Address:        172.16.1.61#53
​
Name:   web-7
Address: 172.16.1.7
Name:   web-7
Address: 10.0.0.7
​
[root@web-7 ~]#nslookup master-61
Server:         172.16.1.61
Address:        172.16.1.61#53
​
Name:   master-61
Address: 172.16.1.61
Name:   master-61
Address: 10.0.0.61

小结

  • 部署dns服务器,添加dns解析记录(ip、域名对应关系)

  • 客户端需要指定dns服务器,方可使用这些记录

  • dns查询流程,还有上游服务器提供公网dns记录。