命令arp是来做什么的
仍旧, pi@raspberrypi:~ $ man arp
摘录一些,得
NAME
arp - manipulate the system ARP cache
DESCRIPTION
Arp manipulates or displays the kernel's IPv4 network neighbour cache. It can add entries to the table, delete one or display the current content.
ARP stands for Address Resolution Protocol, which is used to find the media access control address of a network neighbour for a given IPv4 Address.
MODES
arp with no mode specifier will print the current content of the table.
arp,该命令用于操纵系统的ARP缓存(ARP cache)。当没有参数时打印(到屏幕上)当前表中的内容。
试一下:
我的树莓派arp输出结果 arp -a 以BSD风格输出ARP缓存中的内容原来系统的ARP缓存中保存着这些,什么是ARP呢,ARP缓存中放的这些又是什么意思,干什么的呢?上面的 pi@raspberrypi:~ $ man arp
的输出中有介绍:
ARP stands for Address Resolution Protocol, which is used to find the media access control address of a network neighbour for a given IPv4 Address.
ARP(注意,大写)表示Address Resolution Protocol(地址解析协议),用于在网络邻居中(network neighbour)查找给定IPv4地址对应的媒体访问控制地址(media access control address)。
上面这句话什么意思呢?ARP是个协议,对于遵守这个协议开发出的软件,当你给这个软件一个IPv4的地址的时候,它能帮你在你的网络邻居中查找这个IPv4地址对应的媒体访问控制地址。
IPv4的地址我知道,就是IP地址,但还有两个问题:
- 这里的网络邻居是指?
- 什么是媒体访问控制地址?
网络邻居是指?
网络邻居,就是指和你处于同一局域网中的主机。
什么是媒体访问控制地址?
以太网规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的媒体访问控制地址(MAC地址)。
MAC地址共48位(6字节),前24位由IEEE决定分配给某一网络设备厂商,后24位由实际生产该网络设备的厂商自行指定。通俗地讲,在生产一块网卡时,该网络设备的厂商就会给这块网卡一个MAC地址。从这里可看出,实际上MAC地址在世界范围内都是唯一的。
总结一下,通过MAC地址,我们可以辨别局域网中的主机,从而可以与指定的MAC地址的主机通信。
MAC地址有什么用?
疑惑了吧,上面不是说了么,用来辨别局域网的主机来通信啊,还取这个小标题干嘛?
实际上,我们并不是用MAC地址来辨别主机,而是用MAC地址来辨别以太网上的主机。想想,如果说辨别,IP地址也同样可以辨别主机,为什么这里还要再加一个MAC地址来辨别?
因为以太网是一种共享型的网络,它采用的是一种称为CSMA/CD的媒体接入方法。
详情请见:什么叫带冲突检测的载波侦听多路接入(CSMA/CD)
我这里直接放结论,当一个主机通过共享式的以太网的线路发送数据的时候,连接在这条线路上的所有主机都会收到那个发送主机发出的数据。
问:既然网络邻居上的所有主机都能收到我的主机发出的报文,那他们如何确定我的主机发送的数据就是给他们的呢?
答:他们会查看你发送的数据的“目的地”地址栏上填的是不是自己的地址,如果是,就接收你发的数据,如果不是,就直接丢弃这个数据。(这种简单的处理方式让以太网卡变得便宜,侧面促进了以太网的流行)
而这个填在发送的数据的“目的地”地址栏上的地址就是用来分辨以太网上主机的媒体访问控制地址(Media Access Control address),你更常听到的是它的英文缩写MAC地址或者是它的通俗名硬件地址。
放图...
比如这个主机ifconfig显示的就有一个封装格式为PPP的接口 图片来源:[how to get ip address of a PPP(Point-to-Point Protocol) network interface?](http://serverfault.com/questions/623070/how-to-get-ip-address-of-a-ppppoint-to-point-protocol-network-interface)截图 有兴趣的可以去看看,网页中还给出了这个接口通常的物理接口样子 其实就是我们一般连显示器的串口了图中显示的是一个PPP接口的图,英文全称图的注释里有,就是点对点协议,顾名思义,不需要和别人共享,这个接口出去,下个接口一定是那个接口,就不需要分辨用的MAC地址了。
你可以看图中的第一个接口,eth0以太接口,它在链路封包方式的后面就明确写了HWaddr(HardWare address)硬件地址(就是MAC地址)。而下面那个接口w1g1接口,它后面就没有MAC地址。
同样,在w1g1接口的第二行,那几个大写的单词的最后一个,NOARP,明白了吗,不支持ARP。很简单啊,它MAC地址都没有,拿什么支持你ARP?
回过头来再看ARP
OK,现在可以回过来看这句话了
ARP(注意,大写)表示Address Resolution Protocol(地址解析协议),用于在网络邻居中查找给定IPv4地址对应的媒体访问控制地址。
上面这句话什么意思呢?ARP是个协议,对于遵守这个协议开发出的软件,当你给这个软件一个IPv4的地址的时候,它能帮你在你的网络邻居(network neighbour)中查找这个IPv4地址对应的媒体访问控制地址(media access control address)。
首先,你给的这个IP地址要是你的网络邻居的某个主机的IP地址,然后根据你给的这个IP地址,我这个软件,是遵守ARP协议的,我就能给你这个IP地址对应的MAC地址。
那这里的ARP缓存(ARP cache)意思也很明显了,就是用来保存我查询到的结果(网络邻居的IP地址对应MAC地址)的地方,这样就能在要用的时候以最快地速度告诉你。
在现实情况中,ARP的工作方式就是,先在ARP缓存中找,找不到了再在局域网上“发帖求助”。
arp -a 以BSD风格输出ARP缓存中的内容这里输入arp命令的显示内容也就明白了,大意为:
由我自己的接口wlan0,连接出去的网络邻居中,IP地址为192.168.253.1的主机,主机名是?,网卡的硬件类型为以太网类型,对应的MAC地址(HardWare address:硬件地址)为b0:d5:9d:37:5d:2e
至于ARP如何根据IP查询网络邻居对应的MAC地址,等下次再说吧。
有趣小试验
手机先连上和树莓派一致的无线局域网,查看手机的本地IP地址为192.168.253.6,然后断开。
在树莓派上用ssh连接手机IP地址,因为手机断开了,当然肯定是连不上的,那这时候ARP缓存中会变成什么样呢?
- ssh显示的结果:No route to host 没有到达192.168.253.6这一地址的路径。
- arp显示的结果:(incomplete)没完成...
OK,这时候我把手机连上去...
连接主机已接入局域网的局域IP地址有趣的事情发生了
- ssh显示的结果由原来的No route to host 没有到达192.168.253.6这一地址的路径变为了Connection refused,这当然了,我手机上又没有开ssh准备和树莓派连,自然树莓派就被拒绝了。
- arp显示的结果则从(incomplete)没完成变成了成功拿到物理地址。
那如果不是本地的IP会怎么样?我猜ARP缓存里不会更新数据,你想看?就自己试试呗,比如...ssh一下简书...
网友评论