铭记自己最初的向往
分类: 网络与安全
2015-09-25 10:00:40
1.ARP协议(Address resolution protel)地址解析协议,是获取物理地址的一个TCP/IP协议。将ip寻找到对应的mac地址
2.ARP报文格式
(1)Dest MAC:目的MAC地址
(2)Src MAC:源MAC地址
(3)帧类型:0x0806
(4)硬件类型:1(以太网)
(5)协议类型:0x0800(IP地址)
(6)硬件地址长度:6
(7)协议地址长度:4
(8)OP:1(ARP请求),2(ARP应答),3(RARP请求),4(RARP应答)
3.ARP模拟演示
其中PC0配置的ip是172.20.223.30,mask是255.255.0.0,网关是:172.20.223.254
PC1配置的ip是192.168.1.1,mask是255.255.255.0,网关是:192.168.1.254
路由器的左边配置的是172.20.223.254,右边配置是192.168.223.254
用PC0电脑ping 电脑 PC1时,PC0找不到ip对应的mac地址,就会发送arp广播包,
4.arp报文包
//ARP请求或应答的数据结构
struct arp_packet {
////以太网首部
u_char dmac[6];//目标MAC地址
u_char smac[6];//源MAC地址
u_short type;//帧类型
////ARP报文
u_short ar_hrd; //硬件类型
u_short ar_pro; //协议类型
u_char ar_hln; //硬件地址长度
u_char ar_pln; //协议地址长度
u_short ar_op; //ARP opcode (command)
u_char ar_sha[ETH_ALEN]; //发送端以太网地址
u_char ar_sip[4]; //发送端IP地址
u_char ar_tha[ETH_ALEN]; //目的端以太网地址
u_char ar_tip[4]; //目的端IP地址
u_char padding[18]; //填充 (padding)
//...
};
4.通过wireshark抓包得到
0000 ff ff ff ff ff ff 00 19 06 ea b8 c1 08 06 00 01
0010 08 00 06 04 00 02 00 19 06 ea b8 c1 c0 a8 7b 01
0020 00 00 00 00 00 00 c0 a8 7b 01
根据定义,头6个字节是以太网目的地址 ff ff ff ff ff ff 这是一个广播地址,全网下的所有终端都能接收到,紧跟着的6个字节是以太网源地址,即发送者的MAC地址(是我的MAC地址)。帧类型0806占两个字节,到这里以太网帧头就结束了。0806指的是后面的数据是属于arp包的。
接着分析ARP包头。头两个字节是硬件类型 00 01,接着两个字节是协议类型,即ARP使用的是IP协议代号08 00。硬件地址长度和协议地址长度分别是6和4。这与ARP报文格式是对应的。后面的2个字节OP指示当前包是请求包还是应答包,对应的值分别是0x0001和0x0002。原始数据里是00 02所以这是一个应答包,然后6个字节又是发送者MAC地址00 19 06 ea b8 c1 ,后面4个字节是发送者IP地址c0 a8 7b 01 ,转换成点分十进制格式即192.168.123.1,这是我的IP,接下来的6个字节留空,00 00 00 00 00 00 在arp请求包里也可以是其他 数据,因为稍后IP地址为c0 a8 01 02(192.168.123.1)会把自己的MAC地址填充进这6个字节中。
填充完后,arp包里的发送者硬件地址|目标硬件地址和以太网首部的以太网目的地址|以太网源地址正好对调。最后把这个封装好的ARP包发送出去,这样一个来回就可以让两台终端互相知道对方的IP和MAC。