百科问答小站 logo
百科问答小站 font logo



有了 IP 地址,为什么还要用 MAC 地址? 第1页

  

user avatar   wo-jiu-kan-kan-bu-shuo-hua-58-7 网友的相关建议: 
      

有个路由器固件叫Rosuter OS,这个路由不需要电脑设置相同网段的IP地址,其工具winbox直接能搜索出路由的mac地址,然后连Mac地址进入路由配置。


user avatar   taoshu0 网友的相关建议: 
      

看了一下,大家说的基本都是教科书上的内容(或者演绎)。今天给大家说点教材上没有说的内容。

点对点链路

最早的网络是「猫」+电话线。一台电脑接一个猫,连一条电话线。理论上只要完成拨号,双方就能进行通信。这个过程跟两个人电话没什么两样。

因为是一条电话线的两头,这边电脑发出的所有信号自然会被另一端的电脑收到。所以不需要给双方指定 MAC 地址或者 IP 地址之类东西。这种链路叫点对点链路

Mesh 拓朴

点对点链路的优点是简单清晰,但缺点也很明显——不支持连接多台电脑。如果你想连多台电脑,就需要给电脑配置多个猫。如果有多台电脑需要相互连接,就需要每台的电脑的每个猫都连到一起。这样做不但成本很高,管理负担也非常重。这种连接方式叫全网状(Full Mesh)拓朴网络。

Mesh网络也不是一无是处,它最大的优点就是可靠性高。网络中的部分链接出现故障不会影响到整个网络。但成本高,维护困难的缺点真是抗不住。

成本高归高,计算机之间还是以点对点的方式进行通信。所以这类网络本质上跟第一种点对点链路没有区别。设备之间的通信也不需要设置 MAC 或 IP。

总线网络

为了降低成本,人们想了另外一种连接方式,总线网线。

之所以成本低,是因为所有的电脑只需要接一个猫,然后所有猫接到同一条网线上(叫总线,早期使用的是同轴电缆)。

CSMA/CD

组网成本确实降低了,但使用成本却上升了。如果上图中A想给B发数据,可以启动自己的猫开始发送。如果此时C也给D发数据,那就会形成干扰,最终谁的数据也发不出来。为了解决这个问题,人们规定,如果想发数据,必须先使用自己的猫「听」一下网线上有没有其他电脑正在通信。如果有,就自觉等待一段时间,然后再检查。这套机制后来演化了成载波侦听多路访问/碰撞检测(CSMA/CD)机制。教科书上都会讲这个CSMA/CD。

MAC 地址

解决了冲突问题,总线网络就能工作吗?不能!我们在前面讲的点对点链路两边各有一台电脑,收发双方非常明确,不需要指定MAC或者IP。但在总线网络中,所有电脑共享一条电缆,可以同时接收网络上的全部信号。那大家怎么确定数据是发给自己的呢?

为了解决这个问题,人们发明了数据帧的概念。帧是发送数据的最小单位。当时是用很多链接层协议,以太网只是后面设计的一种。但不同的帧结构大同小异,核心都包含目标地址、源地址和数据三部分。

这里首次出现了地址这个概念。正是因为总线网线中所有设备共享总线,所以需要通过引入地址的概念来区分不同的设备。对于以太网,这个地址就是我们常说的MAC地址。这个时候的「猫」就已经变成了我们现在常说的网卡了。以太网规定MAC地址占6个字节,也就前面说的48位。

所有发出的包都带着目标电脑的MAC地址。网络中所有设备收到数据后会自觉比较目标地址是不是自己,如果不是就丢弃。你没看错,全凭大家自觉。这样就解决了不同电脑之前相互通信的问题。

引入地址的概念,也就产生了新的问题——如何给计算机设置MAC地址呢?不同的网络有不同的处理方式。

ARCNET 网络

曾经有一种叫 ARCNET 的网络协议,它的MAC地址只有1个字节(8位),需要网络管理员通过网卡上的拨动开关手工设置。好在当年能连网的设备很少,8位地址可以支持最多256台设备连网,也够用了。

以太网则规定在网卡出厂的时候就得分配 48 位 MAC 地址,全球唯一。

网桥

随着总线网络的普及,越来越多的大公司或组织(主要是大学)开始使用网络连接它们的设备。为了方便传输数据,人们还发明了网桥。可以把网桥想象成装有多个网卡的设备,每个网卡连接一个总线网络。网桥唯一的作用就是把从一个网卡收到的内容原样转发到另一张网卡所在的网络

这样网络的规模越来越大,连网的设备越来越多,通信冲突的频率也越来越高。最终的结果就是数据传输的速度越来越低(因为只要有一人在发数据,其他所有人都得等待)。但就这样,人们对互联互通的要求还没有被满足。除了公司或者组织内部的网络,人们还想把不同城市的设备和网络都连起来,这就需要用到长途电话线。

我们前面说过网桥是一种无脑转发设备。它的无脑不仅体现在不关心数据内容方面,还体现在尽自己最大能力转发。如果是相同局域网,两边的网速相近,那不会有什么问题。但如果一边是局域网,一边是长途电话线,那来自局域网的广播数据会把电话线挤爆,大家谁也别想玩。

IP 协议

事情发展到这步田地,就需要人们(另一拨人)坐下来开会讨论了。最终,想了一个办法,就是让网桥变的智能一点。让它可以「学习」不同网络所有设备的MAC地址。当有数据需要转发的时候,它可以根据目标地址判断应该转发到哪个网卡,从而减少广播的数量。

但是,因为以太网的MAC是在出厂的时候指定的,所以没有一个简单的办法确定某个总线网络中的所有MAC地址,只能通过广播来学习,也只能在网桥设备保存全部的MAC地址,而且还要及时更新。除此之外,网桥本身只转发,理论上也不需要MAC地址。所以网络内的计算机不知道数据是经过几个网桥转发的,也不知道是在哪个环节出了问题。

最终,另一拨人(IETF)想出了再加一层的方案,也就是在以太网上引入了网络层(也就是IP层)。注意,网络层是IETF这拨人鼓捣出来的,以太网是IEEE那拨人鼓捣出来的。IETF这拨人决定给每一台网络设备加一个逻辑地址,也就是IP地址,而且觉得32位差不多够用了,甚至都没考虑 MAC 地址是48位。

引了IP协议层,前面说的网络问题基本得到解决。

IP 路由

首先,每一台设备都有一个IP地址。通信双方使用IP地址进行通信。IP地址是管理员按需指定的,可以根据前缀聚合。所以原来的网桥(现在变成了路由器)不需要保存网络中的所有MAC地址,只要保存网络前缀就能进行转发。

但问题来了,网络层工作在链路层之上。要想通信,还得需要MAC地址。怎样才能得到目标的MAC地址呢?这就需要用到ARP协议。

ARP 协议

每当电脑在通信之前会先在网络上发一个广播(这个广播不会被转发到其他网络),问谁的IP地址是某某某。这个时候对应的电脑就会回包说是我,我的MAC地址是某某某。发送方就拿到了接收方的MAC地址,进而完成通信。

如果目标电脑在另一个网络,这个时候发送方就会在自己的网络里广播说谁的IP是192.168.1.1(我们假设它的默认网关IP是192.168.1.1),网关就会回复自己的MAC。然后,发送方就会通过网关的MAC地址给网关发一条IP报文,报文的目标IP就是接收方的IP地址,来源IP自然是发送方的IP地址。

以上图为例,假如H1想给H2发数据。H1知道H2跟自己不在一个网络,所以它通过ARP查到R1的 Gi0/1 网卡的 MAC 地址,给 fa16.ee3f.fd3c 这个 mac 地址发送了一个 IP 报文,这个报文的目标IP是H2的IP地址,也就是 192.168.2.2,原IP地址是H1的IP,也就是192.168.1.1。 R1收到这个报文后发现目标地址是192.168.2.2,需要通过 Gi0/2 网卡转发给路由器 R2(因为R1保存了 H2 所在网络的前缀)。R2 会重复同样的过程,最终IP报文被转发给H2。

整个过程,H1和R1都不需要知道H2的MAC地址,但所有节点必须知道相临节点的MAC地址(也叫下一跳)。所以说,到现在为止,哪怕是引入了IP层,实际通信还是依赖MAC地址。

交换机

在IP网络中,如果目标在同一网络,则通过广播通信;否则,通过网关转发。因为有广播的存在,所以网速还是会受到影响。这时局域网也叫冲突域:

大家不要误会。因为IP网络引入了路由器,所以跟原来的总线网络相比,冲突域变小了,广播减少了,网速提高了。但人民群众的要求也提高了,网速必须更快!

于是,人们又发明了交换机。交换机是一种局域网设备,功能跟前面说的网桥类似。

但是,交换交换机可以进一步减少广播的数量。以上图为例。如果A想给C发送数据,它会先通过ARP广播查询C的MAC地址。这一步是免不了的。但是,这一步也会被交换机监听/学习到,所以交换机会将C连接的网口跟C的MAC地址绑定到一起,等A给C发数据的时候,交换机只会给C发数据。这个时候B和D都收不到数据。不但收不到,B和D还可以在A与C通信期间进行通信,这就进一步提高了网络的利用效率。

MAC 地址的去留

因为有了交换机,所以原来的总线拓朴在一定程度上变成了星形拓朴。又因为交换机可以隔离不同设备间的通信,所以总线网络一定程度上又变成了点对点网络。

那我们能不能最终去掉MAC地址,而只保留IP地址呢?理论上是可行的。交换机既然可以学习MAC地址,那就一定可以学习IP地址。这样,每个网口所连电脑的IP映射关系也就知道了。电脑A如果想给C发数据,可以不查C的MAC地址,而是直接给交换机发一个IP报文(注意,这次没有MAC帧)。交换机收到后直接转发给电脑C。整个过程就仿佛回到了最开始的点对点链接路。是不是有点历史轮回的感觉呢?

现在没有去掉MAC地址,可能是因为以太网设备已经遍布全球,也足够便宜,已经没有必要再优化了。但从原理上看,MAC地址确实可以去掉。

IPv6 网络

虽然没有消灭MAC地址,但IPv6引入了所谓的 link local address,这种地址以 FE80 开头,只在当前链路有效。什么意思,你可以给同一设备的不同网卡设置相同的 link local address。比如你有一个路由器,所有的网卡都设成 FE80::1,那可以把连接这个路由器的所有网络的主机的下一跳地址都设成 FE80::1,而不论主机所在的实际网段是什么。这在管理上比较方便。之前 IPv4 时代只能不同网卡设不同地址,分开配置,比较麻烦。

我们前面说过,现在的网络拓朴有点绕回原来的点对点网络。如果能让设备直接跟路由器相连,那么所谓的 Link 上就只有两个设备,这是典型的点对点链路。这个时候设备相要发IP报文,可以直接发给 FE80::1。从而完全去掉 MAC 地址。

以上就是全部内容,如果还没明白,可以私信或讨论。

如果喜欢请点赞支持,不要光收藏哈


user avatar   lu-luce 网友的相关建议: 
      

题主估计不知道啥叫DHCP协议吧。。

你以为IP是怎么来的??IP地址是靠DHCP协议分配的啊!!!DHCP协议靠啥分配IP地址呢???MAC地址啊。。。

IP地址是你家的地址。MAC地址是你的身份证号码。。的确可以靠你家地址找你。但是,你也可以搬家啊。。


user avatar   mai-wen-xue-67 网友的相关建议: 
      

CISCO 的培训资料上解释的很清楚。



来来来, 咱复习一下网路知识。





为什么要分层和封装?


使用封装似乎很浪费:如果原始数据很小,那么电线上的数据包可能主要是来自各层的头文件。这就是开销,会降低传输的有效吞吐量。

当然,直接把数据放进链路层会更好?


使用层的想法是为了灵活性。

假设我们的机器里有一块10Mb的网卡,而有人想出了一个改进的100Mb网卡。因为物理层与数据链路层(几乎)是完全分开的,我们可以为100Mb的物理层写一个新的标准,然后把它放在原来的10Mb的地方。上层甚至不需要知道硬件已经改变。

想象一下,每当网络中发生变化时,就必须重写每个电子邮件程序、网络浏览器和其他应用程序。

这就是为什么我们需要仔细地分离功能:

网络层和上面的层当然不应该知道你在使用什么硬件。


事实上,上面的例子已经发生了好几次:

互联网运行在(除此之外),10Mb以太网、100Mb以太网、1Gb以太网、10Gb以太网、电话线(SLIP和PPP)、无线电。

坐在终端的用户根本不知道他们脚下发生了什么。


原则上,你可以使用信鸽作为物理层,而你的浏览器应该不会有任何变化,除了速度变慢之外,也许。


事实上封装甚至可能不会止步于此,即物理层。

例如,以太网的大小是有物理限制的(光速问题),那么我们怎样才能连接起一个跨越大西洋的以太网呢?

我们可以做的一个方法是将以太网的流量在一些其他类型的网络中建立隧道,例如ATM或SMDS。这些协议可以在很远的距离上工作。

我们只需将一个以太网数据包塞进ATM网络,它就会从另一端跳出来,继续在它的以太网世界里工作。ATM协议(本身是一个链路层协议)被作为数据链路层使用。

在实践中,事情当然更复杂,我们倾向于在网络层上进行隧道,因为这更有效率。



分层的一个比喻:

假设你要给国外的朋友送一份礼物,比如法国。

你把礼物安全地包裹起来("用牛皮纸封装礼物"),你给包裹加上正确的地址("添加标题"),然后把它交给邮局。邮局把包裹放在飞往法国的飞机上('把它封装在飞机上')。当飞机到达法国时,包裹被 "解除封装",继续其旅程。

当它到达目的地时,你的朋友解除了包裹的封装,发现了这个礼物。



原则上,你可以使用信鸽作为物理层,而你的浏览器应该不会有任何变化,除了速度变慢之外,

也许。


【未完待续】


user avatar   sun-yiming-71-34 网友的相关建议: 
      

人类的大脑实在太神奇了。

我出生以来,它24小时不间断工作,但却偏偏在考试的时候,大脑会猛的开始循环播放各类沙雕歌曲。

不会的题越多,想起的歌词越多。

题目越难,想起的歌词越沙雕。




  

相关话题

  感觉互联网码农界都被北邮、华科给统治了,这到底是为什么? 
  程序员如何提高安全的编码能力? 
  有哪些新手程序员不知道的小技巧? 
  为什么很多程序员不用switch,而是大量的if……else if? 
  为什么程序员有那么多过劳死的,知乎上还是乐此不疲的劝人转计算机专业? 
  如何在运行时初始化静态成员变量? 
  有哪些话一听就知道一个程序员是个水货? 
  为什么所有计算机培训课程老师的宣传照都是一身西装双手交叉在胸前。这明明不符合程序猿应该有的气质啊? 
  作为一个程序员,怎么看待今年互联网寒冬、裁员?要如何应对? 
  如何评价《职人介绍所》第 21 期节目,以及嘉宾 赵劼 和 winter 的表现? 

前一个讨论
小米 12 系列实际使用体验怎么样?
下一个讨论
小白想学编程,有什么推荐的入门级别建议吗?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利