DNS和ICMP

DNS

DNS(Domain Name System )

DNS 是一整套从域名映射到 IP 的系统

关于DNS背景

TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序 . 但是 IP 地址不
方便记忆 .
于是人们发明了一种叫主机名的东西 , 是一个字符串 , 并且使用 hosts 文件来描述主机
名和 IP 地址的关系 .

最初 , 通过互连网信息中心 (SRI-NIC) 来管理这个 hosts 文件的 .
如果一个新计算机要接入网络 , 或者某个计算机 IP 变更 , 都需要到信息中心申
请变更 hosts 文件 .
其他计算机也需要定期下载更新新版本的 hosts 文件才能正确上网 .

这样太麻烦了,于是就有了DNS系统

一个组织的系统管理机构 , 维护系统内的每个主机的 IP 和主机名的对应关系 .
如果新计算机接入网络 , 将这个信息注册到数据库中 ;
用户输入域名的时候 , 会自动查询 DNS 服务器 , DNS 服务器检索数据库 , 得到对应的IP地址
至今 , 我们的计算机上仍然保留了 hosts 文件 . 在域名解析的过程中仍然会优先查找
hosts 文件的内容 .

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地址返回给用户。

我们发现这其实是一个树状结构

如上图所示,域名结构是树状结构,树的最顶端代表根服务器,根的下一层就是由我
们所熟知的 .com .net .cn 等通用域和 .cn .uk 等国家域组成,称为顶级域。网上注
册的域名基本都是二级域名,比如 http://baidu.com http://taobao.com 等等二级域
名,它们基本上是归企业和运维人员管理。接下来是三级或者四级域名。

使用dig工具分析域名

 如果没有安装dig,可以先进行安装

Ubuntu下进行安装:

sudo apt update

sudo apt install bind9-utils

比如说解析百度域名

这里也解析出来了百度的IP地址,但是百度做了特殊处理,以前可以直接用这个IP地址来访问百度,但是现在不行了。 

关于这个结果的解释:

1.开头位置是 dig 指令的版本号
2. 第二部分是服务器返回的详情, 重要的是 status 参数 , NOERROR 表示查询成功
3. QUESTION SECTION 表示要查询的域名是什么
4. ANSWER SECTION 表示查询结果是什么 . 这个结果先将 www.baidu.com 查询
成了 www.a.shifen.com, 再将 www.a.shifen.com 查询成了两个 ip 地址 .
5. 最下面是一些结果统计, 包含查询时间和 DNS 服务器的地址等 .

 ICMP协议

ICMP协议是网络层的协议。它不是用来传递用户数据的,而是用来进行网络问题定位,状态诊断的。

位置结构:

ICMP虽然和IP协议同为网络层,但是它是在IP协议上面的,ICMP报文也要把自己打包封装成IP报文,然后再向下继续封装。

另外ICMP它提供了一些接口给应用层,也就是说用户是可以直接绕过传输层使用ICMP的。比如我们使用的Ping命令就是。

ICMP的功能:

确认 IP 包是否成功到达目标地址 .
通知在发送过程中 IP 包被丢弃的原因 .
ICMP 也是基于 IP 协议工作的 . 但是它并不是传输层的功能 , 因此人们仍然把它
归结为网络层协议 ;
ICMP 只能搭配 IPv4 使用 . 如果是 IPv6 的情况下 , 需要使用 ICMPv6;

 

 ICMP允许距离故障事发地最近的主机设备(一般是最近的路由器)返回应答。

ICMP报文格式:
 

ICMP报文一般分两类:

1.通知出错原因

2.用于诊断查询

apt install -y traceroute

 

有时候路由器转发的报文数量太多了,路由器设备压力太大了,就有可能给对方发送重定向报文,要求对方给别的路由器转发。

关于ICMP的命令:

ping命令不用多少了

还有一个是traceroute命令:

也是基于 ICMP 协议实现 , 能够打印出可执行程序主机 , 一直到目标主机之前经历多少
路由器。

 

在Ubuntu下的安装 (要在管理员权限下)
apt install -y traceroute

比如还是对百度进行使用测试

 其中最上面的 30 hops max 表示的是最多经过了30个路由器, 60 byte packets表示报文大小是60字节。

其中下面有些显示出来的IP地址的表示的是经过了一个有效的路由器。我们之所以能看到它们的IP地址,是因为他们给我们进行应答了。

某一跳为 * * * 表示这些路由器没有给我们进行ICMP应答。没有给应答的原因有很多,比如设备故障;或者设置了防火墙,不允许给外界的设备发送ICMP报文。

关于ICMP的面试比较坑的问题:ping的端口号是什么?

端口号是传输层面的概念,ping命令是基于网络层协议实现的,所以它是没有端口号的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值