Linux原始套接字之ARP协议实现

1. ARP协议介绍 ARP(AddressResolutionProtocol)地址解析协议用于将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)[RFC826].ARP协议是属于链路层的协议,在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据。当
摘要由CSDN通过智能技术生成

1. ARP协议介绍

 ARP(AddressResolutionProtocol)地址解析协议用于将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)[RFC826].ARP协议是属于链路层的协议,在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据。当然,点对点的连接是不需要ARP协议的。ARP工作时,首先请求主机会发送出一个含有所希望到达的IP地址的以太网广播数据包,然后目标IP的所有者会以一个含有IP和MAC地址对的数据包应答请求主机。这样请求主机就能获得要到达的IP地址对应的MAC地址,同时请求主机会将这个地址对放入自己的ARP表缓存起来,以节约不必要的ARP通信。ARP协议是工作在数据链路层,基于以太网. 所以,必须了解以太网的MAC帧格式和ARP协议格式.


MAC帧示意图:



以太网的头部结构:
struct ether_header
{
u_int8_t ether_dhost[ETH_ALEN];      // destination eth addr
u_int8_t ether_shost[ETH_ALEN];      // source ether addr   
u_int16_t ether_type;                 // packet type ID field
} __attribute__ ((__packed__));
整个以太网的头部包括: 目的地址(6字节),源地址(6字节),类型(2字节),帧内数据(46-1500个字节),CRC校验和(4字节)
#define ETH_ALEN 6 //以太网地址的长度
#define ETH_HALEN 14 //以太网头部的总长度  (6+6+2)
#define ETH_ZLEN 60 //不含CRC校验数据的数据最小长度(46+14)
#define ETH_DATA_LEN 1500  //帧内数据的最大长度
#define ETH_FRAME_LEN 1514//不含CRC最大以太网长度(1500+14)

ARP协议示意图:



ARP头部信息:
struct arphdr{
 __be16 ar_hrd;//硬件类型 1-硬件接口为以太网接口-2字节
 __be16 ar_pro;//协议类型-0x0800高层协议为IP协议 -2字节
 unsigned char ar_hln;//硬件地址长度-6字节 MAC-1字节
 unsigned char ar_pln;//协议地址长度-4字节为IP-1字节
 __be16 ar_op;//ARP操作码-1 ARP请求-2字节

}
ARP协议数据结构:
struct ether_arp{
    struct arphdr ea_hdr; //ARPfixed-size header(ARP固定大小的报头)-8字节
    u_char arp_sha[ETHER_ADDR_LEN]; //sender hardware address(发送端硬件地址)-6字节
    u_char arp_spa[4]; //sender protocol address(发送端协议地址)-4字节
    u_char arp_tha[ETHER_ADDR_LEN]; // target hardware address(接收端硬件地址)-6字节
    u_char arp_tpa[4]; //target protocol address(接收端协议地址)-4字节
};
#define arp_hrd ea_hdr.ar_hrd
#define arp_pro ea_hdr.ar_pro
#define arp_hln ea_hdr.ar_hln
#define arp_pln ea_hdr.ar_pln

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值