最近在看书《图解TCP/IP》书中分别谈到了IP和MAC地址。于是我就有两个疑惑,

  • 为什么有了IP地址,我们还要获取MAC地址?
  • 为什么我们初始不直接使用MAC地址作为终点地址?还要那么复杂的先引入IP,再通过ARP获取MAC地址... ...

于是我搜索了一下得到了满意的答案:

然后我们就发现这个问题变得简单了:当年设计 IP 地址的目的是什么呢?当年设计出 IP 地址这个东西,就是因为随着网络中的设备逐渐增多,人们发现路由(也就是寻找数据包从发送方到接收方的路径)变得越来越困难了。于是人们想了一个办法,就是把网络划分成很多个子网。这样,在路由的时候,路由器可以把其他子网看成一个整体来进行计算。对于目的地在其他子网的数据包,路由器只需要让数据包到达那个子网即可,而剩下的工作就由子网内部解决了。虽然这种方法只能让寻找到的路径接近最优而不保证最优,不过它大大减少了路由器的计算量,利大于弊,所以被采用了。

那么为什么我们需要 IP 地址呢?因为如果我们只用 MAC 地址的话,我们会发现路由器需要记住每个 MAC 地址所在的子网是哪一个(不然每一次收到数据包的时候路由器都要重新满世界地去找这个 MAC 地址的位置)。而世界上有 2的48次方个 MAC 地址,这就意味着即使我们给每个 MAC 地址只留 1 字节的储存空间,每个路由器也需要 256 TB 的内存!这显然是不可能实现的。

这就是我们需要 IP 地址的原因了。和 MAC 不同的是,IP 地址是和地域相关的。对于位于同一个子网上的设备,我们给他们分配的 IP 地址前缀都是一样的。这个前缀就像邮政编码一样。这样,路由器过 IP 地址的前缀就能知道这个设备在哪个子网上了。现在,路由器只需要记住每个子网的位置即可,大大减少了路由器所需要的内存。

既然 IP 地址不能去掉,那么能不能去掉 MAC 地址呢?也不能。因为 IP 地址是要设备上线以后,才能根据他进入了哪个子网来分配的,在设备还没有 IP 地址的时候(或者分配 IP 地址的过程中),我们还需要用 MAC 地址来区分不同的设备。

总之,MAC 地址就像自己的 ID 号,而 IP 地址就像带着邮政编码的住址,各有各的用途。所以我们需要两个地址,缺一不可。

https://www.zhihu.com/question/21546408/answer/149670503 @楼宇

网络知识===关于MAC地址和IP不能互相替代,缺一不可的原因的更多相关文章

  1. MAC地址与IP地址的区别

    介绍一下MAC地址的知识,MAC地址和IP地址的区别以及MAC地址在实际应用中所涉及到的安全问题. 一.基础知识 如今的网络是分层来实现的,就像是搭积木一样,先设计某个特定功能的模块,然后把模块拼起来 ...

  2. 网络-数据包在路由转发过程中MAC地址和IP地址,变与不变

    关于MAC地址和IP地址在传输过程中变与不变的问题: 结论:MAC地址在同一个广播域传输过程中是不变的,在跨越广播域的时候会发生改变的:而IP地址在传输过程中是不会改变的(除NAT的时候),总结为 路 ...

  3. mac地址、IP地址和端口号

    看了很多遍,才整理出来我对整个通信过程的理解,大致如下,后期会不断学习补充更正: 在利用TCP/IP协议族进行通信的时候,有三个比较关键的确认身份的信息:mac地址.IP地址和端口号. mac地址是在 ...

  4. mac地址和ip地址要同时存在么?

    刚再整理笔记的时候,突然想到了一个问题,网络中为什么要同时存在mac地址和ip地址呢?那现在就来随便扯扯吧. 这个问题其实是可以分成两个问题的:Q1:如果只有mac地址,没有ip地址可以么? 众所周知 ...

  5. Powershell-获取MAC地址对应IP信息

    因业务需要在DHCP服务器上绑定设备MAC,提示"指定的IP地址或硬件地址正被其他客户端使用",与业务同事沟通之前该设备做过地址保留,具体对应地址遗忘了. 问题描述: a.按照用户 ...

  6. c#中如何获取本机MAC地址、IP地址、硬盘ID、CPU序列号等系统信息

    我们在利用C#开发桌面程序(Winform)程序的时候,经常需要获取一些跟系统相关的信息,例如用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统名称.物理内存等. 首先需要引入命名空间: us ...

  7. 获取客户端网卡MAC地址和IP地址实现JS代码

    获取客户端网卡MAC地址和IP地址实现JS代码 作者: 字体:[增加 减小] 类型:转载   获取客户端的一些信息,如IP和MAC,以结合身份验证,相信很多人都会这样做吧,我们这里用Javascrip ...

  8. js获取本机mac地址,IP地址,计算机名

    <!DOCTYPE HTML> <html> <head> <title>js获取本机mac地址,IP地址,计算机名</title> < ...

  9. c#中如何获取本机用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存

    我们在利用C#开发桌面程序(Winform)程序的时候, 经常需要获取一些跟系统相关的信息, 以下这些代码获取能有些用处. c#中如何获取本机用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统 ...

随机推荐

  1. 新jQuery中attr 与 prop的不同

    使用最新版本jquery,在对checkbox操作时发现 attr属性全选,反选等不起作用,后查发现新版本对标签属性的设置发生了变化. 在高版本的jquery引入prop方法后,什么时候该用prop? ...

  2. 【bzoj3772】精神污染 STL+LCA+主席树

    题目描述 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区,是日本西部门户 ...

  3. CentOS 磁盘阵列(raid10)

    1.通过mdadm命令进行磁盘阵列部署 mdadm是multiple devices admin的简称,它是Linux下的一款标准的软件 RAID 管理工具 如果没有mdadm命令,通过yum安装一下 ...

  4. 【刷题】BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式

    Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". ...

  5. CF9d How many trees?

    题意:求节点数为n的,高度大于等于h的二叉树的个数. 题解: 一开始没看到二叉树的限制,,,想了好久.因为数据范围很小,所以可以考虑一些很暴力的做法. 有2种DP方式都可以过. 1,f[i][j]表示 ...

  6. Efficient Deblurring for Shaken and Partially Saturated Images

    Try the online demo: http://willow-fd.rocq.inria.fr/unshake/ Overview One common feature of “shaken” ...

  7. java 在centos6.5+eclipse环境下调用opencv实现sift算法

    java 在centos6.5+eclipse环境下调用opencv实现sift算法,代码如下: import org.opencv.core.Core; import org.opencv.core ...

  8. 在某OC字符串中,搜索指定的某字符串:-rangeOfString:

    NSString *originalStr = @"搜索:王者拜仁!"; NSString *subStr = @"搜索:"; // 在originalStr这 ...

  9. swift4.0闭包

    http://blog.csdn.net/bddzzw/article/details/78276054

  10. js 获取当前链接和获取域名

    <script language="javascript"> //获取域名 host = window.location.host; host2=document.do ...