Patent Description:
Particular embodiments are set out in the independent claims. Various optional examples are set out in the dependent claims. Some implementations described herein relate to a method. The method may include intercepting, by a proxy device, a client session associated with a client device and a destination device. The method may include allocating, by the proxy device, a first port of the proxy device as a source port of a proxy session for the client session. The method may include determining, by the proxy device and based on allocating the first port, whether session information associated with the proxy session would match session information associated with another proxy session. The method may include initiating, by the proxy device, the proxy session after determining whether the session information associated with the proxy session would match session information associated with another proxy session, where a source port of the proxy session is one of: the first port of the proxy device based on a determination that the session information associated with the proxy session would not match session information associated with another proxy session, or a second port of the proxy device based on a determination that the session information associated with the proxy session would match session information associated with another proxy session.

Some implementations described herein relate to a device. The device may include one or more memories and one or more processors. The device may be configured to intercept a first session associated with a first device and a second device. The device may be configured to allocate a first port of the device as a source port of a second session, the second session being associated with the first session. The device may be configured to determine, based on allocating the first port, whether session information associated with the second session would match session information associated with another session. The device may be configured to initiate the second session after determining whether the session information associated with the second session would match session information associated with another session, where a source port of the second session is one of: the first port of the device, based on a determination that the session information associated with the second session would not match session information associated with another session, or a second port of the device, based on a determination that the session information associated with the second session would match session information associated with another session.

Some implementations described herein relate to a non-transitory computer-readable medium that stores a set of instructions for a proxy device. The set of instructions, when executed by one or more processors of the proxy device, may cause the proxy device to allocate a first port of the proxy device as a source port of a proxy session for a client session associated with a client device and a destination device. The set of instructions, when executed by one or more processors of the proxy device, may cause the proxy device to initiate the proxy session with the destination device based on a determination of whether session information associated with the proxy session would match session information associated with another proxy session, where a source port of the proxy session is one of: the first port of the proxy device based on determining the session information associated with the proxy session would not match session information associated with another proxy session, or a second port of the proxy device based on determining the session information associated with the proxy session would match session information associated with another proxy session.

In conventional operation, a proxy device (e.g., a web proxy) is configured to intercept a client session and originate a proxy session to a destination device associated with the client session. However, a quantity of proxy sessions that the proxy device can maintain is limited. For example, a proxy device with single egress interface may have a limitation of handling a maximum of <NUM>,<NUM> proxy sessions originated from the proxy device.

In one example, a client device with an Internet protocol (IP) address of <NUM>. <NUM> and using port <NUM> initiates a client session in order to communicate with a first destination device (e.g., a first web server) with an IP address of <NUM>. <NUM> at port <NUM>. Here, a proxy device with an IP address of <NUM>. <NUM> intercepts the client session, terminates the client session, and initiates a new proxy session from the proxy device to the first destination device using the IP address of the proxy device (<NUM>. <NUM>) and port <NUM>. Here, the quantity of available ports can scale up <NUM>,<NUM>, meaning that the proxy device can support up to <NUM>,<NUM> proxy sessions. Thus, as client devices continue to initiate client sessions, the proxy device may run out of source ports to allocate to proxy sessions and, therefore, may not be able to initiate proxy sessions to destination devices. As a result, reliability of communication for a given client device may be reduced.

Some implementations described herein provide techniques and apparatuses for non-translated port oversubscribing for a proxy device. In some implementations, a proxy device may intercept a client session, and allocate a first port of the proxy device as a source port of a proxy session for the client session. The proxy device may then determine, based on allocating the first port, whether session information (e.g., a <NUM>-tuple) associated with the proxy session would match session information associated with another proxy session, and may initiate the proxy session after the determination. Here, a source port of the proxy session may be the first port of the proxy device based on a determination that the session information associated with the proxy session would not match session information associated with another proxy session. Alternatively, the source port of the proxy session may be a second port of the proxy device based on a determination that the session information associated with the proxy session would match session information associated with another proxy session.

In some implementations, by utilizing the techniques and apparatuses described herein, the proxy device may handle multiple destination sockets (i.e., destination IP/destination port combinations) using a given source socket (i.e., a given proxy IP address/ proxy port combination). That is, a given port of the proxy device can be allocated as a source port for multiple proxy sessions, effectively removing a session limitation (e.g., the <NUM>,<NUM> session limitation), thereby improving reliability of communication for a given client device via the proxy device. Additionally, the techniques and apparatuses described herein do not rely on translated port overloading (e.g., port overloading using network address translation (NAT) or port address translation (PAT)) to increase capability at the proxy device, meaning that processing overhead at the proxy device is reduced (e.g., as compared to a scenario in which NAT or PAT is applied). Additional details are provided below.

<FIG> and <FIG> are diagrams of an example implementation <NUM> associated with non-translated port oversubscribing for a proxy device. As shown in <FIG> and <FIG>, example implementation <NUM> includes a client device <NUM>, a proxy device <NUM>, and a destination device <NUM>. These devices are described in more detail below in connection with <FIG>.

As shown in <FIG> by reference <NUM>, the proxy device <NUM> may intercept a client session associated with the client device <NUM> and the destination device <NUM>. For example, the proxy device <NUM> may receive, from the client device <NUM>, an indication that the client device <NUM> is to initiate a session with the destination device <NUM>. In some implementations, the indication may include a hypertext transfer protocol (HTTP) request.

In some implementations, the proxy device <NUM> may receive session information associated with the client session when intercepting the client session. For example the HTTP request may include the session information associated with the client session. The session information may include, for example, information indicating (<NUM>) a source address of the client session (e.g., an IP address of the client device <NUM>), (<NUM>) a source port of the client session (e.g., a port of the client device <NUM>), (<NUM>) a destination address of the client session (e.g., an IP address of the destination device <NUM>), (<NUM>) a destination port of the client session (e.g., a port of the destination device <NUM> ), and/or (<NUM>) a protocol associated with the client session (e.g., transmission control protocol (TCP), IP, or the like). Thus, in some implementations, the session information includes a <NUM>-tuple associated with the client session. In some implementations, the proxy device <NUM> terminates the client session based on intercepting the client session.

As shown by reference <NUM>, the proxy device <NUM> may allocate a first port of the proxy device <NUM> as a source port of a proxy session for the client session. That is, in some implementations, the proxy device <NUM> may allocate a port of the proxy device <NUM> for use as a source port in association with initiating a proxy session corresponding to the client session. In some implementations, the proxy device <NUM> selects ports of the proxy device <NUM> to be allocated for proxy sessions in a sequential manner (e.g., such that ports are allocated in a particular order), in a randomized manner (e.g., such that ports are allocated in a random order), in a prioritized order (e.g., such that ports not currently being used for proxy sessions are allocated before ports being used), or in another manner configured on the proxy device <NUM>.

In some implementations, the proxy device <NUM> may allocate the first port of the proxy device <NUM> as the source port for the proxy session based on a determination that the first port is not allocated to any proxy sessions. That is, in some implementations, the proxy device <NUM> may identify a port of the proxy device <NUM> that is not allocated to any proxy session, and may allocate the identified port as the source port for the proxy session. In this way, the proxy device <NUM> may in some implementations allocate unallocated ports of the proxy device <NUM> as source ports for proxy sessions before reusing a given allocated port of the proxy device <NUM> for another proxy session.

As shown by reference <NUM>, the proxy device <NUM> may determine, based on allocating the first port, whether session information associated with the proxy session would match session information associated with another proxy session. For example, the proxy device <NUM> may determine session information (e.g., a <NUM>-tuple) associated with a proxy session that would use the first port of the proxy device <NUM> as the source port for the proxy session. The proxy device <NUM> may then compare the session information to session information (e.g., <NUM>-tuples) associated with other proxy sessions being supported by the proxy device <NUM>).

As a particular example, the proxy device <NUM> may receive a <NUM>-tuple, associated with the client session, that indicates a source address of the client session (e.g., an IP address of the client device <NUM>, such as <NUM>. <NUM>), a source port of the client session (e.g., a port of the client device <NUM>, such as <NUM>), a destination address of the client session (e.g., an IP address of the destination device <NUM>, such as <NUM>. <NUM>), a destination port of the client session (e.g., a port of the destination device <NUM>, such as <NUM>), and a protocol associated with the client session (e.g., TCP/IP). In this example, the proxy device <NUM> uses a particular IP address of the proxy device <NUM> (e.g., <NUM>. <NUM>) as a source address for the proxy session, and allocates a first port of the proxy device <NUM> (e.g., <NUM>) as the source port of the proxy session. Thus, in this example, the session information associated with the proxy session would be a <NUM>-tuple that indicates the source address of the proxy session (e.g., <NUM>. <NUM> - the IP address of the proxy device <NUM>), the source port of the proxy session (e.g., <NUM> - the allocated first port of the client device <NUM>), a destination address of the proxy session (e.g., <NUM>. <NUM> - the IP address of the destination device <NUM>), a destination port of the proxy session (e.g., <NUM> - the port of the destination device <NUM>), and a protocol associated with the proxy session (e.g., TCP/IP). Here, the proxy device <NUM> compares the <NUM>-tuple associated with the proxy session to <NUM>-tuples associated with other proxy sessions being supported by the proxy device <NUM> and determines whether any of the <NUM>-tupes associated with the other proxy sessions match the <NUM>-tuple associated with the proxy session.

In some implementations, the proxy device <NUM> determines that the session information associated with the proxy session would match session information associated with another proxy session when each item of information included in the session information associated with the proxy session (e.g., the source address, the source port, the destination address, the destination port, and the protocol) is identical to a corresponding item of information included in session information associated with another proxy session. Using the above example, the proxy device <NUM> would determine that the session information associated with the proxy session matches session information associated with another proxy session when the session information associated with the other session includes the same <NUM>-tuple as that of the session information associated with the proxy session (e.g., <NUM>. <NUM>, <NUM>, <NUM>. <NUM>, <NUM>, TCP/IP). Conversely, the proxy device <NUM> determines that the session information associated with the proxy session would not match session information associated with another proxy session when at least one item of information included in the session information associated with the proxy session is different from a corresponding item of information included in the session information associated with the other proxy session. Using the above example, the proxy device <NUM> would determine that the session information associated with the proxy session does not match session information associated with another proxy session when the session information associated with the other session includes a <NUM>-tuple that differs from that of the session information associated with the proxy session (e.g., <NUM>. <NUM>, <NUM>, <NUM>. <NUM>, <NUM>, TCP/IP). Thus, so long as at least one item of information, such as the destination address or the destination port, included in the session information associated with the proxy session is different from the corresponding item of information included in the session information associated with the other proxy session, the proxy device <NUM> determine that the session information associated with the proxy session does not match the session information associated with the other proxy session.

In some implementations, the proxy device <NUM> may compare the session information associated with the proxy session to session information associated with multiple other proxy sessions being supported by the proxy device <NUM> (e.g., such that the proxy device <NUM> can determine whether the session information associated with the proxy session matches session information associated with any proxy session being supported by the proxy device <NUM>). For example, the proxy device <NUM> may compare the session information associated with the proxy session to session information for each other proxy session being supported by the proxy device <NUM> that uses the same source socket (i.e., source address and source port) as that which would be used by the proxy session.

In some implementations, the proxy device <NUM> may determine whether the session information associated with the proxy session would match session information associated with another proxy session based on a determination that the first port of the proxy device <NUM> is allocated to at least one proxy session. That is, in some implementations, the proxy device <NUM> may maintain port allocation information that identifies ports already allocated by the proxy device <NUM> (e.g., ports being used for other proxy sessions). Here, if the proxy device <NUM> determines that the first port of the proxy device <NUM> is allocated to at least one proxy session, then the proxy device <NUM> may determine whether the session information associated with the proxy session would match session information associated with the at least one other proxy sessions to which the first port is allocated (e.g., in the manner described above). Conversely, if the proxy device <NUM> determines that the first port of the proxy device <NUM> is not allocated to at least one proxy session, then the proxy device <NUM> may initiate the proxy session with the destination device <NUM>, where a source port of the proxy session is the first port of the proxy device <NUM>. That is, when the first port is not allocated to any proxy session, the proxy device <NUM> may proceed with initiating the proxy session using the first port without a need to compare the session information to session information associated with other proxy sessions.

As shown by reference <NUM>, if the proxy device <NUM> determines that the session information associated with the proxy session would not match session information associated with another proxy session, then the proxy device <NUM> may initiate the proxy session with the destination device <NUM>, where a source port of the proxy session is the first port of the proxy device. That is, the proxy device <NUM> may use the first port as the source port for the proxy session if the proxy device <NUM> determines that the session information associated with the proxy session would not match session information associated with another proxy session.

Conversely, with reference to <FIG>, if the proxy device <NUM> determines that the session information associated with the proxy session would match session information associated with another proxy session, then the proxy device <NUM> may in some implementations initiate the proxy session with the destination device <NUM>, where a source port of the proxy session is a different port of the proxy device (e.g., a port of the proxy device <NUM> other than the first port).

For example, as shown by reference <NUM>, the proxy device <NUM> may allocate the second port of the proxy device as the source port of the proxy session based on a determination that the session information associated with the proxy session would match session information associated with another proxy session. That is, the proxy device <NUM> may allocate a second (different) port as the source port for the proxy session based on a determination that the session information associated with the proxy session would match session information associated with another proxy session if the first port were to be used as the source port for the proxy session. In some implementations, the proxy device <NUM> may allocate the second port in a manner similar to that described above with respect to allocation of the first port (e.g., in a particular order, in a randomized order, in a prioritized order, or the like).

As shown by reference <NUM>, after allocating the second port, the proxy device <NUM> may determine that the session information associated with the proxy session would not match session information associated with another proxy session. For example, the proxy device <NUM> may determine, based on allocating the second port, whether session information associated with the proxy session would match session information associated with another proxy session. As a particular example, the proxy device <NUM> may determine session information (e.g., a <NUM>-tuple) associated with a proxy session that would use the second port of the proxy device <NUM> as the source port for the proxy session. The proxy device <NUM> may then compare the session information to session information (e.g., <NUM>-tuples) associated with other proxy sessions being supported by the proxy device <NUM> in the manner described above. Here, the proxy device <NUM> may determine that the session information associated with the proxy session, when using the second port as the source port of the proxy session, would not match session information associated with another proxy session. In this scenario, as shown by reference <NUM>, the proxy device <NUM> may initiate the proxy session with the destination device <NUM>, where a source port of the proxy session is the second port of the proxy device. That is, the proxy device <NUM> may use the second port as the source port for the proxy session if the proxy device <NUM> determines that the session information associated with the proxy session would not match session information associated with another proxy session.

In an alternative scenario, the proxy device <NUM> may determine that the session information associated with the proxy session, when using the second port as the source port for the proxy session, would match session information associated with another proxy session. In such a scenario, the proxy device <NUM> may allocate a third port of the proxy device <NUM> as the source port of the proxy session and determine whether the session information associated with the proxy session, when using the third port as the source port for the proxy session, would match session information associated with another proxy session. In general, the proxy device <NUM> may repeat these operations until the proxy device <NUM> allocates a port of the proxy device <NUM> as the source port for the proxy session that would result in session information that would not match session information associated with another proxy session being supported by the proxy device <NUM>.

In some implementations, the proxy device <NUM> stores the session information associated with the proxy session. For example, the proxy device <NUM> may store a <NUM>-tuple associated with the proxy session based on initiating the proxy session (e.g., using the first port of the proxy device <NUM> as the source port or using the second port of the proxy device <NUM> as the source port). In some implementations, the proxy device <NUM> stores the session information to enable the proxy device <NUM> to compare session information associated with a proxy session to be established at a later time to session information associated with the proxy session in the manner described above.

In some implementations, the proxy device <NUM> may store mapping information that associates the proxy session with the client session. For example, based on initiating the proxy session (e.g., using the first port of the proxy device <NUM> as the source port or using the second port of the proxy device <NUM> as the source port), the proxy device <NUM> may store mapping information that associations the client session with the proxy session. In some implementations, the mapping information may include an indication that a session identifier of the client session is associated with a session identifier of the proxy session. In some implementations, the proxy device <NUM> uses the mapping information in association with routing traffic between the client device <NUM> and the destination device <NUM>.

Notably, according to the implementations described herein, a source socket of the proxy session may in some cases match a source socket of one or more other proxy sessions initiated by the proxy device <NUM>. That is, a given socket (e.g., a given source IP address and source socket pair) may be used for multiple proxy sessions initiated by the proxy device <NUM>. In this way, any given port of the proxy device <NUM> (e.g., all <NUM>,<NUM> ports of the proxy device <NUM>) may support multiple proxy sessions, thereby effectively removing a session limitation (e.g., the <NUM>,<NUM> session limitation) and improving reliability of communication.

As indicated above, <FIG> and <FIG> are provided as an example. The number and arrangement of devices shown in <FIG> and <FIG> are provided as an example. In practice, there may be additional devices, fewer devices, different devices, or differently arranged devices than those shown in <FIG> and <FIG>. Furthermore, two or more devices shown in <FIG> and <FIG> may be implemented within a single device, or a single device shown in <FIG> and <FIG> may be implemented as multiple, distributed devices. Additionally, or alternatively, a set of devices (e.g., one or more devices) shown in <FIG> and <FIG> may perform one or more functions described as being performed by another set of devices shown in <FIG> and <FIG>.

<FIG> is a diagram of an example environment <NUM> in which systems and/or methods described herein may be implemented. As shown in <FIG>, environment <NUM> may include one or more client devices <NUM> (shown as client device <NUM>-<NUM> through client device <NUM>-M (M ≥ <NUM>)), a proxy device <NUM>, one or more destination devices (shown as destination device <NUM>-<NUM> through destination device <NUM>-N (N ≥ <NUM>)), and a network <NUM>. Devices of environment <NUM> may interconnect via wired connections, wireless connections, or a combination of wired and wireless connections.

Client device <NUM> includes one or more devices capable of receiving, generating, storing, processing, and/or providing information, such as information described herein. For example, client device <NUM> may include a mobile phone (e.g., a smart phone or a radiotelephone), a laptop computer, a tablet computer, a desktop computer, a handheld computer, a gaming device, a wearable communication device (e.g., a smart watch, a pair of smart glasses, a heart rate monitor, a fitness tracker, smart clothing, smart jewelry, or a head mounted display), or a similar type of device. In some implementations, client device <NUM> may receive network traffic from and/or may provide network traffic to other client devices <NUM>, proxy device <NUM>, and/or destination device <NUM>, via network <NUM> (e.g., by routing packets using proxy device <NUM> as an intermediary).

Proxy device <NUM> includes one or more devices capable of receiving, processing, storing, routing, and/or providing traffic (e.g., a packet or other information or metadata) in a manner described herein. For example, proxy device <NUM> may include a router, such as a label switching router (LSR), a label edge router (LER), an ingress router, an egress router, a provider router (e.g., a provider edge router or a provider core router), a virtual router, or another type of router. Additionally, or alternatively, proxy device <NUM> may include a gateway, a switch, a firewall, a hub, a bridge, a reverse proxy, a server (e.g., a proxy server, a cloud server, or a data center server), a load balancer, and/or a similar device. In some implementations, proxy device <NUM> may be a physical device implemented within a housing, such as a chassis. In some implementations, proxy device <NUM> may be a virtual device implemented by one or more computer devices of a cloud computing environment or a data center. In some implementations, a group of proxy devices <NUM> may be a group of data center nodes that are used to route traffic flow through network <NUM>.

Destination device <NUM> includes one or more devices capable of receiving, generating, storing, processing, and/or providing information, such as information described herein. For example, destination device <NUM> may include a laptop computer, a tablet computer, a desktop computer, a group of destination devices, or a similar type of device, associated with multicast traffic. In some implementations, destination device <NUM> may receive information from and/or transmit information (e.g., multicast traffic) to client device <NUM>, via network <NUM> (e.g., by routing packets using proxy device <NUM> as an intermediary).

Network <NUM> includes one or more wired and/or wireless networks. For example, network <NUM> may include a packet switched network, a cellular network (e.g., a fifth generation (<NUM>) network, a fourth generation (<NUM>) network, such as a long-term evolution (LTE) network, a third generation (<NUM>) network, a code division multiple access (CDMA) network, a public land mobile network (PLMN), a local area network (LAN), a wide area network (WAN), a metropolitan area network (MAN), a telephone network (e.g., the Public Switched Telephone Network (PSTN)), a private network, an ad hoc network, an intranet, the Internet, a fiber optic-based network, a cloud computing network, or the like, and/or a combination of these or other types of networks.

<FIG> is a diagram of example components of a device <NUM> associated with non-translated port oversubscribing for a proxy device. Device <NUM> may correspond to client device <NUM>, proxy device <NUM>, and/or destination device <NUM>. In some implementations, client device <NUM>, proxy device <NUM>, and/or destination device <NUM> include one or more devices <NUM> and/or one or more components of device <NUM>. As shown in <FIG>, device <NUM> may include a bus <NUM>, a processor <NUM>, a memory <NUM>, an input component <NUM>, an output component <NUM>, and a communication component <NUM>.

Bus <NUM> includes one or more components that enable wired and/or wireless communication among the components of device <NUM>. Bus <NUM> may couple together two or more components of <FIG>, such as via operative coupling, communicative coupling, electronic coupling, and/or electric coupling. Processor <NUM> includes a central processing unit, a graphics processing unit, a microprocessor, a controller, a microcontroller, a digital signal processor, a field-programmable gate array, an application-specific integrated circuit, and/or another type of processing component. Processor <NUM> is implemented in hardware, firmware, or a combination of hardware and software. In some implementations, processor <NUM> includes one or more processors capable of being programmed to perform one or more operations or processes described elsewhere herein.

Memory <NUM> includes volatile and/or nonvolatile memory. For example, memory <NUM> may include random access memory (RAM), read only memory (ROM), a hard disk drive, and/or another type of memory (e.g., a flash memory, a magnetic memory, and/or an optical memory). Memory <NUM> may include internal memory (e.g., RAM, ROM, or a hard disk drive) and/or removable memory (e.g., removable via a universal serial bus connection). Memory <NUM> may be a non-transitory computer-readable medium. Memory <NUM> stores information, instructions, and/or software (e.g., one or more software applications) related to the operation of device <NUM>. In some implementations, memory <NUM> includes one or more memories that are coupled to one or more processors (e.g., processor <NUM>), such as via bus <NUM>.

Input component <NUM> enables device <NUM> to receive input, such as user input and/or sensed input. For example, input component <NUM> may include a touch screen, a keyboard, a keypad, a mouse, a button, a microphone, a switch, a sensor, a global positioning system sensor, an accelerometer, a gyroscope, and/or an actuator. Output component <NUM> enables device <NUM> to provide output, such as via a display, a speaker, and/or a light-emitting diode. Communication component <NUM> enables device <NUM> to communicate with other devices via a wired connection and/or a wireless connection. For example, communication component <NUM> may include a receiver, a transmitter, a transceiver, a modem, a network interface card, and/or an antenna.

Device <NUM> may perform one or more operations or processes described herein. For example, a non-transitory computer-readable medium (e.g., memory <NUM>) may store a set of instructions (e.g., one or more instructions or code) for execution by processor <NUM>. Processor <NUM> may execute the set of instructions to perform one or more operations or processes described herein. In some implementations, execution of the set of instructions, by one or more processors <NUM>, causes the one or more processors <NUM> and/or the device <NUM> to perform one or more operations or processes described herein. In some implementations, hardwired circuitry is used instead of or in combination with the instructions to perform one or more operations or processes described herein. Additionally, or alternatively, processor <NUM> may be configured to perform one or more operations or processes described herein.

<FIG> is a diagram of example components of a device <NUM> associated with non-translated port oversubscribing for a proxy device. Device <NUM> may correspond to proxy device <NUM>. In some implementations, proxy device <NUM> may include one or more devices <NUM> and/or one or more components of device <NUM>. As shown in <FIG>, device <NUM> may include one or more input components <NUM>-<NUM> through <NUM>-B (B ≥ <NUM>) (hereinafter referred to collectively as input components <NUM>, and individually as input component <NUM>), a switching component <NUM>, one or more output components <NUM>-<NUM> through <NUM>-C (C ≥ <NUM>) (hereinafter referred to collectively as output components <NUM>, and individually as output component <NUM>), and a controller <NUM>.

Controller <NUM> may perform one or more processes described herein. Controller <NUM> may perform these processes in response to executing software instructions stored by a non-transitory computer-readable medium. A computer-readable medium is defined herein as a non-transitory memory device. A memory device includes memory space within a single physical storage device or memory space spread across multiple physical storage devices.

<FIG> is a flowchart of an example process <NUM> associated with non-translated port oversubscribing for a proxy device. In some implementations, one or more process blocks of <FIG> are performed by a proxy device (e.g., proxy device <NUM>). Additionally, or alternatively, one or more process blocks of <FIG> may be performed by one or more components of device <NUM> (e.g., processor <NUM>, memory <NUM>, input component <NUM>, output component <NUM>, and/or communication component <NUM>) and/or by one or more components of device <NUM> (e.g., input component <NUM>, switching component <NUM>, output component <NUM>, and/or controller <NUM>).

As shown in <FIG>, process <NUM> may include intercepting a client session associated with a client device and a destination device (block <NUM>). For example, the proxy device may intercept a client session associated with a client device (e.g., a client device <NUM>) and a destination device (e.g., destination device <NUM>), as described above.

As further shown in <FIG>, process <NUM> may include allocating a first port of the proxy device as a source port of a proxy session for the client session (block <NUM>). For example, the proxy device may allocate a first port of the proxy device as a source port of a proxy session for the client session, as described above.

As further shown in <FIG>, process <NUM> may include determining, based on allocating the first port, whether session information associated with the proxy session would match session information associated with another proxy session (block <NUM>). For example, the proxy device may determine, based on allocating the first port, whether session information associated with the proxy session would match session information associated with another proxy session, as described above.

As further shown in <FIG>, process <NUM> may include initiating the proxy session after determining whether the session information associated with the proxy session would match session information associated with another proxy session, wherein a source port of the proxy session is one of: the first port of the proxy device based on a determination that the session information associated with the proxy session would not match session information associated with another proxy session, or a second port of the proxy device based on a determination that the session information associated with the proxy session would match session information associated with another proxy session (block <NUM>). For example, the proxy device may initiate the proxy session after determining whether the session information associated with the proxy session would match session information associated with another proxy session, as described above. In some implementations, a source port of the proxy session is the first port of the proxy device (e.g., based on a determination that the session information associated with the proxy session would not match session information associated with another proxy session). In some implementations, the source port of the proxy session is a second port of the proxy device (e.g., based on a determination that the session information associated with the proxy session would match session information associated with another proxy session).

In a first implementation, determining whether the session information associated with the proxy session would match session information associated with another proxy session is performed based on a determination that the first port of the proxy device is allocated to at least one proxy session.

In a second implementation, alone or in combination with the first implementation, process <NUM> includes storing mapping information that associates the proxy session with the client session.

In a third implementation, alone or in combination with one or more of the first and second implementations, process <NUM> includes allocating the second port of the proxy device as the source port of the proxy session based on a determination that the session information associated with the proxy session would match session information associated with another proxy session, and determining that the session information associated with the proxy session would not match session information associated with another proxy session.

In a fourth implementation, alone or in combination with one or more of the first through third implementations, the session information associated with the proxy session indicates a source address of the proxy session, the source port of the proxy session, a destination address of the proxy session, a destination port of the proxy session, and a protocol associated with the proxy session.

In a fifth implementation, alone or in combination with one or more of the first through fourth implementations, a source socket of the proxy session matches a source socket of one or more other proxy sessions initiated by the proxy device.

In a sixth implementation, alone or in combination with one or more of the first through fifth implementations, process <NUM> includes storing the session information associated with the proxy session.

Although <FIG> shows example blocks of process <NUM>, in some implementations, process <NUM> includes additional blocks, fewer blocks, different blocks, or differently arranged blocks than those depicted in <FIG>.

A computer readable medium may include non-transitory type media such as physical storage media including storage discs and solid state devices. A computer readable medium may also or alternatively include transient media such as carrier signals and transmission media. A computer-readable storage medium is defined herein as a non-transitory memory device. A memory device includes memory space within a single physical storage device or memory space spread across multiple physical storage devices.

As used herein, traffic or content may include a set of packets. A packet may refer to a communication structure for communicating information, such as a protocol data unit (PDU), a service data unit (SDU), a network packet, a datagram, a segment, a message, a block, a frame (e.g., an Ethernet frame), a portion of any of the above, and/or another type of formatted or unformatted unit of data capable of being transmitted via a network.

As an example, "at least one of: a, b, or c" is intended to cover a, b, c, a-b, a-c, b-c, and a-b-c, as well as any combination with multiple of the same item.

No element, act, or instruction used herein should be construed as critical or essential unless explicitly described as such. Also, as used herein, the articles "a" and "an" are intended to include one or more items, and may be used interchangeably with "one or more. " Further, as used herein, the article "the" is intended to include one or more items referenced in connection with the article "the" and may be used interchangeably with "the one or more. " Furthermore, as used herein, the term "set" is intended to include one or more items (e.g., related items, unrelated items, or a combination of related and unrelated items), and may be used interchangeably with "one or more. " Where only one item is intended, the phrase "only one" or similar language is used. Also, as used herein, the terms "has," "have," "having," or the like are intended to be open-ended terms. Further, the phrase "based on" is intended to mean "based, at least in part, on" unless explicitly stated otherwise. Also, as used herein, the term "or" is intended to be inclusive when used in a series and may be used interchangeably with "and/or," unless explicitly stated otherwise (e.g., if used in combination with "either" or "only one of").

Claim 1:
A method, comprising:
intercepting (<NUM>), by a proxy device (<NUM>), a client session associated with a client device (<NUM>) and a destination device (<NUM>);
allocating (<NUM>), by the proxy device, a first port of the proxy device as a source port of a proxy session for the client session;
determining (<NUM>), by the proxy device and based on allocating the first port, whether session information associated with the proxy session would match session information associated with another proxy session; and
initiating (<NUM>), by the proxy device, the proxy session after determining whether the session information associated with the proxy session would match session information associated with another proxy session,
wherein a source port of the proxy session is one of:
the first port of the proxy device based on a determination that the session information associated with the proxy session would not match session information associated with another proxy session, or
a second port of the proxy device based on a determination that the session information associated with the proxy session would match session information associated with another proxy session.