最近在深入学习基础知识TCP/IP,感觉以前打代码做博客期间自己对于网络知识了解不是十分透彻,所以准备认真恶补一下基础,如果有理解错误,希望大神能够指出,感谢万分!
简单说,ARP就是将IP地址动态映射到物理硬件的协议--ARP(不然怎么叫“地址解析”协议呢,对吧)
简单来讲,用一个顺序来表示网络中数据分组(packet)传输(以应用程序FTP为例):
- FTP应用程序的分组,包含主机名,传给解析器----应用层
- FTP客户端请求一个TCP连接,用IP地址建立连接并传输数据(segment)----传输层
- 用该IP地址发送一个Datagram(数据报),请求连接远程主机----网络层
- 如果目标主机在本地,那么IP数据报直接发送到本地主机;如果在远程网络,就IP选路不断确定下一站路由地址,转发IP数据报(IP不是被发送到主机就是到下一个路由)
- 下一阶段,在以太网中(现在的主机大部分是),发送端把32bit的IP地址变为了48bit的以太网地址,而这也就是ARP的最主要功能,把逻辑地址转为物理硬件地址! ----链路层
- ARP发送一份请求frame数据帧(带着目的IP地址,等待找到硬件地址),这时ARP承担了一个“小广播”的工作。
- 如果目的主机听到了,就会回应他,这个回应包括IP地址和硬件地址。
- 受到了应答后,IP数据报传送到目的主机
PS:因为不同的物理硬件有不同的地址,规格,实现技术---所以,我们需要ARP这个神奇的协议来实现”动态映射“!下面我们来看看ARP分组的格式,就知道它如何神奇地在链路层广播和收到回应了:
![](http://images.cnitblog.com/blog/322405/201302/03231028-5ff34aaa11034ecebd321c43505c07a3.jpg)
然后如果有条件,可以用tcp工具telnet来看看,当我们运行telnet时,ARP在搞些什么鬼~嘻嘻
例如:
telnet + IP地址
然后在另外一台机器上看输出结果,利用tcpdump命令,就可以大概看出ARP是怎么工作的了
下面我们来尝试使用ARP命令来解析自己机器的硬件地址:
arp -a
我的电脑终端打印出:
Last login: Wed Mar 11 21:54:54 on ttys000
promatoMBP:~ pro$ arp -a
hiwifi.lan (192.168.199.1) at d4:ee:7:10:e3:a2 on en1 ifscope [ethernet]
do.lan (192.168.199.167) at 8:d8:33:3d:79:f on en1 ifscope [ethernet]
adminisdeiphone.lan (192.168.199.213) at a8:8e:24:a:fb:f1 on en1 ifscope [ethernet]
promatombp.lan (192.168.199.214) at 7c:d1:c3:7a:bf:5e on en1 ifscope permanent [ethernet]
promatoMBP:~ pro$
可以看到我的物理硬件地址(其实就是宿舍路由器的以太网地址为)
d4:ee:7:10:e3:a2
然后试了另外一位舍友,也是
d4:ee:7:10:e3:a2