【TCP/IP】域名解析过程,ARP的机制,PING的实现

版权声明:本文为博主原创文章,允许转载,但希望标注转载来源。 https://blog.csdn.net/qq_38410730/article/details/81743561

ARP(Address Resolution Protocol)地址解析协议

ARP协议是网络层传输的,在已经知道下一站路由器的IP地址后,要将以太网包发送给目的地址,但是以太网需要的是目的mac地址不是IP地址,而通过ARP请求包就可以获得目的IP地址的mac地址。

为什么需要ARP协议呢?

因为在OSI七层模型中,对数据从上到下进行封装发送出去,然后对数据从下到上解包接收,但是上层(网络层)关心的IP地址,下层关心的是MAC地址,这个时候就需要映射IP和MAC。

ARP请求的过程:源主机以广播的形式,发送一个ARP请求包,所有与源主机在直连的主机都会收到一个请求包,如下图所示,请求包询问目的IP地址的mac地址,目的IP地址的主机收到这个请求后,发送一个ARP应答,告诉源主机自己的mac地址。 (也就是说,ARP必须是在同一局域网下才可以使用)

ARP请求/应答包的数据格式如下图所示。ARP硬件类型首部中硬件类型表示链路层的协议,以太网为1;协议类型表示网络层协议,IP协议为0x0800:

为了减少ARP的请求次数,在主机和路由中存在一个ARP的缓存表,这张表中保存了最近用到的IP地址与mac地址的对应关系。用arp -a命令可以查询主机的arp缓存表,例如:

 (115.156.142.9) 位于 00:01:2e:4e:eb:ab [ether] 在 enp6s0
 (115.156.142.254) 位于 14:14:4b:7d:4c:bd [ether] 在 enp6s0

也就是说,地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

如何在局域网众多主机里获得目的主机的MAC?

刚开始PC1并不知道PC2的MAC地址,同样需要发送ARP请求,但是这个局域网里主机很多,怎么唯独获取PC2的MAC呢,①我们想到和一群陌生人交流一样,可以挨着询问一遍,这就是我们要说的广播,首先PC1广播发送询问信息(信息和上一张图介绍的一样),在这个普通交换机上连接的设备都会受到这个PC1发送的询问信息。

接下来②需要做的是,所有在这个交换机上的设备需要判断此询问信息,如果各自的IP和要询问的IP不一致,则丢弃,如图PC3、Route均丢弃该询问信息,而对于PC2判断该询问信息发现满足一致的要求,则接受,同样的写入PC1的IP和MAC到自己的ARP映射表中。

最后,③PC2单播发送应答信息给PC1,告诉PC1自己的IP和MAC地址。

DNS 解析

IP地址用于识别通信双方的地址,但它是一串长数字,不方便记忆,人们希望主机有自己自己的名字,这个名字是唯一的,而且容易记住。于是,诞生了“域名”的概念。域名是一种为了识别主机名称和机构名的具有分层的名称,比如在域名 seu.edu.cn中,seu是主机名,edu 和 cn 是不同层次下的域名。

域名和 IP 地址都可以唯一对应一台主机,DNS 协议的作用就是将自身具有意义的域名转换成不容易记住的 IP 地址。

域名的层次

域名系统的最高层次是根域名,然后是顶级域名,二级域名依次类推。顶级域名一般不会变动,主要都是那么几个:表示国家的.cn,.us等,.edu,.com等等。顶级域名下就是二级域名,二级域名是怎么来的呢?要去指定的机构完成注册。mail www等都是主机名不能再分。 

域名服务器 

域名只是一个抽象的概念,域名系统由域名服务器来维护。上一级域名服务器中都保存着下一级域名地址。比如:根域名服务器中都保存着所有顶级域名的服务器地址。而com域名服务器中又保存这下面所有二级域名的地址。

DNS查询

DNS查询分为两种方式:递归查询和迭代查询。递归查询就是下一个服务器作为DNS客户帮助查询,迭代查询就是域名服务器返回下一级域名服务器的IP地址,由本地域名服务器自己去查询。从主机到本地域名服务器往往采用迭代查询,从本地域名服务器到其他域名服务器一般采用迭代的方式。

本地域名服务器与域名服务器不是一类东西。本地域名服务器是提供给一个网络或几个网络的主机来查询域名用的,它并没有维护域名与IP地址的对应关系。本地域名服务器分布在各个地方,离主机一般不超过几个路由。本地域名服务器中保存了根域名服务器的地址,如果需要查询的域名不在高速缓存中,就向根域名发送DNS查询数据报。 

Ping命令、ICMP

ping命令主要是用来检查路由是否能够到达,由于ping命令发送的数据包非常小,所以在网上传递的速度很快,可以快速地检测你要去的站点是否可以到达。

ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者,这有点象潜水艇声纳系统中使用的发声装置。 

ping命令的使用格式是在命令提示符下键入:ping IP地址或主机名,执行结果显示响应时间。

ping的工作过程:

假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内,则当你在主机A上运行“Ping 192.168.1.2”后,都发生了些什么呢?

首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个映射表中查找出IP地址192.168.1.2所对应的物理地址(MAC地址,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),一并交给数据链路层。

后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。

主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。

其中,ping的过程中也是用到了上文讲到的ARP实现。ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址:

PC1依据OSI模型①依次从上至下对数据进行封装,包括对ICMP Date加IP包头的封装,但是到了封装MAC地址的时候,②PC1首先查询自己的ARP缓存表,发现没有IP2和他的MAC地址的映射,这个时候MAC数据帧封装失败。我们使用ping命令的时候,是指定PC2的IP2的,计算机是知道目的主机的IP地址,能够完成网络层的数据封装,因为设备通信还需要对方的MAC地址,但是PC1的缓存表里没有,所以在MAC封装的时候填入不了目的MAC地址。

那么PC1为了获取PC2的MAC地址,③PC1要发送询问信息,询问PC2的MAC地址,询问信息包括PC1的IP和MAC地址、PC2的IP地址,这里我们想到一个问题,即使是询问信息,也是需要进行MAC数据帧的封装,那这个询问信息的目的MAC地址填什么呢,规定当目的MAC地址为ff-ff-ff-ff-ff-ff时,就代表这是一个询问信息,也即使后面我要说的广播。

PC2收到这个询问信息后,将这里面的IP1和MAC1(PC1的IP和MAC)添加到本地的ARP缓存表中,然后④PC2发送应答信息,对数据进行IP和MAC的封装,发送给PC1,因为缓存表里已经有PC1的IP和MAC的映射了呢。这个应答信息包含PC2的IP2和MAC2。PC1收到这个应答信息,理所应当的就获取了PC2的MAC地址,并添加到自己的缓存表中。

经过这样交互式的一问一答,PC1和PC2都获得了对方的MAC地址,值得注意的是,目的主机先完成ARP缓存,然后才是源主机完成ARP缓存。之后PC1和PC2就可以真正交流了。

TraceRoute

TraceRoute命令利用ICMP 协议定位您的计算机和目标计算机之间的所有路由器。TTL 值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP 呼叫报文的TTL 值和观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由器。

通过发送UDP报文,设置目的端口为一个不可能的值,将IP首部中的TTL分别设置从1到N,每次逐个增加,如果收到端口不可达,说明到达目的主机,如果是因为TTL跳数超过,路由器会发送主机不可达的ICMP报文。

猜你喜欢

转载自blog.csdn.net/qq_38410730/article/details/81743561