你们好,我是IT售前工程师Bernie。
我们晓得,在网路通讯中主机和主机通讯的数据包须要根据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通讯中,除了须要源目IP地址的封装,也须要源目MAC的封装。
假如一台主机在数据帧封装前不晓得某个目的ip机器的mac地址如何办呢?这时侯就须要通过ARP合同来得知目的主机的MAC地址,完成数据封装。
哪些是ARP
ARP合同的全称是AddressResolutionProtocol,地址解析合同。说直白一点:ARP合同可以拿来按照ip地址找寻mac地址的合同。
ARP合同的工作原理
举个简单的事例,在同一个局域网内有4台主机通过交换机联接。这么,当pc1想要领到ip=192.168.1.4对应的mac地址时。它将进行如下的操作
第1步
它会查询自己的ARP合同表,瞧瞧有没有这个IP绑定的mac地址。我们可以通过cmd下输入arp-a指令查询ip与mac地址的对应关系表。倘若能查询到,则领到这个mac地址进行以太网合同的封装即可。
假如拿不到,就要通过arp广播的方式去寻问同一个网关下的所有主机。
第2步
pc1这台机器开始发送ARP广播,广播信息上面封装了ip地址和mac地址。这儿ip地址为pc4的地址192.168.1.4,mac地址因为不晓得,所以每一位都是0。
因为发送的是ARP广播合同,同一个vlan下的主机全都能接收到这条消息。
第3步
每台主机收到了这条广播消息后,迅速查询下自己的ip地址和mac地址。假如发觉数据包中ip地址是自己的ip,这么就第一时间更新自己的ARP表,将PC1的ip\mac地址做更新。之后,将自己的mac地址借助时隙的方式返回给pc1。
第4步
pc1收到响应回去的mac地址,立刻更新到自己的ARP表中。同时,将IP数据包用这个mac地址为目的mac地址封装成帧与pc4通讯。
不同网关之间的ARP合同
换一个思路,假如pc1和pc4不在同一个网关,怎么能够领到pc4的mac地址呢?
例如右图,pc1和pc2\pc3在同一个网关,并且和pc4\pc5不在同一个公网。
很显著,pc1和pc4是不能直接使用ARP合同的,这么这就要使用ARP代理路由了。代理路由可以将pc1的广播转献给pc4/pc5,之后在响应时pc4也要依靠于ARP代理路由将mac地址传给pc1。
ARP数据包
为了让你们更好的理解ARP合同以及广播和时隙的概念,我们来看一下用抓包工具抓到到的真实网路中的ARP过程,通过数据包的形式来呈现,地址信息如下,部份MAC信息隐去。
恳求包
响应包
剖析
Hardwaretype:硬件类型,标示链路层合同
Protocoltype:合同类型,标示网路层合同
Hardwaresize:硬件地址大小,标示MAC地址宽度,这儿是6个字节(48bti)
Protocolsize:合同地址大小,标示IP地址宽度,这儿是4个字节(32bit)
Opcode:操作代码,标示ARP数据包类型,1表示恳求,2表示回应
SenderMACaddress:发送者MAC
SenderIPaddress:发送者IP
TargetMACaddress:目标MAC,此处全0表示在恳求
TargetIPaddress:目标IP
总结
OSI模型把网路工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层。在通过以太网发送IP数据包时,须要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头。ARP合同在TCP/IP模型中属于IP层(网路层),在OSI模型中属于链路层。
我是IT售前工程师Bernie,欢迎关注!上期见~