在上文中,我们提到了IP地址和MAC地址都是用来唯一标识网络中的设备的。在以太网中,通信的每台设备都得有一个IP地址和一个MAC地址。IP地址属于OSI七层模型中的第3层网络层的概念,MAC地址则是第2层数据链路层的概念。

MAC地址是设备出厂时候就自带,而IP地址是需要我们手动去配置的。当然也可以是从服务器动态获取,这涉及到DHCP的知识,本系列中所有的IP地址都是手动配置的。

如下图所示,是Windows下一块网卡的配置信息。

1 TCP/IP协议族与OSI模型

本文是讲述TCP/IP协议族中的第一个协议--ARP协议,那么什么是TCP/IP协议族呢?其实TCP/IP协议族,可不止是TCP协议和IP协议这两种,而是一组协议。

并且这些协议是分层的,如下图:物理层、网络层、传输层、应用层。每层完成不同的功能,且与其他层是独立的。

通常我们会把TCP/IP协议族与OSI七层模型作比较,如下图所示。可以看到TCP/IP协议族分为四层,而OSI模型为七层,两者之间的映射关系如下图。

在下图中,我们还举例不同层级的一些常用协议,可以看到本文讨论的ARP协议位于网络层,OSI模型的第三层。

2 初识ARP

在网络(没有特殊说明,我们都以以太网代表网络)通信中,我们往往只知道对方的IP地址,并不知道对方的MAC地址。这样在通过真正的底层网络(以太网)发送数据时,根本没法封装二层的报头。

而我们的底层网络(以太网)它可不认识IP地址,在它眼里只有二层报头,只认MAC地址,IP地址什么的,对它而言都是透明的。

为了解决这个问题,就引入了ARP协议,该协议的设计初衷,就是通过它,可以找到以太网中某台设备IP地址对应的MAC地址。当然了,如果不是以太网,也有类似的协议,去解决这个问题,比如ATM网络对应的协议就是ATM-ARP。

3 ARP数据包

(1)ARP与OSI模型

ARP的数据包是被直接封装在以太网帧头上的,以太网用0x0806来表示ARP协议,如下图所示。

如上图,Frame 1: 这是wireshark抓包软件自己加上去的,在网络传输中没有这个,传输的是【Ethernet II + ARP】这部分。

(2)关于Ethernet II

任何底层的传输技术都会有自己的数据格式,比如USB、比如Wi-Fi、比如本文的Ethernet(以太网)。对于以太网而言,它的数据格式就是上图所看到的Ethernet II。

Ethernet II分为两部分:Ethernet II Header + Payload,上图中的Payload就是我们的ARP协议。

Header是由三个部分组成,Destination(目的MAC地址)+ Source(源MAC地址)+ Type(载荷的类型,本文载荷类型为ARP,用0x0806表示)。

(3)ARP数据包

ARP的数据包主要是两种类型:Request和Reply,如下图所示。

4 ARP如何解决IP地址到MAC地址的映射关系

举个例子,我有台电脑A【IP:10.74.97.116/24,MAC:54:ee:75:ce:dd:6e】,需要去访问另一台电脑B【IP:10.74.97.125/24】,但是我并不知道它的MAC地址,只知道它与我在同一个网段(不同网段的情形,后面有文章会写道)。

(1)ARP请求

因此A会发送ARP请求到整个网络内所有设备,即广播,封包如下图所示。

Ethernet II中,源MAC为A的MAC【54:ee:75:ce:dd:6e】,目的MAC为广播地址【FF:FF:FF:FF:FF:FF】。

ARP中,Sender IP为A的IP【10.74.97.116】,Target IP为B的IP【10.74.97.125】,Sender MAC为A的MAC【54:ee:75:ce:dd:6e】;Target MAC是本次请求目的,目前不知,用【00:00:00:00:00:00】代替。

(2)ARP响应

在网络中的所有设备都会收到,但是只有B的IP是10.4.97.126,因此只有B才会回复才广播ARP请求,封包如下图所示。

Ethernet II中,源MAC为B的MAC【00:50:56:89:0a:1b】,目的MAC为A的MAC【54:ee:75:ce:dd:6e】。

ARP中,Sender IP为B的IP【10.74.97.125】,Target IP为A的IP【10.74.97.116】,Sender MAC为为B的MAC【00:50:56:89:0a:1b】;Target MAC为A的MAC【54:ee:75:ce:dd:6e】。

(3)ARP表

当A收到B的回复后,就把B的IP地址和MAC地址映射关系写到一个表中记录下来,这个表就是ARP表,在Windwos下可以通过命令arp -a查看(Linux下通过arp -n查看),如下图所示。

[C:\~]$ arp -aInterface: 10.74.97.116 --- 0x5Internet Address      Physical Address      Type10.74.97.125          00-50-56-89-0a-1b     dynamic   10.74.97.127          ff-ff-ff-ff-ff-ff     static    224.0.0.2             01-00-5e-00-00-02     static    224.0.0.22            01-00-5e-00-00-16     static    224.0.0.251           01-00-5e-00-00-fb     static    239.255.255.250       01-00-5e-7f-ff-fa     static    

当后续A还要与B通信时,我们就不用再发ARP请求包了,直接查找ARP表。不过这些记录不是永远存在ARP表中的,都有一个时间,默认时5分钟,时间到了以后,该条ARP表项就会被删除。下次再访问,由于ARP表里没有,因此又得从ARP广播请求开始。

(4)ARP各个字段解释 

字段 解释 举例
Hardware Type 表示底层网络的类型 例如以太网
Protocol Type 表示网络层协议 可以是IPv4或IPv6
Hardware size 表示底层网络地址的长度 比如以太网MAC地址长度为6个字节
Protocol 表示网络层协议地址的长度 比如IPv4协议地址长度为4个字节
Opcode 表示ARP包的类型 比如Request、Reply
Sender MAC Address 发送方的MAC地址  
Sender IP address 发送方IP地址  
Target MAC address 要查询的MAC地址  
Target IP address 目标方的IP地址  

5 gratuitousARP

免费ARP是一张特殊的ARP Reply报文,作用是用来做地址重复检测(DAD)的,数据包格式如下图所示。

从上图,可知gratutious ARP包的Sender MAC和Target MAC相同、Sender IP和Target IP相同。其中相同IP就是我们需要作DAD的IP。

做DAD检测的一方,会把需要DAD检测的IP放到Sender IP和Target IP字段里面,然后广播出去,如果网络中此IP被人使用,那么它会响应此gratutious ARP包,并且是广播回复的。从下图可以看到回复的报文格式。

如果在指定的时间内,DAD检测方没有收到任何回复,那么就认为此IP没有被人使用,自己就可以用了。

写给非网工的CCNA教程(2)第一个协议--ARP协议相关推荐

  1. Linux的内网渗透入门教程:第一节 通过arp欺骗进行网关劫持,截获别人手机的图片(VMware环境)

    免责声明:本人提供的任何工具.文章和知识,只可研究学习,本人对使用这些工具.文章和知识而导致的一切后果,不承担任何法律责任.请大家文明上网,远离网络非法行为! 一.引言 这是本人第一次写博客,据我一位 ...

  2. 网工学习 第十一章 网络管理 网络管理基础 网络管理协议五大标准 SNMP协议 RMON

    目录 第十一章 网络管理 网络管理基础 网络管理协议五大标准 SNMP协议 SNMP协议的操作 SNMPv1 SNMPv2 SNMPv3 管理数据库MIB-2 被管理 对象标识符OID RMON 第十 ...

  3. 对路径的访问被拒绝怎么办_学习了解ACL—扩展访问控制列表,就在网工知识角...

    学网络,就在IE-LAB 国内高端网络工程师培养基地 基于ACL过滤telnet和特定的网段信息 什么是访问控制列表(ACL)? 应用于路由器接口的指令列表,用于指定哪些数据包可以接收转发,哪些数据包 ...

  4. ipsec协议_网工知识角轻松学网络|三分钟了解PPPOE协议

    学网络,就在IE-LAB 国内高端网络工程师培养基地 PPPOE( Point-to-PointProtocol Over Ethernet)以太网上的点对点协议,是将点对点协议(PPP)封装在以太网 ...

  5. esxi管理端口_网工知识角|一分钟轻松了解华为端口安全机制

    学网络,就在IE-LAB 国内高端网络工程师培养基地 为防止MAC地址洪泛攻击,防止未经允许的设备访问网络,并增强安全性.通过端口安全机制,录连接到交换机端口的以太网MAC地址,只允许某个或者某些合法 ...

  6. 只会用ping测试网络通不通?高级网工还会这么用

    今天咱们来聊聊PING命令.作为网工应该都是耳熟能详,PING作为ICMP协议工具之一,算是一个使用率很高的命令. 它的作用: 用来检测网络的连通情况和分析网络速度 根据域名得到服务器IP 根据pin ...

  7. 交换机虚拟化和堆叠的区别_网工知识角|一分钟记熟NFV网络功能虚拟化技术介绍...

    点上方蓝字关注,每天都有新收获! 学网络,就在IE-LAB 国内高端网络工程师培养基地 NFV网络功能虚拟化(Network Functions Virtualization),是一种网络架构的概念, ...

  8. vlan配置实例详解_网工知识角|MUXVLAN技术详解,基本原理一篇搞定

    学网络,就在IE-LAB 国内高端网络工程师培养基地 MUX VLAN(Multiplex VLAN )提供了一种通过VLAN进行网络资源控制的机制.通过MUX VLAN提供的二层流量隔离的机制可以实 ...

  9. python实现局域网攻击软件_使用python的scapy库进行局域网内的断网攻击(基于ARP协议)...

    (使用python scapy库进行网络攻击) ARP协议 ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行. ARP攻击的局限性: ARP攻击仅能在以太网( ...

  10. 计算机网络的super super easy 教程 | IP协议 及 arp协议

    网络层:这两个协议只是打包方式及使用材料不相同 ip协议 arp协议(路由器 电脑查看):只看四个地址   源mac   目的mac(不知道的情况下用00:00:00:00:00:00填充   表示我 ...

最新文章

  1. linux下i2c设备驱动程序,Linux I2C 设备驱动
  2. openfiler 工具栏和快捷方式
  3. Retrofit 上传文件显示进度及踩坑记录
  4. MySQLdb的安装
  5. 光电转换器有什么作用?光纤收发器如何保养?
  6. shell 判断文件是否存在,没有则创建
  7. void 型指针的高阶用法,你掌握了吗?
  8. 3 SAP STMS跨服务器传请求号
  9. 红橙Darren视频笔记 代理模式 动态代理和静态代理
  10. 不修改代码就能优化ASP.NET网站性能的一些方法
  11. Redhat 设置cntlm代理步骤
  12. 模糊控制完全理解系列(二)—— 模糊集合论基础之模糊集基础概念
  13. 静态路由 直连路由 拓扑
  14. Java 开发微信公众号(订阅号)
  15. 关于网络渗透的过程以及感想记录
  16. Qt编写安防视频监控系统13-视频存储
  17. MyEclipse中怎么修改项目访问路径
  18. 第六章:项目管理的三要素
  19. 服务器阵列状态显示verify,[转载]转载:关于RAID--Build/VerifyClearQuick Init众说
  20. 【Python】如何通过官网下载和安装PythonPyCharm(Windows系统)

热门文章

  1. 大规模分布式系统概念介绍
  2. 北京理工大学—计算机专业课程资源
  3. 【Scratch案例实操】Scratch萌宠运动会 scratch编程案例教学 scratch创意编程 少儿编程教案
  4. Windows10 64位系统安装EPLAN P8 2.6教程
  5. uniapp微信公众号h5微信授权登录
  6. OpenCL学习入门
  7. Java基础——集合List+Set+泛型+Map
  8. Windows下LaTeX安装教程
  9. 机顶盒天线接头怎么接_户户通天线怎么安装图解
  10. 中国计算机设计大赛作品(附代码与设计书,答辩PPT)