TCP/IP illustrated 阅读笔记(五) ARP协议

1. ARP协议简介

Address Resolution Protocol,用于建立和维护IPv4(IPv6使用NDP协议)地址和MAC地址的动态映射。在一个局域网中(LAN),数据包通过MAC地址来寻址的(网络层的数据包被封装在二层数据帧中进行传输),但是IPv4是用IP地址来寻址。只知道IP地址,不知道MAC地址,数据包是无法发送(不能寻址)的,这个时候就使用ARP协议获得IP地址对应的MAC地址。

注意ARP协议只在LAN中使用(LAN不仅指192.168之类的私有网络地址,公网地址也是可以组成一个一个LAN的)。那么如果目的IP不在当前LAN中呢,TCP/IP协议族是用来实现多个LAN之间的互联,网关就相当于一个国家(LAN)的海关,一个LAN中的主机发给其他LAN的数据包(货物)首先发给网关,然后网关再把数据包发送出去。所以主机需要做的事情是把数据包发送给网关,网关的IP是已知的,此时ARP协议的工作是已知网关的IP获得网关的MAC地址。

ARP协议要求链路层支持广播

2. ARP协议工作的一般过程

假设现在有一个LAN,LAN的网段是202.117.15.0/24

主机A的IP地址:202.117.15.10,MAC地址00:00:00:00:00:10

主机B的IP地址:202.117.15.11,MAC地址00:00:00:00:00:11

A此时要给B发送一个UDP包(三层包),A不知道B的MAC地址,过程如下:

1. A发送一个ARP request(广播包,目的MAC全1),LAN中的所有主机(不考虑VLAN)都会收到这个ARP request。这个ARP request的内容主要是:哪位小哥的IP地址是202.117.15.11啊,告诉我呗,我的IP地址是202.117.15.10,MAC地址是00:00:00:00:00:11

2. B收到了这个ARP request后,发现ARP request询问的IP地址是自己,B做了N件事:1)更新自己的ARP映射,即把MAC地址00:00:00:00:00:10映射到202.117.15.10上。(不考虑静态映射)。2)给主机A发送ARP reply(单播,A的MAC地址已知),主要内容是:哎呀,A你好啊,我就是你要找的那个B(202.117.15.11)啊,我的MAC地址是00:00:00:00:00:11。其他主机收到这个广播后,会执行步骤1),更新自己的ARP映射(不考虑存在静态映射的情况)

3. A收到B发来的ARP reply,更新自己的ARP映射,即把MAC地址00:00:00:00:00:11映射到202.117.15.11上。

4. 此时A知道了B的MAC地址,B也知道A的MAC地址,于是A和B就可以没羞没臊地聊天了(互相发送三层数据包),只要某个时刻其中一个主机的MAC地址-IP地址映射过期了,就再次重复1到3的过程,然后继续愉快地聊天,一点都不影响兴致呢。

3. ARP包的格式

ARP在OSI七层模型中和TCP/IP四层模型中都被放在了数据链路层(二层),但是又有点像三层的,ARP有ethtype(0x0806),IP的ethtype是0x0800,貌似有称为2.5层的

下面是Ethernet & IPv4网络中的ARP包的格式

byte0

byte1

byte2

byte3

Hardware type

Protocol type (PTYPE)

Hardware address length

Protocol address length

Operation

Sender hardware address(48bit)

Sender protocol address(32bit)

Target hardware address(48bit)

Target protocol address(32bit)

ARP包是封装在以太帧中,和IP包在以太帧中的位置是一样一样的

字段说明:

Hardware type: MAC地址类别,Ethernet中该值为1。通常所说的MAC地址,物理地址,数据链路层地址都指的同一个东西,以太网中的MAC地址又成为以太网地址。

Protocol type: 协议地址类别,IPv4网络中该值为0x0800(是的,和ethtype的值是一样的,这不是巧合,用的就是Ethtype的值)

Hardware address length:MAC地址长度,Ethernet中该值为6

Protocol address length:协议地址长度,IPv4中该值为4

Operation: 说明ARP包的类型,request时值为1,reply为2

Sender hardware address 发送者的MAC地址

Sender protocol address:发送者的协议地址(IPv4地址)

Target hardware address:目标MAC地址,ARP request中为广播地址(全1)

Target protocol address:目标协议地址,

 

发送者会在ARP request中填入自己的MAC地址,IP地址(Sender地址),目标MAC填入二层广播地址,目的IP地址填入询问的IP地址,目标主机收到ARP request后,发送ARP reply包,ARP reply中的Target地址是ARP request的Sender MAC地址和IP地址,ARPreply的Sender地址是主机自己的MAC地址和IP地址。

4. ARP映射的类别和超时时间

C:动态的映射,动态学习获得的,就是通过上述的那个一般过程获得的,一般超时时间为20分钟(RFC1122中规定的)

M:静态的映射,手动静态配置的ARP映射,没有超时时间,但是大多数的实现中ARP reply会更改静态的ARP映射(不管本主机是否发送过ARP request),没有做过这个实验,不清楚替换后的ARP映射是静态的还是动态的。

P:publish,主要用于代理ARP,代理ARP让主机回应(发送ARP reply)不是指向自己IP地址的ARP request,让Sender以为自己是要找的MAC地址。这个现在很少用了

5. Gratuitous ARP

无理由ARP(请无视我的翻译),GratuitousARP是指主机发送一个目标IP为自己IP的ARP request。Gratuitous ARP一般在系统bootstrap(引导程序)时间执行(这里我不太理解,计算不是系统启动时间,只要是网卡启动时应该都会发送的吧)网卡发送一个目标IP为自己ARP request。

这个ARP包主要有两个作用:

1. 主机确定当前网络中是否有主机的IP和自己的IP是一样的。如果这个ARPrequest发出后,收到了ARP reply,说明当前LAN(或者VLAN)有主机用了和本机一样的IP。这个时候系统通常会提醒用户IP地址冲突。如果没有收到ARP reply,说明LAN(或者VLAN)中没有主机和自己IP地址一样。

2. 主机的MAC地址可能发生了变化(比如修改了MAC地址,或者换了网卡)。ARP request可以让LAN(或者VLAN)中所有主机更新ARP request发送者的IP和MAC的映射关系。(静态的ARP映射关系应该不会被ARP reqeust更新,通常只会被ARP reply更新——这个是我根据上下文推测的,还没有试验过)

6. 地址冲突检测(ACD)

Gratuitous ARP发现地址冲突后什么都不能做,只能提示用户发生了地址冲突。所以RFC5227提出了一个新的机制:ACD(Address Conflict Detection)

ACD可以对地址冲突做出反应,ACD定义了ARP probe和ARP announcement两种ARP包(都是ARP request,只是填充内容不太一样)

ARP probe:用于检测IP地址冲突,Sender IP填充为0,填充为0是为了避免对其他主机的ARP cache造成污染(因为可能已经有主机正在使用候选IP地址了,不要影响别人的正常通行嘛),Target IP是候选IP地址(即本机想要使用的IP地址)

ARP announcement:用于昭示天下(LAN)本机要使用某个IP地址了,是一个SenderIP和Traget IP填充的都是本机IP地址的ARP request。这会让LAN(VLAN)中所有主机都会更新自己的ARP cache,将IP地址映射到发送者的MAC地址。

6.1 ACD流程

1. 网卡启动时(或者从睡眠状态恢复,或者链接建立时)会发送一个ARP probe。(为了避免多个网卡同时启动同时发ARP probe造成拥塞,有一个拥塞避免策略,不会立刻发送ARP probe,单个网卡的多个probe也不会连续发送,会有间隔时间)

2. 发送主机可能收到ARP reply或者ARP probe,如果收到了ARP reply,说明候选IP地址已经有主机在用了。如果收到了一个Target IP地址为候选IP的ARPprobe,说明另外一个主机也同时想要使用该候选IP地址。这种情况下,两个主机都会提醒用户出现了IP地址冲突。然后进行地址冲突处理(见后面)

3. 如果上述两种ARP包都没有收到,说明候选IP地址可用。主机发送一个ARP announcement,告诉其他主机这个候选IP有人用了,这个ARP request会让LAN(VLAN)中其他主机更新ARP cache。

4. 系统运行期间,ACD是一直在运行的,这点与Gratuitous ARP不同。主机会一直检测收到的ARP reqeust 和ARP reply,判断Sender IP域是否和本机IP地址一样,如果一样说明有主机也在用这个IP地址了。然后需要进行地址冲突处理。(见下面)

地址冲突处理:《RFC5527》提供了三种可选的解决机制:1)放弃使用该IP地址,2)发送一个ARP announcement来进行IP地址“守卫”,如果冲突仍然继续存在,放弃使用这个IP。3)无视冲突,继续使用这个IP

7. TODO:

1. 实验ARP reqeust 和ARP reply 是否可以更新静态IP-MAC映射

2. 实验不断发送ARP reqeust进行攻击

3. 实验不断发送ARP reply进行攻击

4. 实验使用ARP欺骗LAN中的其他主机(让主机以为自己是网关,或者让网关以为自己是目的主机,或者both),并在主机无法察觉的情况下查看主机数据。尝试去篡改用户数据


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值