# US 9,521,028 B2 · Method and apparatus for providing software defined network flow distribution

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 9,521,028 B2
- Document ID: US9521028B2
- Status: Granted
- Kind: B2
- Application number: 13/912,709
- Filed: 2013-06-07
- Published: 2014-12-11
- Granted: 2016-12-13
- Earliest claimed: 2013-06-07
- Assignees: Alcatel Lucent
- Applicants: Alcatel-Lucent Canada Inc.
- Inventors: Jeroen van Bemmel
- Web page: https://patentgrep.com/patent/US9521028B2

## CPC

- H04L 45/64: using an overlay routing layer
- H04L 67/563: Data redirection of data network streams
- H04L 67/63: Routing a service request depending on the request content or context
- H04L 67/1038: Load balancing arrangements to avoid a single path through a load balancer
- H04L 69/161: {Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields}
- H04L 69/163: In-band adaptation of TCP data exchange; In-band control procedures
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)

## Abstract

Various embodiments provide a method and apparatus for providing SDN flow distribution without requiring per-connection state in the network. In particular, the SDN flow distribution is realized in network elements within the forwarding path of packets by providing in those network elements with a controller capable of mapping traffic flows onto a set of target servers.

## Claims

### Claim 1

An apparatus for providing in-path flow distribution, the apparatus comprising:
a plurality of virtual machines;
a data storage comprising a rules portion comprising a plurality of rules and a servers list portion, wherein at least a subset of the plurality of rules map packet flow to one or more of the plurality of virtual machines based on the servers list portion; and
a processor communicatively connected to the plurality of virtual machines and the data storage, the processor being configured to:
receive a packet from an edge router;
determine a rule from the plurality of rules based on the packet;
determine a virtual machine based on the rule and the servers list portion;
modify a destination address of the packet based on the virtual machine;
forward the packet to the virtual machine;
wherein the data storage further comprises a hash array portion comprising an array of server index values:
wherein the servers list portion comprises a set of server addresses;
and wherein the determination of the virtual machine is further based on further configuring the processor to select the virtual machine from the set of server addresses using a server index determined based on the rule;
wherein the array of server index values comprises the server index.

### Claim 2 (depends on 1)

The apparatus of claim 1, wherein the apparatus is a first host in a network of a plurality of hosts; wherein the virtual machine is a member of a second plurality of virtual machines hosted on a second host, the second host being a member of the plurality of hosts; and wherein at least a second subset of the plurality of rules map packet flow to one or more of the second plurality of virtual machines based on the servers list portion.

### Claim 3 (depends on 1)

The apparatus of claim 1, wherein the destination address is a MAC address.

### Claim 4 (depends on 1)

The apparatus of claim 1, wherein the rule comprises a distribute portion, the distribute portion specifying a distribution action.

### Claim 5 (depends on 1)

The apparatus of claim 1, wherein the processor is further configured to:
determine that the packet initiates a packet flow;
wherein the modification of the destination address of the packet is based on the determination that the packet initiates the packet flow.

### Claim 6 (depends on 5)

The apparatus of claim 5, wherein the determination that the packet initiates a packet flow is based on a SYN flag in the packet.

### Claim 7 (depends on 1)

The apparatus of claim 1, wherein the processor is further configured to:
receive a second packet from the edge router, the second packet comprising a server value identifying the virtual machine;
modify a destination address of the second packet based on the server value; and
forward the second packet to the virtual machine.

### Claim 8 (depends on 7)

The apparatus of claim 7, wherein the server value is in a TCP ACK field of the second packet.

### Claim 9 (depends on 7)

The apparatus of claim 7, wherein the server value is a server index value; and wherein the processor is further configured to determine the virtual machine based on the server index value and the servers list portion.

### Claim 10 (depends on 7)

The apparatus of claim 7, wherein the data storage further comprises a history portion; and wherein the processor is further configured to:
receive a third packet from the edge router;
determine that the third packet is a retransmission;
retrieve a prior server value from the history portion based on the determination that the third packet is a retransmission and the third packet;
modify a destination address of the third packet based on the prior server value; and
forward the third packet to the virtual machine.

### Claim 11 (depends on 1)

The apparatus of claim 1, wherein the processor is further configured to:
receive a second packet from the edge router, the second packet comprising a server value identifying the virtual machine;
determine that a corresponding server index value in the array of server index values is a trigger value;
set the corresponding server index value to the server value;
modify a destination address of the second packet based on the server value; and
forward the second packet to the virtual machine.

### Claim 12

A method for providing in-path flow distribution, the method comprising:
at a processor communicatively connected to a data storage, receiving a packet from an edge router; wherein the data storage comprises a rules portion comprising a plurality of rules and a servers list portion, wherein at least a subset of the plurality of rules map packet flow to a virtual machine based on the servers list portion;
determining, by the processor in cooperation with the data storage, a rule from the plurality of rules based on the packet;
determining, by the processor in cooperation with the data storage, a virtual machine based on the rule and the servers list portion;
modifying, by the processor in cooperation with the data storage, a destination address of the packet based on the virtual machine;
forwarding, by the processor in cooperation with the data storage, the packet to the virtual server;
wherein the data storage further comprises a hash array portion comprising an array of server index values:
wherein the servers list portion comprises a set of server addresses;
and wherein the determining the virtual machine is further based on selecting the virtual machine from the set of server addresses using a server index determined based on the rule;
wherein the array of server index values comprises the server index.

### Claim 13 (depends on 12)

The method of claim 12, further comprising:
determining, by the processor in cooperation with the data storage, that the packet initiates a packet flow;
wherein the modification of the destination address of the packet is based on the determination that the packet initiates the packet flow.

### Claim 14 (depends on 12)

The method of claim 12, further comprising:
receiving, by the processor in cooperation with the data storage, a second packet from the edge router, the second packet comprising a server value identifying the virtual machine;
modifying, by the processor in cooperation with the data storage, a destination address of the second packet based on the server value; and
forwarding, by the processor in cooperation with the data storage, the second packet to the virtual machine.

### Claim 15 (depends on 13)

The method of claim 13, further comprising:
receiving, by the processor in cooperation with the data storage, a second packet from the edge router, the second packet comprising a server value identifying the virtual machine;
determining, by the processor in cooperation with the data storage, that a corresponding server index value in the array of server index values is a trigger value;
setting, by the processor in cooperation with the data storage, the corresponding server index value to the server value;
modifying, by the processor in cooperation with the data storage, a destination address of the second packet based on the server value; and
forwarding, by the processor in cooperation with the data storage, the second packet to the virtual machine.

### Claim 16 (depends on 12)

The method of claim 12, further comprising:
wherein the data storage further comprises a history portion;
determining, by the processor in cooperation with the data storage, a historical server index value associated with the virtual machine;
storing, by the processor in cooperation with the data storage, the historical server index value in the history portion;
receiving, by the processor in cooperation with the data storage, a second packet from the edge router, the second packet comprising a server value;
determining, by the processor in cooperation with the data storage, a second rule from the plurality of rules based on the second packet;
determining, by the processor in cooperation with the data storage, a second server index value based on the rule and the servers list portion;
retrieving, by the processor in cooperation with the data storage, the historical server index value based on a determination that the server value does not correspond to the second server index value;
modifying, by the processor in cooperation with the data storage, a destination address of the second packet based on the historical server index value; and
forwarding, by the processor in cooperation with the data storage, the second packet.

### Claim 17

A non-transitory computer-readable storage medium storing instructions which, when executed by a computer, cause the computer to perform a method, the method comprising:
receiving a packet from an edge router; wherein the data storage comprises a rules portion comprising a plurality of rules and a servers list portion, wherein at least a subset of the plurality of rules map packet flow to a virtual machine based on the servers list portion;
determining a rule from the plurality of rules based on the packet;
determining a virtual machine based on the rule and the servers list portion;
modifying a destination address of the packet based on the virtual machine; forwarding the packet to the virtual server;
wherein the data storage further comprises a hash array portion comprising an array of server index values;
wherein the servers list portion comprises a set of server addresses;
and wherein the determining the virtual machine is further based on selecting the virtual machine from the set of server addresses using a server index determined based on the rule:
wherein the array of server index values comprises the server index.
