一、ARP协议

网络设备有数据要发送到另一台网络设备时,必须要知道对方的网络层地址(IP)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通通过目的IP地址而获取目的MAC地址的过程是ARP(Address Resolution Protocol)协议来实现的。
 
ARP协议是二层的广播协议
 

1、ARP原理及流程

1.1.ARP请求

任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。(见图1)

1.2.ARP响应

局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文,这个响应报文包含接收方的IP地址和物理地址。这个报文利用收到的ARP请求报文中的请求方物理地址以单播的方式直接发送给ARP请求报文的请求方。(见图2)

1.3举例

PC1(10.1.1.1)和PC2(10.1.1.2)进行通信,PC1和PC2都不知道大家的mac地址只知道对方的IP地址。

使用arp -a命令查看当前主机的arp缓存表是空的

现使用pc1去ping pc2。在ping完后,我们可以在抓包工具中看到,当PC1发送数据时会先发送ARP请求报文,以广播报的形式发送到局域网后,当pc2检测到IP地址与自己的IP相同,就会发送给PC1响应报文。pc1收到pc2回应的mac地址后,pc1再把数据封装后发送到pc2。
对于ARP响应包来说,源IP,目地IP,源MAC,目地MAC都是知道的。
再用arp -a命令,就可以分别查看到pc1和pc2中都有对方的mac地址。

1.4举例

如下图:在pc1 ping pc2

用pc1去ping pc2时,pc1会发一个arp的广播报文,这时候pc1获取到响应的mac地址是路由器接口GE0/0/0的mac地址,而不是pc2的mac地址。当pc1把数据封装完后发送到网关,网关会跟据自身获取到的ip路由和mac地址进行数据的转发,把数据跟据ip和mac地址发送到pc2。

2、免费ARP可以用来探测IP地址是否冲突。

主机被分配了IP地址或者IP地址发生变化后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP request报文来进行地址冲突检测。
主机A将ARP request广播报文中的目的IP地址字段设置为自己的IP地址,该网络中所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应ARP reply报文。通过这种方式,主机A就能探测到IP地址冲突了。

 总结:

1)网络设备在什么情况下回发送ARP request?
源设备在发送数据给目的设备前,会首先查看自身的ARP缓存,查找ARP缓存是否在目的设备的IP地址和MAC地址的映射。如果存在则直接使用,如果不存在则会发送ARP request。
2)网络设备什么时候会产生免费ARP?
当网络上的一个设备被分配了IP地址或者IP地址发生变化后,可以通过免费ARP来检查IP地址是否冲突。
 

二、ICMP协议

ICMP协议是一个网络层网络控制报文协议。

一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。

如目标不可达时,会反回不可达报文到发送端设备。

就像我们使用ping命令去ping百度一样,测试本机到百度网站的联通性,还会把详细的信息显示出来。

tracert 命令也是常用的检查联通信的命令,它可以测试pc从哪个路由路径到达目的地址。它也是基于ICMP协议的

三、ARP协议和ICMP协议的更多相关文章

  1. TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议

    把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数 ...

  2. ARP协议和DNS协议对比

    DNS是在域名和IP之间进行解析,ARP是在IP和MAC之间解析. ARP协议不需要服务,DNS需要开启服务. ARP协议需要互联的主机处于同一个物理网段之内(即局域网环境)

  3. TCP/IP协议详解笔记——ARP协议和RARP协议

    ARP:地址解析协议 对于以太网,数据链路层上是根据48bit的以太网地址来确定目的接口,设备驱动程序从不检查IP数据报中的目的IP地址.ARP协议为IP地址到对应的硬件地址之间提供动态映射. 工作过 ...

  4. 解释ARP协议和RARP协议

    解释ARP(地址解析协议) 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系. 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主 ...

  5. python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)

    先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...

  6. python语法基础-网络编程-TCP协议和UDP协议

    ###############    网络编程    ############## """ 网络编程 学习了Python基础之后,包括函数,面向对象等,你就可以开发了,你 ...

  7. Bytom BIP-32协议和BIP-44协议

    我们知道HD(分层确定性)钱包,基于 BIP-32:多币种和多帐户钱包,基于 BIP-44:最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,所以我今天就专门整理了一下该协议的内容 ...

  8. TCP协议和UDP协议基础介绍

    TCP协议和UDP协议区别 标签(空格分隔): TCP,udp TCP的三次握手 TCP被称为可靠的数据传输协议,主要是通过许多机制来实现的其中最主要的就是三次握手的功能,当然,TCP传送数据的机制非 ...

  9. HTTP协议和SOCKS5协议

    HTTP协议和SOCKS5协议 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们平时上网的时候基本上是离不开浏览器的,尤其是搜索资料的时候,那么这个浏览器是如何工作的呢?用的又是 ...

随机推荐

  1. Fiddler1 简单使用

    1.Fiddler下载地址:https://www.telerik.com/download/fiddler 2.Fiddler设置: Fiddler是强大的抓包工具,它的原理是以web代理服务器的形 ...

  2. 记一次Metasploit心脏出血漏洞攻击测试

    打开msf框架 msfconsole

  3. 第十八周java实验作业

    实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...

  4. 图论-最短路径 floyd/dijkstra-Find the City With the Smallest Number of Neighbors at a Threshold Distance

    2020-01-30 22:22:58 问题描述: 问题求解: 解法一:floyd 这个题目一看就是floyd解最合适,因为是要求多源最短路,floyd算法是最合适的,时间复杂度为O(n ^ 3). ...

  5. 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(二)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 前面我们介绍了特征选择(Feature S ...

  6. 食物图片变菜谱:这篇CVPR论文让人人都可以学习新料理

    根据 Facebook 的统计,Instgram 上的美食图片数量已经超过 3 亿张.然而,获取食物烹饪方法的途径依然有限,例如,通过烹饪网站或相关教程.怎样能够挖掘丰富食物图片背后的烹饪方法,让每个 ...

  7. Python第十章-模块和包

    模块和包 我们以前的代码都是写在一个文件中, 而且代码也比较短. 假设我们现在要写一个大的系统, 不可能把代码只写到一个文件中, 迫切想把代码写到不同的文件中, 并且能够在一个文件使用另一个文件中代码 ...

  8. zookeeper java代码实现master 选举

    1,master选举使用场景及结构 现在很多时候我们的服务需要7*24小时工作,假如一台机器挂了,我们希望能有其它机器顶替它继续工作.此类问题现在多采用master-salve模式,也就是常说的主从模 ...

  9. 上传到码云时遇到:Incorrect username or password ( access token )

    由于之前上传到 码云时候使用命令:git push -u origin master时出现如下bug Incorrect username or password ( access token ) 时 ...

  10. Win10远程桌面发生身份验证错误,要求的函数不受支持

    昨儿个使用远程桌面,意外发的发现连不上测试环境了.身边的同事也有连不上的.一开始以为是远程机器可能出了问题,但是而后排查确认是自个儿机器问题.原因在与机器前天晚上自动升级了系统补丁,也有部分网友反映了 ...