本章内容:网卡传输出去的包是如何经过集线器、交换机和路由器等网络设备,最终进入互联网
交换机
交换机的端口不核对接收方MAC 地址,而是直接接收所有的包并存放到缓冲区中
将包存入缓冲区后,接下来需要查询一下这个包的接收方MAC 地址是否已经在MAC 地址表中有记录了。MAC 地址表主要包含两个信息, 一个是设备的MAC 地址, 另一个是该设备连接在交换机的哪个端口上
交换机内部的交换电路会把对应的数据包裹送到具体的Port
交换电路的内部构造如下图 信号从2 号口进来,经过7号出去,
交换机维护MAC表的方式
- 第一种是收到包时,将发送方MAC 地址以及其输入端口的号码写入MAC 地址表中。由于收到包的那个端口就连接着发送这个包的设备,所以只要将这个包的发送方MAC 地址写入地址表,以后当收到发往这个地址的包时,交换机就可以将它转发到正确的端口了。交换机每次收到包时都会执行这个操作,因此只要某个设备发送过网络包
- 第二种是给mac表中的记录添加一个时间限制, 此地址表中的记录不能永久有效,而是要在一段时间不使用后就自动删除。只需要将一段时间不使
用的过时记录从地址表中删除就可以了。默认是5分钟。
当地址表的内容出现异常时,只要重启一下交换机就可以重置地址表,也
不需要手动进行维护。
- 如果destination MAC 并不在MAC表中,那么将包转发到除了源端口之外的所有端 口上,无论该设备连接在哪个端口上都能收到这个包
- 交换机并不转发数据包,如果source port和destination port相同:
下面是详细解释:
- 集线器的工作原理:当两台主机通过集线器连接时,集线器会把来自其中一台主机的所有数据广播到集线器的其他端口。这意味着,集线器会将从主机 A 发来的数据包同时发送给主机 B 和交换机。
- 数据流入交换机的情况:交换机收到来自集线器的信号后,会查看数据包的目标地址。如果目标是主机 B(也就是数据包的目的地),交换机会查找 MAC 地址表来决定如何转发数据包。此时,交换机发现数据包的目标端口和源端口相同(因为数据包来自集线器的端口,而集线器又和交换机相连),这时可能导致数据包被误回传。
- 数据包环路问题:如果交换机将数据包转发回集线器,集线器又会广播这个数据包,导致主机 A 和主机 B 都接收到相同的数据包。这样就形成了一个循环,数据包不断地在集线器和交换机之间传输,从而造成网络中的环路。这个环路会影响网络的正常通信,造成网络堵塞或性能下降。
- 交换机的防护机制:为了避免这种情况,交换机会检测到目标端口和源端口相同的情况,并丢弃这个数据包。这样可以避免数据包在网络中循环传播,保障网络的稳定。
这种现象在有集线器的网络中尤为常见,因为集线器是一个广播设备,所有传入的数据包都会广播到其他端口,从而容易引发这种环路问题。交换机通过智能转发和防环路机制来避免这种情况。
线路上没有数据流通的时候,会发送特定的脉冲信号;
网卡一方支持所有的速率和工作模式,而交换机只支持到 100 Mbit/s 全双 工模式。当两台设备通电并完成硬件初始化之后,就会开始用脉冲信号发 送自己支持的速率和工作模式。当对方收到信号之后,会通过读取脉冲 信号的排列来判断对方支持的模式,然后看看双方都支持的模式有哪些。
网卡和交换机会自动选择合适的模式进行数据传输
路由器
网络包经过集线器和交换机之后,现在到达了路由器,路由器会执行后续的转发操作。
-
转发模块和端口模块的作用:
- 转发模块:负责判断数据包的目的地并决定如何转发该数据包。这一模块主要执行路由决定,即基于目标地址,路由器会决定该将数据包发送到哪个接口或下一跳设备。
- 端口模块:负责数据包的收发操作,即与物理接口的交互。它负责将接收到的数据包传递给转发模块,或将转发模块决定后的数据包发送到正确的端口。
-
类比解释:
- 路由器的 转发模块 就像计算机的 IP 模块:它负责做出转发决策(根据目标地址判断如何转发数据包)。
- 路由器的 端口模块 就像计算机的 网卡:它负责接收和发送实际的数据包,处理与物理连接相关的操作。
路由器和交换机的区别
路由器 和 交换机 在处理数据包时的不同角色和机制。
路由器的端口:
- MAC 地址和 IP 地址:每个以太网端口都拥有独立的 MAC 地址和 IP 地址,使其能够在网络层(IP 层)和数据链路层(MAC 层)进行通信。
- 接收和发送数据包:当路由器的某个端口接收到一个以太网帧时,它会检查帧的目标 MAC 地址。如果该地址与端口的 MAC 地址匹配,表示该帧是发给路由器的。然后,路由器会解封装该帧,提取其中的 IP 数据包,查找路由表,确定下一跳或目标端口。接着,路由器会重新封装数据包,使用新的源和目的 MAC 地址,通过适当的端口发送出去。
路由器的具体操作: 查找路由表,确定下一跳或目标端口。在重新封装数据包时,路由器会更新源和目的 MAC 地址:
- 源 MAC 地址:设置为路由器发送端口的 MAC 地址。
- 目的 MAC 地址:设置为下一跳设备或目标主机的 MAC 地址。
交换机的端口:
- MAC 地址:交换机的每个端口通常没有独立的 MAC 地址。交换机通过维护一个 MAC 地址表,记录各端口所连接设备的 MAC 地址。
- 转发数据帧:当交换机接收到一个以太网帧时,它会检查帧的源 MAC 地址,并将其与接收端口关联,更新 MAC 地址表。然后,交换机查找目标 MAC 地址对应的端口。如果找到匹配项,交换机会将帧转发到对应的端口;如果未找到,交换机会将帧泛洪(即发送到除接收端口外的所有端口)。在这个过程中,交换机本身并不修改帧的源或目的 MAC 地址,也不作为帧的发送者或接收者。
路由表
路由表如下
上述的路由表物理结构如下图i
从这张路由表中可以提取出以下信息:
- 目的网络(Destination)和子网掩码(Netmask) :
-
- 10.10.1.0/24 和 10.10.1.101/32 属于相同的网络(子网掩码不同)。
- 192.168.1.0/24 和 192.168.1.10/32 属于相同的网络。
- 0.0.0.0/0 是默认路由,匹配所有其他目标地址。
- 网关(Gateway) :
-
- 对于直连路由(例如 10.10.1.0 和 192.168.1.0 的路由),网关为空,表示数据包直接通过接口发往目标设备。
- 默认路由的网关是 192.0.2.1,表示所有无法匹配其他条目的目标地址,都会发往这个网关。
- 接口(Interface) :
-
- e2:负责 10.10.1.0/24 和 10.10.1.101/32 的路由。
- e3:负责 192.168.1.0/24 和 192.168.1.10/32 的路由。
- e1:负责所有其他目标地址的路由(默认路由)。
- 跃点数(Metric) :
-
- 所有条目跃点数为 1,表示这些网络都是直接可达或通过一个网关可达。
路由匹配规则:最长路径匹配
路由聚合
路由聚合的核心概念
路由聚合的基本思想是将多个小的、具体的子网合并成一个更大的网络地址范围,通过一条路由记录来代表多个子网,从而减少路由表的复杂度。
- 例子中的场景:
-
- 路由器 B 的路由表中有 3 条路由:
-
- 目的网络 10.10.1.0/24(子网掩码 255.255.255.0)
- 目的网络 10.10.2.0/24
- 目的网络 10.10.3.0/24
- 这些子网都需要通过路由器 A 转发。
- 优化操作:
-
- 由于这 3 个子网都可以通过路由器 A 转发,路由器 B 可以将它们合并为一个更大的网络范围:10.10.0.0/16(子网掩码 255.255.0.0)。
- 这样,路由表中只需要一条记录,指向 10.10.0.0/16,通过路由器 A 转发。
- 变化:
-
- 原有的 3 条路由被压缩成一条(聚合后减少了 2 条)。
- 子网掩码从 /24(表示更小的子网)变成 /16(表示更大的网络范围)。
路由聚合的工作方式
路由表进行维护的方法有几种,大体上可分为以下两类。
(a)由人手动维护路由记录
(b) 根据路由协议机制,通过路由器之间的信息交换由路由器自行维护路由表的记录 ; 有这些方法 、OSPC、BGP 等都属于路由协议
- 自动还是手动?
-
- 手动配置:
-
- 在大多数情况下,路由聚合需要网络管理员手动进行配置。
- 例如,在动态路由协议(如 OSPF、BGP)中,管理员可以通过设置聚合规则,手动定义哪些子网可以聚合。
- 自动发生:
-
- 某些动态路由协议(如 BGP)支持自动聚合功能,但前提是网络中已经配置了明确的地址范围。
- 自动聚合的能力通常依赖于协议的实现和具体网络设备的配置。
- 聚合后的风险:
-
- 如果聚合后的范围太大(如包含了实际不存在的子网),可能会导致流量错误地转发到无效的网络。
- 需要确保聚合的子网地址范围能够正确覆盖所有实际的子网。
关于BGP动态路由协议
参考文档 cloud.tencent.com/developer/a…
这是azure BGP learn.microsoft.com/en-us/azure… 工作上常用
路由器工作过程
当路由器接收到一个数据包时,会根据数据包的目标 IP 地址,遍历路由表中的每一条记录,使用对应的子网掩码进行匹配。如果匹配成功,该记录就被视为候选项。最终,路由器会根据“最长前缀匹配”原则,选择匹配位数最多的那条记录,作为数据包的转发路径。
匹配过程概述:
-
提取目标 IP 地址:从数据包中获取目标 IP 地址。
-
遍历路由表:对于路由表中的每一条记录,获取其目标网络地址和子网掩码。
-
计算网络前缀:
- 将目标 IP 地址与子网掩码进行按位与运算,得到目标 IP 的网络前缀。
- 将路由表记录的目标网络地址与子网掩码进行按位与运算,得到记录的网络前缀。
-
比较前缀:如果两者的网络前缀相同,则视为匹配成功,该记录成为候选项。
-
选择最佳匹配:在所有候选项中,选择子网掩码最长(即匹配位数最多)的那条记录,作为最终的转发路径。
示例说明:
假设路由表中有以下两条记录:
- 记录 1:目标网络 192.168.0.0,子网掩码 255.255.0.0(/16)
- 记录 2:目标网络 192.168.1.0,子网掩码 255.255.255.0(/24)
当目标 IP 地址为 192.168.1.10 时:
-
与记录 1 匹配:
- 目标 IP 与子网掩码按位与:192.168.1.10 & 255.255.0.0 = 192.168.0.0
- 与记录 1 的目标网络地址匹配,成为候选项。
-
与记录 2 匹配:
- 目标 IP 与子网掩码按位与:192.168.1.10 & 255.255.255.0 = 192.168.1.0
- 与记录 2 的目标网络地址匹配,成为候选项。
在这种情况下,记录 2 的子网掩码更长(/24 比 /16 更具体),因此根据“最长前缀匹配”原则,路由器会选择记录 2 作为数据包的转发路径。
● 如果路由表的网关列内容为 IP 地址,则该地址就是下一个转 发目标。
● 如果路由表的网关列内容为空,则 IP 头部中的接收方 IP 地址 就是下一个转发目标, 因为它没有网关说明它就是直接的目的地,不用转发;
如果要转发到下一个网关,路由器还需要使用ARP协议查询对方的MAC,并修改MAC头部信息,把source改成自己,把destination 改成对方。
有时候,即使根据最长匹配原则也还会有很多条记录,到这时候,就会根据,跃点计数越小说明该路由越近,因此应选择跃点计数较小的记录。
如果在路由表中无法找到匹配的记录,路由器会传递给默认路由,默认路由没有子网掩码
一般路由表都会有默认的路由,如下图表的最后一行
如果2条匹配路由长度都一样,就会选择跳跃数最少的那一条路由。
路由器分片
有时候路由器的输出端口MTU会比输入的MTU 要大,在进行输出端口转发的时候需要先分片再传输,但是 下面两种情况不能分片:1) 发送方应用程序
等设置了不允许分片;2) 这个包已经是经过分片后的包。
路由器附加功能:NAT地址转换
之所以有NAT,是因为早起互联网没有内网和外网的区别,所有客户端都是直接连接到互联网的,那个时候Ip v4地址多如牛毛
进入 20 世纪 90 年代之后,互联网 逐步向公众普及,接入互联网的设备数量也快速增长,如此一来,情况就 发生了变化。如果还用原来的方法接入,过不了多久,可分配的地址就用 光了。
解决问题如下: A和 B两个公司,他们的内网是完全独立的。这种情况下,两家公司的内网之 间不会有网络包流动,即使 A 公司的某台服务器和 B 公司的某台客户端具 有相同的 IP 地址也没关系,因为它们之间不会进行通信。只要在每家公司 自己的范围内
在内网中可用作私有地址的范围仅限 以下这些。 10.0.0.0 ~ 10.255.255.255 172.16.0.0 ~ 172.31.255.255 192.168.0.0 ~ 192.168.255.255
你比如说在azure创建一个Vnet,它的内网地址范围也是这些;但是要注意,私有地址本身并没有什么特别的结构,只不过是将公有地址中当初没分配的一部分拿出来规定只能在内网使用它们而已
分配好了内网地址,内网中的设备不能和互联网直接收发网络包,而是 通过一种特别的机制进行连接,这个机制就叫地址转换。
原理
- 将发送方 IP 地址从私有地址改写成公有地址。这里使用的公有地址是地址转换设备(其实就是路由器)的互联网接入端的地址。与此同时,端口号也需要进行改 写,地址转换设备会随机选择一个空闲的端口;
- 改写前的私有地址 和端口号,以及改写后的公有地址和端口号,会作为一组相对应的记录保 存在地址转换设备内部的一张表中
下面是NAT内部地址转换的表,当内网地址尝试向外建立连接,就会记录在路由器内;当数据收发结束,进入断开阶段,访问互联网的操作全部完成后,对应表中的记录就 会被删除。
下面是NAT的网络链路
如何从外网访问公司内网的某个设备。因为,一般除非公司主动允许,否则是无法从互联网向公司内网发送网络包的。因为它要经过NAT设备,但是NAT设备中没有它的记录; 这种机制具有防止非法入侵的效果;
方法有两个:
- 事先手动添加这样的记录就可以了
- 用于外网访问的服务器可以放在地址转换设备的外面, 并为它分配一个公有地址