ARP协议与DNS协议详解

一、ARP协议

1.工作原理

ARP协议能实现任意网络层地址到任意物理地址的转换,在此只讨论从IP地址到以太网地址(MAC地址)的转换。

该协议主要工作流程是:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,此网络上的其它机器都将收到这个请求,但只有目标机器会回应一个ARP应答,其中包含自己的物理地址

2.以太网ARP请求/应答报文详解

以太网ARP请求/应答报文的格式如图:
在这里插入图片描述

  • 硬件类型:定义物理地址的类型,1表示MAC地址
  • 协议类型:表示要映射的协议地址类型,0x800表示IP地址
  • 硬件地址长度:表示硬件地址的长度,单位字节,MAC地址长度为6
  • 协议地址长度:表示协议地址的长度,单位字节,IP(v4)地址长度为4
  • 操作:1代表ARP请求,2代表ARP应答,3代表RARP请求,4代表RARP应答
  • 后四个字段如其名,分别指定发送与接收端的以太网地址(MAC地址)和IP地址。

后4个字段的使用:

发送端填充除目的端以太网地址的其它三个字段,以构建ARP请求发送,接收端发现该请求的目的端IP地址是自己,就将自己的MAC地址填入,然后交换两个目的端地址和两个发送端地址,构建ARP应答返回

注意:虽然由上图可计算出一个ARP请求的长度为28个字节,再加上以太网帧头部和尾部的18个字节为46个字节。但由于部分实现要求以太网帧的数据部分至少46个字节,这种情况下一个ARP请求的以太网帧长度为64字节

3.ARP高速缓存的查看和修改

通常ARP会维持一个高速缓存,其中包含经常访问或最近访问的机器IP地址到物理地址的映射,这样可避免重复发送ARP请求。

Linux下可使用arp -a命令进行查看
在这里插入图片描述
Windows下可win+R快捷键,输入cmd进入黑窗口,arp -a命令查看
在这里插入图片描述
先将Linux的网关IP删除:
在这里插入图片描述
然后用到tcpdump工具进行抓包
在这里插入图片描述
开启另外一个终端,进行网络通信

在这里插入图片描述
可以看到前两个数据包显示了出来:

00:15:5d:25:c8:a4 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 172.23.192.1 tell 172.23.202.139, length 28

解析:

  • 00:15:5d:25:c8:a4:本机的物理地址
  • ff:ff:ff:ff:ff:ff:广播地址
  • ethertype ARP (0x0806):表示该以太网帧为ARP协议
  • length 42:该以太网帧的长度为42字节,因未计算最后4个字节CRC字段,实际为46字节。
  • Request :表示发送的是请求包
  • who-has 172.23.192.1 tell 172.23.202.139:谁是172.23.192.1就请将物理地址发送给72.23.202.139(我的局域网IP)
  • length 28:表示数据部分为28字节。

整句话的意思就是,我向当前局域网所有主机发送了一个ARP请求,谁的IP是172.23.192.1,就请将你的物理地址发送给我。

00:15:5d:27:ee:00 > 00:15:5d:25:c8:a4, ethertype ARP (0x0806), length 42: Reply 172.23.192.1 is-at 00:15:5d:27:ee:00, length 28

有了第一句请求,就有了第二句应答

物理地址为00:15:5d:27:ee:00向我发送了ARP应答数据包,告诉我IP地址为172.23.192.1的主机物理地址为00:15:5d:27:ee:00

现在再进行查看,本机ARP缓存中又有了网关IP和物理地址的映射了
在这里插入图片描述
我wget www.baidu.com,明明是下载的百度主页,为什么我说这是网关的IP和物理地址的映射呢?

因为我这是局域网,局域网主机只能通过网关与外界通信,所以第一步必须要先找到主机的物理地址。

二、DNS协议

上面我使用了www.baidu.com,但IP层其实只能通过IP进行定位主机。

但问题是,这么一连串的数字IP,普通人很难记忆,所以就有了DNS协议,将具有一定规范的名称与IP地址再进行一次映射。这就是我们常用的网站名,也称域名。

域名查询服务有多种实现方式,比如NIS(Network Information Service,网络信息服务),DNS和本地静态文件。这里只讲解DNS。

1.工作原理

DNS是一套分布式的域名服务系统,每个DNS服务器上都存着大量的机器名和IP地址的映射,并且是动态更新的。

DNS查询和应答报文的格式如图:

在这里插入图片描述

  • 16位标识:用于标记一对DNS查询和应答,用于区分一个DNS应答是哪个DNS查询的回应
  • 16位标志:用于协商具体的通信方式和反馈通信状态。细节如下图:
  • 后四个字段则分别指出DNS报文的最后四个字段的资源记录数目
    在这里插入图片描述
    - QR:查询应答标志,0代表查询,1代表应答
    - opcode:查询应答的类型,0为标准查询,1为反向查询(IP获得域名),2为请求服务器状态。
    - AA:授权应答标志,仅有应答报文使用,1表示域名服务器是授权服务器
    - TC:截断标志,仅当DNS使用了UDP服务时使用。因UDP报文超过512字节就会被截断。
    - RD:递归查询标志。1表示执行递归查询,即目标DNS无法解析某个主机名,则交个其它其它DNS服务器,以此递归查询。0表示执行迭代查询,如果目标DNS无法解析某个主机名,则将自己知道的DNS服务器IP地址返回给客户端,供客户端参考。
    - RA:允许递归标志,仅供应答报文使用,1代表DNS服务器支持递归查询。
    - zero:未使用,必须为0
    - rcode:返回码,表示应答状态,如0表示无错误,3表示域名不存在

对于查询报文来说,一般包含1个查询问题,而应答资源记录数、授权资源记录数和额外资源记录数则为0。

对于应答报文来说,应答资源记录数至少为1,而授权资源记录数和额外资源记录数可为0或非0

查询问题的格式:
在这里插入图片描述

  • 查询名:以一定格式封装了要查询的主机域名
  • 16位查询类型:表示如何执行查询操作,类型A,值1,表示获取目标主机IP地址。类型CNAME,值5,表示获取目标主机的别名。类型PTR,值12,表示反向查询
  • 16位查询类:通常位1,表示获取因特网地址(IP地址)
    应答字段、授权字段和额外信息字段都使用资源记录(Resource Record,RR)格式,如图:
    在这里插入图片描述
  • 32位域名:该记录中与资源对应的名字,格式与查询问题中的查询名字段相同。
  • 16位类型和16位类:与DNS查询问题对应字段相同
  • 32位生存时间:表示该查询记录可被本地客户端程序缓存多长时间,单位为秒。
  • 16位资源数据长度和资源数据:取决于类型字段,如类型A,资源数据是32位的IPv4地址,而资源数据长度为4.

2.DNS协议分析

方法与上面类似,先运行一个终端执行tcpdump进行抓包,再开启一个终端运行host命令使用DNS协议进行查询目标域名的IP地址。
在这里插入图片描述
这里指定了port domain,表示只抓取域名服务器的数据包,即DNS查询和应答报文

host命令指定-t A,表示使用A类型的查询类型。

输出如下:

IP 172.23.202.139.39654 > 172.23.192.1.53: 60805+ A? www.baidu.com. (31)
IP 172.23.192.1.53 > 172.23.202.139.39654: 60805- 3/0/0 CNAME www.a.shifen.com., A 220.181.38.149, A 220.181.38.150 (122)

格式为IP.端口 > IP.端口

比如第一个数据包,为172.23.202.139的39654端口发向172.23.192.1的53端口,60805表示DNS的查询报文的标识值,因此再下一条DNS应答报文中也出现了相同的值。后面‘+’表示启用递归查询标志,‘A?’表示使用A类型的查询方式,www.baidu.com表示DNS查询问题中的查询名,括号31表示DNS查询报文的长度,单位为字节。

第二个数据包类似,不同的是后面的一段,‘3/0/0’表示该报文中包含3个应答资源记录,0个授权资源记录和0个额外信息记录。‘CNAME www.a.shifen.com., A 220.181.38.149, A 220.181.38.150 (122)’则表示3个应答资源记录的内容,CNAME表示紧随其后的为机器的别名,A表示其后为IP地址,122表示该应答报文长度为122个字节。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余识-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值