Session layer communication using ID-oriented network
阅读说明:本技术 一种采用面向id的网络的会话层通信 (Session layer communication using ID-oriented network ) 是由 黎仁蔚 基兰·马可贾尼 于 2018-06-07 设计创作,主要内容包括:本发明提供了用于在两个或两个以上网络端点之间提供会话层连接的系统和方法。通过本发明实施例创建和保持的会话层连接采用端点标识符(EID),并且,当发生网络故障或当端点从一个网络连接移到另一网络连接而导致下层连接中断时,所述会话层连接支持会话层连续性。(The present invention provides systems and methods for providing session layer connections between two or more network endpoints. Session layer connections created and maintained by embodiments of the present invention employ Endpoint Identifiers (EIDs) and support session layer continuity when a network failure occurs or when an endpoint moves from one network connection to another resulting in a break in the underlying connection.)
1. A method for a first network element to establish a session layer connection with a second network element, comprising:
receiving a request from an application layer of the first network element to listen for a session layer connection request, wherein the first network element is identified by a first Endpoint Identifier (EID);
instructing the transport layer of the first network element to monitor a new transport layer connection request;
receiving a first transport layer connection request from the second network element, wherein the transport layer connection request includes a first Internet Protocol (IP) address, the second network element identified by a second EID;
establishing a first transport layer connection with the second network element;
receiving a first session-layer connection request from the second network element, wherein the first session-layer connection request comprises a session Identifier (ID) and the second EID; and
and establishing a session layer connection with the second network element.
2. The method of claim 1, wherein establishing the session layer further comprises sending a session layer acknowledgement message to the second network element over the transport layer connection.
3. The method of claim 1, wherein establishing the session-layer connection further comprises:
receiving credential information from the second network element over the transport layer connection; and
and authenticating the certificate information.
4. The method of claim 1, further comprising:
receiving a first session layer message from the second network element over the session layer connection;
forwarding the first session layer message to the application layer;
receiving a second session layer message from the application layer, wherein the second session layer message contains an instruction indicating that the second session layer message is to be sent to the second network element; and
and sending the second session layer message to the second network element through the session layer connection.
5. The method of claim 4, further comprising:
maintaining a local message sequence number associated with the session layer connection;
inserting the local message sequence number into each of the second session layer messages;
incrementing the local message sequence number after sending each session layer message;
maintaining a local message acknowledgment number associated with the session layer connection; and
and updating the local message confirmation number according to the received message confirmation number extracted from each first session layer message.
6. The method of claim 5, further comprising:
receiving a second transport layer connection request from the second network element, wherein the second transport layer connection request includes the first IP address;
establishing a second transport layer connection with the second network element;
receiving a second session layer resynchronization request from the second network element, wherein the second session layer resynchronization request comprises the session ID and the second EID;
reestablishing the session layer connection with the second network element; and
and resynchronization is carried out on the session layer connection according to the local message sequence number and the local message confirmation number.
7. The method of claim 5, further comprising:
receiving a second transport layer connection request from the second network element, wherein the second transport layer connection request includes a second IP address;
establishing a second transport layer connection with the second network element;
receiving a second session layer resynchronization request from the second network element, wherein the second session layer resynchronization request comprises the session ID and the second EID;
reestablishing the session layer connection with the second network element; and
and resynchronization is carried out on the session layer connection according to the local message sequence number and the local message confirmation number.
8. The method of claim 4, wherein each of the first session layer messages comprises a session header, wherein the session header comprises the session ID, the first EID, the second EID, a message sequence number, and a message acknowledgement number.
9. A method for a first network element to establish a session layer connection with a second network element, comprising:
receiving a request to establish a new session-layer connection from an application layer of the first network element, wherein the first network element is identified by a first Endpoint Identifier (EID), the second network element is identified by a second EID, and the request includes the second EID;
converting the second EID to a second Internet Protocol (IP) address associated with the second network element;
generating a session Identifier (ID), wherein the session ID uniquely identifies the session-layer connection;
instructing a transport layer of the first network element to establish a transport layer connection with the second network element in accordance with a first IP address and the second IP address identifying the first network element, wherein the transport layer is associated with the first network element; and
and establishing the session layer connection with the second network element through the transport layer connection and the session ID.
10. The method of claim 9, wherein converting the second EID to the second IP address comprises:
sending a request message to a mapping system, wherein the request message includes the second EID; and
receiving a response message from the mapping system, wherein the response message includes the second IP address.
11. The method of claim 9, further comprising:
receiving a first session layer message from the second network element over the session layer connection;
forwarding the first session layer message to the application layer;
receiving a second session layer message from the application layer, the second session layer message including an instruction to send the second session layer message to the second network element; and
and sending the second session layer message to the second network element through the session layer connection.
12. The method of claim 11, further comprising:
maintaining a local message sequence number associated with the session layer connection;
inserting the local message sequence number into each of the second session layer messages;
incrementing the message sequence number after each session layer message is sent;
maintaining a local message acknowledgment number associated with the session layer connection; and
and updating the local message confirmation number according to the received message confirmation number extracted from each first session layer message.
13. The method of claim 12, further comprising:
identifying an interruption in the transport layer connection;
reestablishing a transport layer connection with the second network element;
receiving a new session layer message from the second network element; and
and resynchronization is carried out on the session layer connection according to the local message sequence number and the local message confirmation number.
14. The method of claim 9, wherein each of the first session layer messages comprises a session header, wherein the session header comprises the session ID, the first EID, the second EID, a message sequence number, and a message acknowledgement number.
15. A first network element, comprising:
a memory for storing programming logic to implement an application layer, a session layer, a transport layer, a network layer, and a network access layer;
a network interface coupled to a second network element over the Internet, wherein the first network element is identified on the Internet by a first Endpoint Identifier (EID) and the second network element is identified on the Internet by a second EID; and
a processor coupled with the memory and the network interface, wherein the processor is configured to:
receiving a request from the application layer of the first network element to listen for a session layer connection request;
instructing the transport layer of the first network element to listen for a new transport layer connection request;
receiving a transport layer connection request from the second network element over the network interface;
establishing a transport layer connection with the second network element through the network interface;
receiving a session layer connection request from the second network element over the network interface, wherein the session layer connection request comprises a session Identifier (ID); and
and establishing a session layer connection with the second network element through the network interface.
16. The first network element of claim 15, wherein the processor is further configured to:
receiving a first session layer message from the second network element over the session layer connection;
forwarding the first session layer message to the application layer of the first network element;
receiving a second session layer message from the application layer of the first network element, wherein the second session layer message contains an instruction to send the second session layer message to the second network element; and
and sending the second session layer message to the second network element through the session layer connection.
17. The first network element of claim 16, wherein each of the first session layer messages comprises a session header, wherein the session header comprises the session ID, the first EID, the second EID, a message sequence number, and a message acknowledgement number.
18. The first network element of claim 17, wherein the memory comprises a local message sequence number and a local message acknowledgement number, and wherein the processor is further configured to:
inserting the local message sequence number into each of the second session layer messages;
incrementing the local message sequence number after sending each session layer message; and
and updating the local message confirmation number according to the received message confirmation number extracted from each first session layer message.
19. The first network element of claim 18, wherein the processor is further configured to:
receiving a second transport layer connection request from the second network element, wherein the second transport layer connection request includes a first Internet Protocol (IP) address;
establishing a second transport layer connection with the second network element;
receiving a second session layer resynchronization request from the second network element, wherein the second session layer resynchronization request comprises the session ID and the second EID;
reestablishing the session layer connection with the second network element; and
and resynchronization is carried out on the session layer connection according to the local message sequence number and the local message confirmation number.
20. The first network element of claim 18, wherein the processor is further configured to:
receiving a second transport layer connection request from the second network element, wherein the second transport layer resynchronization request includes a second Internet Protocol (IP) address;
establishing a second transport layer connection with the second network element;
receiving a second session layer resynchronization request from the second network element, wherein the second session layer connection request comprises the session ID and the second EID;
reestablishing the session layer connection with the second network element; and
and resynchronization is carried out on the session layer connection according to the local message sequence number and the local message confirmation number.
Background
The transmission control protocol/internet protocol (TCP/IP) is a protocol of the public internet (i.e., "internet"). However, as can be seen from a rough comparison between the OSI reference model 100 shown in FIG. 1 and the conventional TCP/IP protocol stack, TCP/IP lacks a "session layer," which is a necessary means for cooperating computers to organize and synchronize their dialogs and manage their data exchanges. Since the conventional TCP/IP protocol stack lacks a formal session layer, the applications are responsible for maintaining their connections to each other and for performing the resynchronization required after all underlying connections are broken.
Disclosure of Invention
Embodiments of the present invention are directed to creating and maintaining session layer connections over a conventional TCP/IP based network.
In a first embodiment, a method for a first network element having a first end point identifier (EID) to establish a session layer connection with a second network element identified by a second EID includes: receiving a request from an application layer for listening to session layer connection requests, wherein the application layer is associated with the first network element; instructing a transport layer to listen for a new transport layer connection request, wherein the transport layer is associated with the first network element; receiving a first transport layer connection request from the second network element, wherein the transport layer connection request includes a first IP address; establishing a first transport layer connection with the second network element; receiving a first session-layer connection request from the second network element, wherein the first session-layer connection request includes a session Identifier (ID) and the second EID; and establishing a session layer connection with the second network element.
In a variation of the first embodiment, establishing the session layer may comprise sending a session layer acknowledgement message to the second network element over the transport layer connection. In a variation of the first embodiment, establishing the session layer connection may comprise: receiving credential information from the second network element over the transport layer connection; and authenticating the certificate information. In a variation of the first embodiment, the method may further comprise: receiving a first session layer message from the second network element over the session layer connection; forwarding the first session layer message to the application layer; receiving a second session layer message from the application layer, wherein the second session layer message contains an instruction indicating that the second session layer message is to be sent to the second network element; and sending the second session layer message to the second network element through the session layer connection. This variant may also include: maintaining a local message sequence number associated with the session layer connection; inserting the local message sequence number into each of the second session layer messages; incrementing the local message sequence number after sending each session layer message; maintaining a local message acknowledgment number associated with the session layer connection; and updating the local message acknowledgement number according to the received message acknowledgement number extracted from each of the first session layer messages. This variant may also include: receiving a second transport layer connection request from the second network element, wherein the second transport layer connection request includes the first IP address; establishing a second transport layer connection with the second network element; receiving a second session layer resynchronization request from the second network element, wherein the second session layer resynchronization request may include the session ID and the second EID; reestablishing the session layer connection with the second network element; and resynchronizing the session layer connection according to the local message sequence number and the local message acknowledgement number. This variant may also include: receiving a second transport layer connection request from the second network element, wherein the second transport layer connection request may include a second IP address; establishing a second transport layer connection with the second network element; receiving a second session layer resynchronization request from the second network element, wherein the second session layer resynchronization request may include the session ID and the second EID; reestablishing the session layer connection with the second network element; and resynchronizing the session layer connection according to the local message sequence number and the local message acknowledgement number. In a further variation, each of the first session layer messages may include a session header, wherein the session header may include the session ID, the first EID, the second EID, a message sequence number, and a message acknowledgement number.
In a second embodiment, a method for establishing a session layer connection, by a first network element identified by a first EID, with a second network element identified by a second EID, comprises: receiving a request from an application layer for establishing a new session layer connection, wherein the request includes the second EID, the application layer associated with the first network element; converting the second EID to a second IP address associated with the second network element; generating a session ID, wherein the session ID uniquely identifies the session layer connection; instructing a transport layer to establish a transport layer connection with the second network element in accordance with a first IP address and the second IP address identifying the first network element, wherein the transport layer is associated with the first network element; and establishing the session layer connection with the second network element through the transport layer connection and the session ID.
In a variation of the second embodiment, converting the second EID to the second IP address may comprise: sending a request message to a mapping system, wherein the request message includes the second EID; and receiving a response message from the mapping system, wherein the response message includes the second IP address.
In a variation of the second embodiment, the method may further comprise: receiving a first session layer message from the second network element over the session layer connection; forwarding the first session layer message to the application layer; receiving a second session layer message from the application layer, wherein the second session layer message contains an instruction indicating that the second session layer message is to be sent to the second network element; and sending the second session layer message to the second network element through the session layer connection. This variant may also include: maintaining a local message sequence number associated with the session layer connection; inserting the local message sequence number into each of the second session layer messages; incrementing the message sequence number after each session layer message is sent; maintaining a local message acknowledgment number associated with the session layer connection; and updating the local message acknowledgement number according to the received message acknowledgement number extracted from each of the first session layer messages. This variant may also include: identifying an interruption in the transport layer connection; reestablishing a transport layer connection with the second network element; receiving a new session layer message from the second network element; and resynchronizing the session layer connection according to the local message sequence number and the local message acknowledgement number. In a variation of this embodiment, each of the first session layer messages includes a session header, wherein the session header includes the session ID, the first EID, the second EID, a message sequence number, and a message acknowledgement number.
In a second embodiment, a first network element identified by a first Endpoint Identifier (EID) comprises: a memory for storing programming logic to implement an application layer, a session layer, a transport layer, a network layer, and a network access layer; a network interface coupled to the second network element through the internet; and a processor coupled with the memory and the network interface. The processor is configured to: receiving a request from the application layer to listen for session layer connection requests; instructing the transport layer to listen for a new transport layer connection request; receiving, over the network interface, a transport layer connection request from the second network element identified by a second EID; establishing a transport layer connection with the second network element through the network interface; receiving a session layer connection request from the second network element over the network interface, wherein the session layer connection request includes a session ID; and establishing a session layer connection with the second network element through the network interface.
In a variation of the third embodiment, each of the first session layer messages may include a session header, wherein the session header includes the session ID, the first EID, the second EID, a message sequence number, and a message acknowledgement number. In this variation, the processor may be configured to: receiving a first session layer message from the second network element over the session layer connection; forwarding the first session layer message to the application layer; receiving a second session layer message from the application layer, wherein the second session layer message contains an instruction indicating that the second session layer message is to be sent to the second network element; and sending the second session layer message to the second network element through the session layer connection. In this variation, the memory may include a local message sequence number and a local message acknowledgement number, and the processor may be configured to: inserting the local message sequence number into each of the second session layer messages; incrementing the local message sequence number after sending each session layer message; and updating the local message acknowledgement number according to the received message acknowledgement number extracted from each of the first session layer messages. In this variation, the processor may be configured to: receiving a second transport layer connection request from the second network element, wherein the second transport layer connection request includes a first IP address; establishing a second transport layer connection with the second network element; receiving a second session layer resynchronization request from the second network element, wherein the second session layer resynchronization request comprises the session ID and the second EID; reestablishing the session layer connection with the second network element; and resynchronizing the session layer connection according to the local message sequence number and the local message acknowledgement number. In this variation, the processor may be configured to: receiving a second transport layer connection request from the second network element, wherein the second transport layer resynchronization request includes a second Internet Protocol (IP) address; establishing a second transport layer connection with the second network element; receiving a second session layer resynchronization request from the second network element, wherein the second session layer connection request comprises the session ID and the second EID; reestablishing the session layer connection with the second network element; and resynchronizing the session layer connection according to the local message sequence number and the local message acknowledgement number.
These and other features will be more clearly understood from the following detailed description taken in conjunction with the accompanying drawings and claims.
Drawings
For a more complete understanding of the present invention, reference is now made to the following brief description, taken in connection with the accompanying drawings and detailed description, wherein like reference numerals represent like parts.
Fig. 1 shows a comparison between the OSI reference model and the conventional TCP/IP model.
Fig. 2 shows a network architecture employed in an embodiment of the present invention.
Figure 3 shows the physical structure of a network element suitable for use as an endpoint in embodiments of the present invention.
Fig. 4 shows a network hierarchy configuration employed in an embodiment of the present invention.
Fig. 5 shows an IP datagram employed in an embodiment of the present invention.
Fig. 6 shows a flow diagram for initiating, adopting and terminating a session-layer connection in an embodiment of the invention.
Fig. 7 shows a session header employed in an embodiment of the present invention.
FIG. 8 illustrates a flow diagram for receiving a session-layer request and employing a session layer in an embodiment of the invention.
FIG. 9 illustrates a flow diagram for session layer connection resynchronization in a client-oriented embodiment of the present invention.
Figure 10 shows a flow diagram of session layer connection resynchronization in a server-oriented embodiment of the present invention.
Detailed Description
Embodiments of the present invention describe a session layer that may operate over a legacy network, such as a TCP/IP network. The disclosed embodiments separate the implementation details of legacy networks from the application layer and protect the application layer from underlying connection disruptions caused by physical disruptions and network address changes. For example, mobile devices essentially move from one location to another, and their network addresses may change as their locations move. In conventional TCP/IP networks, the mobile device must re-establish a connection after its network address changes, and the previous connection information, including connection status, data, authentication, etc., will be lost. With the embodiments of the present invention, the application maintains the connection state, data, authentication, etc., even if the network address or transport layer connection has changed.
More specifically, embodiments of the present invention may create and employ a stateful session layer that sits above the conventional TCP/IP transport layer. In addition, by employing generic session protocols and primitives, embodiments of the invention can decouple session management functions and transport layer implementation details from the application layer. Furthermore, embodiments of the present invention may employ a framework of identity-oriented networks (ION), such as the framework described in "a future-oriented network employs drone ID/locator separation prototypes" and "cross-spool and cross-ecological IoT communications using ID-oriented networks (ION)", published on "the tenth international communication theory, reliability and quality of service conference" from 23 to 27 months 4 to 2017. The ION follows the concept of Identifier (ID) and locator namespace splitting. Traditional IP addresses assume overload semantics of both an endpoint identifier and a route locator. In the literature, several proposals have been made to decouple the IP into two layers, forming an ID layer and an IP layer. The IP layer is kept consistent with successful internet practices to establish global reachability, while the ID layer performs the functions necessary for endpoint identification. The ID layer in the ION framework has two components: a Network Mapping System (NMS) for converting an ID into a locator at each query; an ID Management System (IDMS) for managing the universal identifiers in a centralized or distributed manner. In embodiments of the present invention, the endpoint id (eid) may be defined in terms of traffic, whereby an endpoint may be decoupled from its IP address. To exchange data between two entities in an ION via ID-ID communication, the locator of the endpoint identification is the locator resolved by the mapping system. Thus, by creating a stateful session layer on the ION framework, embodiments of the present invention can provide session continuity and/or seamless mobility when the underlying network changes, i.e., whenever any IP address change occurs.
Embodiments of the present invention may be arranged in a network topology 200 as shown in fig. 2, an endpoint 2101And 2102And the mapping system 230 is connected to the internet 220. The internet 220 may be any network that supports TCP/IP messaging and may include local area network segments, wide area network segments, packet-switched network segments, and the like. Endpoint 2101And 2102May be represented by an Endpoint Identifier (EID)2101And 2102And IP address 2021And 2022To identify. While any given IP address may vary depending on the network topology, the EID uniquely identifies a given endpoint regardless of the network topology. For example, if endpoint 2101Connecting to the internet 220 from a local network may have a first IP address 202 dynamically assigned1(ii) a If endpoint 2101Connected from a different local network, may have a second IP address 2021'; however, regardless of how connected to the Internet 220, its EID2011Will remain unchanged. Mapping system 230 provides translation between EIDs and IP addresses and may be configured as disclosed in U.S. patent application No. 62/421, 015, which is incorporated by reference herein in its entirety.
In an embodiment of the present invention, endpoint 2101And 2102May be configured similar to network element 310 shown in fig. 3, equipped with a processor 303, a memory 304, and a network interface 305. By way of example, and not limitation, the processor 303 may be a central processing unit, a microcontroller, a digital signal processor, an application specific integrated circuit, a plurality and/or combination of any of the foregoing, or any other device suitable for executing a computer program. The processor 303 may have discrete modules for implementing embodiments of the present invention, including a network access layer module 312, a network layer module 313, a transport layer module 314, a session layer module 315, and an application layer module 317. Further, the processor 303 comprises a plurality of components suitable for distributed execution of computer programs, and some of the modules 312 to 317 may be executed on the plurality of components. The memory 304 may include programs 306, configuration data 307, and transient data 308 for use by the modules 312 to 317, and may be dynamic memory, static memory, a disk drive, a flash drive, a combination of any of the foregoing, or any other form of computer memory. The network interface 305 may be an ethernet interface, a wireless interface, or any other physical interface that may be used to connect to a network.
In an embodiment of the present invention, endpoint 2101And 2102A
In some embodiments of the invention, there may be a standard interface between the application layer 417 and the session layer 415. By way of example and not limitation, the interface may include a common session level request as shown in table 1.
TABLE 1
In embodiments of the present invention, session layer 415 may send and receive messages via standard IP datagrams, such as
In a first embodiment of the present invention, as shown in FIG. 6, endpoint 2101Establishing and endpoint 210 according to the operations of
In
In
In
In
In
In
In
One of ordinary skill will recognize that the operations in
In
Further, in
Further, in flow diagram 600, assume endpoint 2102Is composed of EID2012An identified single endpoint. In some variations, EID2012May communicate with multiple endpoints 210nAre associated, and
Further, in
Further, in the operations of
Further, in the operations of
In addition, the service ID/options field of the
Further, as will be appreciated by one of ordinary skill in the art, the fields in the
Fig. 8 illustrates another embodiment of the invention and may be a corresponding portion of the embodiment of
At
At
At
At
At
One of ordinary skill will recognize that the operations in
At
Further, at
Further, at
Moreover, the variations discussed in connection with
FIG. 9 Slave initiativeThe angle of the end point of the link illustrates a session layer connection recovery sequence (e.g., an embodiment of flow diagram 600). Likewise, endpoint 2101And 2102May be implemented by the configuration of network element 310 as shown in figure 3, respectively (although endpoint 2101And 2102Not necessarily identical in terms of hardware or software configuration) and are connected to each other and to the mapping system 230 via the internet 220, as shown in fig. 2. As illustrated by
Prior to the first operation of
At
At
In
At
One of ordinary skill will recognize that the operations in
At
Further, at
Further, at
Further, at
Further, at
Further, the embodiment shown in
Further, any variations related to
Fig. 10 shows a flow diagram 1000 that describes a session layer connection recovery sequence similar to flow diagram 900, except from the perspective of an endpoint that did not initiate a session (e.g., an embodiment of flow diagram 800). Likewise, endpoint 2101And 2102Respectively canTo be implemented by the configuration of network element 310 as shown in figure 3 (although endpoint 2101And 2102Not necessarily identical in terms of hardware or software configuration) and are connected to each other and to the mapping system 230 via the internet 220, as shown in fig. 2. As illustrated in flow diagram 1000, in the present embodiment, endpoint 2101And 2102The transport layer connection between them is suddenly broken. When endpoint 210 is active1And 2102When the transport layer connection is re-established, the session layer 4151And 4152Resynchronizing so that no data is lost, and an application layer 4171And 4172The interruption of the transport layer connection may not be known.
Prior to the first operation of
At
At
At
One of ordinary skill will recognize that the operations in
Accordingly, disclosed herein are: a method for establishing a session-layer connection between a first network element identified by a first EID and a second network element identified by a second EID. The method has means for receiving a request from an application layer for listening for session layer connection requests, wherein the application layer is associated with the first network element; a manner for instructing a transport layer to listen for a new transport layer connection request, wherein the transport layer is associated with the first network element; a manner for receiving a first transport layer connection request from the second network element, wherein the transport layer connection request includes a first IP address; a means for establishing a first transport layer connection with the second network element; a means for receiving a first session layer connection request from the second network element, wherein the first session layer connection request comprises a conference ID and the second EID; and a means for establishing a session layer connection with the second network element.
Further disclosed herein are: a method for establishing a session-layer connection between a first network element identified by a first EID and a second network element identified by a second EID. The method has means for receiving a request from an application layer for establishing a new session layer connection, wherein the request includes the second EID, the application layer being associated with the first network element; a means for converting the second EID to a second internet protocol, IP, address associated with the second network element; a manner for generating a session ID, wherein the session ID uniquely identifies the session layer connection; a means for indicating to a transport layer to establish a transport layer connection with the second network element based on a first IP address and a second IP address identifying the first network element, wherein the transport layer is associated with the first network element; a means for establishing the session layer connection with the second network element via the transport layer connection and the session ID.
Further disclosed herein are: a first network element identified by a first EID having a means for storing programming logic to implement an application layer, a session layer, a transport layer, a network layer, and a network access layer; a means for communicating with a second network element over the internet; a tool for receiving a request from the application layer to listen for a session layer connection request; a means for instructing the transport layer to listen for a new transport layer connection request; a means for receiving a transport layer connection request over a network interface from the second network element identified by a second EID; means for establishing a transport layer connection with the second network element over the network interface; a means for receiving a session layer connection request from the second network element over the network interface, wherein the session layer connection request comprises a session ID; and a means for establishing a session layer connection with the second network element over the network interface.
While the invention has been described with reference to specific features and embodiments thereof, it will be apparent that various modifications and combinations of the invention can be made without departing from the scope of the invention. The specification and figures are to be regarded only as illustrative of the invention as defined in the appended claims and are intended to cover any and all modifications, variations, combinations, or equivalents within the scope of the invention.