IP 地址与MAC硬件地址

我们都知道数据通信要使用IP地址加MAC地址,两个地址缺一不可,下为原理图:

1.下面介绍计算机A与计算机B通信的过程

  • 交换机基于数据帧的MAC地址转发数据帧,路由器基于数据包的IP地址转发数据包;
  • 数据包在传输过程不变,经过网络设备数据帧要用新的物理层(MAC)地址重新包装;
  • MAC地址决定了数据帧在网络设备中转过程中下一站由哪个设备接收,而IP地址决定了数据包的起0点和终点。

例如图中的使用M表示MAC地址,由于计算机A所处的10.0.0.2网段与计算机B所处的12.0.0.2网段不同,所以A与B不能直接通信,需要借助路由器中转。

首先,计算机发出数据帧1,里面标明了源IP地址与目标IP地址、 源MAC地址与目标MAC地址,这样数据帧1就可以通过交换机准确传输到目标MAC地址M2,即路由器Router1处;

路由器通过查找路由表确定到12.0.0.2的网段的路径,并把该数据帧发现通向该路径的M3接口处,M3接口再对数据帧1进行封装改变源MAC地址和目标MAC地址,IP地址不变并发出数据帧2;

以此类推,最终数据帧传输到12.网段的路由器上,该路由器再通过同网段的交换机把数据帧3发送到计算机B处,完成通信。

注意

  • 我们把数据传输过程中数据帧中不变的部分:即数据+IP地址(目标地址与源地址)称为数据包
  • 数据包加上MAC地址(目标地址与源地址)之后整体称为数据帧,数据帧中的MAC地址过一个网络设备变一次。
  • IP地址与MAC地址区别:IP地址决定数据包最终要到达的计算机(终点);MAC地址决定中转过程中下一站到哪个设备(中转站)去。

应用

  • 如果在交换机Switch0这个网段中的PC2中安装代理服务器(比如CCProxy)来控制该网段的其他计算机是否能上网;

  • 当在同一网段中,可以直接通过MAC地址通信,所以PC2中的代理服务器只需要设置本网段中的哪些MAC地址可以上网,就可以实现对本网段中的PC1、 PC2实现上网控制。

  • 当在不同网段时,比如使用PC2控制Switch1这两个段的所有计算机是否能上网,则在代理服务器中不仅要设置哪些MAC地址能上网,而且还要设置哪些IP地址能上网-。


2.ARP&RARP协议

ARP简介

  • 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
  • 每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
  • 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。

ARP MAC地址欺骗

前面说过,网络层一共使用四个协议:IP、 ARP、 ICMP、 IGMP协议。ARP协议负责把IP地址解析成MAC地址,依靠广播作为解析方式。所以说网上的广播时避免不了的。

如下图所示:

四台计算机PC0PC3通过交换机连接在一起,四台计算机的物理地址分别为M1M4;如果PC0的10.0.0.2地址想ping(访问)PC1的10.0.0.3地址,那么PC0必须知道PC1的MAC地址。

方法为PC0发布一个同网段所有计算机都能收到的广播,广播内容为询问10.0.0.3地址对应的MAC地址。PC1收到之后就会给PC0发送相应的MAC地址信息,PC0就会把收到的该MAC地址当做10.0.0.3的MAC地址。随后通信发出的数据帧目标MAC地址都为该接收到的MAC地址即M2。

正因为ARP通过广播解析通信方MAC地址的方式造成了许多的网络安全问题。比如常说的抓包就是利用ARP协议的这种安全漏洞。

造成安全漏洞的原因为

  • PC1告诉PC0,10.0.0.3对应的MAC地址为M2,PC0收到之后不做验证就直接确信并使用该MAC地址作为目标MAC地址发送数据了。我们都知道交换机在转发数据的时候,只会把数据转发给目标地址不会转发给其他连接交换机的非目标地址,这样其他计算机是无法截获通信信息的。

  • 如果PC3想截获PC0与PC1之间通信的数据包,当PC0发出广播询问目标MAC地址时,PC3也收到了广播信息,在PC1给PC0发送完正确MAC地址M2后,PC3再向PC0发送错误MAC地址M4,由于PC0并不会检验收到的目标MAC地址是否正确,所以M4会覆盖M2成为PC0确信的目标MAC地址。

  • 随后PC0开始通讯,就会把数据发送到PC3中,PC3再把数据发送给PC1 。通过这样一个MAC地址欺骗,所有流经MAC地址M1和M2的数据帧都经过了 M4使窃听数据成为可能。

应用举例:P2P终结者

如图所示:四台计算机通过一个交换机连接在一起,再通过一个路由器连接网络,其中PC3的MAC地址为M2,路由器的MAC地址为M1。正常情况下PC0PC2访问网络时,由于网络与它们本身不在同一个网段上,所以需交由路由器的网关进行中转,路由器的网关地址为M1;如果PC3想控制PC0PC2的上网带宽,就可以通过安装P2P终结者类似的软件实现。

P2P终结者的原理为:当PC0PC2解析路由器网关地址时,路由器告诉它们是M1,PC3通过MAC地址欺骗再告诉它们假的路由器网关地址M2,这样PC0PC2包含上网请求的数据包都会发送到假网关地址M2即PC3处(即PC0PC2所有的流量都会经过M2),PC3知道路由器的真实网关地址为M1,PC3先对PC0PC2发来数据包进行处理再把这些数据包转发给真正的路由器网关地址M1。通过这种方式实现对PC0~PC2上网带宽的管控。

如果PC0~PC2直接解析路由器网关地址访问网络,无论PC3是无法管控它们的上网,所以P2P终结者这些软件必须配合ARP欺骗来实现。

网络执法官

网络执法官的功能为:同一网段内的一台计算机(比如PC3),可以控制其他计算机(比如PC0~PC2)是否能上网,或者其中一台计算机(如PC0)能与哪些计算机通信,不能与哪些计算机通信。

实现原理:当PC3中安装了网络执行官软件后,PC0PC2想访问网络并解析路由器网关地址时,PC3告诉它们一个不存在的MAC地址M8;随后PC0向M8发送数据帧时,交换机收到后经过查找发现M8地址不存在,要求PC0重发数据帧,又查询不到M8地址,最后该数据帧被丢弃,于是PC0PC2谁也上不了网。

解决方案:安装ARP防火墙

沿用上图在PC0中安装ARP防火墙之后,PC0想访问网络并解析路由器网关时,当接收到第一个由路由器发出的真正的网关地址M1时就在PC0中把该地址写死,之后再接受到其他MAC地址也不覆盖M1,由此实现防止ARP地址欺骗。

仿真验证

由于高版本Windows系统如Win7、 Win10对ARP修改操作有所限制,所以使用虚拟机Windows2003仿真。

  • 在命令行窗口输入命令:
arp -a

可以查看相应计算机连接的多个路由器的网关及其对应的MAC地址。

  • 随后与其他网络的一个地址建立通信:
ping 202.99.168.8

发现当前是可以与其他网络中的地址建立通信的。说明该计算机内缓存的路由器网关对应的物理地址是正确的。

再次查看计算机缓存的网关及其对应MAC地址。

  • 然后修改该路由器网关192.168.80.1对应的MAC地址,即把原来的00-50-56-c0-00-08改为00-50-56-c0-00-09,并再次查看计算机缓存的网关及其对应的MAC地址。

arp -s 192.168.80.1 00-50-56-c0-00-09

arp -a


![image-20200121233402793](https://gitee.com/ahuntsun/BlogImgs/raw/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/4.6IP%E5%9C%B0%E5%9D%80%E4%B8%8EMAC%E7%A1%AC%E4%BB%B6%E5%9C%B0%E5%9D%80/11.png) 可以看出,修改后的网关192.168.80.1对应的MAC地址变为静态“static”,即以后进行数据通信都以该管理员指定的MAC地址为准,不再使用ARP解析的MAC地址。 * 最后再次与其他网络的202.99.168.8地址进行通信:

ping 202.99.168.8


![image-20200121234015932](https://gitee.com/ahuntsun/BlogImgs/raw/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/4.6IP%E5%9C%B0%E5%9D%80%E4%B8%8EMAC%E7%A1%AC%E4%BB%B6%E5%9C%B0%E5%9D%80/12.png) 可以发现现在无法建立通信了,这里管理员指定的网关对应MAC相当于上问题到的ARP MAC地址欺骗。不过与同网段的其他计算机还是能通信的,如与192.168.80.12:

ping 192.168.80.12


![image-20200121234257058](https://gitee.com/ahuntsun/BlogImgs/raw/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/4.6IP%E5%9C%B0%E5%9D%80%E4%B8%8EMAC%E7%A1%AC%E4%BB%B6%E5%9C%B0%E5%9D%80/13.png) **现实案例** ![image-20200121235521492](https://gitee.com/ahuntsun/BlogImgs/raw/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/4.6IP%E5%9C%B0%E5%9D%80%E4%B8%8EMAC%E7%A1%AC%E4%BB%B6%E5%9C%B0%E5%9D%80/14.png) 一家公司的某单位有三台服务器PC0~PC2,其中只有服务器PC2上不了网,其他两台服务器都能上网。首先排除了物理层的原因,最后确认问题是:PC2没有正确地解析到网关的MAC地址。如何知道该计算机缓存了错误的网关MAC地址呢?可以在能上网的计算机PC1与不能上网的计算机PC2的命令行窗口中都输入:arp -a,分别查看同一网关对应的MAC地址,通过比较可得知PC1中正确的网关对应MAC地址与PC2中错误的网关对应地址。 -- -- ### 逆向ARP:RARP **RARP** ![image-20200121213001651](https://gitee.com/ahuntsun/BlogImgs/raw/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/4.6IP%E5%9C%B0%E5%9D%80%E4%B8%8EMAC%E7%A1%AC%E4%BB%B6%E5%9C%B0%E5%9D%80/15.png) 物理地址通过RARP协议得到IP地址的过程叫做地址请求。计算机的IP地址默认是自动获得的,也就是计算机可通过自身物理地址申请对应的IP地址,这正好与ARP解析相反,这叫做逆向ARP即RARP,计算机请求IP的地址的过程就是逆向ARP的过程。

IP 地址与MAC硬件地址的更多相关文章

  1. 关于IP地址与MAC地址(网卡硬件地址)的区别小谈

    IP地址是指Internet协议使用的地址,而MAC地址是Ethernet协议使用的地址. IP地址与MAC地址之间并没有什么必然的联系,MAC地址是Ethernet NIC(网卡)上带的地址,为48 ...

  2. 计算机网络之IP地址与MAC地址

    IP地址 IP地址(Internet Protocol Address): 缩写为IP Adress,是一种在Internet上的给主机统一编址的地址格式,也称为网络协议(IP协议)地址. 它为互联网 ...

  3. java获取服务器IP地址及MAC地址的方法

    这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下   本文实例讲述了 ...

  4. 转:数据包经由路由转发时源、目的IP地址及MAC地址变化情况

    数据包经由路由转发时源.目的IP地址及MAC地址变化情况.  IP数据包经由路由转发的时候源ip,目的ip,源MAC,目的mac是否发生改变,如何改变?   A—–(B1-B2)—–(C1-C2)—— ...

  5. Java根据ip地址获取Mac地址,Java获取Mac地址

    Java根据ip地址获取Mac地址,Java获取Mac地址 >>>>>>>>>>>>>>>>>&g ...

  6. 为什么同时需要IP地址和MAC地址

    每个以太网设备在出厂时都有一个唯一的MAC地址,为什么还需要为每台主机再分配一个IP地址?或者说每台主机都分配唯一的IP地址,为什么还要在网络设备(如网卡,集线器,路由器等)生产时内嵌一个唯一的MAC ...

  7. IP,IP地址,mac地址

    IP地址与IP是两个不同的概念.单独讲IP,是指IP协议 IP地址分为三类:单播地址(目的为单个主机):多播地址(目的端为同一组的所有主机):广播地址(目的端为网络上所有给定的主机) ip地址由网络和 ...

  8. 华为S5700设置vlan,并绑定电脑的IP地址与mac地址。

    要求是设置两个vlan,10和20.交换机下的10网段和20网段的电脑在两个vlan当中.20网段的ip地址与mac地址绑定,从而实现下面的电脑更改ip地址或者不明来源的电脑不能连接到交换机. 1.s ...

  9. JS获取客户端IP地址、MAC和主机名【转】

    JS获取客户端IP地址.MAC和主机名 引用:JS获取客户端IP地址.MAC和主机名的7个方法汇总 利用搜狐接口 <html> <head> <meta http-equ ...

随机推荐

  1. 编码,基础数据类型 int str bool,for循环

    一.编码: ASCII: 8位  1个字节  其实是7位,首位全部是0,创造者留出一位,以便后续使用; gdk :    16位 2个字节 国标码 只能识别汉语和英语 英语:8位 1个字节    汉语 ...

  2. [SDOI2019]热闹又尴尬的聚会(图论+set+构造)

    据说原数据可以让复杂度不满的暴力O(Tn^2)过掉……O(Tn^2)方法类似于codeforces一场div2的E题 有一种比较好的方法:每次找出原图G中度最小的点加入q,然后将相邻的点加入新图G'. ...

  3. [徐州网络赛]Longest subsequence

    [徐州网络赛]Longest subsequence 可以分成两个部分,前面相同,然后下一个字符比对应位置上的大. 枚举这个位置 用序列自动机进行s字符串的下标转移 注意最后一个字符 #include ...

  4. python脚本实现自动安装nginx

    本文python脚本实现自动化安装是源码安装.实现任意版本安装,默认版本是1.13.11,也可以更改默认版本,手动配置安装目录. 环境:Ubuntu16.04,python3以上版本,Ubuntu自带 ...

  5. PAT甲级——1008 Elevator

    PATA1008 Elevator The highest building in our city has only one elevator. A request list is made up ...

  6. SpringBoot中使用task实现定时任务

    定时任务实现的几种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行, ...

  7. 吴裕雄--天生自然python学习笔记:python下载安装各种模块的whl文件网址

    python下载安装各种模块的whl文件网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

  8. 在python的web框架Django中使用SQL Server

    在pycharm中安装 安装pyodbc和Django——pyodbc是一个用python写的ODBC引擎 安装Django-pyodbc-azure                  在后方网址中查 ...

  9. HTTP请求方法及响应码详解(http get post head)

      HTTP是Web协议集中的重要协议,它是从客户机/服务器模型发展起来的.客户机/服务器是运行一对相互通信的程序,客户与服务器连接时,首先,向服务 器提出请求,服务器根据客户的请求,完成处理并给出响 ...

  10. LeetCode Day 10

    LeetCode0020 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序 ...