以太网帧传输过程
- 以太网帧由源IP所在网关发出,发送给下一跳
- 设备A接收到以太网帧,查看自己的路由表找下一跳(ARP缓存/ARP寻址)
- …
- 到达目标所在位置,访问NAT表找到映射到的局域网IP
- 将消息转发给目标设备
自顶向下看的话Mac地址好像并不是必须的,但是这其实是一种错误的思维方式,网络的分层可以没有上层但是绝对不能没有下层,下面简单的梳理下。
物理层
在未深入学习网络通信前,人们可能会认为互联网主要依赖于电磁波进行通信,但这并不完全正确。想象一下,什么样的电磁波可以覆盖全球范围呢?实际上,电磁波在局域网通信中发挥重要作用,比如 Wi-Fi 等,但在上层数据传输中,我们更多地依赖光缆传输。你可能经常听到新闻报道说工地挖到了国防光缆,其实这种光缆是城市通信网络的一部分。里面可能包含了全国各地的数据。如果挖断光缆,每秒钟可能丢失大量数据,尤其是如果挖断的是主干光缆,可能会导致严重的网络问题,甚至导致一个城市短暂的断网。
物理层数据传输借助集线器也就是Hub,连接两台以上的电脑。但是,和交换机不同,集线器没有大脑,它完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。这是第一层物理层联通的方案。
数据链路层
hub采用的是广播方式,每个人都可以收到,所以就存在问题了:如何确定消息是不是传给自己的又是由谁传给自己的?
思考一下解决方案,选择一个设备一开始就有的东西作为唯一标识,这个东西想必大家已经想到了,没错就是Mac地址。
想到这里我也是恍然大悟,在数据链路层谁认识什么IP呢?甚至IP都要借助数据链路层传输(当然说的是IPV4,IPV6的话大可像Mac一样静态绑定),如果舍弃掉Mac地址为设备分配IP的时候你怎么寻址呢?
这时候你可能还有疑问:借助Mac分配完IP,之后数据链路层借助IP为数据定向不久好了吗?
首先Mac是物理地址,IP是逻辑地址,由于IPV4需要子网划分和无分类地址等一系列技术,所以造成了在同一局域网下可能有多个相同的IP,比如
192.168.1.23/8
192.168.1.23/16
192.168.1.23/24
现在接收消息的是192.168.1.23
的时候你不借助Mac如何定向呢?
公网传输需要Mac地址吗?
许多人可能还有这样的问题,因为注意到对ARP寻址技术的叙述中往往有一句话在同一局域网下
,实际上还是需要的,因为站在硬件层面它会管你是公网还是私网吗?它认识的只有Mac地址,既然不认识又要同一规范那么干脆都需要得了,还有一点,数据链路层的链路选择是借助Mac地址进行的对任意一个交换机它需要靠Mac地址明确数据传输的方向,不然在公网上进行广播那不崩溃了吗?
除此之外数据链路层还需要解决其它问题
- 大家都发的时候会不会产生紊乱,有没有谁先发谁后发的规则
这个是通过多路访问进行解决。还有其他算法来解决这个问题,分多个车道,叫做信道划分;单双号限行较轮流协议;遇见堵车便折返,叫随机接入协议,以太网就是使用这个方式。
- 发送的时候出现错误如何解决
通过第二层最后的CRC,也就是循环冗余检测,通过异或来计算整个包是否在发送中出现了错误。
交换机
hub采用广播不管对方要不要都会传过去,这种机制明显存在问题,因为上层网络更多需要的是单播,因为hub它本身不具备验证功能,所以就需要借助数据链路层的交换机进行接口选择。
通过交换机会学习,一台 MAC1 电脑将一个包发送给另一台 MAC2 电脑,当这个包到达交换机的时候,一开始交换机也不知道 MAC2 的电脑在哪个口,会发送给其他所有口,但这个时候交换机会记住MAC1是明确的口以及它的MAC地址,以后就会方便很多。
然后通过不断转发,就会形成网络结构,以及转发表,然而这个需要在一段时间后进行更新。
完整的以太网帧接收过程
- 网卡接收到以太网帧,发现目的IP是自己的,对照NAT表找到对应的私网IP
- 借助交换机发送广播给它连接的子网网关,IP是xxx的兄弟,你的Mac地址是什么?(新的交换机)
- 子网网关A一看这个网络号和自己的一样,于是在子网内进行广播,XXX你的Mac是什么?
- 设备进行响应,数据通过交换机的时候交换机存储端口和Mac的映射关系
- 数据经交换机的手成功传递给了目标设备