虚拟路由器中的数据包丢失监控的制作方法
未命名
08-01
阅读:103
评论:0

虚拟路由器中的数据包丢失监控
1.相关申请
2.本技术要求2021年12月17日提交的美国专利申请号17/644,966的权益,其全部内容通过引用结合于此。
技术领域
3.本公开涉及计算网络,并且更具体地,涉及监控计算机网络内的丢失数据包。
背景技术:
4.在典型的云数据中心环境中,存在大量互连的服务器,这些服务器提供计算和/或存储能力来运行各种应用程序。例如,数据中心可以包括为用户(即数据中心的客户)托管应用程序和服务的设施。
5.例如,数据中心可以托管所有基础设施设备,例如,网络和存储系统、冗余电源和环境控制。在典型的数据中心中,存储系统和应用服务器的集群经由一层或多层物理网络交换机和路由器提供的高速交换结构相互连接。更复杂的数据中心为遍布全球的基础设施提供位于各种物理托管设施中的用户支持设备。在一些示例中,云数据中心的基础设施可以包括物理设备的组合,这些物理设备可以被称为“底层资源”,其链接到各种虚拟资源并与之通信,这些虚拟资源例如为虚拟服务器、代理和/或策略控制器,这些虚拟资源可以被称为“覆盖资源”。
6.网络结构中包括的各种网络设备通常包括用于本地或远程配置这些设备的机制,例如,管理接口。通过与网络设备的管理接口交互,管理员或其他用户可以执行配置任务来配置设备,并且用户还可以在设备上执行操作命令,来管理、收集和/或查看设备的操作数据。例如,用户可以配置设备的接口卡,调整支持的网络协议的参数,指定设备内的物理组件,修改由路由器维护的路由信息,访问驻留在设备上的软件模块和其他资源,和/或执行其他配置任务。此外,用户还可以提供命令来查看来自设备的当前操作参数、系统日志、与网络连接相关的信息、网络活动或其他状态信息以及查看从设备接收的事件信息并对其做出反应。
技术实现要素:
7.通常,描述了用于捕捉丢失数据包并创建具有与丢失数据包相关联的丢失信息的修改的丢失数据包的技术,以提供丢失数据包的更多细节,用于进一步分析和/或可用性。例如,计算设备(或者称为“计算节点”或“服务器”)可以以虚拟路由器的形式提供转发平面,该虚拟路由器将网络从数据中心交换结构中的物理路由器和交换机扩展到托管在计算设备中的虚拟覆盖网络中。虚拟路由器动态地创建和管理一个或多个虚拟网络,这些虚拟网络可用于在虚拟化执行元件(例如,虚拟机或容器)上运行的应用实例之间的通信。根据本公开中描述的技术,虚拟路由器被配置为捕捉丢失数据包并创建修改的丢失数据包,以包括与该丢失数据包相关联的丢失信息,该丢失数据包然后被提供至虚拟路由器中配置的
接口,该接口将修改的丢失数据包传送给进程,例如,数据包分析器工具。
8.在一个示例中,虚拟路由器被配置为接收数据包,并且响应于确定该数据包将被丢失(本文称为“丢失数据包”),虚拟路由器被配置为创建修改的丢失数据包,以包括与该数据包相关联的丢失信息。例如,虚拟路由器被配置为用包括丢失数据包的一个或多个属性(例如,丢失类型、何时何地发生丢失)和与丢失数据包相关联的上下文特定信息(例如,路由信息、表查找信息等)的信息来封装修改的丢失数据包。在一些示例中,虚拟路由器还配置有到计算设备的内部通信信道的接口(本文称为“丢失接口”),以经由内部通信信道将修改的丢失数据包传送到进程(例如,数据包分析器工具),以使得用户或管理员能够进一步分析与该数据包相关联的丢失信息。
9.这些技术可以提供一个或多个技术优势。例如,本文描述的技术向管理员或用户提供了与数据平面中发生的丢失数据包相关联的更多细节,而不使用提供最少信息(例如,丢失数据包的计数)的日志。此外,本文描述的技术可以实现在实时网络期间对丢失数据包的监控,而不需要为了调试目的而重新创建丢失的数据包,这可能难以重新创建,并且不能及时地对丢失数据包的原因进行故障诊断。
10.在另一示例中,一种方法,包括:由计算设备的虚拟路由器接收数据包;响应于确定数据包将被丢失,创建修改的丢失数据包,以包括与数据包相关联的丢失信息;以及由虚拟路由器将修改的丢失数据包提供给虚拟路由器到计算设备的内部通信信道的丢失接口,以经由内部通信信道将修改的丢失数据包传送给在计算设备的用户空间中执行的进程。
11.在另一示例中,一种非暂时性计算机可读存储介质,用指令编码,当执行这些指令时,使得计算设备的一个或多个处理器:接收数据包;响应于确定数据包将被丢失,创建修改的丢失数据包,以包括与数据包相关联的丢失信息;以及将修改的丢失数据包提供给虚拟路由器到计算设备的内部通信信道的丢失接口,以将修改的丢失数据包传送给在计算设备的用户空间中执行的进程。
12.在附图和以下描述中阐述本公开的一个或多个示例的细节。根据说明书和附图以及权利要求书,其他特征、目的和优点将变得显而易见。
附图说明
13.图1是示出可以实现本文描述的技术的示例的示例性计算基础设施的框图;
14.图2是示出根据本公开中描述的技术的包括指定关于丢失数据包的细节的信息的修改的丢失数据包的示例数据包格式的框图;
15.图3是根据本公开中描述的技术的示例计算设备的框图,该示例计算设备包括虚拟路由器,该虚拟路由器被配置为捕捉丢失数据包并将丢失数据包与上下文特定数据封装在一起,以提供丢失数据包的更多细节,用于进一步分析和/或可用性;
16.图4是示出了根据本公开中描述的技术的虚拟路由器的示例操作的流程图,该虚拟路由器用于捕捉丢失数据包并将被丢失数据包与上下文特定的数据封装在一起,以提供丢失数据包的更多细节,用于进一步分析和/或可用性。
17.在整个说明书和附图中,相同的附图标记表示相同的元件。
具体实施方式
18.图1是示出示例计算基础设施8的框图,其中,可以实现本文描述的技术的示例。通常,数据中心10为客户站点11(图示为“客户11”)的应用程序和服务提供操作环境,客户站点具有一个或多个通过服务提供商网络7耦合到数据中心的客户网络。例如,数据中心10可以托管基础设施设备,例如,网络和存储系统、冗余电源和环境控制。服务提供商网络7耦合到公共网络15,公共网络可以表示由其他提供商管理的一个或多个网络,并且因此可以形成大规模公共网络基础设施(例如,因特网)的一部分。公共网络15可以表示例如局域网(lan)、广域网(wan)、互联网、虚拟lan(vlan)、企业lan、第三层虚拟专用网络(vpn)、由运营服务提供商网络7的服务提供商运营的互联网协议(ip)内联网、企业ip网络或其某种组合。
19.尽管客户站点11和公共网络15主要被图示和描述为服务提供商网络7的边缘网络,但是在一些示例中,一个或多个客户站点11或公共网络15可以是数据中心10或另一数据中心内的租户网络。例如,数据中心10可以托管多个租户(客户),每个租户与一个或多个虚拟专用网络(vpn)相关联,每个虚拟专用网络可以实现一个客户站点11。
20.服务提供商网络7向所连接的客户站点11、数据中心10和公共网络15提供基于数据包的连接。服务提供商网络7可以表示由服务提供商拥有和运营的网络,以互连多个网络。服务提供商网络7可以实现例如多协议标签交换(mpls)转发,并且在这种情况下可以被称为mpls网络或mpls骨干网。在一些情况下,服务提供商网络7表示多个互连的自治系统,例如,因特网,其提供来自一个或多个服务提供商的服务。
21.在一些示例中,数据中心10可以表示许多地理上分布的网络数据中心之一。如图1的示例所示,数据中心10可以是为客户提供网络服务的设施。服务提供商的客户可以是集体实体,例如,企业、政府或个人。例如,网络数据中心可能为几个企业和最终用户托管网络服务。其他示例性服务可以包括数据存储、虚拟专用网、流量工程、文件服务、数据挖掘、科学计算或超级计算等。尽管图示为服务提供商网络7的独立边缘网络,但是诸如一个或多个物理网络功能(pnf)或虚拟化网络功能(vnf)的数据中心10的元素可以包括在服务提供商网络7内核内。
22.在该示例中,数据中心10包括经由由一层或多层物理网络交换机和路由器提供的交换结构14互连的存储和/或计算设备(或“节点”),例如,服务器12a-12x(统称为“服务器12”),其中,服务器12被描述为耦合到架顶式交换机16a-16n。服务器12是计算设备,并且在本文也可以被称为“主机”或“主机设备”。尽管在图1中仅详细示出了耦合到tor交换机16a的服务器12a,但是数据中心10可以包括耦合到数据中心10的tor交换机16的许多附加服务器。
23.所示的示例中的交换结构14包括互连的架顶式(tor)(或其他“叶”)交换机16a-16n(统称为“tor交换机16”),这些交换机耦合到机箱(或“脊柱”或“核心”)交换机18a-18m(统称为“机箱交换机18”)的分布层。虽然未示出,但是数据中心10还可以包括例如一个或多个非边缘交换机、路由器、集线器、网关、诸如防火墙、入侵检测和/或入侵预防设备之类的安全设备、服务器、计算机终端、膝上型电脑、打印机、数据库、诸如蜂窝电话或个人数字助理之类的无线移动设备、无线接入点、网桥、电缆调制解调器、应用加速器或其他网络设备。数据中心10还可以包括一个或多个物理网络功能(pnf),例如,物理防火墙、负载平衡器、路由器、路由反射器、宽带网络网关(bng)、演进数据包核心或其他蜂窝网络元件以及其
他pnf。
24.在这个示例中,tor交换机16和机箱交换机18为服务器12提供到ip结构20和服务提供商网络7的冗余(多宿)连接。机箱交换机18聚集业务流,并提供tor交换机16之间的连接。tor交换机16可以是提供第2层(mac)和/或第3层(例如,ip)路由和/或交换功能的网络设备。tor交换机16和机箱交换机18可以均包括一个或多个处理器和存储器,并且可以执行一个或多个软件进程。机箱交换机18耦合到ip结构20,ip结构可以执行第3层路由,以通过服务提供商网络7在数据中心10和客户站点11之间路由网络流量。数据中心10的交换架构仅仅是一个示例。例如,其他交换架构可以具有更多或更少的交换层。
25.服务器12可以均表示计算、服务器或存储服务器。例如,每个服务器12可以表示计算设备,例如,基于x86处理器的服务器,其被配置为根据本文描述的技术进行操作。服务器12可以为nfv架构提供网络功能虚拟化基础设施(nfvi)。
26.服务器12中的任何服务器都可以通过虚拟化服务器的资源来配置虚拟执行元件,以在服务器上执行的一个或多个进程(应用程序)之间提供隔离。“基于管理程序”或“硬件级”或“平台”虚拟化是指创建虚拟机,每个虚拟机包括用于执行一个或多个进程的客户操作系统。通常,虚拟机提供了用于在隔离的虚拟环境中执行应用程序的虚拟化/客操作系统。因为虚拟机是从主机服务器的物理硬件虚拟化的,所以执行的应用程序与主机和其他虚拟机的硬件都是隔离的。每个虚拟机可以配置有一个或多个虚拟网络接口,用于在相应的虚拟网络上通信。
27.虚拟网络是在物理网络之上实施的逻辑结构。虚拟网络可用于取代基于vlan的隔离,并在虚拟化数据中心(例如,数据中心10)中提供多租户。每个租户或应用程序可以有一个或多个虚拟网络。除非安全策略明确允许,否则每个虚拟网络都可以与所有其他虚拟网络隔离。
28.虚拟网络可以使用数据中心10边缘路由器(图1中未示出)连接到物理多协议标签交换(mpls)第3层虚拟专用网络(l3vpn)和以太网虚拟专用网络(evpn)网络,并在其上扩展。虚拟网络也可以用于实现网络功能虚拟化(nfv)和服务链。
29.虚拟网络可以使用多种机制来实现。例如,每个虚拟网络可以被实现为虚拟局域网(vlan)、虚拟专用网络(vpn)等。虚拟网络也可以使用两个网络来实现,即由ip结构20和交换结构14组成的物理底层网络和虚拟覆盖网络。物理底层网络的作用是提供“ip结构”,其提供从任何物理设备(服务器、存储设备、路由器或交换机)到任何其他物理设备的单播ip连接。底层网络可以提供从网络中的任何点到网络中的任何其他点的统一的低延迟、无阻塞、高带宽连接。
30.如下面关于虚拟路由器21a进一步描述的,在虚拟化服务器12中运行的虚拟路由器使用它们之间的动态“隧道”网格在物理底层网络之上创建虚拟覆盖网络。例如,这些覆盖隧道可以是gre/udp上的mpls隧道或者vxlan隧道、或者nvgre隧道。底层物理路由器和交换机可能不包含虚拟机或其他虚拟执行元件的任何每租户状态,例如,任何媒体访问控制(mac)地址、ip地址或策略。底层物理路由器和交换机的转发表可以例如仅包含物理服务器12的ip前缀或mac地址。(将虚拟网络连接到物理网络的网关路由器或交换机是一个例外,可能包含租户mac或ip地址。)
31.服务器12的虚拟路由器21通常包含每租户状态。例如,可以包含每个虚拟网络的
单独转发表(路由实例)。该转发表包含虚拟机或其他虚拟执行元件(例如,容器舱)的ip前缀(在第3层覆盖的情况下)或mac地址(在第2层覆盖的情况下)。没有单个虚拟路由器21需要包含整个数据中心中所有虚拟机的所有ip前缀或所有mac地址。给定的虚拟路由器21只需要包含那些本地存在于服务器12上的路由实例(即,在服务器12上存在至少一个虚拟执行元件)。
32.网络控制器24或物理网关路由器(或交换机)的控制平面节点之间的控制平面协议可以是bgp(并且可以是用于管理的netconf)。这是相同的控制平面协议,也可以用于mplsl 3vpn和mpls evpn。例如,网络控制器24和虚拟路由器21之间的协议可以基于xmpp。通过xmpp交换的消息模式可能符合mackie等人的“bgp-signaled end-system ip/vpns”,draft-ietf-l3vpn-end-system-06,2016年12月15日,其通过引用整体结合于此。
33.在一些示例中,服务器12可以实现“基于容器”或“操作系统”虚拟化。“基于容器”或“操作系统”虚拟化是指操作系统在单个机器(虚拟或物理)上运行多个隔离的系统的虚拟化。这种隔离的系统表示容器,例如,由开源docker容器应用程序或coreos rkt(“rocket”)提供的容器。像虚拟机一样,每个容器都被虚拟化,并且可以保持与主机和其他容器隔离。然而,与虚拟机不同,每个容器可以省略单独的操作系统,并且仅提供应用程序套件和应用程序特定的库。通常,容器由主机作为隔离的用户空间实例来执行,并且可以与在主机上执行的其他容器共享操作系统和公共库。因此,容器可能比虚拟机需要更少的处理能力、存储和网络资源。一组一个或多个容器可以被配置为共享一个或多个虚拟网络接口,用于在相应的虚拟网络上通信。
34.在一些示例中,容器由其主机内核管理,以允许资源(cpu、内存、块i/o、网络等)的限制和优先级排序,而不需要启动任何虚拟机,在某些情况下,使用名字空间隔离功能,该功能允许操作环境的应用(例如,给定容器)视图的完全隔离,包括进程树、网络、用户标识符和安装的文件系统。在一些示例中,可以根据linux容器(lxc)来部署容器,linux容器是一种操作系统级虚拟化方法,用于使用单个linux内核在控制主机上运行多个隔离的linux系统(容器)。
35.服务器12托管一个或多个虚拟网络的虚拟网络端点,这些虚拟网络在此处由ip结构20和交换结构14表示的物理网络上运行。尽管主要针对基于数据中心的交换网络进行了描述,但是诸如服务提供商网络7之类的其他物理网络可以作为一个或多个虚拟网络的基础。
36.每个服务器12可以托管一个或多个虚拟执行元件,每个虚拟执行元件具有在物理网络中配置的一个或多个虚拟网络的至少一个虚拟网络端点。虚拟网络的虚拟网络端点可以表示共享虚拟网络的虚拟网络接口的一个或多个虚拟执行元件。例如,虚拟网络端点可以是虚拟机、一组一个或多个容器(例如,舱)或另一个其他虚拟执行元件,例如,虚拟网络的第3层端点。术语“虚拟执行元件”包括虚拟机、容器和为应用程序提供至少部分独立的执行环境的其他虚拟化计算资源。术语“虚拟执行元件”也可以包含一个或多个容器的舱。如图1所示,服务器12a以虚拟执行元件22a-22n(统称为“ve 22”)的形式托管虚拟网络端点。考虑到服务器12的硬件资源限制,服务器12可以执行尽可能多的虚拟执行元件。每个虚拟网络端点可以使用一个或多个虚拟网络接口来执行数据包i/o或以其他方式处理数据包。例如,虚拟网络端点可以使用nic 13a启用的一个虚拟硬件组件(例如,sr-iov虚拟功能)来
执行数据包i/o,并在与tor交换机16a的一个或多个通信链路上接收/发送数据包。下面描述虚拟网络接口的其他示例。
37.每个服务器12包括至少一个网络接口卡(nic)13,每个nic包括通过通信链路与tor交换机16交换数据包的至少一个接口。例如,服务器12a包括nic 13a。任何nic 13可以为虚拟化的输入/输出(i/o)提供一个或多个虚拟硬件组件。用于i/o的虚拟硬件组件可以是物理nic 13的虚拟化(“物理功能”)。例如,在外围组件接口特别兴趣组sr-iov规范中描述的单根i/o虚拟化(sr-iov)中,网络接口卡(或“网络适配器”)的pcie物理功能被虚拟化,以将一个或多个虚拟网络接口呈现为“虚拟功能”,供在服务器12上执行的各个端点使用。这样,虚拟网络端点可以共享相同的pcie物理硬件资源,并且虚拟功能是虚拟硬件组件的示例。作为另一示例,一个或多个服务器12可以实现virtio,这是一种可用于例如linux操作系统的准虚拟化(para-virtualization,半虚拟化)框架,其提供仿真nic功能,作为一种虚拟硬件组件,以向虚拟网络端点提供虚拟网络接口。作为另一示例,一个或多个服务器12可以实现开放式vswitch,以在用于托管的虚拟机的一个或多个虚拟nic(vnic)之间执行分布式虚拟多层交换,其中,这种vnic也可以表示向虚拟网络端点提供虚拟网络接口的一种类型的虚拟硬件组件。在某些情况下,虚拟硬件组件是虚拟i/o(例如,nic)组件。在某些情况下,虚拟硬件组件是sr-iov虚拟功能。在一些示例中,服务器12中的任何服务器可以实现linux桥,其模拟硬件桥并且在服务器的虚拟网络接口之间或者在服务器的虚拟网络接口和服务器的物理网络接口之间转发数据包。对于由服务器托管的容器的docker实施方式,在服务器上执行的、在容器之间交换数据包的linux桥或其他操作系统桥可以被称为“docker桥”。本文使用的术语“虚拟路由器”可以包括开放式vswitch(ovs)、ovs桥、linux桥、docker桥或位于主机设备上并且在一个或多个虚拟网络的虚拟网络端点之间执行交换、桥接或路由数据包的其他设备和/或软件,其中,虚拟网络端点由一个或多个服务器12托管。
38.任何nic 13可以包括内部设备开关,以在与nic相关联的虚拟硬件组件之间交换数据。例如,对于支持sr-iov的nic,内部设备交换机可以是虚拟以太网桥(veb),以在sr-iov虚拟功能之间进行切换,并且相应地,在被配置为使用sr-iov虚拟功能的端点之间进行切换,其中,每个端点可以包括客户操作系统。内部设备交换机也可以称为nic交换机,对于sr-iov实施方式,也可以称为sr-iov nic交换机。与nic 13a相关联的虚拟硬件组件可以与第2层目的地址相关联,该第2层目的地址可以由nic 13a或负责配置nic 13a的软件进程来分配。物理硬件组件(或sr-iov实施方式的“物理功能”)也与第2层目的地址相关联。
39.为了在与nic 13a相关联的虚拟硬件组件之间交换数据,内部设备交换机可以执行第2层转发,以在nic 13a的虚拟硬件组件和物理硬件组件之间交换或桥接第2层数据包。每个虚拟硬件组件可以位于将虚拟硬件组件用于i/o的虚拟网络端点的虚拟网络的虚拟局域网(vlan)上。
40.一个或多个服务器12可以均包括虚拟路由器21,虚拟路由器为数据中心10内的相应虚拟网络执行一个或多个路由实例,以提供虚拟网络接口并在虚拟网络端点之间路由数据包。每个路由实例可以与网络转发表相关联。每个路由实例可以表示用于互联网协议虚拟专用网络(ip-vpn)的虚拟路由和转发实例(vrf)。例如,由服务器12a的虚拟路由器21a(图示为“v路由器21a”)从数据中心10的底层物理网络结构(即,ip结构20和交换结构14)接
收的数据包可以包括外部报头,以允许物理网络结构将有效载荷或“内部数据包”用隧道传送到执行虚拟路由器的服务器12a的网络接口卡13a的物理网络地址。外部报头不仅可以包括服务器的网络接口卡13a的物理网络地址,还可以包括虚拟网络标识符,例如,识别一个虚拟网络的vxlan标签或多协议标签交换(mpls)标签以及由虚拟路由器21a执行的相应路由实例。内部数据包包括具有目的网络地址的内部报头,该目的网络地址符合由虚拟网络标识符识别的虚拟网络的虚拟网络寻址空间。
41.虚拟路由器21端接虚拟网络覆盖隧道,并基于数据包的隧道封装报头来确定接收到的数据包的虚拟网络,并将数据包转发到数据包的适当目的虚拟网络端点。例如,对于服务器12a,对于从服务器12a托管的虚拟网络端点(例如,ve 22a)出站的每个数据包,虚拟路由器21a附加指示数据包的虚拟网络的隧道封装报头,以生成封装的或“隧道”数据包,并且虚拟路由器21a经由虚拟网络的覆盖隧道将封装的数据包输出到物理目的地计算设备,例如,服务器12中的另一个。如本文所使用的,虚拟路由器21可以执行隧道端点的操作,来封装由虚拟网络端点发起的内部数据包,以生成隧道数据包,并且解封装隧道数据包,以获得用于路由到其他虚拟网络端点的内部数据包。在图1的示例中,虚拟路由器21可以在内核、用户空间中被实现为sr-iov虚拟功能或智能nic。
42.计算基础设施8实现自动化平台,用于跨服务器12自动化虚拟执行元件的部署、缩放和操作,以提供用于执行应用程序工作负载和服务的虚拟化基础设施。在一些示例中,该平台可以是容器编排平台,其提供以容器为中心的基础设施,用于自动化容器的部署、缩放和操作,以提供以容器为中心的基础设施。在虚拟化计算基础设施的上下文中,“编排”通常指向编排平台可用的主机服务器供应、调度和管理虚拟执行元件和/或在这种虚拟执行元件上执行的应用和服务。具体而言,容器编排允许容器协调,并且指例如通过容器编排平台对主机服务器的容器的部署、管理、缩放和配置。编排平台的示例包括kubernetes、docker swarm、mesos/marathon、openshift、openstack、vmware和amazon ecs。
43.计算基础设施8的自动化平台的元件至少包括服务器12、编排器23和网络控制器24。可以使用基于集群的框架将虚拟执行元件部署到虚拟化环境,其中,集群的集群管理节点(master node)管理容器到集群的一个或多个集群工作节点(minion node)的部署和操作。本文使用的术语“管理节点”和“工作节点”包含用于类似设备的不同编排平台术语,其区分主要是集群的管理元件和主要是集群的虚拟执行元件主机设备。例如,kubernetes平台使用术语“集群管理节点”和“工作节点”,而docker swarm平台是指集群管理器和集群节点。
44.编排器23和网络控制器24一起实现计算基础设施8的控制器5。编排器23和网络控制器24可在单独的计算设备上执行,或者在同一计算设备上执行。编排器23和网络控制器24中的每一个都可以是在一个或多个计算设备上执行的分布式应用。编排器23和网络控制器24可以为一个或多个集群实现相应的管理节点,每个集群具有由相应的服务器12实现的一个或多个工作节点。通常,网络控制器24控制数据中心10结构的网络配置,例如,为虚拟网络端点之间的数据包通信建立一个或多个虚拟网络。网络控制器24提供逻辑上并且在某些情况下物理上集中的控制器,用于促进数据中心10内的一个或多个虚拟网络的操作。在一些示例中,网络控制器24可以响应于从编排器23和/或管理员/操作员接收的配置输入而操作。关于结合数据中心10的其他设备或其他软件定义的网络操作的网络控制器24的额外
信息见2013年6月5日提交的题为“physical path determination for virtual network packet flows”的国际申请号pct/us2013/044378;以及2014年3月26日提交的题为“tunneled packet aggregation for virtual networks”的美国专利申请号14/226,509,每个申请通过引用结合于此,如同在此完全阐述一样。美国专利申请号14/226,509还包括对虚拟路由器的进一步描述,例如,虚拟路由器21a。
45.通常,编排器23控制服务器12集群中的虚拟执行元件的部署、缩放和操作,并提供计算基础设施,可以包括以容器为中心的计算基础设施。编排器23以及在某些情况下网络控制器24可以为一个或多个kubernetes集群实现相应的集群主机。作为一个示例,kubernetes是提供跨公共云和私有云的可移植性的容器管理平台,公共云和私有云都可以为容器管理平台提供虚拟化基础设施。
46.根据本公开中描述的技术,虚拟路由器被配置为捕捉丢失数据包,并创建具有与丢失数据包相关联的丢失信息的修改的丢失数据包,以提供丢失数据包的更多细节,用于进一步分析和/或可用性。在图1所示的示例中,管理员或用户可以使用控制器5来配置虚拟路由器21a,以捕捉要丢失的数据包,创建具有指定关于该数据包的细节的丢失信息的修改的丢失数据包,并将修改的丢失数据包提供给接口28(本文称为“丢失接口28”),以将修改的丢失数据包传送给在虚拟路由器21a的用户空间中执行的进程,以显示和/或进一步分析修改的丢失数据包。例如,管理员或用户可以使用控制器5来配置虚拟路由器21a,以捕捉丢失数据包,并提供所有捕捉的丢失数据包、基于特定丢失类型的丢失数据包、和/或基于特定丢失类型并源自特定主机(例如,一个或多个ve 22)的丢失数据包的修改的丢失数据包。丢失类型可以包括片段丢失、接口丢失、数据包流丢失、网络拥塞丢失、路由错误导致的丢失等。在一些示例中,管理员或用户可以使用控制器5来进一步指定参数,以根据所公开的技术来控制虚拟路由器21a何时提供对丢失数据包的捕捉和监控。例如,管理员或用户可以使用控制器5来指定虚拟路由器21a在检测到特定数量的特定丢失类型的丢失数据包之后提供对丢失数据包的捕捉和监控。
47.虚拟路由器21a还可以被配置为响应于确定数据包将被丢失,创建修改的丢失数据包(例如,通过修改丢失数据包或丢失数据包的副本),以包括指定关于丢失数据包的细节的信息。作为一个示例,虚拟路由器21a可以将指定关于丢失数据包的细节的信息,例如,丢失数据包的一个或多个属性(例如,发生丢失的内容、地点和时间)以及与丢失数据包相关联的上下文特定信息(例如,为什么丢失该数据包)封装到修改的丢失数据包。丢失数据包的一个或多个属性可以包括诸如丢失类型、发生丢失的位置(例如,实现虚拟路由器的软件中的位置、接收丢失数据包的接口等)的信息和/或发生丢失的时间(例如,时间戳)。与丢失数据包相关联的上下文特定信息可以指示确定该数据包将被丢失的原因(例如,丢失数据包的路由信息、查找表导致的错误等)。上下文特定信息可以根据丢失类型而变化。如下面进一步描述的,在修改的丢失数据包的有效载荷中指定丢失数据包,在修改的丢失数据包的报头的第一部分中指定丢失数据包的一个或多个属性,并且在修改的丢失数据包的报头的第二部分中指定与丢失数据包相关联的上下文特定信息。
48.虚拟路由器21a被配置为向丢失接口28提供修改的丢失数据包,以经由内部通信信道将修改的丢失数据包传送给由虚拟路由器21a执行的进程(或外部数据包分析器工具)。在一些示例中,该进程由服务器12a提供(例如,由命令行接口(cli)执行的tcpdump进
程),或者是外部数据包分析器工具(例如,wireshark)。在一些示例中,虚拟路由器21a可以向控制器5提供修改的丢失数据包,以获得额外的可用性(例如,经由服务器12a的虚拟路由器代理)。
49.一旦被配置为捕捉和修改丢失数据包,虚拟路由器21a可以从接口(例如,虚拟网络接口26a或nic 13a)接收数据包,并确定该数据包将丢失(例如,由于片段表已满而导致的片段丢失)。作为响应,虚拟路由器21a创建修改的丢失数据包(例如,修改原始数据包或原始数据包的副本),并且包括丢失数据包的一个或多个属性以及与丢失数据包相关联的上下文特定信息。例如,虚拟路由器21a可以封装修改的丢失数据包的报头,该报头包括指定丢失数据包的属性的报头的第一部分和指定与丢失数据包相关联的上下文特定信息的报头的第二部分。丢失接口28可以获得包括与丢失数据包相关联的一个或多个属性和上下文特定信息的修改的丢失数据包,丢失接口28又可以经由内部通信信道将修改的丢失数据包传送到虚拟路由器21a的进程或外部数据包分析器工具,管理员或用户可以从该外部数据包分析器工具对修改的丢失数据包执行进一步分析。
50.图2是示出根据本公开中描述的技术的包括指定关于丢失数据包的细节的信息的修改的丢失数据包的示例数据包格式的框图。图2的示例中的修改的丢失数据包200可以表示由图1中描述的虚拟路由器21a生成的修改的丢失数据包的示例。
51.修改的丢失数据包200包括报头,该报头包括指定丢失数据包的一个或多个属性204的第一部分。在该示例中,属性204可以包括丢失类型204a、文件名204b、行号204c、版本204d、时间戳204e和/或接口204f。例如,丢失类型204a可以指定丢失的类型,例如,片段丢失、接口丢失、数据包流丢失、网络拥塞丢失、路由误差导致的丢失等。属性204还可以包括发生丢失的位置。例如,服务器12a可以用软件应用程序实现虚拟路由器21a。在该示例中,丢失数据包的属性可以包括实现虚拟路由器21a的软件应用程序的文件名204b、发生丢失的软件应用程序内的行号204c、软件应用程序的版本204d和/或捕捉丢失数据包的接口204f(例如,接口名称)。在一些示例中,修改的丢失数据包200的属性204可以包括丢失数据包的时间,例如,时间戳204e。修改的丢失数据包200的属性204只是一个示例,并且可以包括或多或少的关于数据包丢失的内容、位置和时间的信息。
52.修改的丢失数据包200的报头包括指定描述为什么丢失数据包的上下文特定信息206的第二部分。上下文特定信息206可以根据丢失数据包的类型而变化。作为一个示例,如果丢失类型是片段丢失,则修改的丢失数据包200可以包括关于片段丢失的上下文特定信息,例如,丢失数据包的下一跳标识符206a、与丢失数据包相关联的流标识符206b、丢失数据包的路由206c(例如,从路由查找得到的地址)、和/或关于片段丢失的原因的注释206d(例如,片段表已满)。其他丢失类型可以包括不同的上下文特定信息,这些信息可以用于确定丢失特定丢失类型的数据包的原因。尽管包括丢失信息(例如,属性204和上下文特定信息206)的报头被描述为报头的一部分,但是可以在多个报头中指定丢失信息。
53.修改的丢失数据包200包括指定丢失数据包(例如,原始丢失数据包或丢失数据包的副本)的有效载荷208。在一些示例中,修改的丢失数据包200包括以太网报头202,其指定占位符以太网报头,以使得进程和/或数据包分析器工具能够识别修改的丢失数据包。修改的丢失数据包200的格式仅仅是一个示例,并且可替换地可以被配置为特定数据包分析器工具所支持的任何格式。
54.图3是根据本公开中描述的技术的示例计算设备的框图,该示例计算设备包括虚拟路由器,该虚拟路由器被配置为捕捉丢失数据包并创建具有与丢失数据包相关联的丢失信息的修改的丢失数据包,以提供丢失数据包的更多细节,用于进一步分析和/或可用性。图3的计算设备300可以表示真实或虚拟服务器,并且可以表示图1的任何服务器12的示例实例。在该示例中,计算设备300包括耦接计算设备300硬件环境的硬件组件的总线342。总线342耦接网络接口卡(nic)330、存储磁盘346和一个或多个微处理器310(以下称为“微处理器310”)。nic 330可以是支持sr-iov的。在某些情况下,前端总线可以耦接微处理器310和存储设备344。在一些示例中,总线342可以耦接存储设备344、微处理器310和nic 330。总线342可以表示外围组件接口(pci)快速(pcie)总线。在一些示例中,直接存储器访问(dma)控制器可以控制耦接到总线342的组件之间的dma传输。在一些示例中,耦接到总线342的组件控制耦接到总线342的组件之间的dma传输。
55.微处理器310可以包括一个或多个处理器,每个处理器包括独立的执行单元,以执行符合指令集架构的指令,指令存储在存储介质中。执行单元可以被实现为单独的集成电路(ic)或者可以被组合在一个或多个多核处理器(或“众核”处理器)内,每个多核处理器都使用单个ic(即,芯片多处理器)来实现。
56.磁盘346表示计算机可读存储介质,包括以任何方法或技术实现的易失性和/或非易失性、可移动和/或不可移动介质,用于存储信息,例如,处理器可读指令、数据结构、程序模块或其他数据。计算机可读存储介质包括但不限于随机存取存储器(ram)、只读存储器(rom)、eeprom、闪存、cd-rom、数字多功能光盘(dvd)或其他光存储设备、盒式磁带、磁带、磁盘存储设备或其他磁存储设备,或者可用于存储所需信息并可由微处理器310访问的任何其他介质。
57.主存储器344包括一个或多个计算机可读存储介质,可包括随机存取存储器(ram),例如,各种形式的动态ram(dram),例如,ddr2/ddr3sdram,或静态ram(sram)、闪存或任何其他形式的固定或可移动存储介质,可用于以指令或数据结构的形式传送或存储所需的程序代码和程序数据,并可由计算机访问。主存储器344提供由可寻址存储位置组成的物理地址空间。
58.网络接口卡(nic)330包括一个或多个接口332,该接口被配置为使用基础物理网络的链路交换数据包。接口332可以包括具有一个或多个网络端口的端口接口卡。nic 330还可以包括例如用于存储数据包数据的卡上存储器。nic 330和耦接到总线342的其他设备之间的直接存储器访问传输可以从/向nic存储器读/写。
59.存储器344、nic 330、存储磁盘346和处理器310可为软件堆栈提供操作环境,该软件堆栈包括在内核空间中执行的操作系统内核314。内核314可以表示例如linux、berkeley软件分发(bsd)、另一unix变体内核或可从微软公司获得的windows服务器操作系统内核。在一些实例中,操作系统可以执行管理程序和由管理程序管理的一个或多个虚拟机。示例管理程序包括用于linux内核的基于内核的虚拟机(kvm)、xen、可从vmware获得的esxi、可从微软获得的windows hyper-v以及其他开源和专有管理程序。术语管理程序可以包含虚拟机管理器(vmm)。包括内核314的操作系统为用户空间345中的一个或多个进程提供执行环境。
60.内核314包括使用网络接口卡330的物理驱动器325。网络接口卡330还可以实现
sr-iov,以使得能够在一个或多个虚拟执行元件之间共享物理网络功能(i/o),例如,虚拟执行元件302a-302b(统称为“虚拟执行元件302”),例如,一个或多个虚拟机或容器。诸如虚拟功能的共享虚拟设备可以提供专用资源,使得每个虚拟执行元件302可以访问nic 330的专用资源,因此,对于每个虚拟执行元件302来说,nic 330表现为专用nic。虚拟功能可以表示与物理驱动器325使用的物理功能以及其他虚拟功能共享物理资源的轻量级pcie功能。对于支持sr-iov的nic 330,根据sr-iov标准,nic 330可以具有数千个可用的虚拟功能,但是对于i/o密集型应用,所配置的虚拟功能的数量通常要少得多。
61.计算设备300可连接至物理网络交换结构,该结构包括覆盖网络,该覆盖网络将交换结构从物理交换机延伸至耦合至交换结构的物理服务器的软件或“虚拟”路由器,包括虚拟路由器320。虚拟路由器可以是由物理服务器(例如,图1的服务器12)执行的进程或线程或其组件,其动态地创建和管理可用于虚拟网络端点之间的通信的一个或多个虚拟网络。在一个示例中,虚拟路由器使用覆盖网络来实现每个虚拟网络,覆盖网络提供了将端点的虚拟地址与端点在其上执行的服务器的物理地址(例如,ip地址)分离的能力。每个虚拟网络可以使用其自己的寻址和安全方案,并且可以被视为与物理网络及其寻址方案正交。可以使用各种技术在物理网络上的虚拟网络内和虚拟网络间传输数据包。本文使用的术语“虚拟路由器”可以包括open vswitch(ovs)、ovs网桥、linux网桥、docker网桥或位于主机设备上并且在一个或多个虚拟网络的虚拟网络端点之间执行交换、桥接或路由数据包的其他设备和/或软件,其中,虚拟网络端点由一个或多个服务器12托管。
62.在图3所示的示例中,虚拟路由器320可以作为内核模块执行。在一些示例中,虚拟路由器可以作为用户空间数据平面开发工具包(dpdk)进程(未示出)来执行。在2021年3月1日提交的印度临时专利申请号202141008464中描述了作为用户空间dpdk进程执行的虚拟路由器的其他示例,其全部内容通过引用结合于此。
63.虚拟路由器代理316使用信道连接到网络控制器24,该信道用于下载配置和转发信息。虚拟路由器代理316将该转发状态编程到由虚拟路由器320表示的虚拟路由器数据(或“转发”)平面。虚拟路由器代理316可以作为用户空间进程执行。
64.虚拟路由器320可以替换和包含通常用于kubernetes部署舱的linux网桥/ovs模块的虚拟路由/桥接功能。虚拟路由器320可以为虚拟网络执行桥接(例如,e-vpn)和路由(例如,l3vpn、ip-vpn)。虚拟路由器320可以执行网络服务,例如,应用安全策略、nat、多播、镜像和负载平衡。
65.虚拟路由器320可以是多线程的,并且在一个或多个处理器核上执行,例如,转发核321a-321c(统称为“转发核321”)。虚拟路由器320的转发核321可以实现数据包处理流水线。根据要应用于数据包的操作,虚拟路由器代理316可以从最简单到最复杂的方式来缝合流水线。虚拟路由器320可以维护转发信息的多个实例。虚拟路由器300可以使用rcu(读取拷贝更新)锁来访问和更新表。虚拟路由器320可以包括映射到转发核321的多个队列,例如,队列334,当在处理流水线内处理数据包时使用这些队列。
66.为了向其他计算节点或交换机发送数据包,虚拟路由器320使用一个或多个物理接口332。通常,虚拟路由器320与虚拟执行元件(例如,vm或舱)提供的工作负载交换覆盖数据包。虚拟路由器320具有多个虚拟网络接口(例如,vifs)。这些接口可以包括内核接口vhost0,用于与主机操作系统交换数据包;与虚拟路由器代理316的接口pkt0,用于从网络
控制器获得转发状态并发送异常数据包。可能存在对应于一个或多个物理网络接口332的一个或多个虚拟网络接口。
67.虚拟路由器320的其他虚拟网络接口用于与工作负载交换数据包。图3中示出了虚拟路由器320的虚拟网络接口312、313。虚拟网络接口312、313可以是任何前述类型的虚拟接口。在一些情况下,虚拟网络接口312、313是tap接口,以使得tap设备(例如,虚拟路由器320)能够将数据包转发到用户空间345。
68.在虚拟路由器320的基于内核的部署中,虚拟路由器320作为内核模块安装在操作系统内。虚拟路由器320用tcp/ip栈记录自己,以从它想要的任何期望的操作系统接口接收数据包。接口可以是绑定、物理、tap(针对vm)、veth(针对容器)等。该模式中的虚拟路由器320依赖于操作系统来发送和接收不同接口的数据包。例如,操作系统可以展示由vhost-net驱动程序支持的tap接口,以与vm(例如,虚拟执行元件302)通信。一旦虚拟路由器320记录了来自该tap接口的数据包,tcp/ip栈就向其发送所有数据包。虚拟路由器320经由操作系统接口发送数据包。此外,nic队列(物理或虚拟)由操作系统处理。
69.在虚拟路由器320的基于dpdk的部署中(未示出),虚拟路由器320安装为链接到dpdk库的用户空间345应用程序。这可能导致比基于内核的部署更快的性能,尤其是在存在高数据包速率的情况下。dpdk的轮询模式驱动程序(pmd)使用物理接口332,而不是内核的基于中断的驱动程序。物理接口332的寄存器可以暴露在用户空间345中,以便pmd可以访问;以这种方式绑定的物理接口332不再由主机操作系统管理或对其可见,并且基于dpdk的虚拟路由器管理物理接口332。这包括数据包轮询、数据包处理和数据包转发。换言之,用户数据包处理步骤由虚拟路由器220dpdk数据平面执行。当数据包速率较高时,与虚拟路由器320的基于内核的部署的中断模式相比,这种“轮询模式”的性质使得虚拟路由器dpdk数据平面数据包处理/转发更有效。与内核模式虚拟路由器相比,在数据包i/o期间有相对较少的中断和上下文切换,并且在一些情况下可以完全避免数据包i/o期间的中断和上下文切换。
70.计算设备30包括虚拟路由器代理316,其控制计算设备300的虚拟网络覆盖,并编排计算设备300内数据包的路由。通常,虚拟路由器代理316与用于虚拟化基础设施的网络控制器24通信,网络控制器生成命令,以创建虚拟网络并配置网络虚拟化端点,例如,计算设备300,更具体地,虚拟路由器320以及虚拟网络接口,例如,虚拟网络接口312和313。通过基于从网络控制器24接收的信息配置虚拟路由器320,虚拟路由器代理316可以支持配置网络隔离、基于策略的安全性、网关、源网络地址转换(snat)、负载平衡器和用于编排的服务链能力。
71.在一个示例中,由虚拟网络域内的虚拟执行元件302a-302b生成或消费的网络数据包(例如,第三层(l3)ip数据包或第二层(l2)以太网数据包)可封装在由物理网络传输的另一数据包(例如,另一ip或以太网数据包)中。在虚拟网络中传输的数据包在本文可以被称为“内部数据包”,而物理网络数据包在本文可以被称为“外部数据包”或“隧道数据包”。路由器320可以执行虚拟网络数据包在物理网络数据包内的封装和/或解封装。该功能在本文被称为隧道,并且可以用于创建一个或多个覆盖网络。除了ipinip之外,可以使用的其他示例隧道协议包括通用路由封装(gre)上的ip、vxlan、gre上的多协议标签交换(mpls)、用户数据报协议上的mpls(udp)等。虚拟路由器320对源自/去往任意虚拟执行元件302的数据
包执行隧道封装/解封装,并且虚拟路由器320经由总线342和/或nic 330的桥与虚拟执行元件302交换数据包。
72.如上所述,网络控制器24可提供逻辑集中式控制器,以促进一个或多个虚拟网络的操作。网络控制器24可以例如维护路由信息库,例如,存储物理网络以及一个或多个覆盖网络的路由信息的一个或多个路由表。虚拟路由器320为虚拟路由器320作为相应隧道端点操作的相应虚拟网络实现一个或多个虚拟路由和转发示例(vrf)322a-322b。通常,每个vrf322存储对应虚拟网络的转发信息,并识别数据包将被转发到哪里以及数据包是否将被封装在隧道协议中,例如,利用隧道报头,该隧道报头可以包括虚拟网络协议栈的不同层的一个或多个报头。每个vrf 322可以包括存储虚拟网络的路由和转发信息的网络转发表。
73.nic 330可接收隧道数据包。虚拟路由器320处理隧道数据包,以从隧道封装报头确定内部数据包的源和目的地端点的虚拟网络。虚拟路由器320可以剥离第2层报头和隧道封装报头,以仅在内部转发内部数据包。隧道封装报头可以包括虚拟网络标识符,例如,vxlan标签或mpls标签,其指示虚拟网络,例如,对应于vrf 322a的虚拟网络。vrf 322a可以包括内部数据包的转发信息。例如,vrf 322a可以将内部数据包的目的地第3层地址映射到虚拟网络接口312。作为响应,vrf 322a经由虚拟网络接口312将内部数据包转发给虚拟执行元件302a。
74.虚拟执行元件302a-302b也可以将内部数据包作为源虚拟网络端点。例如,虚拟执行元件302a可以生成去往由另一计算设备(即,不是计算设备300)执行的目的地虚拟网络端点或另一个虚拟执行元件(例如,虚拟执行元件302b)的第3层内部数据包。虚拟执行元件302a经由连接到vrf 322a的虚拟网络接口312向虚拟路由器320发送第3层内部数据包。
75.虚拟路由器320接收内部数据包和第2层报头,并确定内部数据包的虚拟网络。虚拟路由器320可以使用任何上述虚拟网络接口实现技术(例如,macvlan、tap、veth等)来确定虚拟网络。虚拟路由器320使用对应于内部数据包的虚拟网络的vrf 322a来生成内部数据包的外部报头,该外部报头包括覆盖隧道的外部ip报头和标识虚拟网络的隧道封装报头。虚拟路由器320用外部报头封装内部数据包。虚拟路由器320可以用新的第2层报头封装隧道数据包,该新的第2层报头具有与计算设备300外部的设备(例如,tor交换机16或一个服务器12)相关联的目的地第2层地址。如果在计算设备300的外部,则虚拟路由器320向nic 330输出具有新的第2层报头的隧道数据包。nic 330在出站接口上输出数据包。如果目的地是在计算设备300上执行的另一虚拟网络端点,则虚拟路由器320将数据包路由到虚拟网络接口312、313中适当的一个。
76.在一些示例中,计算设备300的控制器(例如,图1的网络控制器24)在每个虚拟执行元件302中配置默认路线,以使得虚拟执行元件302使用虚拟路由器320作为出站数据包的初始下一跳。在一些示例中,nic 330配置有一个或多个转发规则,以使得从虚拟执行元件302接收的所有数据包被交换到虚拟路由器320。
77.网络模块306可以获得接口配置数据,用于为虚拟执行元件302配置虚拟网络接口。虚拟路由器代理316作为虚拟网络控制平面模块运行,用于使网络控制器24能够配置虚拟路由器320。虚拟网络控制平面(包括用于工作节点的虚拟路由器代理316和网络控制器24)管理部分由工作节点的虚拟路由器320在数据平面中实现的虚拟网络的配置。虚拟路由器代理316向网络模块306传送虚拟网络接口的接口配置数据,以使编排平面元件(即网络
模块306)能够根据网络控制器24确定的配置状态来配置虚拟网络接口,从而桥接编排控制平面和虚拟网络控制平面之间的间隙。此外,这可以使网络模块306能够获得虚拟执行元件的多个虚拟网络接口的接口配置数据,并配置多个虚拟网络接口,这可以减少调用单独的网络模块306来配置每个虚拟网络接口所固有的通信和资源开销。
78.根据本公开中描述的技术,虚拟路由器320被配置为捕捉丢失数据包,并创建具有与丢失数据包相关联的丢失信息的修改的丢失数据包,以提供丢失数据包的更多细节,用于进一步分析和/或可用性。
79.在图3所示的示例中,虚拟路由器代理316可以接收接口配置数据(例如,经由命令行接口(cli)或其他接口,或者通过从控制器接收的虚拟路由器代理316),以配置虚拟路由器320的丢失接口324,来捕捉丢失数据包,并且创建具有与丢失数据包相关联的丢失信息的修改的丢失数据包。在一些示例中,管理员或用户可以配置丢失接口324来捕捉所有丢失数据包。例如,管理员或用户可以使用控制器5来输入命令dropcap-i vif0/3,以使虚拟路由器320捕捉丢失数据包,为所有丢失数据包创建修改的丢失数据包,并将修改的丢失数据包提供给丢失接口324(vif0/3)。在一些示例中,管理员或用户可以进一步配置丢失接口324,来捕捉特定丢失类型的丢失数据包。例如,管理员或用户可以使用控制器5来输入命令dropcap-i vif0/3-t vp_drop_flow_no_memory,以使虚拟路由器320捕捉丢失数据包,创建由于没有存储器而丢失的流的数据包的修改的丢失数据包(vp_drop_flow_no_memory),并且将修改的丢失数据包提供给丢失接口324。在一些示例中,管理员或用户可以进一步配置丢失接口324,来捕捉特定丢失类型和/或源自特定主机的丢失数据包。例如,管理员或用户可以使用控制器5来输入命令dropcap-i vif0/3-tvp_drop_flow_no_memory host 10.10.10.1,以使虚拟路由器320捕捉丢失数据包,创建由于没有存储器而丢失的流的数据包的修改的丢失数据包(vp_drop_flow_no_memory),并且将修改的丢失数据包提供给丢失接口324。在一些示例中,管理员或用户可以配置丢失接口324,来仅捕捉特定丢失类型的丢失数据包、仅捕捉源自特定主机设备的丢失数据包、源自特定主机的特定丢失类型的丢失数据包、或者丢失参数的任意组合。
80.计算设备300可以包括内部通信信道366,例如,linux套接字,以使得丢失接口324能够经由内部通信信道366将修改的丢失数据包传送到在用户空间345内或计算设备300(例如,数据包分析器工具)外部执行的一个或多个进程,例如,进程308(例如tcpdump)。
81.一旦配置丢失接口324,任何转发核321(例如,转发核321a)可以接收数据包并在其数据包处理流水线内处理该数据包。转发核可以捕捉在数据包处理流水线内处理的数据包,这些数据包被确定为被丢失并且根据用于配置丢失接口324的接口配置数据,向丢失接口324提供修改的丢失数据包(例如,来自特定发起主机的按照丢失类型的所有丢失数据包)。例如,虚拟路由器320可以从接口(例如,nic 330或虚拟网络接口312、313之一)接收数据包,并且转发核321a根据数据包处理流水线来处理数据包。转发核321a可以确定该将在数据包处理流水线中的任何点丢失数据包,例如,由于在数据包处理流水线内发生的数据包处理错误(例如,片段丢失、接口丢失、数据包流丢失、网络拥塞丢失、由于查找表导致的错误而发生的丢失等)。
82.响应于确定该数据包将丢失,转发核321a可以不丢失该数据包,而是创建具有丢失数据包的一个或多个属性(例如,图2的属性204)和上下文特定信息(例如,图2的上下文
特定信息206)的修改的丢失数据包(例如,从原始的丢失数据包或丢失数据包的副本)。在该示例中,转发核321a可以封装修改的丢失数据包的报头,包括报头的第一部分,该第一部分指定诸如丢失类型、实现虚拟路由器320的软件应用程序的文件名、源应用程序中发生丢失的行号、软件应用程序的版本、发生丢失的时间的时间戳和/或接口名称之类的属性。修改的丢失数据包的报头还包括第二部分,该第二部分指定与丢失数据包相关联的上下文特定信息,该信息指示为什么要丢失该数据包(例如,描述在数据包处理流水线内发生的数据包处理错误的原因的信息等)。由转发核321a封装的上下文特定信息可以根据丢失数据包的类型而变化。作为一个示例,虚拟路由器320的转发核321a可以从虚拟网络接口312接收数据包,并且确定将由于片段丢失而丢失该数据包(其将被丢失接口324捕捉)。在该示例中,转发核321a可以创建包括一个或多个属性的修改的丢失数据包,该属性指定指示在其上接收到数据包的虚拟网络接口(例如,vif)的至少一个虚拟网络接口属性和诸如丢失类型(片段丢失)、实现虚拟路由器320的软件应用程序的文件名、发生丢失的源应用程序内的行号、软件应用程序的版本以及发生丢失的时间的时间戳之类的其他属性。转发核321a还可以在修改的丢失数据包中包括上下文特定信息,以指定诸如下一跳标识符、流标识符、路由和/或指示丢失是由于片段表已满的注释之类的信息。
83.转发核321a可以将修改的丢失数据包排队到虚拟路由器320的至少一个队列334中,该队列是与丢失接口324相关联的队列。一个转发核321(例如,转发核321c)可以作为用于从虚拟路由器320的不同接口发送和接收数据包的服务核来操作,可以在基于内核的虚拟路由器320的情况下使用基于中断的驱动程序,或者在作为用户空间345应用程序安装的虚拟路由器320的情况下使用tap驱动程序,以将队列334中的修改的丢失数据包发送到丢失接口324,从而经由内部通信信道366将修改的丢失数据包传送到在用户空间345内执行的进程308或者由计算设备300外部的设备执行的进程。其他转发核321可以类似地捕捉丢失数据包,创建相应的修改的丢失数据包,并将修改的丢失数据包排队到虚拟路由器320的至少一个队列334,服务核可以从该队列将修改的丢失数据包发送到丢失接口324,以将修改的丢失数据包传送到一个或多个进程。
84.在一些示例中,管理员或用户可以使用计算设备300的命令行接口(cli)来显示修改的丢失数据包,以供进一步分析。例如,管理员或用户可以使用进程308,例如,由cli执行的tcpdump进程,来从丢失接口324获得修改的丢失数据包,并且经由显示器显示修改的丢失数据包的一个或多个属性和上下文特定信息。在一些示例中,管理员或用户可以使用由外部设备执行的进程,例如,计算设备300外部的数据包分析器工具(例如,wireshark),其可以从丢失接口324获得修改的丢失数据包,并显示修改的丢失数据包。在一些示例中,进程308可以表示在用户空间345内执行的进程,该进程使得虚拟路由器代理316从丢失接口324获得修改的丢失数据包,并且将修改的丢失数据包提供给控制器(例如,图1的控制器5),用于额外的可用性和/或处理。
85.图4是示出根据本公开中描述的技术的虚拟路由器的示例操作的流程图,该虚拟路由器用于捕捉丢失数据包并用上下文特定信息来修改丢失数据包,以提供丢失数据包的更多细节,用于进一步分析和/或可用性。出于示例的目的,参考图1的服务器12a和服务器12a的组件,例如,图3的计算设备300中的组件,来描述操作。
86.在图4的示例中,计算设备300包括虚拟路由器320,该虚拟路由器配置有到内部通
信信道336的丢失接口324,以将修改的丢失数据包传送给进程308。在一些示例中,虚拟路由器320可以接收数据包(402)并确定该数据包将丢失。例如,虚拟路由器320可以从接口(例如,nic 330或虚拟网络接口312、313之一)接收数据包,并且转发核321a根据数据包处理流水线来处理数据包。虚拟路由器320可以确定将在数据包处理流水线中的任何点丢失数据包,例如,由于在数据包处理流水线内发生的数据包处理错误(例如,片段丢失、接口丢失、数据包流丢失、网络拥塞丢失、由于查找表导致的错误而发生的丢失等)。
87.响应于确定该数据包将丢失,虚拟路由器320可以创建具有与该数据包相关联的丢失信息的修改的丢失数据包(例如,通过修改该数据包或修改该数据包的副本),而不是丢失该数据包(404)。例如,转发核321a可以通过包括修改的丢失数据包来创建修改的丢失数据包,该修改的丢失数据包具有丢失数据包和与丢失数据包相关联的上下文特定信息(例如,图2的上下文特定信息206)的一个或多个属性(例如,图2的属性204)。作为一个示例,虚拟路由器320可以在修改的丢失数据包的有效载荷中指定丢失数据包(丢失数据包的原始或副本),并且用指定一个或多个属性的报头的第一部分和指定与丢失数据包相关联的上下文特定信息的报头的第二部分来封装修改的丢失数据包的报头。
88.虚拟路由器320向到内部通信信道的丢失接口324提供修改的丢失数据包,以经由内部通信信道将修改的丢失数据包传送到进程308(406)。例如,转发核321a可以将修改的丢失数据包排队到虚拟路由器320的至少一个队列334中,该队列是与丢失接口324相关联的队列。其他转发核(例如,转发核321b)也可以向丢失接口324提供相应的修改的丢失数据包,以经由内部通信信道将相应的修改的丢失数据包传送到进程308。可以作为用于从虚拟路由器320的不同接口发送和接收数据包的服务核来操作的一个转发核321(例如,转发核321c),可以在基于内核的虚拟路由器320的情况下使用基于中断的驱动程序,或者在作为用户空间345应用程序安装的虚拟路由器320的情况下使用tap驱动程序,以将队列334中的修改的丢失数据包发送到丢失接口324,从而经由内部通信信道366将修改的丢失数据包传送到进程308(例如,由计算设备300或外部数据包分析器工具提供的cli的tcpdump),管理员或用户可以使用该进程来显示修改的丢失数据包,以供进一步分析。
89.本文描述的技术可以用硬件、软件、固件或其任意组合来实现。被描述为模块、单元或组件的各种特征可以在集成逻辑设备中一起实现,或者作为分立但可互操作的逻辑设备或其他硬件设备单独实现。在一些情况下,电子电路的各种特征可以被实现为一个或多个集成电路设备,例如,集成电路芯片或芯片组。
90.如果以硬件实现,则本公开可以涉及一种设备,例如,处理器或集成电路设备,例如,集成电路芯片或芯片组。替代地或另外,如果以软件或固件实现,则该技术可以至少部分地由包括指令的计算机可读数据存储介质来实现,这些指令在被执行时使处理器执行一种或多种上述方法。例如,计算机可读数据存储介质可以存储由处理器执行的这种指令。
91.计算机可读介质可以形成计算机程序产品的一部分,该计算机程序产品可以包括包装材料。计算机可读介质可以包括计算机数据存储介质,例如,随机存取存储器(ram)、只读存储器(rom)、非易失性随机存取存储器(nvram)、电可擦除可编程只读存储器(eeprom)、闪存、磁或光数据存储介质等。在一些示例中,制品可以包括一个或多个计算机可读存储介质。
92.在一些示例中,计算机可读存储介质可以包括非暂时性介质。术语“非暂时性”可
以表示存储介质不包含在载波或传播信号中。在某些示例中,非暂时性存储介质可以存储可以随时间改变的数据(例如,在ram或高速缓存中)。
93.代码或指令可以是由处理电路执行的软件和/或固件,该处理电路包括一个或多个处理器,例如,一个或多个数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)或其他等效的集成或分立逻辑电路。因此,本文使用的术语“处理器”可以指任何前述结构或者适合于实现本文描述的技术的任何其他结构。此外,在一些方面,可以在软件模块或硬件模块中提供本公开中描述的功能。
技术特征:
1.一种计算设备,包括:内部通信信道;在用户空间中执行的进程;虚拟路由器,包括:处理电路;到所述内部通信信道的丢失接口,其中,所述虚拟路由器被配置为:接收数据包;响应于确定所述数据包将被丢失,创建修改的丢失数据包,以包括与所述数据包相关联的丢失信息;以及将所述修改的丢失数据包提供至丢失接口,以经由所述内部通信信道将所述修改的丢失数据包传送给所述进程。2.根据权利要求1所述的计算设备,其中,为了创建所述修改的数据包,所述虚拟路由器被配置为:将所述丢失信息封装为所述修改的丢失数据包的报头;以及将所述数据包指定为所述修改的丢失数据包的有效载荷。3.根据权利要求1所述的计算设备,其中,所述丢失信息包括:与要丢失的数据包相关联的一个或多个属性;以及与所述要丢失的数据包相关联的上下文特定信息。4.根据权利要求3所述的计算设备,其中,所述一个或多个属性包括丢失类型、实现所述虚拟路由器的软件应用程序的文件名、指示发生丢失所述数据包的确定时执行的指令的行号、所述软件应用程序的版本、或时间戳、或所述虚拟路由器的虚拟网络接口中的一个或多个。5.根据权利要求4所述的计算设备,其中,包括所述虚拟路由器的所述虚拟网络接口的所述一个或多个属性包括:所述修改的丢失数据包中的虚拟网络标识符,其指示在其上接收到所述数据包的所述虚拟网络标识符。6.根据权利要求3所述的计算设备,其中,所述上下文特定信息包括描述在所述虚拟路由器的数据包处理流水线内发生的数据包处理误差的原因的信息。7.根据权利要求1所述的计算设备,其中,所述虚拟路由器作为所述计算设备的内核模块执行。8.根据权利要求1所述的计算设备,其中,所述虚拟路由器作为用户空间数据平面开发工具包(dpdk)进程执行。9.根据权利要求1所述的计算设备,其中,为了创建所述修改的丢失数据包,所述虚拟路由器被配置为:生成所述数据包的副本;以及修改所述数据包的所述副本,以包括与所述数据包相关联的丢失信息。10.根据权利要求1所述的计算设备,其中,为了创建所述修改的丢失数据包,所述虚拟路由器被配置为:
修改所述数据包,以包括与所述数据包相关联的丢失信息。11.根据权利要求1所述的计算设备,其中,创建所述修改的丢失数据包是基于特定的丢失类型的。12.根据权利要求1所述的计算设备,其中,创建所述修改的丢失数据包是基于源自特定主机的数据包的。13.根据权利要求1所述的计算设备,其中,创建所述修改的丢失数据包是基于特定的丢失类型和源自特定主机的数据包的。14.根据权利要求1至13中任一项所述的计算设备,其中,为了向所述丢失接口提供所述修改的丢失数据包,所述虚拟路由器被配置为:由所述虚拟路由器的多个逻辑核中的转发核将所述修改的丢失数据包发送到与所述丢失接口相关联的队列;由所述多个逻辑核中的服务核从所述队列中获得所述修改的丢失数据包;以及由所述服务核将所述修改的丢失数据包发送到所述丢失接口。15.根据权利要求7所述的计算设备,其中,与所述丢失接口相关联的队列包括来自多个逻辑核中的其他转发核的修改的丢失数据包,以及其中,所述虚拟路由器进一步被配置为:由服务核从所述队列中获得来自所述多个逻辑核中的其他转发核的修改的丢失数据包;以及由所述服务核向所述丢失接口发送来自所述多个逻辑核中的其他转发核的所述修改的丢失数据包。16.一种计算机网络数据包处理方法,包括:由计算设备的虚拟路由器接收数据包;响应于确定所述数据包将被丢失,创建修改的丢失数据包,以包括与所述数据包相关联的丢失信息;以及由所述虚拟路由器将所述修改的丢失数据包提供给所述虚拟路由器到所述计算设备的内部通信信道的丢失接口,以经由所述内部通信信道将所述修改的丢失数据包传送给在所述计算设备的用户空间中执行的进程。17.根据权利要求16所述的方法,其中,创建所述修改的丢失数据包,以包括与所述数据包相关联的丢失信息,包括:由所述虚拟路由器将所述丢失信息封装为所述修改的丢失数据包的报头;以及由所述虚拟路由器将所述数据包指定为所述修改的丢失数据包的有效载荷。18.根据权利要求17所述的方法,其中,将所述丢失信息封装为所述修改的丢失数据包的所述报头包括:封装所述报头的第一部分,以包括与要丢失的数据包相关联的一个或多个属性;以及封装所述报头的第二部分,以包括与所述要丢失的数据包相关联的上下文特定信息。19.根据权利要求16至18中任一项所述的方法,其中,向所述虚拟路由器的所述丢失接口提供所述修改的丢失数据包包括:由所述虚拟路由器的多个逻辑核中的转发核将所述修改的丢失数据包发送到与所述
丢失接口相关联的队列;由所述多个逻辑核中的服务核从所述队列中获得所述修改的丢失数据包;以及由所述服务核将所述修改的丢失数据包发送到所述丢失接口。20.一种计算机可读存储介质,用指令进行编码,用于使一个或多个可编程处理器执行根据权利要求16至19中任一项所述的方法。
技术总结
描述了用于捕捉丢失数据包并创建具有与丢失数据包相关联的丢失信息的修改的丢失数据包的技术,以提供丢失数据包的更多细节,用于进一步分析和/或可用性。例如,计算设备包括内部通信信道、在用户空间中执行的进程和虚拟路由器。虚拟路由器包括例如处理电路和到内部通信信道的丢失接口,其中,虚拟路由器被配置为:接收数据包;响应于确定该数据包将丢失,创建修改的丢失数据包,以包括与该数据包相关联的丢失信息;以及将修改的丢失数据包提供给丢失接口,以经由内部通信信道将修改的丢失数据包传送给进程。包传送给进程。包传送给进程。
技术研发人员:基兰
受保护的技术使用者:瞻博网络公司
技术研发日:2022.12.14
技术公布日:2023/7/31
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/