一、IP地址跟MAC地址的区别
1)结构层次
MAC地址是数据链路层和物理层使用的地址;
IP是网络层和以上各层使用的地址。
发送数据时,数据从高层下到低层,然后才到通讯链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就会被封装成MAC帧。MAC帧在传输时使用的源地址和目的地址都是硬件地址,写在MAC帧的首部。
二、ARP
ARP协议是以太网等数据链路层的基础协议,负责完成IP地址到硬件地址的映射。
1.ARP报文格式
物理网络类型 | 协议类型 | |
物理地址长度 | 协议地址长度 | 操作 |
发送方物理地址(八位组0~3) | ||
发送方物理地址(八位组4~5) | 发送方IP地址(八位组0~1) | |
发送方IP地址(八位组2~3) | 目标物理地址(八位组0~1) | |
目标物理地址(八位组2~5) | ||
目标IP地址(八位组0~3) | ||
l物理网络类型:也称为硬件类型,指明硬件类型,以太网为1。
l协议类型:指明发送者映射到数据链路标识的网络协议的类型,IP对应0x0806.
l硬件地址长度:MAC地址长度为6.,单位字节。
l协议地址长度:网络层地址的长度,即IP地址长度为4,单位字节。
l操作:操作指明ARP的操作类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4。
l在以太网环境下的ARP报文,硬件地址为48位(6个八位组)。
3.ARP类型
ARP有4种典型的情况
(1)发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用ARP找到目的主机的硬件地址。
(2)发送方是主机,要把IP数据报发送到另一个网路上的一个主机。这时用ARP找到本网路上的一个路由器的MAC地址。剩下的工作由这个路由器来完成。
(3)发送方是路由器,要把IP数据报转发到本网路上的一个主机。这时用ARP找到目的主机的硬件地址。
(4)发送方是路由器,要把IP数据报转发到另一个网络上的一个主机。这时用ARP找到本网络上的一个路由器的MAC地址,剩下的工作由这个路由器来完成。
3.ARP协议的工作机制
每个主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上的各主机和路由器的IP地址到物理地址的映射表(运行——cmd——arp –a可以查看)。
具体的工作过程如下:
假如当主机A要向本局域网中的某个主机B发送IP数据报时,如果在ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查出其对应的硬件地址,在把这个硬件地址写入MAC帧中,然后通过局域网把该MAC帧发送到此硬件地址。
但是在高速缓存中,也可能查不到主机B的IP地址的项目。可能是主机B才入网,或者是主机A才刚开启,其高速缓存还是空的。这时,主机A会自动运行ARP,然后按照以下步骤找到主机B的硬件地址。
(1)当主机A需要解析一个IP地址对应的MAC地址时,ARP进程在本局域网上会广播发送ARP请求报文。如图所示。
(2)在本局域网上的所有主机上运行的ARP进程都收到此ARP请求报文。当主机B收到主机A发送的ARP请求报文,并看到自己的IP地址后,会进行应答,即向主机A发送ARP响应报文,该报文是单播报文。同时,就把主机A的地址映射写入主机B自己的ARP高速缓存中,方便主机B向主机A发送数据。如图所示:
(3)发起请求的主机A接收到主机B的ARP响应报文后,同样会将响应报文中发送者的IP地址和MAC地址的映射关系写入ARP高速缓存中。
ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间,凡是超过生存时间的项目就从高速缓存中删除掉。用于防止存入高速缓存中的主机物理地址突然改变(例如主机B的网络适配器突然坏掉,B立即更换了一块,其硬件地址就改变了)。
三、局域网交互过程
1.同一个局域网
如图所示,有多台主机在同一个局域网内。现在主机A要向主机B发送一个IP数据报。首先主机A在ARP高速缓存内查找是否有主机B的IP地址。如有,就在ARP高速缓存中查出其对应的硬件地址,在把这个硬件地址写入MAC帧中,然后通过局域网把该MAC帧发送到此硬件地址。
如果在ARP高速缓存内没有查找到主机B的IP地址,主机A就会广播ARP请求报文。在该局域网内的所有主机都会收到该ARP请求报文,并对照自己的IP。当主机B收到该报文时,对照IP发现是自己。就会向主机A发送ARP响应报文。机A接收到主机B的ARP响应报文后,同样会将响应报文中发送者的IP地址和MAC地址的映射关系写入ARP高速缓存中。同时会把硬件地址写入MAC帧中,然后通过局域网把该MAC帧发送到此硬件地址。
2.不同局域网。
如图,有两个局域网用一个路由器R1连接起来。现在主机A要跟主机B连接。两台主机的IP地址为IP1和IP2,而MAC地址分别为HA1和HA4(HA标识Hardware Address)。通讯路径是A ->经过R1转发 ->B。路由器R1因为连接两个局域网上,所以会有两个MAC地址,即HA2和HA3。
现在主机A要向主机B发送一个IP数据报。首先主机A在ARP高速缓存内查找是否有网关的IP地址。如有,就在ARP高速缓存中查出其对应的硬件地址,在把这个硬件地址写入MAC帧中,然后通过局域网把该MAC帧发送到此硬件地址。
如果在ARP高速缓存内没有查找到网关的IP地址,主机A就会广播ARP请求报文。在该局域网内的所有网络设备都会收到该ARP请求报文,并对照自己的IP。当网关收到该报文时,对照IP发现是自己。就会向主机A发送ARP响应报文。机A接收到主机B的ARP响应报文后,会将响应报文中发送者的IP地址和MAC地址的映射关系写入ARP高速缓存中。同时会把硬件地址写入MAC帧中,然后通过局域网把该MAC帧发送到此硬件地址。
当路由器R1收到该MAC帧后,经过解析,得到目的IP2,目的IP不为网关IP,则进行数据转发。经过查询路由表,路由器直接连接主机B,可以进行直接交付,即把目的主机地址转换为具体的硬件地址(使用ARP得到),把数据封装成MAC帧,在发送此帧。