协议分析Linux RARP协议与传统 IPV4的不同之处(linuxrarp)
RARP(Reverse Address Resolution Protocol)是用于从硬件地址获取IP地址的协议,它不仅可以在TCP/IP协议栈中运行,而且也可以在其他网络协议栈上运行。RARP协议与传统IPV4协议有很多不同之处,本文将就它们之间的主要区别做进一步分析。
首先,Sonet装置支持RARP,而不支持IPV4。RARP特别适合在远程网络配置之前在本地配置IP地址,即可以把RARP用作内部配置协议,在节点加入网络之前就可以为它分配IP地址。
其次,RARP的报文格式有一些不同,与IPV4的格式不完全一致,RARP请求报文中的Source IP地址与普通IPV4请求报文中的Destination IP地址不同,这是因为客户端发送的RARP请求报文中的Source IP地址被填写为0.0.0.0,而不是它的本地IP地址。
此外,RARP使用固定的报文类型 0x8035 ,不像IPV4可以使用 0x800或者0x811 等报文类型。尽管RARP与IPV4配置时使用的ARP非常类似,但它实际上是一种反向地址解析机制,即使用节点的硬件地址以请求远程计算机处理IP地址。
最后,使用RARP可以节省更多的网络带宽,因为它更轻量级,RARP协议中报文的体积十分小,它仅比IPV4请求报文多4个字节。
综上所述,RARP协议与传统IPV4协议有很多不同之处,RARP可以用于Sonet装置,报文格式不完全与IPV4一致,采用固定的报文类型0x8035,而且还可以减少更多的网络带宽占用。
“`c
struct arp_packet
{
uint16_t htype; /* 硬件类型 */
uint16_t ptype; /* 协议类型 */
uint8_t hlen; /* 硬件地址长度(以字节为单位) */
uint8_t plen; /* 协议地址长度 */
uint16_t opera; /* 操作 */
unsigned char sha[6]; /* 发送/接收方硬件地址 */
unsigned char spa[4]; /* 发送/接收方协议地址 */
unsigned char tha[6]; /* 接收/发送方硬件地址 */
unsigned char tpa[4]; /* 接收/发送方协议地址 */
};
struct rarp_packet
{
uint16_t htype; /* 硬件类型 */
uint16_t ptype; /* 协议类型 */
uint8_t hlen; /* 硬件地址长度(以字节为单位) */
uint8_t plen; /* 协议地址长度 */
uint16_t opera; /* 操作 */
unsigned char sha[6]; /* 发送/接收方硬件地址 */
unsigned char tpa[4]; /* 接收/发送方协议地址 */
unsigned char tspa[4]; /* 发送/接收方协议地址 */
unsigned char tha[6]; /* 接收/发送方硬件地址 */
};