Abstract:
A dynamic service routing protocol (DSRP) communicates messages (e.g., containing information regarding network routes and tables) across a partial-mesh network of nodes. Gateway nodes (i.e., computing devices that operate as a final sink point for a service route) are connected to edge routers (i.e., computing devices that operate as a transit for a service route) but not necessarily to other host nodes. Gateway nodes asynchronously and/or dynamically send DSRP messages for updating the router nodes&#39; routing tables and to minimize manual route configuration.

Description:
CROSS-REFERENCE TO RELATED APPLICATION(S) 
       [0001]    This application is a continuation of U.S. patent application Ser. No. 13/842,766 entitled “DISTRIBUTED SERVICE ROUTING PROTOCOL SUITABLE FOR VIRTUAL NETWORKS,” filed on Mar. 15, 2013, which claims priority to and the benefit of U.S. Provisional Patent Application No. 61/771,780 entitled “DISTRIBUTED SERVICE ROUTING PROTOCOL SUITABLE FOR VIRTUAL NETWORKS,” filed on Mar. 1, 2013, the disclosures of which are incorporated herein by reference in their entireties. 
     
    
     BACKGROUND 
       [0002]    To avoid having a single-point-of-failure (SPOF), some traditional routing protocols, such as RIP or EIGRP, favor using a fully-meshed network where each node is connected to each other node. In a full-mesh network, each node maintains its routing tables and advertises its neighbor tables to each other node in the network. A node&#39;s neighbor table includes a list of nodes immediately adjacent to a given node. Routing tables include information regarding how and to which adjacent node (“neighbor”) to route network traffic (i.e., data packets). The larger the number of nodes in the network, the greater the number and size of neighbor tables and routing tables (“network tables”). Nodes exchange network table contents to other nodes so that the same network topology information is available in every node. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0003]    One or more embodiments is illustrated by way of example and are not limited to the figures of the accompanying drawings, in which like references indicate similar elements. 
           [0004]      FIG. 1  shows an environment of a basic and suitable computer that may employ aspects of the software and/or hardware facilities. 
           [0005]      FIG. 2  is an example of a virtual network that can implement features of the software and/or hardware facilities. 
           [0006]      FIG. 3  is a flow diagram illustrating one example of how the software and/or hardware facility creates neighbor tables and routing tables. 
           [0007]      FIG. 4  is a network data flow diagram illustrative of an example of DSRP messaging. 
           [0008]      FIG. 5  is a network diagram showing an illustrative example for determining neighbor tables. 
           [0009]      FIG. 6  is a network data flow diagram showing an illustrative example for determining a routing table. 
           [0010]      FIG. 7  is a network diagram showing an illustrative example of DSRP convergence. 
           [0011]      FIG. 8  is a flow diagram illustrating one example of how the software and/or hardware facility converges network routes. 
           [0012]      FIG. 9  is a network data flow diagram illustrative of an example of domains. 
       
    
    
     DETAILED DESCRIPTION 
       [0013]    The inventors have recognized that, in virtual computing environments (e.g., having thousands or more virtual network nodes), network table maintenance, routing protocol traffic overhead, and other network operations based on traditional routing protocols (e.g., EIGRP) inefficiently use network resources and are a burden to the network, nodes, and management operations. 
         [0014]    Accordingly, the inventors have developed a routing protocol that communicates messages on a partial-mesh network of nodes for facilitating Internet (or local) data, for example, to a customer node (CN) (e.g., a virtual machine (VM) in a virtual network) via one or more edge routers (ERs) (i.e., computing devices (“transit routers”) that each operate as a transit for a route) and gateway routers (GRs) (i.e., computing devices (“leaf routers”) that each operate as a final sink point for a route). Internet traffic destined to a CN is, in some embodiments, received at an ER and, based on ER&#39;s routing table, routed to a GR for delivery to the CN. In some embodiments, an ER is a distribution router that is between another ER and GR. Distribution routers are used to effectively segment the underlying subnets into more manageable parts for the purposes of scalability. 
         [0015]    A software and/or hardware facility communicates distributed service routing protocol (DSRP) messages, via a network, from GRs to ERs but not between GRs. ERs communicate DSRP messages to other ERs that in turn communicate DSRP messages to other GRs. To construct its neighbor node(s), in one embodiment, a ER sends (e.g., broadcasts) message(s), such as ‘hello’ messages, to discover GRs and/or other ERs that are coupled to the ER&#39;s network interface and on the same network subnet. A GR monitors network traffic via its network interface card and, in some embodiments, receives the ER&#39;s ‘hello’ message. The GR updates its neighbor table to include an entry for the ER because now the GR “knows” that ER is at least one of its neighbor nodes. In response, the GR sends (e.g., via unicast) a hello message to the ER and the ER modifies its neighbor table by associating the GR with the network interface that received GRs&#39; hello message. The GR and ER continue to periodically send each other these hello messages in a “heart beat-like” fashion to ensure that both the GR and the ER are available to receive traffic. If either GR or ER become unavailable (e.g., due to a system failure) the available node (e.g., the ER) detects that it is no longer receiving the unavailable nodes hello message. After a period of time (e.g., an age out time), the available node will flush the unavailable node&#39;s (e.g., the GR&#39;s) entry from its neighbor table and any routes associated with the node from its route table. A routing table includes route entries for directing network traffic (e.g., packets) to each node in its neighbor table. ERs communicate neighbor tables to other ERs to converge network routes across the network to avoid SPOF, for example. Communicating messages to and converging neighbor and routing tables at the ERs, and not the GRs, provides some advantages of traditional networks, such as reliability (e.g., avoiding SPOF), and provides additional benefits, such as smaller neighbor and routing tables. 
         [0016]    For example, in some embodiments, a GR operates as a sink point (i.e., an end point) for a network address and/or network address-port pair (e.g., 192.168.1.1:1234). To establish a route to the sink point, the GR advertises to its neighbor ERs that the GR is the sink for that the network address-port, for example. The ERs add routes to their routing tables to route traffic destined to the network address-port pair, for instance, to the interface connecting the ER and the GR. In some embodiments, establishing routes based on network address-port pairs that provides the benefits that the same IP address can be used for multiple different sink points because each sink point is individually addressable by a unique port (e.g., TCP/UDP) in the address-port pair. For example, a route entry to IP address 192.168.1.1 (paired with TCP 1234) can be used for routing network traffic to a first GR (e.g., GR 1 ), while a separate route entry to IP address 192.168.1.1 (paired with TCP 5678) can be used for routing network traffic to a second GR (e.g., GR 2 ). In some embodiments, the same IP address can be paired with different types of ports (e.g., the same IP address can be separately paired with a TCP and a UDP port). As mentioned above, a GR and ER periodically exchange “heart beat-like” hello messages to inform each node that the other node is properly functioning. When GR 1  unexpectantly becomes unavailable, certain conventional routing technologies would continue to route packets to GR 1  because the ER has not been informed (e.g., via a message from GR 1 ) of GR 1 &#39;s unavailability. To avoid packet loss, the software and/or hardware facilities configures (e.g., by a network provisioning system and/or a management facility) a new GR (e.g., GR 2 ) that is to be a sink for the same network address-port pair that was previously advertised by GR 1 . 
         [0017]    In some embodiments, each GR and ER (and their respective tables) is associated with one or more domains. A domain is a virtualization of network space. For example, each domain has its own GRs, ERs, and network tables that communicate, via DSRP messaging, across a network. One domain can operate using the same subnet as another domain because each domain is isolated. For example, Domain  1  can include an ER that services routes for the 10.0.0.0/24 subnet simultaneously as the same ER services the same 10.0.0.0/24 subnet for Domain  2 . In some embodiments, use of a particular domain is conditioned on the occurrence of an event. For example, ERs and GRs can operate using network tables associated with a first domain when a CN is attempting to connect with a specific node, but operate using network tables associated with a second domain in all other communications. In another example, the software and/or hardware facilities use a particular domain&#39;s configurations based on conditions of various types, such as a time of day, user or network permission, and/or network protocol (e.g., IP, Ethernet). The occurrence of an event can trigger the software and/or hardware facilities to switch from operating using one domain to operating using a different domain. In some embodiments, to distinguish domains, a unique domain ID is associated with each domain (e.g., 123456ABCD=Domain  1 ). Each DSRP message (e.g., hello message, etc.) includes a domain ID and each network table (e.g., neighbor table, route table) is associated with a respective domain ID. A data packet is associated with a default domain until the data packet(s) become associated with a different domain. In various embodiments, to determine a route for a packet stream, the software and/or hardware facilities compares the domain ID associated with a DSRP message to the unique domain ID associated with each domain. If there is a match, one or more packets of the packet stream operate under the characteristics of that domain (e.g., the data packets will route based on a routing table that is associated with the same domain ID as Domain  1 , for example.) 
         [0018]    Various embodiments of the software and/or hardware facilities are described below. The following description provides specific details for a thorough understanding and enabling description of these embodiments. One skilled in the art will understand that the software and/or hardware facilities may be practiced without many of these details. Additionally, some well-known structures or functions may not be shown or described in detail, so as to avoid unnecessarily obscuring the relevant description of the various embodiments. 
         [0019]    The terminology used in the description presented is intended to be interpreted in its broadest reasonable manner, even though it is being used in conjunction with a detailed description of certain specific embodiments of the software and/or hardware facilities. Certain terms may even be emphasized below; however, any terminology intended to be interpreted in any restricted manner will be overtly and specifically defined as such in this Detailed Description section. 
         [0020]    The techniques introduced below can be implemented by programmable circuitry programmed or configured by software and/or firmware, or entirely by special-purpose circuitry, or in a combination of such forms. Such special-purpose circuitry (if any) can be in the form of, for example, one or more application-specific integrated circuits (ASICs), programmable logic devices (PLDs), field-programmable gate arrays (FPGAs), etc. 
         [0021]      FIG. 1  and the following discussion provide a brief, general description of a suitable computing environment in which aspects of the software and/or hardware facilities can be implemented. Although not required, aspects of the software and/or hardware facilities may be described herein in the general context of computer-executable instructions, such as routines executed by a general or special-purpose data processing device (e.g., a server or client computer). Aspects of the software and/or hardware facilities described herein may be stored or distributed on tangible computer-readable media, including magnetically or optically readable computer discs, hard-wired or preprogrammed chips (e.g., EEPROM semiconductor chips), nanotechnology memory, biological memory, or other data storage media. Alternatively, computer-implemented instructions, data structures, screen displays, and other data related to the software and/or hardware facilities may be distributed over the Internet or over other networks (including wireless networks) on a propagated signal on a propagation medium (e.g., an electromagnetic wave, a sound wave) over a period of time. In some implementations, the data may be provided on any analog or digital network (packet switched, circuit switched, or other scheme). 
         [0022]    The software and/or hardware facilities can also be practiced in distributed computing environments where tasks or modules are performed by remote processing devices, which are linked through a communications network, such as a Local Area Network (LAN), Wide Area Network (WAN), or the Internet. In a distributed computing environment, program modules or sub-routines may be located in both local and remote memory storage devices. Those skilled in the relevant art will recognize that portions of the software and/or hardware facilities may reside on a server computer, while corresponding portions reside on a client computer (e.g., PC, mobile computer, tablet, or smart phone). Data structures and transmission of data particular to aspects of the software and/or hardware facilities are also encompassed within the scope of the software and/or hardware facilities. 
         [0023]    Referring to  FIG. 1 , the software and/or hardware facilities employs a computer  100 , such as a personal computer, workstation, phone or tablet, having one or more processors  101  coupled to one or more user input devices  102  and data storage devices  104 . The computer  100  is also coupled to at least one output device such as a display device  106  and one or more optional additional output devices  108  (e.g., printer, plotter, speakers, tactile or olfactory output devices). The computer  100  may be coupled to external computers, such as via an optional network connection  110 , a wireless transceiver  112 , or both. For example, network hubs, switches, routers, or other hardware network components connected directly or indirectly to the network connection  110  and/or wireless transceiver  112  can couple one or more computers  100 . 
         [0024]    The input devices  102  may include a keyboard and/or a pointing device such as a mouse. Other input devices are possible, such as a microphone, joystick, pen, game pad, scanner, digital camera, video camera, and the like. The data storage devices  104  may include any type of computer-readable media that can store data accessible by the computer  100 , such as magnetic hard and floppy disk drives, optical disk drives, magnetic cassettes, tape drives, flash memory cards, digital video discs (DVDs), Bernoulli cartridges, RAMs, ROMs, smart cards, etc. Indeed, any medium for storing or transmitting computer-readable instructions and data may be employed, including a connection port to or node on a network, such as a LAN, WAN, or the Internet (not shown in  FIG. 1 ). 
         [0025]    Each of the above-mentioned features of the software and/or hardware facilities is further described below. 
         [0026]      FIG. 2  is an example of a virtual network  200  that is used to implement features of the software and/or hardware facilities.  FIG. 2  includes the Internet  202  (and/or, any number of networks, such as a service provider network, LAN, management network, etc.), ERs  204   a - 204   n , GRs  206   a - 206   n , and virtual machines (“CNs”)  208 . In some embodiments, a ER (e.g., ER 1   204   a ) is communicatively coupled to the Internet  202  and/or to GRs  206   a - 206   n . In this example, ERs  204   a - 204   b  are fully meshed (i.e., have point-to-point connections) to each GR  206   a - 206   n . For example, ER 1   204   a  is communicatively coupled to GR 1   206   a , GR 2   206   b , and GR 3   206   c . Each GR  206   a - 206   n  is connected to one or more ERs  204   a - 204   n , however, GRs  206   a - 206   n  are not connected to each other. DSRP messages  210  (e.g., routing table information, neighbor table information, hello messages, and route advertisements) are exchanged, in some embodiments, between ERs  204   a - 204   n  and GRs  206   a - 206   n . In some embodiments, DSRP messages  210  are exchanged between ERs  204   a - 204   n . For example, ER  204   a  can exchange its neighbor table (further described in  FIGS. 3-5 ) to ER  204   b , and vice versa. Host node  206   a - 206   n  may optionally be connected to CNs  208 , or other downstream nodes (e.g., routers, switches, firewalls), however, downstream nodes are not required to implement DSRP and other aspects of the software and/or hardware facilities. In some embodiments, GRs  206   a - 206   n  can optionally provide various services to virtual machines  208  and other downstream nodes. For example, GRs  206   a - 206   n  can provide network address translation (NAT) services for CNs  208 . 
         [0027]      FIG. 3  is a flow diagram  300  illustrating an example of how the software and/or hardware facility creates neighbor tables and routing tables. At step  302 , an ER  204   a - 204   n  (e.g., ER  204   a ) broadcasts a message (e.g., a hello or request message)  404   a - 404   b  to subnets associated with its network interfaces  406   a - 406   b , as shown in  FIG. 4 .  FIG. 4  is a network data flow diagram  400  illustrative of an example of DSRP messaging.  FIG. 4  illustrates that ER 1   204   a  broadcasts the message  402  via its interface  406   b . In this example, GRs  206   a - 206   n  receive the broadcast message  402  via their respective network interfaces  416   c - 416   d , and in turn, each reply by sending an a message (e.g., a hello message)  404   a - 404   b  for delivery to ER 1   204   a.    
         [0028]    Returning to  FIG. 3 , at step  304 , each GR that receives the hello request sends a response to the ER that sent the hello request. In some embodiments, messages  404   a - 404   b  are each unicast to ER 1   204   a , however, the software and/or hardware facility can, in some embodiments, send messages  404   a - 404   b  using other transport mechanisms (e.g., broadcast or multicast). Messages  404   a - 404   b  each include a network address (e.g., an IP address) of the respective GR ( 206   a - 206   n ) that sent the message  404  to ER 1  ( 204   a ). For example, assuming GR 1   206   a  has a network address  412   a  (e.g., 192.168.1.10), its message  404   a  includes that network address  412   a . If, for example, GRn  206   n  was configured with a network address  412   b  of 192.168.1.20, its message  404   b  would include that network address  412   b . In some embodiments, an ER (e.g., ER 1   204   a ) broadcasts a request message  402  to an adjacent ER (e.g., ER 2   204   b ) that responds with its own message ( 404 ). 
         [0029]    At step  306 , ERs  204   a - 204   n  create their respective neighbor tables ( 502 ,  510 ) based on information, such as network addresses  404   a - 404   b , included in the messages  404   a - 404   b  received from the GR  206   a - 206   n , as further discussed in reference to  FIG. 5 .  FIG. 5  is a network diagram  500  showing an illustrative example for determining neighbor tables. In particular,  FIG. 5  illustrates an example of ER 1 &#39;s  204   a  neighbor table  502  and ER 2 &#39;s  204   b  neighbor table  510 . As mentioned above, each GR  206   a - 206   n  responds to ER&#39;s  204   a - 204   b  request messages  402  by sending respective messages  404  for delivery to each of ER  204   a  and ER  204   b . In this example, ER 1 &#39;s  204   a  has adjacent neighbors GR 1   206   a , GR 2   206   b , GR 3   206   n , ER 2   204   b , and Internet  202 , each of which may respond to ER 1 &#39;s  204   a  request message  404   a  by sending respective messages  404 . The software and/or hardware facilities determine, based on the messages  404 , one or more entries for its neighbor table  502 . Neighbor table  502  is created and/or modified, in some embodiments, by the software and/or hardware facilities by associating each of ER 1 &#39;s nodes  202 ,  204   b ,  206   a ,  206   b , and  206   n  with the corresponding interfaces  406   a ,  406   b , and  506   a  that received each message  404 . For example, ER 1 &#39;s  204   a  neighbor table  502  associates interface  1  ( 406   a ) with a node in the Internet ( 202 ); interface  2  ( 406   b ) with GRs  206   a ,  206   b , and  206   n ; and interface  3  ( 506   a ) with ER 2   204   b . Similarly, ER 2   204   b  maintains a separate routing table  510  that includes nodes  202 ,  206   b ,  206   c ,  206   n  and  204   a  that are each connected to one of its various interfaces  508   a - 508   c . ER 2 &#39;s  204   b  neighbor table  510  is created and/or modified by the software and/or hardware facilities to associate interface  1  ( 508   a ) with a node in the Internet ( 202 ); interface  2  ( 508   c ) with GRs  206   b ,  206   c , and  206   n ; and interface  3  ( 508   b ) with ER 1   204   a . In some embodiments, each node in the neighbor tables  502  and  510  is associated with its corresponding network address  412   a - 412   b  and  512   a - 512   b.    
         [0030]    Referring to  FIG. 3 , at step  308 , GRs  206   a - 206   n , in some embodiments, advertise to ERs  204   a - 204   n  that they are sink points (i.e., end points) for a network address or network address-port pair  414   a - 414   b  (“sink address”) (e.g., 192.168.1.1:1234), as further explained in reference to  FIG. 4 .  FIG. 4 , illustrates, among other things, route advertisement messages  408  sent from GR 1   206   a  and GR 2   206   n , respectively, for delivery to ER 1   204   a . Route advertisements are, in some embodiments, initially sent after a hello  404  and periodically thereafter. Route advertisement messages  408  inform ERs, such as ER 1   204   a , that the sink address (e.g.,  414   a ) is reachable via GR 1   206   a . In some embodiments, the route advertisement message  408  includes the sink address  414   a - 414   b  of the corresponding GR  206   a - 206   n  that sent the route advertisement message  408 . For instance, if GR 1   206   a  is the sink for sink address  414   a  (e.g.,  17 . 17 . 17 . 1 : 5678 ), its route advertisement message  408  includes that sink address  414   a . The timing of sending a route advertisement message  408  does not necessarily depend on the timing of sending messages  404   a - 404   b . For example, in some embodiments, route advertisement messages  408  are sent before messages  404   a - 404   b  are sent for delivery to ER 1   204   a . In other embodiments, GRs  206   a - 206   n  send route advertisement messages  408  to ER 1   204   a  after messages  404   a - 404   b  are sent for delivery to ER 1   204   a  (as shown in  FIG. 4 ). 
         [0031]    Referring to  FIG. 3 , at step  310 , ERs (e.g., ER 1   204   a ) determine their respective routing tables (e.g., ER 1  routing table  650 ) based on sink addresses  414   a - 414   b  included in the advertisement messages  412   a - 412   b , their own respective neighbor tables (e.g.,  502 ), and/or, in some embodiments, adjacent node&#39;s (e.g., ER 2 &#39;s  206   a ) neighbor table  510 . Step  310  is further discussed in more detail in reference to  FIG. 5 - FIG. 6 .  FIG. 6  is a network data flow diagram  600  showing an illustrative example for determining a routing table. In particular,  FIG. 6  is an example of how the software and/or hardware facility determines a routing table  650  for ER 1   204   a  of  FIG. 5 . Routing table  650 , in some embodiments, is a data structure (e.g., a data table) stored in and/or accessible to ER (e.g., ER 1   204   a ) that lists adjacent routes  652 . Routes  650  (e.g.,  6552   a - 652   i ) are paths to a network destination  610  (e.g., GRs  204   a - 204   n  and other ERs) via a next hop node  615  (e.g. a neighbor node) and, in some cases, one or more metrics (distances)  630  associated with reaching the destination  610 . In some embodiments an interface  640  that is associated with a next hop neighbor  610  is included as part of the route  652   a - 652   i.    
         [0032]    For example, in various embodiments, at least a portion of ER 1 &#39;s  204   a  routing table  650  is determined by the software and/or hardware facilities based on one or more advertisement messages  408  received from each of GR  206   a ,  206   b  and  206   n ; neighbor table  502 ; and ER 2 &#39;s  204   b  neighbor table  510 . For example, routes  652   b - 652   d  are based on corresponding portions of neighbor table  502  (as illustrated by the dotted lines). Route  652   b  defines a path through ER 1 &#39;s interface  2   406  to reach GR 1 &#39;s  206   a  network address  412   a , via next hop GR 1   206   a , based on a metric ( 630   b ) (e.g., metric value 10). Route  652   c  defines a path through ER 1 &#39;s interface  2   406  to reach GR 2 &#39;s  206   a  network address  514   a , via next hop GR 1   206   a , based on a metric ( 630   c ). Route  652   d  defines a path through ER 1 &#39;s interface  2   406  to reach GRn&#39;s  206   n  network address  412   b , via next hop GR 1   206   n , based on a metric  630   d.    
         [0033]    Neighbor tables  502 - 510 , in some embodiments, are exchanged between ERs  240   a - 240   b  via one or more DSRP exchange messages  520  to facilitate network convergence, among other things, by disseminating each ER&#39;s  204   a - 204   b  respective neighbor tables  502  and  510  to each other to avoid packet loss if one ER  204   a - 204   n  should fail, for example. Routes  652   f - 652   i  of routing table  650  are, for example, based on corresponding portions of ER 2 &#39;s neighbor table  510 . In some embodiments, route  652   g  defines a path through ER 1 &#39;s interface  3   506   a  to reach GR 2 &#39;s  206   b  network address  412   b , via next hop ER 2   204   b , based on a metric ( 630   e ) (e.g., a metric value 100), for example. Route  652   g  has, for example, a metric value of 100 ( 630   d ) because the path to GR 2   206   b  is longer and/or slower via route  652   g  than route  652   c  that has a lower metric value of 10  630   c . Similarly, route  652   h  defines a path through ER 1 &#39;s interface  3   506   a  to reach GR 3 &#39;s  206   c  network address  514   b , via next hop GR 1   206   n , based on a metric ( 630   f ). Route  652   i  defines a path through ER 1 &#39;s interface  3   506   a  for a packet to reach GRn&#39;s  206   c  network address  414   b , via next hop ER 1   204   b , based on a metric ( 630   g ). In some embodiments, sink addresses  414   a - 414   b  and  514   a - 514   b , previously advertised to ER 1   204   a  via route advertisement messages  408 , are used by the software and/or hardware facilities for creating additional routes in ER 1 &#39;s routing table  650 . 
         [0034]    A network destination  610 , in some embodiments, is an IP address and port pair (e.g., 192.168.100.1/24). The software and/or hardware facilities, in various embodiments, are configured to use the same IP address for multiple nodes by distinguishing different destinations  610  based on a unique port (e.g., TCP/UDP in the network address-port pair  414   a - 414   b . For example, sink addresses  414   a - 414   b  and  514   a - 514   b  can share the same network address (e.g., 192.168.100.1) and different port numbers (e.g., TCP 80, TCP 12345, UDP 3500, UDP 1234, etc.) Each destination sink address  414   a - 414   b  and  515   a - 514   b , in some embodiments, is associated with routing table entry  652  in routing table  650 . Sharing network addresses can simplify IP address management and allow routes to be based on ports rather than on a unique IP address. In some embodiments, routes (e.g., route  652   a  and/or  652   i ) are static. Static routes are fixed rather than being the result of DSRP route exchange messages. Regardless of whether a route  652   a - 652   i  is static or exchanged via DSRP, each route can be based on a shared network address and unique port. Route  652   e  is similar to the routes described above. 
         [0035]      FIG. 7  is a network diagram  700  showing an illustrative example of DSRP convergence.  FIG. 7  includes a web browser  702  that is connected, via the Internet  202 , to ER 1   204   a . ER 1   204   a  is connected to GR 1   206   a  and GR 2   206   b . GR 1   206   a  and GR 2   206   b  are each separately connected to one or more hosts  208  (e.g., virtual machines).  FIG. 8  is a flow diagram  800  illustrating one example of how the software and/or hardware facility converges network routes. Flow diagram  800  describes steps to avoid SPOF after a node (e.g., GR 1   206 ) ceases to function correctly (i.e., it goes down “ungracefully”) and to converge the network tables. This can occur, for example, during a system failure and/or crash. At step  802 , GR 1   206   a  advertises that it is the sink for CN  208  (i.e., a VM configured with a particular network IP address port pair). In step  804 , ER 1   204   a  a creates a route to GR 1   206   a . Step  806  describes that web browser  702  sends network packets (e.g., an HTTP request to view one or more hosts  208  user-interface) to ER 1   204   a . ER 1   204   a  routes the network packets for delivery to host(s)  208  via GR 1   206   a . In step  810 , GR if GR 1   206   a  is available (e.g., it sends hello messages), then, in step  812 , ER 1   204   a  will continue to route packets, via GR 1   206   a , for delivery to host(s)  208 . However, if GR 1   206   a  is unavailable (e.g., GR 1  crashed without informing ER 1   204   a ) then, in step  816 , GR 2   204   b  is configured as the sink for the network address port pair. In step  818 , GR 2   206   b  advertises to ER 1   204   a  that it is the sink for the network address port pair. In step  820 , ER 1   204   a  honors GR 2 &#39;s advertisement and updates its routing table (e.g.,  650 ) to route to GR 2   206   b  any traffic that is destined to the sink address, even while the previous route to the sink address has not expired and/or has been not been removed from ER 1 &#39;s  204   a  routing table (e.g.,  650 ). Therefore, in some embodiments, the software and/or hardware facilities determines routes based on the last (i.e., the more recent) route advertisement message  408 . In step  822 , web browser&#39;s  702  traffic is routed to GR 2  via the new route. In step  824 , the decision is made whether or not GR 1  is now available. If GR 1   206   a  is not available, step  826 , traffic will continue to be routed to GR 2   206   b  to reach host  208 , step  822 . However, if GR 1   206   a  is available, the process flows to step  830 . At step  830 , GR 1   206   a  advertises that it is the sink for host  208 , for example, and ER 1   204   a  creates a route to host(s)  208  via GR 1   206   a . At step  832 , ER 1   204   a  routes web browser  702  traffic to host(s)  208  via GR 1   206   a , because that route was the most recently received route in the routing table (e.g., routing table  650 .) The flow ends at step  834 . 
         [0036]      FIG. 9  is a network data flow diagram  900  illustrative of an example of domains. In particular,  FIG. 9  shows various domains  902   a - 902   b  that are associated with a single node, GR 1   206   a . A domain provides, among other things, network address isolation from other domains; therefore, a single domain can use the same network address-port pairs on the same subnet as another domain. Domain information, in some embodiments, is maintained in a data structure, such as a domain table  902 . Domains have features similar to the features described in reference to  FIGS. 2-8 . For example, each domain  902   a - 902   b  can have its own routing table  650 , neighbor tables  502  and  510 , sink addresses  414   a - 414   b  and  514   a - 514   b , network addresses  414   a - 414   b  and  514   a - 514   b , and DSRP messaging  210 , etc. Each domain  902   a - 902   b , in some embodiments, is configured automatically by the software and/or hardware facilities. In some embodiments, a node  204   a - 204   b  and  206   a - 206   n  can be configured as a GR and/or a ER. For example, GR 1   206   a  can be configured from operating based on a first domain (e.g., domain  1   902   a ) to operating based on a second domain (e.g., domain  2   902   b ) where, in the second domain, GR 1   206   a  is configured to send response request messages  402  (e.g., hello messages), send and receive neighbor table  906   a - 906   b  information, create routing tables  908   a - 908   d , etc. In some embodiments, a domain  902   a - 902   b  is activated based on the occurrence of a condition, such as a time of day, a destination, a source, a user type, etc. 
         [0037]    To determine which domain  902   a - 902   b  a data packet of a packet stream  912  belongs, the software and/or hardware facilities, in some embodiments, associates a unique domain ID  904   a - 904   b  with each respective domain and associates DSRP messages  210  (e.g., packets  912 ) with a separate domain identifier based on, for example, one or more of an inbound interface, destination address information, source addressing information, and events (e.g., time of day). For instance, if a packet&#39;s  912  destination address is associated with a particular domain ID (e.g., based on the packet&#39;s subnet 192.168.0.0/24), the packets  912  may use domain  2 &#39;s  902   b  configurations (e.g.,  906   a  and  908   a ) provided that the domain ID associated with the data packets  912  match the unique domain ID ( 904   b ) associated with Domain  2   902   b . Otherwise, the data packets  912  may default to Domain  1   902   a  or be dropped. 
         [0038]    In general, the detailed description of embodiments of the software and/or hardware facilities is not intended to be exhaustive or to limit the software and/or hardware facilities to the precise form disclosed above. While specific embodiments of, and examples for, the software and/or hardware facilities are described above for illustrative purposes, various equivalent modifications are possible within the scope of the software and/or hardware facilities, as those skilled in the relevant art will recognize. For example, while processes or blocks are presented in a given order, alternative embodiments may perform routines having steps, or employ systems having blocks, in a different order, and some processes or blocks may be deleted, moved, added, subdivided, combined, and/or modified. Each of these processes or blocks may be implemented in a variety of different ways. Also, while processes or blocks are at times shown as being performed in series, these processes or blocks may instead be performed in parallel, or may be performed at different times. 
         [0039]    The teachings of the software and/or hardware facilities provided herein can be applied to other systems, not necessarily the system described herein. The elements and acts of the various embodiments described herein can be combined to provide further embodiments. 
         [0040]    These and other changes can be made to the software and/or hardware facilities in light of the above Detailed Description. While the above description details certain embodiments of the software and/or hardware facilities and describes the best mode contemplated, no matter how detailed the above appears in text, the software and/or hardware facilities can be practiced in many ways. The software and/or hardware facilities may vary considerably in its implementation details, while still being encompassed by the software and/or hardware facilities disclosed herein. As noted above, particular terminology used when describing certain features or aspects of the software and/or hardware facilities should not be taken to imply that the terminology is being redefined herein to be restricted to any specific characteristics, features, or aspects of the software and/or hardware facilities with which that terminology is associated. In general, the terms used in the following claims should not be construed to limit the software and/or hardware facilities to the specific embodiments disclosed in the specification, unless the above Detailed Description section explicitly defines such terms. Accordingly, the actual scope of the software and/or hardware facilities encompasses not only the disclosed embodiments, but also all equivalent ways of practicing or implementing the software and/or hardware facilities.