Proxyless Protocol
The proxyless protocol addresses the challenge of lost client information in proxy-based client-server communications by intercepting TCP requests, modifying sequence numbers, and injecting client data, enabling effective policy application and high-throughput communication in SDNs.
Patent Information
- Application Number
- JP2023560353
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2021-03-31
- Filing Date
- 2022-03-22
- Publication Date
- 2025-04-07
- Estimated Expiration
- 2042-03-22
AI Technical Summary
In multi-layer network serving architectures, client-server communications often rely on proxies, which can lead to the loss of client information at the destination server, making it difficult to apply client-specific policies.
A proxyless protocol that intercepts TCP connection requests from clients, sends a second TCP connection request to the destination server with a modified sequence number, and injects client information into the connection, allowing direct communication between the client and destination server without a proxy.
This solution enables the transmission of client information to the destination server, facilitating the application of client-specific policies while eliminating the need for per-packet modifications, thus maintaining high throughput and supporting software-defined networks (SDNs).
Smart Images

Figure 0007657966000001 
Figure 0007657966000002 
Figure 0007657966000003
Abstract
Description
[Technical field]
[0001] The present disclosure relates to proxyless protocols such as proxyless proxy protocols. [Background technology]
[0002] background In a multi-tier network serving architecture, client-server communications often pass through one or more proxies. A proxy is a server application or appliance that acts as an intermediary or gateway between a client and one or more destinations. That is, instead of a client directly connecting to a destination device to access a resource, the client directs the request to a proxy, which evaluates the request based on rules that govern the proxy's behavior. Because the proxy acts as an intermediary, the destination device may lose access to information about the client. Summary of the Invention
[0003] overview One aspect of the disclosure provides a computer-implemented method for a proxyless protocol that, when executed by data processing hardware, causes the data processing hardware to perform operations. The operations include intercepting a first Transmission Control Protocol (TCP) connection request from a client requesting to establish a first TCP connection between the client and a proxy server to route data to a destination server through the proxy server. The first TCP connection request includes client information and a first sequence number. The method also includes sending a second TCP connection request to the destination server requesting to establish a second TCP connection between the client and the destination server. The second TCP connection request includes a second sequence number that is less than the first sequence number. The method includes intercepting an acknowledgement message from the destination server indicating an acknowledgement of the second TCP connection request, and sending to the destination server a data packet including a proxy protocol header message that includes the client information. The method also includes generating a new acknowledgement message using the first TCP connection request, and sending the new acknowledgement message to the client.
[0004] Implementations of the present disclosure may include one or more of the following optional features: In some implementations, the operations further include obtaining client configuration data indicating the client's intent to communicate with the proxy server prior to intercepting the TCP connection request from the client. In some examples, the client configuration data includes a destination identifier that identifies the destination server. In these examples, the operations further include determining that the client intends to communicate with the proxy server using the destination identifier after intercepting the TCP connection request from the client.
[0005] Optionally, the destination identifier is an Internet Protocol (IP) address. Intercepting the first TCP connection request from the client may include determining that a SYN flag is set in the first TCP connection request. In some implementations, a difference between the first sequence number and the second sequence number is equal to a size of the proxy protocol header message.
[0006] The acknowledgment message is Sequel The new acknowledgement message may contain the same connection information as the acknowledgement message. Sequel In some examples, after sending the new acknowledgment message to the client, the client and the destination server communicate directly. The client may be remote from the destination server and the first TCP connection request may be intercepted at the client. The client may be remote from the destination server and the first TCP connection request may be intercepted at the destination server.
[0007] Another aspect of the present disclosure provides a system for a proxyless protocol. The system includes data processing hardware and memory hardware in communication with the data processing hardware. The memory hardware stores instructions that, when executed on the data processing hardware, cause the data processing hardware to perform operations. The operations include intercepting a first Transmission Control Protocol (TCP) connection request from a client requesting to establish a first TCP connection between the client and a proxy server to route data to a destination server through the proxy server. The first TCP connection request includes client information and a first sequence number. The method also includes sending a second TCP connection request to the destination server requesting to establish a second TCP connection between the client and the destination server. The second TCP connection request includes a second sequence number that is less than the first sequence number. The method includes intercepting an acknowledgment message from the destination server indicating an acknowledgment of the second TCP connection request, and sending a data packet to the destination server including a proxy protocol header message including the client information. The method also includes generating a new acknowledgment message using the first TCP connection request and sending the new acknowledgment message to the client.
[0008] This aspect may include one or more of the following optional features: In some implementations, the operations further include obtaining client configuration data indicating the client's intent to communicate with the proxy server prior to intercepting the TCP connection request from the client. In some examples, the client configuration data includes a destination identifier that identifies the destination server. In these examples, the operations further include determining that the client intends to communicate with the proxy server using the destination identifier after intercepting the TCP connection request from the client.
[0009] Optionally, the destination identifier is an Internet Protocol (IP) address. Intercepting the first TCP connection request from the client may include determining that a SYN flag is set in the first TCP connection request. In some implementations, a difference between the first sequence number and the second sequence number is equal to a size of the proxy protocol header message.
[0010] The acknowledgment message is Sequel The new acknowledgement message may contain the same connection information as the acknowledgement message. Sequel In some examples, after sending the new acknowledgment message to the client, the client and the destination server communicate directly. The client may be remote from the destination server and the first TCP connection request may be intercepted at the client. The client may be remote from the destination server and the first TCP connection request may be intercepted at the destination server.
[0011] The details of one or more implementations of the disclosure are set forth in the accompanying drawings and the description below. Other aspects, features, and advantages will become apparent from the description and drawings, and from the claims. [Brief description of the drawings]
[0012] [Figure 1] FIG. 1 is a schematic diagram of an example system for providing a proxyless protocol. [Figure 2A] FIG. 2 is an exemplary sequence diagram of the system of FIG. 1. [Figure 2B] 2 is another exemplary sequence diagram of the system of FIG. 1. [Diagram 3] FIG. 2 is a schematic diagram of exemplary components of the system of FIG. 1. [Figure 4] 1 is a flowchart of an example arrangement of operations for a method of providing a proxyless protocol. [Diagram 5] FIG. 1 is a schematic diagram of an example computing device that can be used to implement the systems and methods described herein. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0013] Like reference numbers in the various drawings indicate like elements. Detailed Description In a multi-tier network serving architecture, client-server communications frequently pass through one or more proxies. Some proxies (e.g., load balancers) will terminate the Transmission Control Protocol (TCP) connection and proxy data from the client to the destination device (e.g., server) using a new session. Thus, the TCP session handled by the destination server contains the Internet Protocol (IP) address and other identifiers of the proxy, rather than the identifier of the original client initiating the connection. This loss of information often makes it difficult for servers and other destinations to apply client-specific policies such as billing, auditing, access control lists, etc. Some protocols (e.g., proxy protocols) attempt to address this by allowing forwarding of client-side identifying information to the server. For example, some protocols have proxies prepend client-side information in the payload of the new TCP connection that the proxy establishes with the server (or next-hop proxy). This client-side information for a TCP connection is typically initially a 5-tuple, but may be extended per use case. This preamble (also called a header) can be encoded in a human-readable format or in a binary format.
[0014] In modern software-defined networks (SDN), network proxies become control plane constructs and there are no physical hops through which traffic is routed. This has the great advantage of removing single points of failure and provides resiliency, performance, and scalability. On the other hand, the lack of physical proxies poses great challenges for supporting third-party solutions that require client-side information (e.g., via proxy protocols). These third-party solutions expect traffic to be explicitly modified by proxies on the data plane, which does not exist. Many cloud customers require the ability to "lift and shift" existing workloads across different deployments (i.e., transition the workload to a different deployment without requiring reconfiguration). If the original deployment relies on proxies, this can be a technical blocker to performing the shift without major modifications to the network architecture or provide a flawed solution that does not utilize the full capabilities of SDN.
[0015] Implementations herein are directed to a proxyless controller that emulates the presence of a proxy for a pre-configured workload without sacrificing the benefits of SDN. The proxyless controller intercepts a TCP connection request from a client configured to communicate with a proxy. The TCP connection request includes a first sequence number. The proxyless controller injects client information into a TCP connection with the client's destination server, thus providing client identification data to the destination server on behalf of the proxy. The proxyless controller establishes a connection with the destination server using a second sequence number based on the first sequence number provided by the client. The proxyless controller sends an acknowledgment to the client based on the updated sequence number, allowing the client and destination server to communicate without requiring per-packet modifications. This avoids the prohibitive throughput costs that such modifications incur, and allows the proxyless controller to provide near-line-rate packet processing. Although examples herein discuss implementations related to TCP connections, other connection-oriented protocols may be implemented using the same principles.
[0016] 1, in some implementations, an exemplary system 100 includes a client device 102 (also referred to herein as a client 102) that is part of or in communication (e.g., over a network) with a computing system 140. The client device 10 may correspond to any computing device, such as a desktop workstation, a laptop workstation, a server, or a mobile device (i.e., a smartphone). The client device 102 includes computing resources 108 (e.g., data processing hardware) and / or storage resources 106 (e.g., memory hardware). The client 102 is associated with client information 104. The client information 104 may include any information that identifies the client 102, such as an IP address, a source port, a destination port, an identification number, etc.
[0017] Computing system 140 may be a single computer, multiple computers, or a distributed system (e.g., a cloud environment) having scalable / elastic computing resources 144 (e.g., data processing hardware) and / or storage resources 142 (e.g., memory hardware). A data store 146 (i.e., remote storage device 146) may be overlaid on storage resources 142 to enable scalable use of storage resources 142 by one or more of the clients or computing resources 144.
[0018] The client 102 is configured to communicate with a destination server 110 or other networked computing device through a proxy. The destination server 110 includes computing resources 118 (e.g., data processing hardware) and / or storage resources 116 (e.g., memory hardware). The client 102 attempts to send a first TCP connection request 210, 210A to the proxy to communicate with the destination server 110.
[0019] The computing system 140 executes a proxyless controller 150 that intercepts the TCP connection request 210A. In some examples, the client 102 executes on the computing system 140, and thus the proxyless controller 150 has access to the client's network traffic, allowing the proxyless controller 150 to intercept the TCP connection request 210A. In other examples, the destination server 110 executes on the computing system 140, and the client 102 directs the TCP connection request 210A to the computing system 140, allowing the proxyless controller 150 to intercept the TCP connection request 210A. In yet other examples, both the client 102 and the destination server 110 execute on the computing system 140 (e.g., as part of a distributed system), also allowing the proxyless controller 150 to intercept the TCP connection request 210A. Optionally, the computing system 140 acts as a network address translation (NAT) device (ie, an ingress NAT and / or an egress NAT) for either or both of the client 102 and the destination server 110.
[0020] When the proxyless controller 150 intercepts the TCP connection request 210A, it may determine that the TCP connection request 210A is a new connection attempting to connect to a proxy (e.g., a virtual TCP endpoint or other intermediary). Optionally, the TCP connection request 210A from the client 102 establishes a connection with a virtual TCP endpoint (i.e., no physical host exists). In some examples, the owner of the client 102 provides configuration data to the computing system 140 before the client 102 initiates the TCP connection request 210A, so that the computing system 140 knows that the TCP connection request 210A is from the client 102 and is intended to connect to a proxy. For example, the owner of the client 102 may provide configuration information that identifies a source or destination IP address of the TCP connection request 210A, and when the proxyless controller 150 receives or intercepts the TCP connection request 210A, it may compare the source or destination IP address (or any other parameter) to the configuration information to determine that the TCP connection request 210A is intended for a proxy.
[0021] The TCP connection request 210A includes a first sequence number 212, 212A. All bytes in a TCP connection are numbered starting from a randomly selected initial sequence number 212 (i.e., ISN). After the initial SYN packet, the sequence number 212 is incremented for each data byte transferred between the source and destination. Thus, the sequence number 212 represents the first byte number of the first byte of data in a TCP packet. The receiver acknowledges the message by responding with an acknowledgment number 222 that matches the sequence number 212 of the next byte the receiver expects to receive.
[0022] After the proxyless controller 150 intercepts the first TCP connection request 210A and determines the client's intention to establish a connection with the proxy, it sends a second TCP connection request 210, 210B to the destination server 110 requesting to establish a TCP connection between the client 102 and the destination server 110. The second TCP connection request 210B includes a second sequence number 212, 212B. As described in more detail below, the second sequence number 212B is less than (i.e., less than) the first sequence number 212A. In some examples, the second TCP connection request 210B is the first TCP connection request 210A with a modified sequence number 212 (i.e., less than the sequence number 212). That is, in some examples, the proxyless controller “hijacks” the first TCP connection request 210A and replaces the first TCP connection request 210A with a second TCP connection request 210B (which may be a modified form of the first TCP connection request 210A).
[0023] The proxyless controller 150 intercepts or receives a first acknowledgement message 220, 220A from the destination server 110 indicating an acknowledgement of the second TCP connection request 210B. The first acknowledgement message 220A may include a first acknowledgement number 222, 222A associated with the second sequence number 212B. For example, the first acknowledgement number 222A is greater than the second sequence number 212B, indicating that the destination server 110 has acknowledged the second TCP connection request 210B.
[0024] After receiving the first acknowledgement message 220A from the destination server 110, the proxyless controller 150 transmits the client information 104 to the destination server 110. For example, the proxyless controller 150 transmits a proxy protocol header 230 (FIG. 2) data packet (or other similar data packet) to the destination server 110. The proxy protocol header 230 may include some or all of the client information 104 within the data payload. The proxy protocol header 230 is merely exemplary, and the proxyless controller 150 may "inject" any data in any format to the destination server 110 to facilitate the network connection. The destination server 110 responds to the proxy protocol header 230 with a second acknowledgement message 220B (FIG. 2A). In some examples, the proxyless controller 150 updates the first acknowledgement message 220A previously received from the destination server 110 based on the first sequence number 212A and transmits an updated acknowledgement message 220C with an updated sequence number 212C to the client 102. The updated sequence number 212C corresponds to the sequence number the client 102 expects to receive in response to the first TCP connection request 210A. In other examples, the proxyless controller 150 updates a different acknowledgment message 220 (e.g., the second acknowledgment message 220B) or generates an entirely new acknowledgment message 220, as opposed to modifying or updating the previously received acknowledgment message 220. Importantly, all of these solutions are equivalent, as long as the acknowledgment message 220 sent by the proxyless controller 150 to the client 102 includes any necessary information from the previous acknowledgment message 220 received from the destination server 110 (e.g., TCP options), the sequence number 212 expected by the client 102, and the acknowledgment number 222 last sent by the destination server 110.Thus, when generating the acknowledgment message 220C, the proxyless controller may use parts of the TCP connection request 210A (e.g., sequence number 212) and / or parts of the previous acknowledgment messages 220A, 220B (e.g., any TCP options, acknowledgment number 222, etc.).
[0025] The proxyless controller 150, in some examples, resends and / or regenerates any messages that are dropped or otherwise lost between the client 102 and the destination 110. When packets are dropped or lost, the proxyless controller 150 may regenerate the payload from the lost packets.
[0026] 2A, a sequence diagram 200a provides an exemplary sequence of messages between the client 102, the proxyless controller 150, and the destination server 110. First, the client 102 attempts to send a first TCP connection request 210A to the proxy, but the proxyless controller 150 receives or intercepts the TCP connection request 210A. Based on previously received configuration information, the proxyless controller 150 may determine that the client 102 intends to establish a connection with the proxy to communicate with the destination server 110. In response, the proxyless controller 150 sends a second TCP connection request 210B to the destination server 110. The destination server 110 responds to the second TCP connection request 210B with an acknowledgment message 220A (i.e., SYN|ACK). In response to the acknowledgement message 220A, the proxyless controller 150 sends a proxy protocol header 230 to the destination server 110 to provide the destination server 130 with the client information 104, thereby enabling the destination server 110 with the ability to provide client-specific policies (e.g., access control lists, etc.).
[0027] The destination server 110 acknowledges the proxy protocol header 230 with another acknowledgement message 220B. In response to the second acknowledgement message 220B, the proxyless controller 150 generates a new acknowledgement message or updates the first (or second) acknowledgement message 220A (or generates a new acknowledgement message 220A) and sends the new or updated acknowledgement message 220C to the client 102. The new acknowledgement message 220C includes the updated acknowledgement number 222C. Once the client 102 receives the proper acknowledgement for its TCP connection request 210A, it continues to communicate with the destination server 110 via data packets 250. In this scenario, the client may be configured and / or expected to communicate with the destination server 110 through a proxy, and the destination server 110 may also be configured and / or expected to communicate with the client 102 through a proxy, although in practice the client 102 and the destination server 110 communicate without a proxy.
[0028] The sequence diagram 200a is merely illustrative, and the order and number of messages may vary depending on the implementation needs of a particular system. For example, the client 102 may use TCP fast open to include a data payload in the original TCP connection request 210A. In this scenario, the proxyless controller 150 may replay the data to the destination server 110 by first dropping the data payload and appropriately adjusting the sequence number 212B after the TCP connection is established.
[0029] 2B, sequence diagram 200b provides the same exemplary sequence of messages as sequence diagram 200a, but with additional details regarding sequence number 212 and acknowledgment number 222. Here, client 102 sends a first TCP connection request 210A (i.e., a SYN packet) with sequence number 212A equal to "100". It is important to note that client 102 expects an acknowledgment message 220 with acknowledgment number 222 equal to "101" in response to TCP connection request 210A. Proxyless controller 150 receives TCP connection request 210A and determines that client 102 intends to establish a connection with destination server 110 through a proxy. Proxyless controller 150 sends a second TCP connection request 210B (i.e., another SYN packet) to destination server 110 with sequence number 212B equal to "80". In this example, the proxyless controller 150 determines the second sequence number 212B by rolling back or decrementing the first sequence number 212A (sent in the first TCP connection request 210A by the client 102) by an amount equal to an amount of some data in the proxy protocol header 230. Here, the proxyless controller 150 intends to send 20 bytes of data in the proxy protocol header 230 (including the client information 104). Thus, 100 (i.e., the sequence number 212A) - 20 (i.e., the number of bytes in the proxy protocol header 230) equals "80". The proxyless controller 150 may set the second sequence number 212B to any value less than the first sequence number 212A depending on the amount of data the proxyless controller 150 intends to send to the destination server 110 before acknowledging the connection to the client 102.
[0030] Next, the proxyless controller 150 receives an acknowledgement message 220A (i.e., a SYN|ACK packet) with sequence number 212 equal to "200" and acknowledgement number 222 equal to "81". The acknowledgement number 222 of "81" acknowledges the sequence number 212 of "80" previously sent by the proxyless controller 150. After receiving the acknowledgement message 220A, the proxyless controller 150 proceeds to send the proxy protocol header 230 (and / or any other data that the destination server 110 may desire or request). Here, the sequence number 212 is "81" (matching the previous acknowledgement number 222A), the length is "20" (20 bytes), and the acknowledgement number 222 is equal to "201" (matching the sequence number 212 of "200" previously provided by the destination server 110). The destination server 110 acknowledges the proxy protocol header 230 with an acknowledgement message 220B that includes a sequence number 212 equal to "201" and an acknowledgement number 222 equal to "101."
[0031] The proxyless controller 150 updates the acknowledgement message 220A (which may contain important connection information required by the client 102) based on the sequence number 212A from the original TCP connection request 210A from the client 102. That is, the proxyless controller 150 replaces the original acknowledgement number 222A with the updated acknowledgement number 222 expected by the client 102 in response to the TCP connection request 210A. In this example, the proxyless controller 150 sends the acknowledgement message 220C (i.e., a SYN packet) with the sequence number 212 equal to "201" (to match the sequence number 212 provided by the acknowledgement message 220B) and the acknowledgement number 222 equal to "101" (to match the acknowledgement number 222 expected by the client 102 in response to the TCP connection request 210A). From this point on, the client 102 and destination server 110 communicate freely with the proxyless controller 150, which simply forwards packets 250 between them (i.e., no deep inspection or modification of packets is required). For example, the client 102 follows up with a data packet 250 that includes a sequence number 212 equal to "101" and an acknowledgement number 222 equal to "202", which matches the expectations of the destination server 110.
[0032] 3, conventional techniques typically require a proxy (or other intermediary) to continually modify packets of data transmitted between the client 102 and the destination server 110. In some examples, the proxyless controller 150 includes a cache 310 that caches connection information 320. The connection information 320 identifies a TCP connection between the client 102 and the destination server 110. When a TCP packet 250 (i.e., a data packet 250) is transmitted from the client 102 to the destination server 110 (and vice versa), the proxyless controller 150 may receive the TCP packet 250 and determine, based on the connection information 320, that the TCP packet 250 is part of an existing TCP connection and is destined for the client 102 or the destination server 110. When the proxyless controller 150 determines that the TCP packet 250 is part of an existing connection, the proxyless controller 150 may forward the TCP packet 250. To avoid throughput degradation, the proxyless controller 150 may store the connection information 320 in the cache 310, allowing the proxyless controller 150 to quickly and efficiently determine whether the TCP packet 250 is associated with any of the connections stored in the cache 310. If the connection information 320 confirms that the incoming data packet 250 is part of an existing TCP connection, the proxyless controller 150 forwards the data packet 250 to the appropriate destination without further inspection or modification of the data packet 250.
[0033] Thus, the system provides a proxyless protocol that allows existing proxy-based deployments to switch to proxyless deployments (e.g., SDN) without requiring reconfiguration. The system delivers line-rate or near-line-rate packet processing by requiring minimal packet intervention. Instead of modifying every packet, the system modifies sequence numbers (or other protocol-specific means for tracking data) such that only a few packets at the beginning of a connection require modification. The system can then maintain high data rates using a caching mechanism for the persistent flow of data.
[0034] 4 is a flow chart of an example configuration of operations for a method 400 for a proxyless protocol. The method 400 includes, at operation 402, intercepting a first TCP connection request 210A from the client 102, requesting to establish a first TCP connection between the client 102 and the proxy server 142 to route data to the destination server 110 through the proxy server 142. The first TCP connection request 110A includes the client information 104 and a first sequence number 212A. At operation 404, the method 400 includes sending a second TCP connection request 210B to the destination server 110, requesting to establish a second TCP connection between the client 102 and the destination server 110. In some examples, the second TCP connection request 210B is a modified form of the intercepted first TCP connection request 210A. The second TCP connection request 210B includes a second sequence number 212B that is less than the first sequence number 212A. The method 400 includes, at operation 406, intercepting an acknowledgement message 220A from the destination server 110 indicating an acknowledgment of the second TCP connection request 210B. At operation 408, the method 400 includes sending a data packet to the destination server 110, the data packet including the proxy protocol header 230 including the client information 104. The method 400 includes, at operation 410, generating a new acknowledgement message 220C using the first TCP connection request 210A and sending the new acknowledgement message 220C to the client 102.
[0035] 5 is a schematic diagram of an exemplary computing device 500 that may be used to implement the systems and methods described herein. Computing device 500 is intended to represent various forms of digital computers, such as laptops, desktops, workstations, personal digital assistants, servers, blade servers, mainframes, and other suitable computers. The components shown herein, their connections and relationships, and their functions are merely exemplary and are not intended to limit the implementation of the invention as described and / or claimed in this document.
[0036] Computing device 500 includes a processor 510, a memory 520, a storage device 530, a high-speed interface / controller 540 that connects to memory 520 and high-speed expansion port 550, and a low-speed interface / controller 560 that connects to low-speed bus 570 and storage device 530. Each of components 510, 520, 530, 540, 550, and 560 are interconnected using various buses and may be implemented on a common motherboard or in other manners as desired. Processor 510 can process instructions for execution within computing device 500, including instructions stored in memory 520 or storage device 530, to display graphical information for a graphical user interface (GUI) on an external input / output device, such as a display 580 coupled to high-speed interface 540. In other implementations, multiple processors and / or multiple buses may be used along with multiple memories and types of memories as desired. Also, multiple computing devices 500 may be connected, with each device providing a portion of the required operations (eg, as a bank of servers, as a group of blade servers, or as a multi-processor system).
[0037] The memory 520 stores information non-transiently within the computing device 500. The memory 520 may be a computer-readable medium, a volatile memory unit, or a non-volatile memory unit. The non-transient memory 520 may be a physical device used to temporarily or permanently store programs (e.g., sequences of instructions) or data (e.g., program state information) for use by the computing device 500. Examples of non-volatile memory include, but are not limited to, flash memory and read-only memory (ROM) / programmable read-only memory (PROM) / erasable programmable read-only memory (EPROM) / electronically erasable programmable read-only memory (EEPROM) (e.g., typically used for firmware such as boot programs). Examples of volatile memory include, but are not limited to, random access memory (RAM), dynamic random access memory (DRAM), static random access memory (SRAM), phase change memory (PCM), and disk or tape.
[0038] The storage device 530 can provide mass storage for the computing device 500. In some implementations, the storage device 530 is a computer-readable medium. In various different implementations, the storage device 530 may be an array of devices including a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid-state memory device, or a device in a storage area network or other configuration. In further implementations, the computer program product is tangibly embodied in an information carrier. The computer program product includes instructions that, when executed, perform one or more methods, such as the methods described above. The information carrier is a computer-readable medium or a machine-readable medium, such as the memory 520, the storage device 530, or a memory on the processor 510.
[0039] The high-speed controller 540 manages bandwidth-intensive operations for the computing device 500, and the low-speed controller 560 manages less bandwidth-intensive operations. Such role assignments are merely exemplary. In some implementations, the high-speed controller 540 is coupled to the memory 520, the display 580 (e.g., through a graphics processor or accelerator), and a high-speed expansion port 550 that may accept various expansion cards (not shown). In some implementations, the low-speed controller 560 is coupled to the storage device 530 and the low-speed expansion port 590. The low-speed expansion port 590 may include various communication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet) and may be coupled, for example, via a network adapter, to one or more input / output devices such as a keyboard, a pointing device, a scanner, or a networking device such as a switch or router.
[0040] The computing device 500 may be realized in a number of different forms, as shown in the figure, such as a standard server 500a, or multiple times within a group of such servers 500a, as a laptop computer 500b, or as part of a rack server system 500c.
[0041] Various implementations of the systems and techniques described herein may be implemented in digital electronic and / or optical circuitry, integrated circuitry, specially designed ASICs (application specific integrated circuits), computer hardware, firmware, software, and / or combinations thereof. These various implementations may include implementations in one or more computer programs executable and / or interpretable on a programmable system that includes at least one programmable processor, which may be special purpose or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device.
[0042] A software application (i.e., a software resource) may refer to computer software that causes a computing device to perform tasks. In some examples, a software application may be referred to as an "application," an "app," or a "program." Examples of applications include, but are not limited to, system diagnostic applications, system management applications, system maintenance applications, word processing applications, spreadsheet applications, messaging applications, media streaming applications, social networking applications, and gaming applications.
[0043] These computer programs (also known as programs, software, software applications or codes) contain machine instructions for a programmable processor and may be implemented in high-level procedural and / or object-oriented programming languages and / or assembly / machine languages. As used herein, the terms "machine-readable medium" and "computer-readable medium" refer to any computer program product, non-transitory computer-readable medium, apparatus and / or device (e.g., magnetic disk, optical disk, memory, programmable logic device (PLD)) used to provide machine instructions and / or data to a programmable processor, including a machine-readable medium that receives machine instructions as a machine-readable signal. The term "machine-readable signal" refers to any signal used to provide machine instructions and / or data to a programmable processor.
[0044] The processes and logic flows described herein can be executed by one or more programmable processors, also referred to as data processing hardware, which execute one or more computer programs to perform functions by performing operations on input data to generate output. The processes and logic flows can also be executed by special purpose logic circuitry, for example, an FPGA (field programmable gate array) or an ASIC (application specific integrated circuit). Processors suitable for executing computer programs include, by way of example, both general purpose and special purpose microprocessors, as well as any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read-only memory or a random access memory, or both. The essential elements of a computer are a processor for executing instructions, and one or more memory devices for storing instructions and data. Generally, a computer will also include one or more mass storage devices for storing data, such as, for example, a magnetic disk, a magneto-optical disk, or an optical disk, or be operatively coupled to receive data from or transfer data to the one or more mass storage devices, or both. However, a computer need not have such devices. Computer-readable media suitable for storing computer program instructions and data include, by way of example, all forms of non-volatile memory, media, and memory devices, including semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The processor and the memory may be supplemented by, or incorporated in, special purpose logic circuitry.
[0045] To provide for user interaction, one or more aspects of the present disclosure may be implemented on a computer having a display device, such as a CRT (cathode ray tube), LCD (liquid crystal display) monitor, or touch screen, for displaying information to a user, and optionally a keyboard and a pointing device, such as a mouse or trackball, by which a user can provide input to the computer. Other types of devices may also be used to provide user interaction, for example, feedback provided to the user may be any form of sensory feedback, such as visual feedback, auditory feedback, or tactile feedback, and input from the user may be received in any form, including acoustic input, speech input, or tactile input. In addition, the computer may interact with a user by sending documents to and receiving documents from a device used by the user, for example, by sending a web page to a web browser on the user's client device in response to a request received from the web browser.
[0046] Although several implementations have been described, it will be understood that various modifications may be made without departing from the spirit and scope of the disclosure. Accordingly, other implementations are within the scope of the following claims.
Claims
1. A computer-implemented method (400) that, when executed by data processing hardware, causes the data processing hardware (144) to perform operations, the operations including: intercepting a first Transmission Control Protocol (TCP) connection request (210) from a client (102) requesting to establish a first TCP connection between the client (102) and the proxy server (142) for routing data to a destination server (110) through the proxy server (142), the first TCP connection request (210) including client information (104) and a first sequence number (212); The method further comprises: sending, to the destination server (110), a second TCP connection request (210) requesting establishment of a second TCP connection between the client (102) and the destination server (110), the second TCP connection request (210) including a second sequence number (212) that is less than the first sequence number (212); the method further comprising: intercepting an acknowledgment message (220) from the destination server (110) indicating an acknowledgment of the second TCP connection request (210); sending a data packet (250) to the destination server (110) that includes a proxy protocol header message (230) that includes the client information (104); generating a new acknowledgment message (220) using the first TCP connection request (210); sending the new acknowledgement message (220) to the client (102); The method (400), wherein the operations further include obtaining client configuration data indicating an intent of the client (102) to communicate with the proxy server (142) prior to intercepting the first TCP connection request (210) from the client (102).
2. The client configuration data includes a destination identifier that identifies the destination server (110); 2. The method (400) of claim 1, wherein the operations further include, after intercepting the first TCP connection request (210) from the client (102), determining that the client (102) intends to communicate with the proxy server (142) using the destination identifier.
3. The method (400) of claim 2, wherein the destination identifier comprises an Internet Protocol (IP) address.
4. The method (400) of any one of claims 1 to 3, wherein intercepting the first TCP connection request (210) from the client (102) includes determining that a SYN flag is set in the first TCP connection request (210).
5. The method (400) of any one of claims 1 to 4, wherein a difference between said first sequence number (212) and said second sequence number (212) is equal to a size of said proxy protocol header message (230).
6. The acknowledgement message (220) includes connection information; The method (400) of any one of claims 1 to 5, wherein the new acknowledgement message (220) contains the same connection information as the acknowledgement message (220).
7. The method (400) of any one of claims 1 to 6, wherein after sending the new acknowledgment message (220) to the client (102), the client (102) and the destination server (110) communicate directly without modification by the data processing hardware (144).
8. The client (102) is remote from the destination server (110); The method (400) of any one of claims 1 to 7, wherein the first TCP connection request (210) is intercepted at the client (102).
9. The client (102) is remote from the destination server (110); The method (400) of any one of claims 1 to 7, wherein the first TCP connection request (210) is intercepted at the destination server (110).
10. A system (100), comprising: Data processing hardware (144); and memory hardware (146) in communication with the data processing hardware (144), the memory hardware (146) storing instructions that, when executed on the data processing hardware (144), cause the data processing hardware (144) to perform operations, the operations including: intercepting a first Transmission Control Protocol (TCP) connection request (210) from a client (102) requesting to establish a first TCP connection between the client (102) and the proxy server (142) for routing data to a destination server (110) through the proxy server (142), the first TCP connection request (210) including client information (104) and a first sequence number (212); The operation further comprises: sending, to the destination server (110), a second TCP connection request (210) requesting establishment of a second TCP connection between the client (102) and the destination server (110), the second TCP connection request (210) including a second sequence number (212) that is less than the first sequence number (212); the operations further comprising: intercepting an acknowledgment message (220) from the destination server (110) indicating an acknowledgment of the second TCP connection request (210); sending a data packet (250) including a proxy protocol header message (230) including the client (102) to the destination server (110); generating a new acknowledgment message (220) using the first TCP connection request (210); sending the new acknowledgement message (220) to the client (102); The operations further include obtaining client configuration data indicating an intent of the client (102) to communicate with the proxy server (142) prior to intercepting the first TCP connection request (210) from the client (102).
11. The client configuration data includes a destination identifier that identifies the destination server (110); 11. The system (100) of claim 10, wherein the operations further include, after intercepting the first TCP connection request (210) from the client (102), determining that the client (102) intends to communicate with the proxy server (142) using the destination identifier.
12. The system (100) of claim 11, wherein the destination identifier comprises an Internet Protocol (IP) address.
13. 13. The system (100) of claim 10, wherein intercepting the first TCP connection request (210) from the client (102) includes determining that a SYN flag is set in the first TCP connection request (210).
14. The system (100) according to any one of claims 10 to 13, wherein a difference between the first sequence number (212) and the second sequence number (212) is equal to a size of the proxy protocol header message (230).
15. The acknowledgement message (220) includes connection information; The system (100) of any one of claims 10 to 14, wherein the new acknowledgement message (220) contains the same connection information as the acknowledgement message (220).
16. The system (100) of any one of claims 10 to 15, wherein after sending the new acknowledgement message (220) to the client (102), the client (102) and the destination server (110) communicate directly.
17. The client (102) is remote from the destination server (110); The system (100) of any one of claims 10 to 16, wherein the first TCP connection request (210) is intercepted at the client (102).
18. The client (102) is remote from the destination server (110); The system (100) of any one of claims 10 to 16, wherein the first TCP connection request (210) is intercepted at the destination server (110).
Citation Information
Patent Citations
Managing sequence values with added headers in computing devices
US20150312384A1
Establishing network connections between transparent network devices
US8180902B1