个人总结-ARP的实现

时间:2023-04-15 13:17:13 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ARP存在的目的:

首先,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。

报文需要有源MAC和目的MAC,才能在物理网络上发送。

另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。

所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。

于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。

ARP缓存表:

每台工作在网络上的主机都有一个ARP缓存表。

即一个IP地址和MAC地址一一对应的表格。

当该台主机与网络上其他主机通信是,他首先会通过IP去表格中寻找,IP地址对应的物理MAC地址。

如果找到,封包发送数据。

如果没有找到,则通过ARP去询问对方MAC地址。

主机A就会在网络上发送一个广播(MAC:ff:ff:ff:ff:ff:ff),A主机MAC地址是“主机A的MAC地址”,

这表示向同一网段内的所有主机发出这样的询问:“我是192.168.1.5,我的硬件地址是"主机A的MAC地址".

请问IP地址为192.168.1.1的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,

才向主机A做出这样的回应:“192.168.1.1的MAC地址是00-aa-00-62-c6-09”。这样,主机A就知道了主机B的MAC地址,

它就可以向主机B发送信息了。同时A和B还同时都更新了自己的ARP缓存表(因为A在询问的时候把自己的IP和MAC地址一起告诉了B),

下次A再向主机B或者B向A发送信息时,直接从各自的ARP缓存表里查找就可以了。ARP缓存表采用了老化机制(即设置了生存时间TTL),

在一段时间内(一般15到20分钟)如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

具体程序实现,参看ARP.c

ArpRequest 发送ARP请求

ArpEcho 收到ARP回复后对ARP缓存表进行更新。

ArpAnswer

UpdateArpTab

FindMac

本文来源:https://www.wddqw.com/doc/7b489a09844769eae009eda4.html