在传统网络中,假设主机 1 和主机 2 分别连接到交换机 1 和交换机 2,在不同的子网中,两个交换机都连接到路由器。如果主机 1 想要向主机 2 发送 IP 数据包,在这种情况下,主机 2 位于不同的子网中,因此交换机 1 会将此数据包转发到默认网关(路由器)。路由器收到 IP 数据包后,将执行几项路由功能,以便主机 1 和主机 2 最终可以通信。
我想问一下同样的场景,但是使用 SDN?不同子网中的 host1 和 host2 如何使用 SDN 网络进行通信?
非常感谢,感谢您的帮助。
答案1
具体细节很大程度上取决于实施,但总体而言会是一样的,唯一的区别是交换机和路由器是软件。通常,交换机驻留在虚拟机管理程序的主机上(通常称为 vmswitch),而路由器可能是主机上的一组策略,也可能只是另一个虚拟机。由于这些网络功能(交换、路由)是虚拟化的,因此 SDN 的这一部分可能被称为 NFV(网络功能虚拟化)。
但是,此流量仍需要在物理数据中心中传输,并且主机 1 和主机 2 可能驻留在不同的物理上分离的虚拟机管理程序上(无论主机 1 和主机 2 是否“认为”它们位于同一子网中)。来自软件定义网络的所有流量都将被封装(大多数实现使用 VXLAN 或 GRE 进行封装)并相应地路由到数据中心的物理网络。
您可以将其视为与 VPN 的工作方式类似。许多设备可能会加入 VPN,并且它们可以在该 VPN 网络上相互通信,就像它们位于同一个 LAN 中一样,但它们的流量实际上是封装的(+加密的),并通过互联网传输。
我建议您深入了解 VXLAN 或 NVGRE 的工作原理。这会为您澄清很多概念。
答案2
在路由过程中(没有 NAT),有一些替换 MAC 地址的过程。在 SDN 上,基于流的工作可以修改流,也可以修改数据包的 MAC 地址。传统和 SDN 中的工作有些不同。我建议你使用 ryu 或 pox 来检查 SDN 上的处理数据包。有很多入门套件,或者你可以使用https://github.com/dektiram/SDNColdBrew用于入门套件。