目录
一、Mac地址
注意:mac地址是全世界唯一的,而ip地址在不同子网中是可以重复的。
我们在之前说过,Mac地址如果想要进行网络通信,就需要让交换机记录很多很多的Mac地址和主机的对应表,这个表是非常大的,一般的家用路由器(家用路由器内置了交换机)由于硬件限制,是远远不够用的。所以必须要使用路由器+IP地址进行网段划分,从而大量减少路由器的工作量。所以IP地址被研究出来是为了进行不同子网的网络通信的。
但是Mac地址是为了进行同一个子网的主机通信的。在从个主机A跳到下一个主机的时候,如何知道的主机B的位置信息呢?如果使用ip地址,今天你的主机B可能使用这个ip地址,明天可能使用另外一个ip地址(因为我们说路由器是会使用DHCP技术动态ip主机号分配的,家用路由器的上层一定有运营商的路由器,每一次路由器重启再接入运营商的网络时,ip地址都发生了变化,这个是指路由器的公网ip,且你自己的路由器也会进行DHCP,所以每次主机的ip地址都不一样)。如果仅仅使用ip地址来确认路径,可能会导致无法传递数据。
所以在同一个子网进行网络通信的时候,不能使用ip地址,而要使用mac地址。因为mac地址是全世界唯一的,不存在改变的问题。当交换机记录下来你的主机的mac地址和接口,交换机就会记录一张表,将他们映射对应起来。下一次在进行子网内通信的时候,主机A将数据发送给交换机,交换机根据这张表判断我要从哪一个接口发送出去即可。(这里是不是可以看出来,在进行子网内同心的时候是不需要经过路由器的,mac地址天生就是为了子网内通信而设计的)
再来理解一下Mac地址和IP地址的区别:
(1) mac地址是为了进行直接相连的子网内通信的,从一个主机跳到一个和他直连的主机。
(2)IP地址是为了解决不同子网的主机通信的问题,在mac地址不断跳跃的时候,目的ip地址始终不变,指引着mac地址前进。
二、以太网(Mac)
以太网通常指的就是数据链路层。有时候我们说的以太网地址就是Mac地址。
以太网的帧格式比较简单,仅仅只有两个mac+一个报文类型来区分是数据还是ARP请求/应答。
我们是不是可以看到,这里限制了数据不能超过1500字节,IP层分片的原因是不是就找到了:传输层TCP/UDP给我的报文并没有限制小于1500字节,而数据链路层又限制在1500字节,就好像一个打工人不得不对双方妥协而自行完成分片和组装操作,而且这个操作不论是对于上层传输层还是下层数据链路层都是透明的。
三、MTU
为什么数据链路层要限制报文的长度为1500字节?
数据碰撞问题
在早期交换机没有被发明出来的时候,一个子网内的通信是通过集线器连接起来的。而集线器并不能像交换机一样进行准确的数据传输,因为他并没有记录主机和接口的对应关系表,而是将数据以广播的形式进行转发,各个主机再通过数据链路层的报文进行mac地址判断,是发给自己的则接收,不是发给自己的则丢失。
这样就出现了一个问题:因为集线器发送数据的本质是传输二进制数据。如果两台主机同时向别人发送数据,这样就造成了数据混乱,我们称为数据碰撞问题。所以为了避免数据碰撞而导致数据混乱,集线器会在发生数据碰撞的时候,向各自主机发送一条特定报文,让他俩不要再发了,而是等会再重发,就可以让两台主机的数据避开了。
显然,如果一个报文的长度越长,他占用集线器的时间就越长,这样发生数据碰撞的概率也就越大。那为了减少数据碰撞的情况,以太网(Mac)协议就规定了数据不能超过1500字节。
这个长度我们就称为MTU。
四、ARP协议
在上面说到,想要进行数据链路层的报文封装,就必须要知道发送双方的Mac地址,但是你有没有想过,在最开始所有人还没进行过通信的时候,交换机如何知道他们的Mac地址和接口的映射关系呢?换句话说,交换机此时根本就没有维护Mac地址和接口的对应表。
于是就衍生出来了ARP层,他是一个数据数据链路层,却又高于Mac层的协议,为的就是解决起始Mac地址不详的问题,用来让交换机建立映射表。
ARP数据报格式:
这里说的以太网首部其实就是数据链路层(Mac)的报头
ARP协议的过程讲解:
(1) 此时发送端想要和某一个IP号的主机进行通信,首先会把数据报的目的Mac地址全部填为1,即FF:FF:FF:FF发送给交换机,交换机一看这个是广播地址,所以把该报文发送给所有和交换机直连的主机。
(2)每个主机先解开Mac报头,发现是广播地址,所以我把数据报解包分用,向上层ARP层传递,其中一个主机发现其中的 IP 地址与本机相符,则发送一个ARP 应答数据包给源主机,首先看该ARP报头的帧类型,确认是请求还是应答,如果是请求,则把自己的mac地址ip地址封装到一起,发送出去。而发送是一定要经过交换机的,他此时就记录了该mac地址是我的1号接口,记录到表中。
(3)发送方接收到了ARP应答后,得到了对方的Mac地址,以后就不再需要填写ARP报文了,直接可以再Mac报头中填入对方的Mac地址进行网络通信了。
此外除了ARP协议,其实还有RARP协议,这里的R是取反的意思。ARP是已知IP来获得Mac地址的协议,而RARP是已知Mac地址来获取IP地址的协议,他们都大同小异,并没有什么太大的区别。