赞
踩
ARP协议能实现任意网络层地址到任意物理地址的转换,在此只讨论从IP地址到以太网地址(MAC地址)的转换。
该协议主要工作流程是:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,此网络上的其它机器都将收到这个请求,但只有目标机器会回应一个ARP应答,其中包含自己的物理地址
以太网ARP请求/应答报文的格式如图:
后4个字段的使用:
发送端填充除目的端以太网地址的其它三个字段,以构建ARP请求发送,接收端发现该请求的目的端IP地址是自己,就将自己的MAC地址填入,然后交换两个目的端地址和两个发送端地址,构建ARP应答返回
注意:虽然由上图可计算出一个ARP请求的长度为28个字节,再加上以太网帧头部和尾部的18个字节为46个字节。但由于部分实现要求以太网帧的数据部分至少46个字节,这种情况下一个ARP请求的以太网帧长度为64字节
通常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
解析:
整句话的意思就是,我向当前局域网所有主机发送了一个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和物理地址的映射呢?
因为我这是局域网,局域网主机只能通过网关与外界通信,所以第一步必须要先找到主机的物理地址。
上面我使用了www.baidu.com,但IP层其实只能通过IP进行定位主机。
但问题是,这么一连串的数字IP,普通人很难记忆,所以就有了DNS协议,将具有一定规范的名称与IP地址再进行一次映射。这就是我们常用的网站名,也称域名。
域名查询服务有多种实现方式,比如NIS(Network Information Service,网络信息服务),DNS和本地静态文件。这里只讲解DNS。
DNS是一套分布式的域名服务系统,每个DNS服务器上都存着大量的机器名和IP地址的映射,并且是动态更新的。
DNS查询和应答报文的格式如图:
对于查询报文来说,一般包含1个查询问题,而应答资源记录数、授权资源记录数和额外资源记录数则为0。
对于应答报文来说,应答资源记录数至少为1,而授权资源记录数和额外资源记录数可为0或非0
查询问题的格式:
方法与上面类似,先运行一个终端执行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个字节。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。