网络】DNS协议、ICMP协议
1.DNS协议
DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。
1.1DNS背景
TCP/IP中通过IP地址和端口号的方式,来确定网络中一个主机上的一个程序。但IP地址是一长串数字,并不便于人们记忆,于是人们发明了一种叫做主机名的东西,并用hosts文件夹来描述主机名和IP地址之间的对应关系。
最初,这个hosts文件是由互联网信息中心(SRI-NIC)来管理的。
如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件。
其他计算机也需要定期下载更新新版本的hosts文件才能正确上网。
当用户通过域名访问互联网服务时,会先通过域名在本地的hosts文件中找到其对应的IP地址,然后再用这个IP地址去访问对应的服务。
但这样太麻烦了,于是产生了DNS系统。
一个组织的系统管理机构,维护系统内的每个主机的 IP 和主机名的对应关系;
如果新计算机接入网络,将这个信息注册到数据库中;
用户输入域名的时候,会自动查询 DNS 服务器,由 DNS 服务器检索数据库,得到对应的 IP 地址。
至今,我们的计算机上仍然保留了 hosts 文件。在域名解析的过程中仍然会优先查找 hosts 文件的内容。
通过cat /etc/hosts可以查看hosts文件当中的内容。
1.2域名简介
域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称,例如www.baidu.com。
com:一级域名,表示这是一个工商企业域名。同级的还有.net(网络提供商)和.org(开源组织或非盈利组织)等。
baidu:二级域名,一般对应的就是公司名。
www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议。
1.3域名解析过程(了解)
1.4使用dig工具分析DNS过程
我们可以使用dig工具来查看域名解析的过程,例如查看百度域名www.baidu.com的解析过程。
dig工具的分析结果如下:
说明:
开头位置是dig工具的版本号。
第二部分是服务器返回的详情,其中status参数为NOERROR表示查询成功。
QUESTION SECTION表示待查询的域名。
ANSWER SECTION表示查询的结果,首先www.baidu.com被查询成了www.a.shifen.com,而最终www.a.shifen.com被查询成了两个具体的IP地址。
最下面是一些结果统计,包含查询时间和DNS服务器的地址等。
更多dig的使用方法,参见https://www.imooc.com/article/26971?block_id=tuijian_wz
2.ICMP协议
ICMP(Internet Control Message Protoco)Internet控制报文协议,用于在IP主机、路由器之间传递控制信息,是一个TCP/IP协议。
ICMP、IGMP和IP协议与arp协议和MAC帧的关系一样,ICMP协议和IGMP协议属于IP的上层协议,但他们同属网络层。
2.1ICMP的功能
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通。但是IP协议并不提供可靠传输,如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。
ICMP正是提供这种功能的协议,ICMP主要功能包括:
确认IP包是否成功到达目标地址。
通知在发送过程中IP包被丢弃的原因。
ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议。
ICMP只能搭配IPv4使用。如果是IPv6的情况下,需要使用ICMPv6。
2.2ping命令
ping命令就是基于ICMP协议实现的,通常用于测试本地主机与另一台主机之间的通信信道是否正常。
例如,使用ping www.baidu.com命令,测试本地主机与百度服务器之间的通信信道是否正常。
ping命令会先发送一个ICMP Echo Request给对端。
对端接收到之后,会返回一个ICMP Echo Reply。
一个值得注意的坑
有些面试官可能会问:telnet是23端口,ssh是22端口,那么ping是什么端口?
首先,ICMP协议是IP层的一个协议,它直接封装在IP数据包中,作为IP层的一个功能扩展。端口号(Port Number)是传输层协议(如TCP和UDP)中的一个概念,用于区分同一台主机上不同应用程序之间的通信。由于ICMP协议并不属于传输层,而是直接位于IP层之上,因此它不需要端口号来区分不同的应用程序或服务。
其次,ICMP协议的主要功能是发送控制消息和错误报告,而不是传输用户数据。这些控制消息和错误报告是面向网络的,而不是面向特定应用程序的。因此,ICMP协议不需要像传输层协议那样,通过端口号来指定接收消息的应用程序。
最后,ICMP协议的设计初衷是为了提供网络层的错误报告和诊断功能,而不是为了支持复杂的端到端通信。因此,它采用了较为简单的协议结构,没有包含像端口号这样的复杂字段。
2.3traceroute命令
traceroute命令也是基于ICMP协议实现的,traceroute命令可以遍历数据包传送到目标主机所经过的所有路由器。
原理简述:
traceroute命令底层实际是通过增加存活时间(TTL)值来实现的。
因为每当数据包经过一个路由器,其TTL值就会减1,当TTL值减为0时对应路由设备就会将该数据包丢弃,并传送一个ICMP TTL数据包给发送主机。
因此traceroute命令底层可以发出多个数据包,并给这些数据包设置不同的TTL值,最后该主机就能够得到一连串的数据包路径。
免责申明:
本文转载自网友公开分享,若有侵权,请联系我们删除!