网络浅析

前言

你管这破玩意叫网络? 的学习总结,介绍从基础设备互联到路由器的知识,内容包括:

  1. 端口直连
  2. 集线器
  3. MAC 地址
  4. 交换机
  5. MAC 地址表
  6. 路由器
  7. IP 地址
  8. 子网
  9. 子网掩码
  10. 默认网关
  11. ARP
  12. 路由表

端口直连

网络上的设备通过端口与其他设备端口直接连接,以此进行数据的传输;比如:

设备 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 地址表初始为空表,经过不断的请求来填充表数据,具体流程如下:

  1. 交换机接收到数据包,此时可以得知源设备的 MAC 地址与端口,存储在 MAC 地址表中
  2. 交换机通过 MAC 地址表查找目标设备的端口
  3. 找到则通过指定端口发送数据包
  4. 没有找到则发送数据包给所有已连接的设备出口
  5. 目标设备响应时执行相同操作

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 网段找到对应的已连接设备的端口。

总结

现在串联上述知识点,做一个总结,看下经过的流程:

  1. 源设备判断目标设备是否在同一个子网中
  2. 在同一子网
    1. 直接将数据发送给交换机,交换机发送给目标设备
  3. 不在同一子网
    1. 获取默认网关的 IP 地址
    2. 通过 ARP 缓存表获取路由器 IP 映射的 MAC 地址
    3. 修改数据包中的目标设备的 MAC 地址为路由器 MAC 地址
    4. 数据包由交换机发送给路由器
    5. 路由器通过 ARP 缓存表获取目标设备 IP 对应的 MAC 地址,并修改数据包中的目标 MAC 地址
    6. 路由器通过路由表获取目标设备 IP 网段对应的连接端口
    7. 转发数据包到指定端口

如果路由器不能直接将数据包发送给目的地,则路由表中还存在下一跳的 IP 地址,表示转发给下一个路由器。

在这里的网络模型中,关键的三个节点是:源设备、交换机和路由器:源设备判断是否需要将数据包交给路由器处理;交换机只关注源设备的 MAC 地址和目标设备的 MAC 地址;路由器只关注源设备的 IP 地址与目标设备的 IP 地址。

这三个节点各司其职,是相互独立互不干扰的。

视频作者在评论区贴出的源文章链接:你管这破玩意叫网络?- 闪客

相关推荐
乔峰不是张无忌33014 分钟前
【车载网络】BUSOFF状态简述和制造
网络协议·车载系统·汽车
qq_441996052 小时前
手写RPC笔记
网络·网络协议·rpc
IT 古月方源3 小时前
文件上传漏洞 (网络安全)
运维·服务器·网络·tcp/ip·网络安全·智能路由器
m0_748236833 小时前
如何查看本地sql server数据库的ip地址
数据库·网络协议·tcp/ip
鸽鸽程序猿5 小时前
【JavaSE】【网络协议】HTTPS
网络协议·https
无名之逆13 小时前
搭建SSL邮件服务器
开发语言·网络·网络协议·http·https·ssl·request
Libby博仙14 小时前
.net core三种依赖注入方式,原生的依赖注入器,scrutor,autofac
网络协议·rpc·.netcore
百里落云14 小时前
2024年终总结,人生已过半,一半回忆,一般继续!
面试
JermeryBesian15 小时前
Flink系列知识讲解之:深入了解 Flink 的网络协议栈
大数据·网络协议·flink
dog25015 小时前
TCP 演进之路:软硬件跷跷板与新征程
网络·网络协议·tcp/ip