序言
在没有产生网络之前,单个主机就像汪洋大海之间的一个孤岛,和其他主机之间没有任何联系。但随着需求的产生,免不了两台主机之间需要产生交流(传送数据等)。离得近的两台主机之间搭一根网线就能够解决,但是如果两台主机之间的距离隔得十分远呢?
本篇博客的内容学习于 此视频(点击查看)👈,感谢该 Up主
的优质视频供大家学习😄。
1. 原始方法
如果两台主机之间需要通信该怎么办呢?最简单的方式就是两台主机各开一个网口,使用网线将该主机之间相连这就好啦:
如果想要再加入一台主机,我们只需要将各个设备各开两个网口,再使用网线相连:
问题慢慢就显现出来了:
- 一个设备的网口肯定是有限的
- 当相连的设备多了,整个网线将变得十分复杂,不利于管理维护
2. 集线器
为了更好的解决多台主机互联的问题,集线器由此而生了:
当网络中的某个节点(如计算机)通过集线器发送数据包时,集线器首先接收这个数据包,之后他将这个数据包广播转发给所有连接到它的其他端口,目标设备会接受该数据包,其他设备会丢弃。
2.1 Mac地址
问题来了,其他设备怎么知道这个数据包是否是发给自己的呢?为了确定数据的接收方,每台计算机需要确定一个全局的标识,称为 Mac地址
:
假设现在 设备A
有一个数据包需要发送给 设备B
:
我们来还原一下场景:
A
将该数据发送给集线器- 集线器一股脑将数据转发给除了
A
的所有设备 - 其他设备查看到目标
Mac地址
和自己的不相符直接丢弃,B
则顺利接受
2.2 集线器的缺点
集线器解决了网络线路复杂的问题,但是同时也存在着不可忽视的缺点:
- 集线器是一个
半双工
设备,意味着同一时间只有一个设备可以接发数据,多个设备同时工作会导致数据冲突 - 集线器每次都会将接受的数据发送到全部网络设备(泛洪),这大大的浪费了网络资源
3. 交换机
为了解决集线器的一系列问题,产生了交换机。交换机的改进体现在 可以学习和识别连接在它设备上面的 Mac 地址,具有自动寻址的能力
,并且交换机还支持全双工通信即,允许设备同时发送接受数据。
3.1 Mac表
交换机实现自动寻址的关键在于 Mac表
,该表将交换机的端口和相连的主机 Mac地址
建立了一个联系:
当转发数据时,直接将数据包转发到目的 Mac地址
对应的端口,避免了广播带来的泛洪问题,提高了效率。
那是如何建立 Mac表
的呢?最开始 Mac表
是空的,现在 设备A
需要发送数据到 设备B
:
A
需要将数据发送到交换机,由于数据包从端口 4 进入的交换机,那么该表就会记录端口 4 对应A
的Mac地址
- 交换机发现目标
Mac地址
并没有在表中建立映射关系,所以第一次会广播该数据 - 只有
B
接受了该数据并作出响应,所以只有B
会传输响应数据到交换机 - 该表记录端口 1 对应
B
的Mac地址
经过一段时间的运行,交换机将会建立所有对应设备和端口的映射关系。
3.2 交换机桥接
一个交换机的端口肯定也是有限的,随着需要连接的设备越来越多,该怎么办呢?增加交换机的端口,该方法治标不治本。两个交换机之间桥接:
桥接之后,又该如何跨交换机进行通信呢?就拿 A
和 E
通信来举例吧:
A
将数据发送给交换机 1,交换机 1 发现Mac
表中并没有E
的Mac地址
,同时2 3 4
的映射已经记录在表中了- 于是,交换机 1 会将数据包广播给
5 6
号端口 - 交换机 2 通过 6 号端口接收到数据包,之后交换机 2 发现目标
Mac地址
和E
一致,直接转发给E
E
接受数据后发送响应数据,交换机 2 将相应数据发送给交换机 1,交换机 1 接受响应数据,并将E
的Mac地址
和端口建立映射关系
桥接交换机进一步的扩大了进行设备通信的数量和范围。
3.3 交换机的缺点
面对及大规模的需要通信的设备,强如交换机也有抗不住的一天。当需要建立的映射太多了,会导致交换机的MAC表确实存在溢出的风险
:
MAC表溢出后,交换机无法有效地根据MAC地址表进行快速转发,而可能不得不采用广播的方式发送数据帧。这会导致网络中不必要的广播流量增加,占用大量带宽,从而降低网络的整体性能。
4. 路由器
面对一个需要解决的大规模网络通信的问题,我们可以将首先解决小规模的网络通信问题(在这里我们已经解决了 --- 交换机,并且不易使交换机的 Mac表 溢出
),在提供一个设备实现跨网络之间转发,这个设备就是大家所熟知的 — 路由器。
4.1 IP地址(IPV4)
举个栗子,假设现在 A
需要和 D
进行通信,怎么确定两者是否在同一个局域网下,是否需要使用路由器呢?
我们需要引入一个新的概念来表示该设备位于哪一个局域网中 — IP地址
。那 IP地址
又是如何区分不同网络和设备的呢:
IP地址
由 4字节 32 位组成- 二进制表示法实在是过于复杂,为了更好的记忆,我们使用点十进制来表示
- 将每一个字节由十进制表示,并且每个字节之间使用
.
分割
IP地址
的前 3 个字节用来表示存在于哪一个网络,最后一个字节用来表示该网络下的哪一台主机:
若两个 IP
地址的前三个字节相同,则位于同一个局域网下。
4.2 IP地址 VS Mac地址
1. 定义
IP地址(Internet Protocol Address)
:用于为互联网上的每一个网络和每一台主机分配一个逻辑地址
,以此来屏蔽物理地址的差异。(可修改)Mac地址(Media Access Control Address)
:物理地址
,它是分配给网络接口控制器(NIC)的唯一标识符。(不可修改)
2. 功能
IP地址(Internet Protocol Address)
:标识设备所属的网络和主机,用于跨网络的数据交换和路由选择,不参与数据的实际传输Mac地址(Media Access Control Address)
:标识设备的唯一身份,用于在同一网络中进行数据的寻址和传输
在跨网络数据传输中,需要连着协力合作才能正确的传输数据到指定目标设备。
3. ARP字母协议
在通常情况下,我们只知道目标的 IP
地址,怎么获取 Mac
地址呢?
会使用 arp字母协议
像一个子网中广播一个 arp字母请求
当设备收到请求后,会检查请求中的 IP地址
是否和自己的相匹配,如果匹配则将自己的 Mac地址
打包成一个 arp字母响应
发送回请求设备。
4.3 路由表
路由器通过读取数据包中的 IP地址
信息,决定最佳的传输路径,将数据包从一个网络转发到另一个网络。这种选择是基于 路由表(Routing Table)
进行的,路由表中包含了到达各个目的网络的最佳路径信息,具体怎么实现查找最佳路径在这里就不多赘述了(主要是本身也不是很懂,嘻嘻😗)。
5. 跨网络传输示例
我们通过一个实例来总计一下我们今天所学内容吧:
现在 A
需要传输数据到 F
并且 F
的 Mac
地址未知:
A
通过ARP
协议查询当前在网是否存在目标Mac地址
,结果肯定是没有的- 当前子网下没有只能出去找了,
A
会通过ARG协议
获取默认网关(路由器1)的Mac地址
- 之后发送数据,交换机会将你的数据传输给路由器 1
- 路由器 1 接受数据后,根据目标
IP 地址
和子网掩码
获取数据包的目标网络地址 - 路由器 1 发现该网络地址不在自己所管的网络中,则会根据路由表信息获取最优的传输路径
- 路由器 1 会将
源 Mac地址 和目标 Mac地址
修改为自己的Mac地址和路由器 2 的 Mac地址
,转发给路由器 2 - 重复
4 5 6
步骤,最终数据会转发到路由器 4 手中 - 路由器 4 使用
ARP
协议查询目标的Mac地址
,根据Mac地址
转发到F
设备
6. 总结
在这篇文章中介绍了设备之间的跨网络通信,希望大家有所收获,再次感谢该 Up主
的创作视频!