在脑海中一直有个疑问,在网络上发送信息的时候为什么既要有IP地址还要有MAC地址,IP是唯一的,MAC地址也是唯一的,用一个难道不行么?

  

  既然每个以太网设备在出厂时都有一个唯一的MAC地址了,那为什么还需要为每台主机再分配一个IP地址呢?或者说为什么每台主机都分配唯一的IP地址了,为什么还要在网络设备(如网卡,集线器,路由器等)生产时内嵌一个唯一的MAC地址呢?主要原因有以下几点:(1)IP地址的分配是根据网络的拓朴结构,而不是根据谁制造了网络设置。若将高效的路由选择方案建立在设备制造商的基础上而不是网络所处的拓朴位置基础上,这种方案是不可行的。(2)当存在一个附加层的地址寻址时,设备更易于移动和维修。例如,如果一个以太网卡坏了,可以被更换,而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无须换一个新的网卡。(3)无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP(Address Resolution Protocol:地址解析协议)负责将IP地址映射到MAC地址上来完成的。下面我们来通过一个例子看看IP地址和MAC地址是怎样结合来传送数据包的。

假设网络上要将一个数据包(名为PAC)由北京的一台主机(名称为A,IP地址为IP_A,MAC地址为MAC_A)发送到华盛顿的一台主机(名称为B,IP地址为IP_B,MAC地址为MAC_B)。这两台主机之间不可能是直接连接起来的,因而数据包在传递时必然要经过许多中间节点(如路由器,服务器等等),我们假定在传输过程中要经过C1、C2、C3(其MAC地址分别为M1,M2,M3)三个节点。A在将PAC发出之前,先发送一个ARP请求,找到其要到达IP_B所必须经历的第一个中间节点C1的MAC地址M1,然后在其数据包中封装(Encapsulation)这些地址:IP_A、IP_B,MAC_A和M1。当PAC传到C1后,再由ARP根据其目的IP地址IP_B,找到其要经历的第二个中间节点C2的MAC地址M2,然后再将带有M2的数据包传送到C2。如此类推,直到最后找到带有IP地址为IP_B的B主机的地址MAC_B,最终传送给主机B。在传输过程中,IP_A、IP_B和MAC_A不变,而中间节点的MAC地址通过ARP在不断改变(M1,M2,M3),直至目的地址MAC_B。

  综合上面所述,我们可以归纳出IP地址和MAC地址相同点是它们都唯一,不同的特点主要有:

  1. 对于网络上的某一设备,如一台计算机或一台路由器,其IP地址可变(但必须唯一),而MAC地址不可变。我们可以根据需要给一台主机指定任意的IP地址,如我们可以给局域网上的某台计算机分配IP地址为192.168.0.112 ,也可以将它改成192.168.0.200。而任一网络设备(如网卡,路由器)一旦生产出来以后,其MAC地址永远唯一且不能由用户改变。

  2. 长度不同。IP地址为32位,MAC地址为48位。

  3. 分配依据不同。IP地址的分配是基于网络拓朴,MAC地址的分配是基于制造商。

  4. 寻址协议层不同。IP地址应用于OSI第三层,即网络层,而MAC地址应用在OSI第二层,即数据链路层。 数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过MAC地址),而网络层协议使数据可以从一个网络传递到另一个网络上(ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络)。

 

参考:http://www.net.cn/service/faq/yuming/url/200704/2100.html

最新文章

  1. Java 多线程下的单例模式
  2. myEclipse中新建的项目导入到Eclipse之后项目出现一个红色的叉叉
  3. linux 的useradd 命令的p选项
  4. Java多线程中的进程,线程,并行,并发
  5. STM32f103------按键处理
  6. Java并发编程总结4——ConcurrentHashMap在jdk1.8中的改进(转)
  7. openwrt教程 第一章 物联网&openwrt开发概述
  8. Js拾忆
  9. 微信小程序--swiper组件
  10. PHP autoload自动加载机制
  11. C 语言 - 分支、跳转和循环语句
  12. BZOJ2816:[ZJOI2012]网络——题解
  13. TestNG 四 测试方法之工厂
  14. Youth Is Not a Time of Life
  15. MBT简述:基于模型的测试
  16. vs2017 出现“文件中的类都不能进行设计,因此未能为该文件显示设计器”问题处理
  17. elementaryos必装软件
  18. Git实用指南
  19. 【题解】Luogu P5471 [NOI2019]弹跳
  20. SQL语句操作数据试题

热门文章

  1. 20155201 实验四《Java面向对象程序设计》实验报告
  2. CentOS7.2 安装Tomcat
  3. render:h => h(App) 是什么意思?
  4. linux 查看日志最后几行
  5. git 沙河游戏节点图, 自由沙盒模拟git, 各类交互git命令
  6. 安装GraphicsMagick
  7. 【Demo】CSS3 动画 加载进度条
  8. windows下的IO模型之事件选择(WSAEventSelect)模型
  9. UVA-11183 Teen Girl Squad (最小树形图、朱刘算法模板)
  10. ossim中Spot5模型bug修复