戏说不是胡说:高铁换乘之 IP 地址与 MAC 地址

网络 通信技术
当数据包到达局域网后,完全可以直接送到对应的 IP 地址主机,为什么还要询问一下对应 IP 主机的 MAC 地址?

 

[[433809]]

文末本文转载自微信公众号「飞天小牛肉」,作者飞天小牛肉 。转载本文请联系飞天小牛肉公众号。

一个邮递员拿着地址详细到教室的一封信,收件人是小明,教室里没有重名的,邮递员问 “小明的学号是多少?”,小明站起来回答 “12345”,然后小明坐下,然后邮递员说 “学号 12345 的过来拿信”,小明站起来去拿信。好像有点多此一举?

问题:

当数据包到达局域网后,完全可以直接送到对应的 IP 地址主机,为什么还要询问一下对应 IP 主机的 MAC 地址?

或者换种问法:

既然有了 IP 地址用来唯一标识这台计算机了,那还需要 MAC 地址干啥?

首先,我来简单的解释下 MAC 地址所属的数据链路层和 IP 地址所属的网络层的用途:

两个计算机在计算机网络之间进行通信,不可能就一条数据链路,对吧,它会经过很多条数据链路,也可能还要经过很多的通信子网,那么网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送。

然后,需要明白的是,一台计算机向网络中的另一台计算器进行通信的时候,需要知道的其实就是三个地址:

  • 起点地址
  • 下一跳的地址
  • 终点地址

IP 地址负责起点地址和终点地址,下一跳的地址由 MAC 地址负责。

结合这两点,我们来归纳下数据链路层和网络层的关系:

通俗来说,数据链路层的作用很简单,它是无脑的,只负责在两个相邻节点之间传送数据,它并不知道它所传送的数据最终目的地是哪。而网络层便是它的大脑,网络层负责指定起点地址和目的地址,并告诉数据链路层该走哪条路线。

看下图,网络层告知了 1-2-3 路线,那么数据链路层就会根据 MAC 地址依次找到 1、2、3,并在他们之间传输数据:

1)网络层指定了从哪个主机(「源 IP 地址」)发送到哪个主机(「目的 IP 地址」)。源 IP 地址和目标 IP 地址在传输过程中是不会变化的

2)而数据链路层则是根据 MAC 地址在一个接一个的区间中进行传输的,每个区间内的出发地址即「源 MAC 地址」,每个区间内的目的地址即「目的 MAC 地址」。显然,随着数据的传输,源 MAC 地址和目的 MAC 地址会不断的发生变化

再举个形象点的例子:

我们把数据链路层看作一个乘坐高铁从苏州到南京,再在南京转乘到北京,再在北京转乘到西藏的旅客(一个没脑子的机器人),那么网络层就相当于每个车站的工作人员,在数据链路层这个没脑子的机器人每次转乘时,网络层就会为其购买一张标有下一个 MAC 地址的车票。因此,即使数据链路层(旅客)不知道往哪走也没有关系,工作人员(网络层)会给你做出指引:

如果没有 MAC 地址,仅仅只有 IP 地址,能不能完成这些事情?

从理论上来说,如果 IP 地址够用,交换机也支持根据 IP 地址进行转发,我们只需要在 IP 数据报中加一个 “下一跳 IP 地址” 的字段就行了,MAC 地址确实并不是必要的。

But,从宏观来说,IP 地址只管上层建筑即路线规划,底层具体走的逻辑交给 MAC 地址来做,这样其实才符合 TCP/IP 协议体系这种分层的理念!

所以,这种设计并非多次一举,而是为了符合最根本的设计理念。

 

责任编辑:武晓燕 来源: 飞天小牛肉
相关推荐

2010-08-20 09:00:42

控制列表

2009-07-24 10:38:35

ASP.NET获取MA

2013-09-27 11:31:18

IP地址MAC地址

2024-04-16 08:26:18

IP地址MAC地址

2022-09-13 08:44:02

IP网络MAC地址

2023-04-17 09:32:29

IP地址MAC

2011-07-11 15:20:15

MAC地址java

2019-09-22 20:52:30

TCPIP中继

2013-03-27 15:46:06

2015-07-10 09:08:52

IP地址IP地址冲突

2010-01-07 15:50:06

Redhat企业版

2024-01-23 16:40:31

MAC地址IP地址子网掩码

2015-09-28 09:58:24

网络IP地址IP

2022-09-11 19:55:46

MAC 地址WiFi 地址

2009-09-18 19:21:17

C#接口

2012-04-25 14:31:12

2019-11-11 07:59:48

IP地址子网路由器

2010-08-30 16:37:48

DHCPIP地址

2010-06-21 17:51:53

Linux Arp命令

2010-08-13 10:31:06

点赞
收藏

51CTO技术栈公众号