概念
MAC地址
MAC地址也叫物理地址、硬件地址,长度为 48 位,它是由网络设备制造商生产时烧录在网卡的EPROM(一种闪存芯片,通常可以通过程序擦写)。
- 其中前 24 位(00-16-EA)代表网络硬件制造商的编号
- 后 24 位(AE-3C-40)是该厂家自己分配的,一般表示系列号。
- 只要不更改自己的 MAC 地址,MAC 地址在世界是唯一的。
三张表
MAC地址表
作用:交换机中保存MAC地址与端口的映射关系
- 记录每一个MAC地址设备连接到哪一个端口上
- 最初MAC地址为空,则记录首次发送数据设备的源MAC地址和进入端口
- 发送时,没有目标MAC地址映射关系则将数据包发送给所有端口,即发送给所有设备
- 设备接收到自己的数据包,做出响应,响应数据从哪个端口进入,此端口和目标MAC的映射关系会被记录
来源:以太网各个节点之间通过交换机通信,不断完善缓存起来
路由表
- 作用:路由器保存IP地址与端口的映射关系
- 来源:各种路由算法 + 人工培植
ARP缓存表
- 作用:设备和路由器中,用来保存IP地址和MAC地址的映射关系
- 来源:不断通过ARP协议请求逐步完善
hub-集线器
将电信号转发到所有出口(广播),不做任何处理,解决多机通讯。
交换机
集线器
只能进行广播,无法指定根据目标MAC
进行发送,使用交换机
能对指定目标发送数据。
交换机
根据自身维护的MAC地址表
,找到对应的端口将数据发送出去。
以太网
数据到达交换机,交换机
内部通过自己维护的MAC地址表
找到目标MAC
映射的端口,把数据通过对应端口发送给对应的设备。
这种传输方式组成的小范围网络叫做以太网。
IP地址
数据的发送如果是依赖于MAC地址的话,MAC地址在不人为修改的情况下,前24位为固定厂商编号,当我们需要根据前缀进行子网发布时,就得使用同一厂商的设备,因此引入了一个新的概念-IP地址。
为每台设备分配一个32位的编号(IPV4),将其分成四个部分,中间用点相连,十进制表示为xxx.xxx.xxx
此时每台设备拥有自己的MAC地址,同时又有自己的IP地址
IP地址是软件层面的,可以随时修改
MAC地址一般无法修改,每台设备独一无二
有了IP地址之后,就可以根据前缀进行子网发送,无需使用同一厂家设备
路由器
作为交换机
之间的桥梁,进行数据转发(不转发广播帧)。
- 路由表:路由器保存IP地址与端口的映射关系
- ARP缓存表:用来保存IP地址和MAC地址的映射关系
通讯
双机通讯
单机之间通信,通过网线相连。
多机通讯
随着需要通信的电脑数量多了,理论上可以为设备开更多的网口进行设备的接入,但实际上不能无限为电脑开网口。
引入集线器
因此引入了一个中间设备(集线器-hub)
,需要将网线插到中间设备(集线器-hub)
,由这个设备进行转发,让彼此通信。
集线器-hub,将电信号转发到所有出口(广播),不做任何处理,解决多机通讯。
所有连接到集线器的设备都有一个全局唯一的标识-MAC地址
。当发送数据时,只要在头部拼接上源MAC地址
和目标MAC地址
,就知道要发送给谁。
接收到数据的机器判断目标MAC地址
是否为自己,是则接收,否则抛弃。
引入交换机
虽然设备可以通过MAC地址过滤数据,但是数据仍会发送给所有的设备,既不安全,也浪费网络资源。
因此引入另一个中间设备-交换机
。
数据在发送时会带上链路层头部数据
,包含源MAC地址
、目标MAC地址
。
交换机
通过自己维护的MAC地址表
,找到目标MAC地址
对应的端口,将数据发送出去。
交换机级联
随着机器数量增多,单个交换机端口不够用,需要将多个交换机连接起来。
左边交换机
端口所连接的交换机,其上所有设备
都会在左边交换机
的MAC地址表
中记录。
左边交换机 | 右边交换机 |
---|---|
这种方式一定程度缓解了多机通讯的压力,但是随着设备的增多,加入级联的交换机
随着增多,每台交换机上的MAC地址表
会变得越来越大,最终难以维护。
路由器
为了解决MAC地址表
庞大问题,引入路由器
作为交换机
之间的桥梁。
路由器
每个端口
有自己的MAC地址
,作为设备与交换机相连,交换机只需记录路由器端口MAC
与交换机连端口
的映射,简化了MAC地址表
。
之后数据的发送经由路由器进行转发。
路由器的每一个端口,都有独立的 MAC 地址!
交换机1和交换机2都多了一条路由器端口的MAC地址与交换机自己端口的映射。
IP地址
由于MAC地址不人为修改的情况下,理论上不可变,当我们需要根据前缀进行子网发布时,就得使用同一厂商的设备,因此引入了一个新的概念-IP地址。
IP地址是软件层面的,可以随时修改,可以规划自己需要的网络拓扑结构。
假如我想要发送数据包给 ABCD 其中一台设备,不论哪一台,就可以这样描述:”将 IP 地址为 192.168.0 开头的全部发送给到路由器”。
之后交由路由器转发给对应的设备。
路由器转发
数据除了数据链路层头部
外增加网络层头部
。
如上图所示,如果设备A
发送数据给设备B
,由于连着同一个交换机
,其实网络层
没有起到作用,直接通过数据链路层头部
的MAC地址
经由交换机将数据投递给对应的设备
假设设备A
发送数据给设备C
,此时就需要先将数据交给路由器
。
再由路由器
转交给C。
问题
如何知道是否要通过路由器转发?
- 如果
源 IP
与目的 IP
处于一个子网,直接将包通过交换机发出去 - 如果
源 IP
与目的 IP
不处于一个子网,就交给路由器去处理
什么叫做子网?
将源 IP
与目的 IP
分别同这个子网掩码
进行与运算,相等则是在一个子网,不相等就是在不同子网
假设某台机器的子网掩码
定为 255.255.255.0
则结果为
A电脑:192.168.0.1 & 255.255.255.0 = 192.168.0.0
B电脑:192.168.0.2 & 255.255.255.0 = 192.168.0.0
C电脑:192.168.1.1 & 255.255.255.0 = 192.168.1.0
D电脑:192.168.1.2 & 255.255.255.0 = 192.168.1.0
如果 A 给 C 发消息,A 和 C 的 IP 地址分别 和 A 机器配置的子网掩码做&运算,发现不相等,则 A 认为 C 和自己不在同一个子网,于是把包发给路由器,就不管了,之后怎么转发,A 不关心。
如何知道那个设备是路由器?
通过和子网掩码做&运算知道了与目标设备是否处于一个子网内,不在同个子网需要交给路由器转发,但是如何知道路由器的IP地址?
设备需要设置一个IP地址作为默认网关,当需要转发给不同子网的机器时,发给这个 IP 地址。
只知道IP不知道MAC如何发送数据?
网络层同个IP进行数据传输,但是到了数据链路层需要通过MAC进行发送,如何获取目标MAC地址呢?
使用ARP缓存表,记录着 IP 与 MAC 地址的对应关系。
设备A为了获取设备B的MAC地址,会广播一条ARP请求,设备B收到后将自己的MAC地址响应给设备A,设备A将MAC地址缓存起来。
总结
设备
- 设备IP、目标IP
- 通过子网掩码判断彼此是否处于同个子网
- 同个子网,通过ARP缓存表获取对方MAC地址,发送数据
- 不同子网,获取默认网关IP,通ARP找到网关的MAC地址,发送数据,交给网关处理
交换机
- 数据包必须含有目标MAC地址
- 通过MAC地址表查询MAC地址对应的端口
- 存在端口,按照该端口发送
- 不存在映射关系,所有端口都发送
路由器
- 数据包必须含有目标IP地址
- 通过路由表查询映射关系
- 查到则按照该端口发送
- 查不到,返回路由不可达的响应数据包
流程
路由器 1
连接了路由器 2
,所以其路由表
有了下一跳地址
这一个概念
此时设备A
向设备F发
送数据
- 首先 A(192.168.0.1)通过子网掩码(255.255.255.0)计算出自己与 F(192.168.2.2)并不在同一个子网内,于是决定发送给默认网关(192.168.0.254)。
- A 通过 ARP 找到 默认网关 192.168.0.254 的 MAC 地址。
- A 将源 MAC 地址(AAAA)与网关 MAC 地址(ABAB)封装在数据链路层头部,又将源 IP 地址(192.168.0.1)和目的 IP 地址(192.168.2.2)封装在网络层头部,然后发包:
注意:这里千万不要以为填写的是默认网关的 IP 地址,从始至终这个数据包的两个 IP 地址都是不变的,只有 MAC 地址在不断变化
交换机 1 收到数据包后,发现目标 MAC 地址是 ABAB,转发给路由器1。
数据包来到了路由器 1,发现其目标 IP 地址是 192.168.2.2,查看其路由表,发现了下一跳的地址是 192.168.100.5。
所以此时路由器 1 需要做两件事,第一件是再次匹配路由表,发现匹配到了端口为 2,于是将其封装到数据链路层,最后把包从 2号端口发出去。
此时路由器 2 收到了数据包,看到其目的地址是 192.168.2.2,查询其路由表,匹配到端口号为 1,准备从 1 号口把数据包送出去。
但此时路由器 2 需要知道 192.168.2.2 的 MAC 地址了,于是查看其 arp 缓存,找到其 MAC 地址为 FFFF,将其封装在数据链路层头部,并从 1 号端口把包发出去。
交换机 3 收到了数据包,发现目的 MAC 地址为 FFFF,查询其 MAC 地址表,发现应该从其 6 号端口出去,于是从 6 号端口把数据包发出去。
设备F 最终收到了数据包!并且发现目的 MAC 地址就是自己,于是收下了这个包。
至此,经过物理层、数据链路层、网络层这前三层的协议,以及根据这些协议设计的各种网络设备(网线、集线器、交换机、路由器),理论上只要拥有对方的 IP 地址,就已经将地球上任意位置的两个节点连通了。