理解ARP协议

我们知道在网络中通讯,都是知道对方的IP地址后,才能发起连接,IP地址所在的层是网络层,而在网络层下面是数据链路层,这里IP数据包继续被封装成以太网数据帧,当然还有别的数据链路层格式,但是数据链路层也需要寻址机制,常常就是48bit的硬件地址,又叫MAC地址。

ARP

ARP协议就是起到在IP地址到对应的硬件地址之间提供映射作用的,所以ARP协议又叫地址解析协议

基本工作流##

任何时候,当我们发起一个网络接连时,无非有以下的过程:

  1. 知道目标主机名,通过gethostname函数将主机名转换为IP地址,这个函数在DNS(域名系统)中称为解析器,这里推荐看一下阮一峰老师的博文:DNS原理入门

  2. 应用程序通过TCP或者UDP使用得到的IP建立连接。

  3. 如果目标主机在本地网络上,知道IP地址,我们就可以找到对应的主机,如果目标主机在远程网络中,系统就会找位于本地网络的下一站路由地址,通过IP选路让路由器转发IP数据报,这些操作属于IP协议的核心,在此略过。

  4. 当主机知道IP地址,并把数据报发过去的过程之前,主机在链路层实际上是要知道目标主机的物理地址的,每台主机的物理地址又称MAC地址是全球唯一的。在这一步,就需要我们的ARP协议。

  5. ARP协议发送一个ARP请求,这个ARP请求是一个广播数据帧,意味着局域网内,每一台机器都能收到,ARP数据帧中包含着目的主机的IP地址,因为是广播发送,如果哪台主机拥有这个IP,则会反馈消息,发回自己的硬件地址。

  6. 得到了目的主机的硬件地址后,就包含着IP数据报的以太网数据帧就可以正常发送了。

ARP的分组格式##

在以太网中,ARP请求和应答都有着下面的分组格式。

分组格式

以太网的目的地址和源地址:目的以太网地址全为1,即FF:FF:FF:FF:FF:FF则为广播地址,在本地局域网内,所有的以太网接口都要接收这个数据帧。

帧类型:2个字节长的帧类型,告诉我们这个以太网数据帧携带的是什么数据。对于ARP来说这两个字节是0x0806,对于IP数据报是0x0800,还有RARP(逆地址解析协议)是0x8035

硬件类型和协议类型:这两个字段就是用来描述ARP分组的,硬件类型用来指代需要什么样的物理地址,协议类型则是需要映射的协议地址类型。用来描述ARP时,表达的就是我有协议类型IP,我需要的硬件类型是以太网的物理地址。那么硬件地址就为1,表示以太网地址,协议类型是0x0800,看这边与前面的帧类型中提到的IP数据报的帧类型是一样的,这是有意设计的。

硬件地址长度和协议地址长度:这里的值分别为6字节和4字节。代表48bit的以太网地址,32bit的IP地址。

操作码:1=>ARP请求, 2=>ARP应答,3=>RARP请求,4=>RARP应答。这些值用于区分具体操作类型,因为字段都相同,所以必须指明操作码,不然连请求还是应答都分不清。

最后四个字段

  • 源硬件地址
  • 源协议地址
  • 目标硬件地址
  • 目标协议地址。
    注意到这里有两个字段是与分组首端重复的。我们在发送ARP请求时,只有目标硬件地址是空着的,因为我们请求的就是它的值,当对应机器收到后,就会把自己的硬件地址写到这个字段,并把操作码改成2,再发回去。于是就知道彼此的硬件地址,开始真正的通讯。

ARP高速缓存##

知道了ARP发送的原理后,我们不禁疑惑,如果每次发之前都要发送ARP请求硬件地址会不会太慢,但是实际上ARP的运行是非常高效的。那是因为每一个主机上都有一个ARP高速缓存,我们可以在命令行键入arp -a获取本机ARP高速缓存的所有内容:

arp -a

高速缓存中的每一项的生存时间一般为20分钟,有了这些缓存,我们经常直接使用硬件地址,加快速度了。

以上说的都是在一个本地网络内完成的,如果ARP请求是从一个网络主机发送到另一个网络主机呢?下面介绍ARP代理的概念

ARP代理##

如果ARP请求是从一个网络主机发送到另一个网络主机,那么连接这两个主机的路由器就可以回答该请求,这个过程称为委托ARP或者ARP代理。我们知道IP路由选择,如果主机不相连,我们就把数据报发送到一默认路由上,由路由器来转发该数据报。在ARP协议中,我们发往网络的请求主机物理地址也会由路由器回答,得到的就是路由器的物理地址,发送方就根据这个物理地址把数据报发送到路由器,由路由器转发,再下面的事情由路由器完成,那是属于IP协议的事了,当然在那个过程中,也不断使用ARP协议获取每一步的物理地址。

总结##

目标IP与自己在同一网段####

  • arp高速缓存有目标IP的MAC地址:直接发送到该物理地址
  • arp高速缓存没有目标IP的MAC地址:发送ARP广播请求目标IP的MAC地址,缓存该MAC地址,然后发数据报到该MAC地址。

目标IP与自己不在同一个网段####

这种情况需要将包发给默认网关,所以主要获取网关的MAC地址

  • arp高速缓存有默认网关的MAC地址:直接发送IP数据报道默认网关,再由网关转发到外网。
  • arp高速缓存没有默认网关的MAC地址 :还是发送ARP广播请求默认网关的MAC地址,缓存该地址,并且发送数据报到网关。

另外一个话题:ARP欺骗##

ARP欺骗又叫ARP毒化,英文ARP spoofing,是一种针对ARP的攻击方式,这里简略介绍一下。
运行机制
ARP欺骗主要是攻击者发送大量假的ARP数据包到网络上,尤其是网关上。假设你的网关的IP地址是192.168.0.2,MAC地址为00-11-22-33-44-55,你发送的数据都会从这个MAC地址经过,这时候我发送大量ARP数据包,然而我的包是构造出来的,IP是你的IP,但是MAC地址我替换成了我的MAC地址,这时候你更新你的ARP缓存时,就会把我机器的MAC地址当成192.168.0.2的MAC地址,于是你的流量都到我这来了,我可以把你的数据改改再发给网关,或者什么都不做,你都上不了网了。
防治方法
最理想的用静态ARP,不过在大型网络不行,因为ARP经常需要更新,另外一种方法,例如DHCP snooping,网络设备可借由DHCP保留网络上各电脑的MAC地址,在伪造的ARP数据包发出时即可侦测到。此方式已在一些厂牌的网络设备产品所支持。

参考资料:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容