前言
对 你管这破玩意叫网络? 的学习总结,介绍从基础设备互联到路由器的知识,内容包括:
- 端口直连
- 集线器
- MAC 地址
- 交换机
- MAC 地址表
- 路由器
- IP 地址
- 子网
- 子网掩码
- 默认网关
- ARP
- 路由表
端口直连
网络上的设备通过端口与其他设备端口直接连接,以此进行数据的传输;比如:
设备 A、B、C 通过端口进行直接连接,每个接入的设备占用一个端口。
集线器
设备直连的方式在日益庞大的网络下管理会越来越困难,于是出现了中间设备:集线器。
所有设备连接到集线器的不同端口中,源设备将数据包发送给集线器,集线器再将数据包发送给所有已连接的设备出口。
MAC-地址
上述网络模型中,集线器将接收到的数据发送给所有已连接的设备出口,可能会带来以下问题:
- 性能问题:网络中的每一个节点都要处理一次数据包,即使数据包的目标不是当前节点
- 隐私安全问题:数据包经过网络中的每个节点,没有隐私与安全性
基于此,出现了 MAC 地址的概念,MAC 地址用于在网络中标识一个设备,在全球范围内都是唯一的。
MAC 地址为 48 位数字,表示为 6 个十六进制数,格式为 XX:XX:XX:XX:XX:XX
,前三个十六进制数为网络硬件制造商的编号,后三个十六进制数为该制造商制造的某个网络产品的系列号。
加入 MAC 地址后,源设备发送数据时,将源设备的 MAC 地址与目标设备的 MAC 地址写入到数据包中,经由集线器发送给所有已连接的设备出口,目标设备通过数据包中的目标 MAC 地址可以得知当前数据包的发送目标是自己。
交换机
在 [MAC 地址](#MAC 地址 "#MAC-%E5%9C%B0%E5%9D%80") 一节中,并没有解决性能与隐私安全问题,设备仍由集线器发送给所有已连接的设备出口,我们需要一个新的设备:交换机。
交换机比集线器更 "聪明",知道数据包中目标 MAC 地址对应的端口是哪个,从而将数据包直接发送给连接到指定端口的目标设备。
在交换机中,维护着 MAC 地址表,记录了 MAC 地址对应的端口;MAC 地址表初始为空表,经过不断的请求来填充表数据,具体流程如下:
- 交换机接收到数据包,此时可以得知源设备的 MAC 地址与端口,存储在 MAC 地址表中
- 交换机通过 MAC 地址表查找目标设备的端口
- 找到则通过指定端口发送数据包
- 没有找到则发送数据包给所有已连接的设备出口
- 目标设备响应时执行相同操作
MAC 地址表
映射 MAC 地址与端口的一张表,通过此表快速找到对应的设备端口。
路由器
单个交换机上的端口有限,连接的设备数量迟早会超出限制,可以通过预留端口与其他交换机连接来解决,但这样交换机中的 MAC 地址表会不断膨胀变大,且交换机间我们可以认为是耦合的;我们需要一个新设备解决这个问题:路由器。
路由器作为一个独立的拥有 MAC 地址的设备,作用是转发数据包;路由器上的每个端口都有独立的 MAC 地址,不同交换机连接到路由器上的不同端口上。
当数据发送双方不在一个交换机中时,数据包交由路由器转发,反之直接由交换机发送给目标设备。
IP 地址
为了区分不同交换机包含的设备,需要对设备应用一种规则,MAC 地址在设备出厂时就已被烧录,所以不适合做这项工作,于是诞生了 IP 地址。
IP 地址为 32 位数字,表示为 4 个十六进制数,格式为 XXX.XXX.XXX.XXX
,每个接入网络的设备分配一个可变的 IP 地址。
除了在数据包中携带 MAC 地址用于给数据链路层区分设备外,现在还需要在数据包中写入源设备 IP、目标设备 IP 地址信息给网络层使用。
子网
在同一交换机中的设备通常会分配同一网段范围的 IP 地址,这些设备组成了一张网:子网。
子网掩码
32 位的位掩码,用于确认源设备与目标设备是否在同一个子网中,以 C 类地址举例,默认的子网掩码是 255.255.255.0
,则公式为:
js
来源 IP = 192.168.0.89 = 11000000101010000000000001011001
目标 IP = 192.168.0.20 = 11000000101010000000000000010100
子网掩码 = 255.255.255.0 = 11111111111111111111111100000000
(源 IP & 子网掩码) === (目标 IP & 子网掩码)
默认网关
在源设备设置的一个 IP 地址,指向路由器,通过默认网关能够找到路由器的 MAC 地址。
ARP
网络上的设备内部维护着 ARP 缓存表,记录 IP 地址与 MAC 地址的映射关系;ARP 缓存表初始为空,与 MAC 地址表类似,数据包初始发送给所有连接的设备出口,在此过程中记录 IP 地址与 MAC 地址的映射关系。
路由表
存在于路由器中的路由表,记录同一网段的 IP 地址与端口的映射关系,通过 IP 网段找到对应的已连接设备的端口。
总结
现在串联上述知识点,做一个总结,看下经过的流程:
- 源设备判断目标设备是否在同一个子网中
- 在同一子网
- 直接将数据发送给交换机,交换机发送给目标设备
- 不在同一子网
- 获取默认网关的 IP 地址
- 通过 ARP 缓存表获取路由器 IP 映射的 MAC 地址
- 修改数据包中的目标设备的 MAC 地址为路由器 MAC 地址
- 数据包由交换机发送给路由器
- 路由器通过 ARP 缓存表获取目标设备 IP 对应的 MAC 地址,并修改数据包中的目标 MAC 地址
- 路由器通过路由表获取目标设备 IP 网段对应的连接端口
- 转发数据包到指定端口
如果路由器不能直接将数据包发送给目的地,则路由表中还存在下一跳的 IP 地址,表示转发给下一个路由器。
在这里的网络模型中,关键的三个节点是:源设备、交换机和路由器:源设备判断是否需要将数据包交给路由器处理;交换机只关注源设备的 MAC 地址和目标设备的 MAC 地址;路由器只关注源设备的 IP 地址与目标设备的 IP 地址。
这三个节点各司其职,是相互独立互不干扰的。
视频作者在评论区贴出的源文章链接:你管这破玩意叫网络?- 闪客