Welcome

首页 / 软件开发 / C++ / TCP/IP学习笔记(2)

TCP/IP学习笔记(2)2010-04-03肖进一、ARP:地址解析协议

先看:

C:Documents and Settingsxiaoj>arp -a
Interface: 192.1.8.84 on Interface 0x1000003
Internet Address Physical Address Type
192.1.8.12 00-0b-cd-03-c4-27 dynamic
192.1.8.15 00-0d-9d-93-09-f5 dynamic
192.1.8.18 00-e0-18-c1-86-3d dynamic
192.1.8.26 00-80-2d-78-4f-81 dynamic
192.1.8.33 00-0b-cd-0f-a4-c5 dynamic
192.1.8.38 00-30-6e-36-5f-99 dynamic
192.1.8.86 00-0b-cd-b8-0c-ae dynamic
192.1.8.247 00-50-ba-e5-20-af dynamic
192.1.8.248 00-0d-56-19-ba-56 dynamic

第一列显示的是主机的IP地址,第二列就是主机的网卡MAC地址。

ARP协议就是提供IP地址到对应的硬件地址提供动态映射。这个过程一般是系统自动完成的。ARP发送一份ARP请求给以太网上的主机,该请求中包含目的主机的IP地址,其意思是“如果你是这个IP的拥有者,请回答你的硬件地址”。当目的主机的ARP层收到这份广播报文时,识别出这是发送端在询问它的IP地址,于是就会发送一个ARP应答,这个ARP应答包括IP地址及对应的硬件地址。

二、ARP分组格式

以太网目的地址6以太网源地址6帧类型2硬件类型2协议类型2硬件地址长度1

协议地址长度1请求应答1发送者硬件地址6发送者IP地址4

目的硬件地址6目的IP地址4

先看定义:

//ARP首部

struct arphdr(
u_short ar_hrd; //硬件类型
u_short ar_pro; //协议类型
u_char ar_hln; //硬件地址长度
u_char ar_pln; //协议地址长度
u_short ar_op; // 请求还是应答
u_char arp_sha[6]; //发送者硬件地址
u_char arp_spa[4]; //发送者IP地址
u_char arp_tha[6]; //目的硬件地址
u_char arp_tpa[4]; //目的IP地址
u_char arp_zero[18]; //填充字段
};