DNS
DNS(Domain Name System )
关于DNS背景
这样太麻烦了,于是就有了DNS系统
cat /etc/hosts
介绍域名
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称
比如:www.baidu.com ,其中
com: 这个是一级域名。 .com表示这是一个企业域名,同级的还有 .org (非盈利组织) ,.net(网络运营商),或者 .edu(教育组织)
baidu:这是二级域名。一般是公司名
www:这只是一个习惯用法。
域名解析过程
以浏览器或者app也就是客户端,来请求www.baidu.com为例。
1:用户拿到域名想访问百度,首先会拿着域名去访问本地的DNS服务器,以此来获取百度的IP地址是多少。如果本地服务器缓存了这个域名和IP的映射关系,那么在这一步就直接返回给用户了,用户就可以拿着IP地址去访问百度了。
2:如果在本地DNS服务器没有找到,那么本地服务器会将这个域名转发到根服务器。
3:根服务器经过查询,发现这是由.com服务器进行管理的,于是返回相应让本地服务器去.com服务器询问。
4:接着,本地服务器就又拿着域名向.com服务器发起请求。
5:在.com服务器中解析这个域名,发现是由baidu.com服务器管理的,所以返回响应,让本地服务器再去baidu.com的服务器进行询问。
6:继续拿着域名请求 baidu.com。
7:最终拿到域名对应的IP地址。
8:将IP地址返回给用户。
我们发现这其实是一个树状结构
使用dig工具分析域名
如果没有安装dig,可以先进行安装
Ubuntu下进行安装:
sudo apt update
sudo apt install bind9-utils
比如说解析百度域名
这里也解析出来了百度的IP地址,但是百度做了特殊处理,以前可以直接用这个IP地址来访问百度,但是现在不行了。
关于这个结果的解释:
ICMP协议
ICMP协议是网络层的协议。它不是用来传递用户数据的,而是用来进行网络问题定位,状态诊断的。
位置结构:
ICMP虽然和IP协议同为网络层,但是它是在IP协议上面的,ICMP报文也要把自己打包封装成IP报文,然后再向下继续封装。
另外ICMP它提供了一些接口给应用层,也就是说用户是可以直接绕过传输层使用ICMP的。比如我们使用的Ping命令就是。
ICMP的功能:
ICMP允许距离故障事发地最近的主机设备(一般是最近的路由器)返回应答。
ICMP报文格式:
ICMP报文一般分两类:
1.通知出错原因
2.用于诊断查询
apt install -y traceroute
有时候路由器转发的报文数量太多了,路由器设备压力太大了,就有可能给对方发送重定向报文,要求对方给别的路由器转发。
关于ICMP的命令:
ping命令不用多少了
还有一个是traceroute命令:
apt install -y traceroute
比如还是对百度进行使用测试
其中最上面的 30 hops max 表示的是最多经过了30个路由器, 60 byte packets表示报文大小是60字节。
其中下面有些显示出来的IP地址的表示的是经过了一个有效的路由器。我们之所以能看到它们的IP地址,是因为他们给我们进行应答了。
某一跳为 * * * 表示这些路由器没有给我们进行ICMP应答。没有给应答的原因有很多,比如设备故障;或者设置了防火墙,不允许给外界的设备发送ICMP报文。
关于ICMP的面试比较坑的问题:ping的端口号是什么?
端口号是传输层面的概念,ping命令是基于网络层协议实现的,所以它是没有端口号的。