HK1189438A - Method to allocate buffer for tcp proxy session based on dynamic network conditions - Google Patents
Method to allocate buffer for tcp proxy session based on dynamic network conditions Download PDFInfo
- Publication number
- HK1189438A HK1189438A HK14102516.5A HK14102516A HK1189438A HK 1189438 A HK1189438 A HK 1189438A HK 14102516 A HK14102516 A HK 14102516A HK 1189438 A HK1189438 A HK 1189438A
- Authority
- HK
- Hong Kong
- Prior art keywords
- server
- client
- buffer
- capacity
- side buffer
- Prior art date
Links
Description
Technical Field
The present invention relates generally to data communications, and more particularly to serving gateways.
Background
For some time, many service gateways, such as firewalls and server load balancers, have provided Transmission Control Protocol (TCP) proxy functionality. Typical uses of TCP proxies include network analysis, security, and traffic adaptation due to asymmetric client and server conditions. A TCP proxy server typically allocates a fixed amount of memory buffer to handle data packet buffering for a TCP proxy session between a client device and a server. The store buffer is used to handle data packet buffers for both client-side sessions and server-side sessions. The allocation of memory between client side session transmit and receive buffers, and server side session transmit and receive buffers does not often take into account performance. Typical allocation methods include equally dividing the storage buffer between the session transmit and receive buffers, or a fixed weighted average between the transmit and receive buffers, such as a2 to 1 ratio between the server side receive buffer and the client side transmit buffer.
Although TCP proxies have been known for some time, they have not been used in any significant way. The correlation between the buffer allocation method and the performance of the TCP proxy session is not well understood. Today, numerous service gateway applications such as HTTP proxies, content filtering applications, advanced server load balancing methods are widely used. The performance of these applications depends in part on the performance of the TCP proxy session buffer allocation method.
Due to the different and dynamic network characteristics of the client device and the server, the predetermined allocation of buffer space does not perform well over different network conditions. Therefore, there is a need to allocate buffer space for TCP proxy sessions based on one or more dynamic network conditions.
Disclosure of Invention
According to one embodiment of the invention, a method for allocating a buffer for a TCP proxy session between a client and a server by a service gateway comprising a processor, comprises: (a) monitoring, by a processor, a dynamic server-side network behavior of a server-side session of a TCP proxy session and a dynamic client-side network behavior of a client-side session of the TCP proxy session; and (b) allocating, by a processor, a capacity of a server-side buffer and a capacity of a client-side buffer in a storage buffer based on the dynamic server-side network behavior, the dynamic client-side network behavior, and a weighted average of the capacities of the storage buffers.
In one aspect of the invention, the allocating (b) comprises: (b1) calculating a maximum capacity of the server-side buffer and a maximum capacity of the client-side buffer based on the dynamic server-side network behavior, the dynamic client-side network behavior, and a weighted average of the capacities of the storage buffers; and (b2) allocating the capacity of the server-side buffer and the capacity of the client-side buffer based on the maximum capacity of the server-side buffer and the maximum capacity of the client-side buffer.
In one aspect of the invention, the allocating (b) comprises: (b1) receiving server-side session data from the server or client-side session data packets from the client; (b2) determining whether the available capacity of the server-side buffer is sufficient for storing the server-side session data packets or whether the available capacity of the client-side buffer is sufficient for storing the client-side session data packets; (b3) increasing the allocated capacity of the server-side buffer in response to determining that the available capacity of the server-side buffer is insufficient for storing the server-side session data packets, or increasing the allocated capacity of the client-side buffer in response to determining that the available capacity of the client-side buffer is insufficient for storing the client-side session data packets; and (b4) adjusting the available capacity of the server side buffer in accordance with the increase in allocated capacity of the server side buffer or adjusting the available capacity of the client side buffer in accordance with the increase in allocated capacity of the client side buffer.
In one aspect of the invention, the increasing (b3) comprises: (b3i) in response to determining that the available capacity of the server-side buffer is insufficient for storing the server-side session data packets, determining whether the allocated capacity of the server-side buffer is less than the maximum capacity of the server-side buffer, or in response to determining that the available capacity of the client-side buffer is insufficient for storing the client-side session data packets, determining whether the allocated capacity of the client-side buffer is less than the maximum capacity of the client-side buffer; and (b3ii) in response to determining that the allocated capacity of the server-side buffer is less than the maximum capacity of the server-side buffer, determining whether there is sufficient storage space within the maximum capacity of the server-side buffer to store the server-side session data packets, or in response to determining that the allocated capacity of the client-side buffer is less than the maximum capacity of the client-side buffer, determining whether there is sufficient storage space within the maximum capacity of the client-side buffer to store the client-side session data packets; (b3iii) in response to determining that sufficient storage space exists within the maximum capacity of the server-side buffer to store the server-side session data packets, allocating the storage space to the server-side buffer and adjusting the available capacity of the server-side buffer according to the allocated storage space, or in response to determining that sufficient storage space exists within the maximum capacity of the client-side buffer to store the client-side session data packets, allocating the storage space to the client-side buffer and adjusting the available capacity of the client-side buffer according to the allocated storage space.
In one aspect of the invention, said monitoring (a) and said calculating (b1) comprise: (a1) measuring a server-side data packet Round Trip Time (RTT) and a client-side data packet RTT; and (b1i) calculating the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using the server side data packet RTT, client side RTT, and a weighted average of the capacities of the storage buffers.
In one aspect of the invention, the weighted average of the capacity of the storage buffer is biased towards the server when calculating the maximum capacity of the server side buffer, or wherein the weighted average of the capacity of the storage buffer is biased towards the client when calculating the maximum capacity of the client side buffer.
In one aspect of the invention, the monitoring (a) further comprises: (a3) obtaining new measurements of the server side data packet RTT and the client side data packet RTT; and (a4) modifying the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using a new server side data packet RTT, a new client side data packet RTT, and a weighted average of the capacities of the storage buffers.
In one aspect of the invention, the measuring (a1) and the calculating (a2) comprise: (a1i) measuring the server side data packet RTT, the client side data packet RTT, a server side transmission rate, and a client side transmission rate; and (a2i) calculating the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using the server side data packet RTT, the client side RTT, the server side transmission rate, the client side transmission rate, and a weighted average of the capacities of the storage buffers.
In one aspect of the invention, the monitoring (a) further comprises: (a3) obtaining new measurements of the server side transmission rate and the client side transmission rate; and (a4) modifying the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using the server side data packet RTT, the client side data packet RTT, a new server side transmission rate, a new client side transmission rate, and a weighted average of the capacities of the storage buffers.
System and computer program products corresponding to the above-summarized methods are also described and claimed herein.
Drawings
Fig. 1 illustrates an embodiment of a service gateway for providing a TCP proxy session between a client device and a server according to the present invention.
Fig. 2a illustrates an embodiment of a service gateway for receiving data packets from a server according to the present invention.
Fig. 2b illustrates an embodiment of a service gateway for sending data packets to a client device according to the present invention.
Fig. 3 illustrates an embodiment of a service gateway for monitoring server-side network behavior and client-side network behavior according to the present invention.
Fig. 4 illustrates an embodiment of a storage space allocation procedure for a server-side receive buffer and a client-side transmit buffer according to the present invention.
Fig. 5a illustrates an embodiment of a serving gateway for storing data packets in a server-side receive buffer according to the present invention.
Fig. 5b illustrates an embodiment of a serving gateway for storing data packets in a client-side send buffer according to the present invention.
Fig. 6 illustrates an embodiment of a service gateway for receiving data packets from a client device according to the present invention.
FIG. 7 illustrates an embodiment of a storage space allocation process for a client-side receive buffer and a server-side transmit buffer in accordance with the present invention.
Fig. 8a illustrates an embodiment of a serving gateway for storing data packets in a client side receive buffer according to the present invention.
Fig. 8b illustrates an embodiment of a serving gateway for storing data packets in a server-side transmit buffer according to the present invention.
Detailed Description
The invention can take the form of an entirely hardware embodiment, an entirely software embodiment or an embodiment containing both hardware and software elements. In a preferred embodiment, the invention is implemented in software, which includes but is not limited to firmware, resident software, microcode, and the like.
Furthermore, the invention can take the form of a computer program product accessible from a computer-usable or computer-readable medium providing program code for use by or in connection with a computer or any instruction execution system. For the purposes of this description, a computer-usable or computer readable medium can be any apparatus that can contain, store, communicate, propagate, or transport the program for use by or in connection with the instruction execution system, apparatus, or device.
The medium can be an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system (or apparatus or device) or a propagation medium. Examples of a computer-readable medium include a semiconductor or solid state memory, magnetic tape, a removable computer diskette, a Random Access Memory (RAM), a read-only memory (ROM), a rigid magnetic disk and an optical disk. Current examples of optical disks include compact disk-read only memory (CD-ROM), compact disk-read/write (CD-R/W), and DVD.
A data processing system suitable for storing and/or executing program code will include at least one processor coupled directly or indirectly to memory elements through a system bus. The memory elements can include local memory employed during actual execution of the program code, bulk storage, and cache memories which provide temporary storage of at least some program code in order to reduce the number of times code must be retrieved from bulk storage during execution.
Input/output or I/O devices (including but not limited to keyboards, displays, pointing devices, etc.) can be coupled to the system either directly or through intervening I/O controllers.
Network adapters may also be coupled to the system to enable the data processing system to become coupled to other data processing systems or remote printers or storage devices through intervening private or public networks. Modems, cable modem and Ethernet cards are just a few of the currently available types of network adapters.
The flowcharts and block diagrams in the figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments of the present invention. In this regard, each block in the flowchart and block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified partial function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions.
The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the invention. As used herein, the singular forms "a", "an" and "the" are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms "comprises" and/or "comprising," when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof.
Fig. 1 illustrates an embodiment of a service gateway 300 providing a TCP proxy session 400 between a client device 100 and a server device 200 via a data network 153.
In one embodiment, the data network 153 includes an Internet Protocol (IP) network, a corporate data network, a regional corporate data network, and internet service provider network, a residential data network, a wired network such as ethernet, a wireless network such as a WiFi network, or a cellular network. In one embodiment, the data network 153 resides in a data center or is connected to a network or application network cloud.
Client device 100 is typically a computing device with network access capabilities. In one embodiment, the client device 100 is a workstation, desktop or laptop personal computer, Personal Data Assistant (PDA), tablet computing device, smart phone, or cellular phone, set-top box, internet media browser, internet media player, smart sensor, smart medical device, set-top box, networked television, networked DVR, networked blu-ray player, networked handheld gaming device, or media center.
In one embodiment, the client device 100 is a residential broadband gateway, a commercial Internet gateway, a commercial Web proxy server, a network Customer Premises Equipment (CPE), or an Internet access gateway.
In one embodiment, client device 100 comprises a Broadband Remote Access Server (BRAS), a Digital Subscriber Line Access Multiplexer (DSLAM), a Cable Modem Termination System (CMTS), or a service provider access gateway.
In one embodiment, client device 100 comprises a mobile broadband access gateway, such as a Gateway GPRS Support Node (GGSN), Home Agent (HA), or PDN Gateway (PGW).
In one embodiment, the client device 100 includes a server load balancer, an application delivery controller, a traffic manager, a firewall, a VPN server, a remote access server, or an enterprise or data center access gateway.
In one embodiment, client device 100 is a device that performs functions similar to service gateway 300.
The client device 100 initiates a TCP session 400 to the server 200 via the service gateway 300.
The server 200 is a computing device typically coupled to a processor and a computer readable medium storing computer readable program code. The server 200, together with the processor and computer readable program code, implements the functionality of a Web server, file server, video server, database server, application server, voice system, conference server, media gateway, media center, app server, or Web server that uses the TCP session 400 to provide TCP based services or application services to the client device 100.
In one embodiment, server 200 is a device that performs functions similar to service gateway 300.
In one embodiment, TCP session 400 comprises an HTTP session, an FTP file transfer session, a TCP-based video streaming session, a TCP-based music streaming session, a file download session, a group conferencing session, a database access session, a remote terminal access session, a telnet session, an e-commerce transaction, a remote procedure call, or a TCP-based network communication session.
Service gateway 300 is operatively coupled to processor 310, storage module 320, network interface module 330, and computer-readable medium 340. The computer-readable medium 340 stores computer-readable program code that, when executed by the processor 310 using the storage module 320, implements the various embodiments of the invention as described herein. In certain embodiments, service gateway 300 is implemented as a server load balancer, an application delivery controller, a service delivery platform, a traffic manager, a security gateway, a component of a firewall system, a component of a Virtual Private Network (VPN), a load balancer of a video server, a gateway that distributes load to one or more servers, a Web or HTTP server, a Network Address Translation (NAT) gateway, or a TCP proxy server.
In one embodiment, in which a TCP proxy session 400 is provided between a client device 100 and a server 200, the service gateway 300 establishes a client-side TCP session 420 with the client device 100 and a server-side TCP session 470 with the server 200.
In one embodiment, computer-readable medium 340 includes instructions for service application 350 and processor 310 executing service application 350.
In one embodiment, service application 350 implements the functionality of a VPN firewall, a gateway security application, an HTTP proxy, a TCP-based audio or video streaming session proxy, a Web session proxy, content filtering, server load balancing, a firewall, or a Web application session proxy.
In one embodiment, the service gateway 300 includes a store buffer 327 for processing the TCP proxy session 400. In one embodiment, the size of the memory buffer 327 is predetermined, for example, 1MB, 400KB, 200KB, or 2 MB. In one embodiment, the service gateway 300 reserves a portion of the storage module 320 as a storage buffer 327 to handle the TCP proxy session 400.
In one embodiment, the service gateway 300 allocates a client-side transmit buffer 424 for the client-side TCP session 420 and a server-side receive buffer 474 for the server-side TCP session 470, wherein the client-side transmit buffer 424 and the server-side receive buffer 474 reside in the storage buffer 327.
In one embodiment, the service gateway 300 monitors the dynamic server-side network behavior 460 of the server-side session 470 and the dynamic client-side network behavior 410 of the client-side session 420. The service gateway 300 allocates the client side transmit buffer 424 and allocates the server side receive buffer 474 based on the network behavior 410 and the network behavior 460.
In one embodiment as illustrated in fig. 2a, the service gateway 300 receives the data packet 479 from the server-side TCP session 470 of the server 200. The serving gateway 300 stores the data packet 479 in the server-side receive buffer 474. Service application 350 retrieves data packet 479 from server-side receive buffer 474 and processes data packet 479. In one embodiment, service application 350 uses data packet 479 to create data packet 429. The service application 350 transmits the data packet 429 to the client device 100 by placing the data packet 429 in the client-side transmit buffer 424. The service gateway 300 instructs the network module 330 to transmit the data packet 429 from the client-side send buffer 424 to the client device 100.
In one embodiment, service gateway 300 determines that the available capacity 484 of server-side receive buffer 474 is sufficient for storing data packet 479. The service gateway 300 stores the data packet 479 into the server-side receive buffer 474 and reduces the available capacity 484 by the amount of storage space required to store the data packet 479.
In one embodiment, the service gateway 300 determines that the available capacity 484 is insufficient, the service gateway 300 increases the allocated capacity 494 of the server-side receive buffer 474, and adjusts the available capacity 484 according to the increase in the allocated capacity 494. If the adjusted available capacity 484 is sufficient, the service gateway 300 stores the data packet 479 in the server-side receive buffer 474 and reduces the available capacity 484 according to the storage space required to store the data packet 479.
In one embodiment, in which serving gateway 300 determines that available capacity 484 is insufficient, serving gateway 300 drops data packet 479 even after the adjustment.
In one embodiment, service application 350 retrieves data packet 479 from server-side receive buffer 474. Service gateway 300 removes data packet 479 from server-side receive buffer 474 and increases available capacity 484 based on the storage space consumed by data packet 479.
In one embodiment as illustrated in fig. 2b, before serving gateway 300 stores data packet 429 into client-side transmit buffer 424, serving gateway 300 checks whether the available capacity of client-side transmit buffer 424 is sufficient for storing data packet 429. If the check is positive, serving gateway 300 stores data packet 429 into client-side transmit buffer 424 and reduces available capacity 434 according to the storage space required to store data packet 429.
In one embodiment, the serving gateway 300 determines that the available capacity 434 is insufficient, the serving gateway 300 increases the allocated capacity 444 of the client-side transmit buffer 424, and adjusts the available capacity 434 according to the increase in the allocated capacity 444. If the adjusted available capacity 434 is sufficient, service gateway 300 stores data packet 429 into client-side transmit buffer 424 and reduces available capacity 434 based on the storage space required to store data packet 429.
In one embodiment, in which serving gateway 300 determines that available capacity 434 is insufficient, serving gateway 300 drops data packet 429 even after the adjustment. In one embodiment, the service gateway 300 waits until the available capacity 434 becomes sufficient after the adjustment.
In one embodiment, the network module 330 successfully transfers the data packet 429 from the client-side transmit buffer 424. Serving gateway 300 removes data packet 429 from client-side transmit buffer 424 and increases available capacity 434 based on the storage space consumed by data packet 429.
In the embodiment illustrated in fig. 3, the service gateway 300 monitors the dynamic network behavior 460 for server-side sessions 470. In one embodiment, network behavior 460 includes server-side data packet Round Trip Time (RTT)462, server-side transmission rate 463, or dynamic server-side network attributes that affect the reception of data packets 479 by serving gateway 300. In one embodiment, the server-side RTT462 affects the time at which the data packet 479 is transmitted over the data network 153. In one embodiment, server-side transmission rate 463 affects the rate at which network module 330 receives data packets 479. In one embodiment, RTT462 and transmission rate 463 are correlated.
The service gateway 300 measures or estimates a server-side RTT462 for the server-side session 470. In an example embodiment, the service gateway 300 measures the server-side RTT462 based on the duration between the time the service gateway 300 sends a data packet of the server-side session 470 to the server 200 and the time the service gateway 300 receives an acknowledgement of the sent data packet. In one embodiment, the service gateway 300 measures the RTT462 from time to time during the server-side TCP session 470. In one embodiment, the service gateway 300 estimates a server-side RTT462 based on one or more previous server-side TCP sessions with the server 200. In one embodiment, the service gateway 300 estimates the server-side RTT462 to be 10 milliseconds, 100 milliseconds, 3 milliseconds, 22 milliseconds, or 3 seconds.
In one embodiment, the service gateway 300 calculates the bandwidth of the network interface used by the server-side transmission rate 463 for the data packets received by the network module 330 for the server-side TCP session 470. In one embodiment, the server-side transmission rate 463 is the bandwidth of the virtual network interface. In one embodiment, the serving gateway 300 calculates the server-side transmission rate 463 by calculating one or more transmission rates for one or more data packets of the server-side TCP session 470 over a period of time. In one embodiment, serving gateway 300 calculates new transmission rates 463 from time to time. In one embodiment, the service gateway 300 calculates the server-side transmission rate 463 as 1Mbps, 43Mbps, 100Mbps, 1Gbps, 600Mbps, 25Mbps, or 10 Gbps.
In one embodiment, the service gateway 300 monitors the dynamic network behavior 410 of the client side session 420. In one embodiment, network behavior 410 includes client side data packet Round Trip Time (RTT)412, client side transmission rate 413, or dynamic network attributes that affect the sending of data packet 429 by serving gateway 300. In one embodiment, client side RTT412 affects the time to transmit data packet 429 through data network 153. In one embodiment, the client side transmission rate 413 affects the rate at which the network module 330 transmits the data packets 429. In one embodiment, the RTT412 and the transmission rate 413 are related.
Serving gateway 300 measures or estimates client side RTT 412. In an example embodiment, the service gateway 300 measures the client side RTT412 based on the duration between the time the service gateway 300 sends a data packet of the client side session 420 to the client device 100 and the time the service gateway 300 receives an acknowledgement of the sent data packet. In one embodiment, the service gateway 300 measures the RTT412 from time to time during the client side TCP session 420. In one embodiment, the service gateway 300 estimates the client side RTT412 based on one or more previous server side TCP sessions with the client device 100. In one embodiment, the service gateway 300 estimates the server-side RTT412 to be 10 milliseconds, 100 milliseconds, 3 milliseconds, 22 milliseconds, or 3 seconds.
In one embodiment, service gateway 300 calculates the bandwidth of the network interface used by client-side transmission rate 413 for network module 330 to transmit data packets of client-side TCP session 420. In one embodiment, the client side transmission rate 413 is the bandwidth of the virtual network interface. In one embodiment, the service gateway 300 calculates the client side transmission rate 413 by calculating one or more transmission rates of one or more data packets of the client side TCP session 410 during a period of time. In one embodiment, the serving gateway 300 calculates the new transmission rate 413 from time to time. In one embodiment, the service gateway 300 calculates the client side transmission rate 413 as 1Mbps, 43Mbps, 100Mbps, 1Gbps, 600Mbps, 25Mbps, or 10 Gbps.
Fig. 4 illustrates an embodiment in which the service gateway 300 allocates memory from the memory buffer 327 to the server-side receive buffer 474 and the client-side transmit buffer 424. In one embodiment, when the serving gateway 300 starts processing the TCP proxy session 400, the serving gateway 300 reserves a portion of the store buffer 327 for the server-side receive buffer 474 and reserves a portion of the store buffer 327 for the client-side send buffer 424. In one embodiment, when the service gateway 300 establishes the server-side TCP session 470 and/or the client-side TCP session 420, the service gateway 300 begins processing the TCP proxy session 400. In one embodiment, the service gateway 300 initially allocates a server-side receive buffer 474 of a predetermined capacity 494. For example, the allocated capacity 494 is initially predetermined to be 10%, 8%, 1/8% of the storage buffer 327 or another predetermined fraction of the storage buffer 327. In another embodiment, the initially allocated capacity 494 is preset to 30KB, 32KB, 4KB, 64KB, or 100 KB. Likewise, the service gateway 300 predetermines the client transmit buffer 424 for the initial allocated capacity 444. The service gateway 300 further sets the available capacity 484 of the server-side receive buffer 474 to be the same as the allocated capacity 494 and sets the available capacity 434 of the client-side transmit buffer 424 to be the same as the allocated capacity 444.
In one embodiment, the service gateway 300 calculates the maximum capacity 492 of the server-side receive buffer 474 and the maximum capacity 442 of the client-side transmit buffer 424. In one embodiment, the service gateway 300 uses the RTT462 and the RTT412 according to equation 1 and equation 2, and calculates using a weighted average of the capacity 328 of the storage buffer 327 based on the RTT462 and the RTT 412. The weighted average has a bias towards the server-side receive buffer 474.
Equation 1
Equation 2
Equations 1 and 2 illustrate embodiments in which the sum of maximum capacity 492 and maximum capacity 442 is equal to capacity 328. In this embodiment, selecting a factor of 2 for RTT462 causes service gateway 300 to advertise 1/2 or half of the maximum capacity 492 of server-side receive buffer 474 for server-side TCP session 470. It may be appropriate to adjust the factor of 2 using a different factor associated with the portion of the server-side receive buffer 474 advertised for the server-side TCP session 470.
In one embodiment, the service gateway 300 obtains a new measurement of the server side RTT462 and/or a new measurement of the client side RTT 412. Serving gateway 300 applies equations 1 and 2 to correct maximum capacity 492 and maximum capacity 442.
In one embodiment, serving gateway 300 further considers server side transmission rate 463 and client side transmission rate 413. The serving gateway uses equation 3 and equation 4 and is calculated using a weighted average of the capacity 328 based on the combination of transmission rates 463 and RTT462 and transmission rates 413 and RTT 412. The weighted average has a bias towards the server-side receive buffer 474.
Equation 3
Equation 4
Equations 3 and 4 illustrate embodiments in which the sum of maximum capacity 492 and maximum capacity 442 is equal to capacity 328.
In one embodiment, the serving gateway 300 obtains a new server side transmission rate 463 and/or a new client side transmission rate 413. Serving gateway 300 applies equations 3 and 4 to correct maximum capacity 492 and maximum capacity 442. In one embodiment, the service gateway 300 obtains a new measurement of the server side RTT462 and/or a new measurement of the client side RTT 412. Serving gateway 300 applies equations 3 and 4 to correct maximum capacity 492 and maximum capacity 442.
In fig. 5a, the embodiment of fig. 2a is further illustrated, wherein the service gateway 300 stores the server data packets 479 into the server-side receive buffer 474 and finds that the available capacity 484 of the server-side receive buffer 474 is insufficient. The service gateway 300 checks whether the allocated capacity 494 of the server-side receive buffer 474 is less than the maximum capacity 492 of the server-side receive buffer 474. If the allocated capacity 494 is at least the maximum capacity 492 or the difference between the capacity 494 and the maximum capacity 492 is less than the storage required to store the data packet 479, then the serving gateway 300 drops the data packet 479.
In one embodiment, serving gateway 300 determines that there is sufficient storage space for storing data packet 479 within maximum capacity 492. Service gateway 300 allocates memory space 321 from memory buffer 327. In one embodiment, storage 321 has a capacity 322. The service gateway 300 increases the allocated capacity 494 of the server-side receive buffer 474 by the amount of capacity 322 and includes storage 321 into the server-side receive buffer 474. The service gateway 300 allocates the storage space 321 such that the adjusted allocated capacity 494 does not exceed the maximum capacity 492 of the server-side receive buffer 474. After storing the data packets 479 to the updated server-side receive buffer 474, the service gateway 300 updates the available capacity 484 of the server-side receive buffer 474 using the capacity 322, and the space consumed by the data packets 479.
In fig. 5b, the embodiment of fig. 2b is further illustrated, wherein the serving gateway 300 stores the data packet 429 into the client side transmit buffer 424 and finds that the available capacity 434 of the client side transmit buffer 424 is not sufficient. The serving gateway 300 checks if the allocated capacity 444 of the client side transmit buffer 424 is smaller than the maximum capacity 442 of the client side transmit buffer 424. If capacity 444 is at least maximum capacity 442 or the difference between allocated capacity 444 and maximum capacity 442 is less than the storage required to store data packet 429, then serving gateway 300 drops data packet 429.
In one embodiment, serving gateway 300 determines that there is sufficient memory space within maximum capacity 442 for storing data packet 429. Service gateway 300 allocates memory space 325 from memory buffer 327. In one embodiment, storage space 325 has a capacity 326. The serving gateway 300 increases the allocated capacity of the client side transmit buffer 424 by the amount of capacity 326 and includes storage space 325 into the client side transmit buffer 424. The service gateway 300 allocates the storage space 325 such that the adjusted allocated capacity 444 does not exceed the maximum capacity 442 of the client-side transmit buffer 424. After storing data packet 429 in updated client-side transmit buffer 424, serving gateway 300 updates available capacity 434 using capacity 326, as well as the space consumed by data packet 429.
In one embodiment, the client device 100 sends the data packet 421 to the service gateway 300 via the client-side TCP session 420. As illustrated in fig. 6, in one embodiment, service gateway 300 includes a storage buffer 377 that includes client-side receive buffer 426 and server-side transmit buffer 476. Storage buffer 377 is associated with capacity 378. The client side receive buffer 426 is associated with an allocated capacity 446, an available capacity 436, and a maximum capacity 448. Server-side transmit buffer 476 is associated with allocated capacity 496, available capacity 486, and maximum capacity 498.
Service gateway 300 processes data packet 421 using client-side receive buffer 426 and server-side transmit buffer 476. Service gateway 300 receives data packet 421 and stores data packet 421 into client side receive buffer 426. Service application 350 retrieves data packet 421 from client-side receive buffer 426 and generates data packet 471 based on data packet 421. Service application 350 places data packet 471 in server-side send buffer 476. Service gateway 300 sends data packet 471 from server side send buffer 476 to server 200.
In one embodiment, service gateway 300 reserves a memory buffer 377 of a predetermined capacity 378 for handling TCP proxy session 400. In one embodiment, the capacity 378 of storage buffer 377 is the same as the capacity 328 of storage buffer 327. In one embodiment, volume 378 is different than volume 328.
Fig. 7 illustrates an embodiment in which the service gateway 300 allocates storage from storage buffer 377 to server-side transmit buffer 476 and client-side receive buffer 426. In one embodiment, when serving gateway 300 begins processing TCP proxy session 400, serving gateway 300 reserves a portion of store buffer 377 for server-side transmit buffer 476 and a portion of store buffer 377 for client-side receive buffer 426. In one embodiment, when the service gateway 300 establishes the server-side TCP session 470 and/or the client-side TCP session 420, the service gateway 300 begins processing the TCP proxy session 400. In one embodiment, the service gateway 300 initially allocates a server-side transmit buffer 476 of a predetermined capacity 496. For example, allocated capacity 496 is initially predetermined to be 10%, 8%, 1/8, or another fraction of the storage buffer 377, of the storage buffer 377. In another embodiment, the initial value of the allocated capacity 496 is preset to 30KB, 32KB, 4KB, 64KB, or 100 KB. Likewise, the serving gateway 300 predetermines the initial allocated capacity 446 of the client side receive buffer 426. The service gateway 300 further sets the available capacity 486 of the server side transmit buffer 476 to be the same as the allocated capacity 496 and sets the available capacity 436 of the client side receive buffer 426 to be the same as the allocated capacity 446.
In one embodiment, RTT462 of network conditions 460 affects the sending of data packet 471. In one embodiment, network condition 460 includes a server-side transmission rate 464. The service gateway 300 calculates the server-side transmission rate 464 bandwidth of the network interface used by the network module 330 to transmit the data packets of the server-side TCP session 470. In one embodiment, the server-side transmission rate 464 is the bandwidth of the virtual network interface. In one embodiment, the service gateway 300 calculates the server-side transmission rate 464 by calculating one or more transmission rates for one or more data of the server-side TCP session 470 over a period of time. In one embodiment, the serving gateway 300 calculates the new transmission rate 464 from time to time. In one embodiment, the service gateway 300 calculates the server-side transmission rate 464 to be 1Mbps, 43Mbps, 100Mbps, 1Gbps, 600Mbps, 25Mbps, or 10 Gbps.
In one embodiment, RTT412 of network conditions 410 also affects reception of data packet 421. In one embodiment, network conditions 410 include a client-side transmission rate 414. Serving gateway 300 calculates client-side transmission rate 414 as the bandwidth of the network interface used by network module 330 to receive data packets of client-side TCP session 420. In one embodiment, the client-side transfer rate 414 is the bandwidth of the virtual network interface. In one embodiment, serving gateway 300 calculates client-side transmission rate 414 by calculating one or more transmission rates of one or more data packets of client-side TCP session 410 over a period of time. In one embodiment, serving gateway 300 calculates new transmission rate 414 from time to time. In one embodiment, the service gateway 300 calculates the client side transmission rate 414 as 1Mbps, 43Mbps, 100Mbps, 1Gbps, 600Mbps, 25Mbps, or 10 Gbps.
In one embodiment, service gateway 300 uses network conditions 460 and 410 and calculates maximum capacity 498 and maximum capacity 448 using a weighted average of capacity 378 based on RTT462 and RTT412 according to equations 5 and 6. The weighted average has a bias towards the client side receive buffer 426.
Equation 5
Equation 6
Equations 5 and 6 illustrate embodiments in which the sum of maximum capacity 498 and maximum capacity 448 is equal to capacity 378. In this embodiment, the factor of RTT412 is chosen to be 2 such that serving gateway 300 advertises 1/2 or half of the maximum capacity 448 of client side receive buffer 426 for client side TCP session 420. It may be appropriate to adjust the factor 2 using a different factor related to the portion of the client side receive buffer 426 advertised for the client side TCP session 420.
In one embodiment, the service gateway 300 obtains a new measurement of the server side RTT462 and/or a new measurement of the client side RTT 412. Serving gateway 300 applies equations 5 and 6 to modify maximum capacity 498 and maximum capacity 448.
In one embodiment, the serving gateway 300 further considers the server-side transfer rate 464 and the client-side transfer rate 414. The serving gateway is calculated using equation 7 and equation 8 using a weighted average of the capacity 378 based on the combination of the transmission rate 464 and RTT462, and the transmission rate 414 and RTT 412. The weighted average has a bias towards the client side receive buffer 426.
Equation 7
Equation 9
Equations 7 and 8 illustrate embodiments in which the sum of maximum capacity 498 and maximum capacity 448 is equal to capacity 378.
In one embodiment, the serving gateway 300 obtains a new server side transmission rate 464 and/or a new client side transmission rate 414, and the serving gateway 300 applies equations 7 and 8 to modify the maximum capacity 498 and the maximum capacity 448. In one embodiment, service gateway 300 obtains a new measurement of server side RTT462 and/or a new measurement of client side RTT412, and service gateway 300 applies equation 7 and equation 8 to modify maximum capacity 492 and maximum capacity 442.
In fig. 8a, the service gateway 300 receives the data packet 421 from the client device 100 and stores the data packet 421 into the client side receive buffer 426 and finds that the available capacity 436 of the client side receive buffer 426 is insufficient. The serving gateway 300 checks whether the allocated capacity 446 of the client side receive buffer 426 is smaller than the maximum capacity 448 of the client side receive buffer 426. If allocated capacity 446 is at least maximum capacity 448 or the difference between allocated capacity 446 and maximum capacity 448 is less than the storage required to store data packet 421, then serving gateway 300 drops data packet 421.
In one embodiment, serving gateway 300 determines that there is sufficient memory space within maximum capacity 448 to store data packet 421. Service gateway 300 allocates memory space 375 from memory buffer 377. In one embodiment, storage space 375 has capacity 376. Service gateway 300 increases allocated capacity 446 by an amount of capacity 376 and includes storage space 375 in client side receive buffer 426. The service gateway 300 allocates the memory space 375 such that the adjusted allocated capacity 446 does not exceed the maximum capacity 448 of the client side transmit buffer 426. After storing the data packets 421 to the updated client side receive buffer 426, the service gateway 300 updates the available capacity 436 of the client side receive buffer 426 using the capacity 376, as well as the space consumed by the data packets 421.
In fig. 8b, service gateway 300 stores data packet 471 into server-side send buffer 476. In one embodiment, the service gateway 300 discovers that the available capacity 486 of the server-side transmit buffer 476 is insufficient. The service gateway 300 checks whether the allocated capacity 496 of the server side transmission buffer 476 is smaller than the maximum capacity 498 of the server side transmission buffer 476. If allocated capacity 496 is at least maximum capacity 498 or the difference between allocated capacity 496 and maximum capacity 498 is less than the storage needed to store data packet 471, then the serving gateway drops data packet 471.
In one embodiment, serving gateway 300 determines that there is sufficient memory space within maximum capacity 498 for storing data packet 471. Service gateway 300 allocates memory space 371 from memory buffer 377. In one embodiment, storage 371 has a capacity 372. The service gateway 300 increases the allocated capacity 496 by the amount of the capacity 372 and includes the storage space 371 into the server-side transmit buffer 476. Service gateway 300 allocates storage 371 so that the adjusted allocated capacity 496 does not exceed the maximum capacity 498. After storing data packets 471 to updated server-side send buffer 476, service gateway 300 updates available capacity 486 of server-side send buffer 476 using capacity 372, as well as the space consumed by data packets 471.
In one embodiment, service application 350 retrieves data packet 471 from client-side receive buffer 426. Service gateway 300 removes data packets 471 from client-side receive buffer 426 and increases available capacity 436 in accordance with the storage space consumed by data packets 471.
In one embodiment, the network module 330 successfully transfers the data packet 471 from the server-side send buffer 476. Service gateway 300 removes data packets 471 from server-side send buffer 476 and increases available capacity 486 according to the buffer space consumed by data packets 471.
Although the present invention has been described in accordance with the embodiments shown, one of ordinary skill in the art will readily recognize that there could be variations to the embodiments and those variations would be within the spirit and scope of the present invention. Accordingly, many modifications may be made by one of ordinary skill in the art without departing from the spirit and scope of the appended claims.
Claims (27)
1. A method for allocating, by a service gateway comprising a processor, a buffer for a TCP proxy session between a client and a server, comprising:
(a) monitoring, by the processor, a dynamic server-side network behavior of a server-side session of the TCP proxy session and a dynamic client-side network behavior of a client-side session of the TCP proxy session; and
(b) allocating, by the processor, a capacity of a server-side buffer and a capacity of a client-side buffer in a storage buffer based on the dynamic server-side network behavior, the dynamic client-side network behavior, and a weighted average of the capacities of the storage buffers.
2. The method of claim 1, wherein the assigning (b) comprises:
(b1) calculating a maximum capacity of the server-side buffer and a maximum capacity of the client-side buffer based on the dynamic server-side network behavior, the dynamic client-side network behavior, and a weighted average of the capacities of the storage buffers; and
(b2) allocating the capacity of the server-side buffer and the capacity of the client-side buffer based on the maximum capacity of the server-side buffer and the maximum capacity of the client-side buffer.
3. The method of claim 1, wherein the assigning (b) comprises:
(b1) receive server-side session data from the server, or
Receiving a client-side session data packet from the client;
(b2) determining whether the available capacity of the server-side buffer is sufficient for storing the server-side session data packets, or
Determining whether the available capacity of the client side buffer is sufficient for storing the client side session data packets;
(b3) increasing the allocated capacity of the server-side buffer in response to determining that the available capacity of the server-side buffer is insufficient for storing the server-side session data packets, or
In response to determining that the available capacity of the client side buffer is insufficient for storing the client side session data packets, increasing the allocated capacity of the client side buffer; and
(b4) adjusting the available capacity of the server-side buffer in accordance with an increase in the allocated capacity of the server-side buffer, or
Adjusting the available capacity of the client side buffer in accordance with an increase in the allocated capacity of the client side buffer.
4. The method of claim 3, wherein the increasing (b3) comprises:
(b3i) in response to determining that the available capacity of the server-side buffer is insufficient for storing the server-side session data packets, determining whether the allocated capacity of the server-side buffer is less than the maximum capacity of the server-side buffer, or
Determining whether the allocated capacity of the client side buffer is less than the maximum capacity of the client side buffer in response to determining that the available capacity of the client side buffer is insufficient for storing the client side session data packets; and
(b3ii) in response to determining that the allocated capacity of the server-side buffer is less than the maximum capacity of the server-side buffer, determining whether sufficient storage space exists within the maximum capacity of the server-side buffer for storing the server-side session data packets, or
In response to determining that the allocated capacity of the client side buffer is less than the maximum capacity of the client side buffer, determining whether sufficient storage space exists within the maximum capacity of the client side buffer for storing the client side session data packets;
(b3iii) in response to determining that sufficient storage space exists within the maximum capacity of the server-side buffer for storing the server-side session data packets, allocating the storage space to the server-side buffer and adjusting the available capacity of the server-side buffer according to the allocated storage space, or
In response to determining that sufficient storage space exists within the maximum capacity of the client side buffer for storing the client side session data packets, allocating the storage space to the client side buffer and adjusting the available capacity of the client side buffer according to the allocated storage space.
5. The method of claim 2, wherein said monitoring (a) and said calculating (b1) comprise:
(a1) measuring a server-side data packet Round Trip Time (RTT) and a client-side data packet RTT; and
(b1i) calculating the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using the server side data packet RTT, client side RTT, and a weighted average of the capacities of the storage buffers.
6. The method of claim 5, wherein the weighted average of the capacity of the storage buffer is biased towards the server when calculating the maximum capacity of the server-side buffer, or
Wherein the weighted average of the capacity of the storage buffer is biased towards the client when calculating the maximum capacity of the client side buffer.
7. The method of claim 5, wherein the monitoring (a) further comprises:
(a3) obtaining new measurements of the server side data packet RTT and the client side data packet RTT; and
(a4) modifying the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using a new server side data packet RTT, a new client side data packet RTT, and a weighted average of the capacities of the storage buffers.
8. The method of claim 5, wherein the measuring (a1) and the calculating (a2) comprise:
(a1i) measuring the server side data packet RTT, the client side data packet RTT, a server side transmission rate, and a client side transmission rate; and
(a2i) calculating the maximum capacity of the server-side buffer and the maximum capacity of the client-side buffer using the server-side data packet RTT, the client-side RTT, the server-side transmission rate, the client-side transmission rate, and a weighted average of the capacities of the storage buffers.
9. The method of claim 8, wherein the monitoring (a) further comprises:
(a3) obtaining new measurements of the server side transmission rate and the client side transmission rate; and
(a4) modifying the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using the server side data packet RTT, the client side data packet RTTT, a new server side transmission rate, a new client side transmission rate, and a weighted average of the capacities of the storage buffers.
10. A computer program product for allocating a buffer for a TCP proxy session between a client and a server, the computer program product comprising:
a non-transitory computer readable storage medium having computer readable program code embodied therein, the computer readable program code configured to:
(a) monitoring dynamic server-side network behavior of a server-side session of the TCP proxy session and dynamic client-side network behavior of a client-side session of the TCP proxy session; and
(b) allocating a capacity of a server-side buffer and a capacity of a client-side buffer in a storage buffer based on the dynamic server-side network behavior, the dynamic client-side network behavior, and a weighted average of the capacities of the storage buffers.
11. The computer program product of claim 10, wherein the computer readable program code configured for assigning (b) is further configured for:
(b1) calculating a maximum capacity of the server-side buffer and a maximum capacity of the client-side buffer based on the dynamic server-side network behavior, the dynamic client-side network behavior, and a weighted average of the capacities of the storage buffers; and
(b2) allocating the capacity of the server-side buffer and the capacity of the client-side buffer based on the maximum capacity of the server-side buffer and the maximum capacity of the client-side buffer.
12. The computer program product of claim 10, wherein the computer readable program code configured for assigning (b) is further configured for:
(b1) receive server-side session data from the server, or
Receiving a client-side session data packet from the client;
(b2) determining whether the available capacity of the server-side buffer is sufficient for storing the server-side session data packets, or
Determining whether the available capacity of the client side buffer is sufficient for storing the client side session data packets;
(b3) increasing the allocated capacity of the server-side buffer in response to determining that the available capacity of the server-side buffer is insufficient for storing the server-side session data packets, or
In response to determining that the available capacity of the client side buffer is insufficient for storing the client side session data packets, increasing the allocated capacity of the client side buffer; and
(b4) adjusting the available capacity of the server-side buffer in accordance with an increase in the allocated capacity of the server-side buffer, or
Adjusting the available capacity of the client side buffer in accordance with an increase in the allocated capacity of the client side buffer.
13. The computer program product of claim 12, wherein the computer readable program code configured to increase (b3) is further configured to:
(b3i) in response to determining that the available capacity of the server-side buffer is insufficient for storing the server-side session data packets, determining whether the allocated capacity of the server-side buffer is less than the maximum capacity of the server-side buffer, or
Determining whether the allocated capacity of the client side buffer is less than the maximum capacity of the client side buffer in response to determining that the available capacity of the client side buffer is insufficient for storing the client side session data packets;
(b3ii) in response to determining that the allocated capacity of the server-side buffer is less than the maximum capacity of the server-side buffer, determining whether sufficient storage space exists within the maximum capacity of the server-side buffer for storing the server-side session data packets, or
In response to determining that the allocated capacity of the client side buffer is less than the maximum capacity of the client side buffer, determining whether sufficient storage space exists within the maximum capacity of the client side buffer for storing the client side session data packets; and
(b3iii) in response to determining that sufficient storage space exists within the maximum capacity of the server-side buffer for storing the server-side session data packets, allocating the storage space to the server-side buffer and adjusting the available capacity of the server-side buffer according to the allocated storage space, or
In response to determining that sufficient storage space exists within the maximum capacity of the client side buffer for storing the client side session data packets, allocating the storage space to the client side buffer and adjusting the available capacity of the client side buffer according to the allocated storage space.
14. The computer program product of claim 11, wherein the computer readable program code configured for monitoring (a) and for calculating (b1) is further configured for:
(a1) measuring a server-side data packet Round Trip Time (RTT) and a client-side data packet RTT; and
(b1i) calculating the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using the server side data packet RTT, client side RTT, and a weighted average of the capacities of the storage buffers.
15. The computer program product of claim 14, wherein a weighted average of the capacity of the storage buffer is biased towards the server when calculating the maximum capacity of the server-side buffer, or
Wherein the weighted average of the capacity of the storage buffer is biased towards the client when calculating the maximum capacity of the client side buffer.
16. The computer program product of claim 14, wherein the computer readable program code configured for monitoring (a) is further configured for:
(a3) obtaining new measurements of the server side data packet RTT and the client side data packet RTT; and
(a4) modifying the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using a new server side data packet RTT, a new client side data packet RTT, and a weighted average of the capacities of the storage buffers.
17. The computer program product of claim 14, wherein the computer readable program code configured for measuring (a1) and for calculating (a2) is further configured for:
(a1i) measuring the server side data packet RTT, the client side data packet RTT, a server side transmission rate, and a client side transmission rate; and
(a2i) calculating the maximum capacity of the server-side buffer and the maximum capacity of the client-side buffer using the server-side data packet RTT, the client-side RTT, the server-side transmission rate, the client-side transmission rate, and a weighted average of the capacities of the storage buffers.
18. The computer program product of claim 17, wherein the computer readable program code configured for monitoring (a) is further configured for:
(a3) obtaining new measurements of the server side transmission rate and the client side transmission rate; and
(a4) modifying the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using the server side data packet RTT, the client side data packet RTT, the new server side transmission rate, the new client side transmission rate, and a weighted average of the capacities of the storage buffers.
19. A system for allocating buffers for a TCP proxy session between a client and a server, comprising:
a processor; and
a non-transitory computer readable storage medium having computer readable program code embodied therein, the computer readable program code configured to:
(a) monitoring dynamic server-side network behavior of a server-side session of the TCP proxy session and dynamic client-side network behavior of a client-side session of the TCP proxy session; and
(b) allocating a capacity of a server-side buffer and a capacity of a client-side buffer in a storage buffer based on the dynamic server-side network behavior, the dynamic client-side network behavior, and a weighted average of the capacities of the storage buffers.
20. The system of claim 19, wherein the computer readable program code configured for assigning (b) is further configured for:
(b1) calculating a maximum capacity of the server-side buffer and a maximum capacity of the client-side buffer based on the dynamic server-side network behavior, the dynamic client-side network behavior, and a weighted average of the capacities of the storage buffers; and
(b2) allocating the capacity of the server-side buffer and the capacity of the client-side buffer based on the maximum capacity of the server-side buffer and the maximum capacity of the client-side buffer.
21. The system of claim 19, wherein the computer readable program code configured for assigning (b) is further configured for:
(b1) receive server-side session data from the server, or
Receiving a client-side session data packet from the client;
(b2) determining whether the available capacity of the server-side buffer is sufficient for storing the server-side session data packets, or
Determining whether the available capacity of the client side buffer is sufficient for storing the client side session data packets;
(b3) increasing the allocated capacity of the server-side buffer in response to determining that the available capacity of the server-side buffer is insufficient for storing the server-side session data packets, or
In response to determining that the available capacity of the client side buffer is insufficient for storing the client side session data packets, increasing the allocated capacity of the client side buffer; and
(b4) adjusting the available capacity of the server-side buffer in accordance with an increase in the allocated capacity of the server-side buffer, or
Adjusting the available capacity of the client side buffer in accordance with an increase in the allocated capacity of the client side buffer.
22. The system of claim 21, wherein the computer readable program code configured to add (b3) is further configured to:
(b3i) in response to determining that the available capacity of the server-side buffer is insufficient for storing the server-side session data packets, determining whether the allocated capacity of the server-side buffer is less than the maximum capacity of the server-side buffer, or
Determining whether the allocated capacity of the client side buffer is less than the maximum capacity of the client side buffer in response to determining that the available capacity of the client side buffer is insufficient for storing the client side session data packets;
(b3ii) in response to determining that the allocated capacity of the server-side buffer is less than the maximum capacity of the server-side buffer, determining whether sufficient storage space exists within the maximum capacity of the server-side buffer for storing the server-side session data packets, or
In response to determining that the allocated capacity of the client side buffer is less than the maximum capacity of the client side buffer, determining whether sufficient storage space exists within the maximum capacity of the client side buffer for storing the client side session data packets; and
(b3iii) in response to determining that sufficient storage space exists within the maximum capacity of the server-side buffer for storing the server-side session data packets, allocating the storage space to the server-side buffer and adjusting the available capacity of the server-side buffer according to the allocated storage space, or
In response to determining that sufficient storage space exists within the maximum capacity of the client side buffer for storing the client side session data packets, allocating the storage space to the client side buffer and adjusting the available capacity of the client side buffer according to the allocated storage space.
23. The system of claim 20, wherein the computer readable program code configured for monitoring (a) and for calculating (b1) is further configured for:
(a1) measuring a server-side data packet Round Trip Time (RTT) and a client-side data packet RTT; and
(b1i) calculating the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using the server side data packet RTT, client side RTT, and a weighted average of the capacities of the storage buffers.
24. The system of claim 23, wherein a weighted average of the capacity of the storage buffer is biased towards the server when calculating the maximum capacity of the server-side buffer, or
Wherein the weighted average of the capacity of the storage buffer is biased towards the client when calculating the maximum capacity of the client side buffer.
25. The system of claim 23, wherein the computer readable program code configured for monitoring (a) is further configured for:
(a3) obtaining new measurements of the server side data packet RTT and the client side data packet RTT; and
(a4) modifying the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using the new server side data packet RTT, the new client side data packet RTT, and a weighted average of the capacities of the storage buffers.
26. The system of claim 23, wherein the computer readable program code configured for measuring (a1) and calculating (a2) is further configured for:
(a1i) measuring the server side data packet RTT, the client side data packet RTT, a server side transmission rate, and a client side transmission rate; and
(a2i) calculating the maximum capacity of the server-side buffer and the maximum capacity of the client-side buffer using the server-side data packet RTT, the client-side RTT, the server-side transmission rate, the client-side transmission rate, and a weighted average of the capacities of the storage buffers.
27. The system of claim 26, wherein the computer readable program code configured for monitoring (a) is further configured for:
(a3) obtaining new measurements of the server side transmission rate and the client side transmission rate; and
(a4) modifying the maximum capacity of the server side buffer and the maximum capacity of the client side buffer using the server side data packet RTT, the client side data packet RTTT, the new server side transmission rate, the new client side transmission rate, and a weighted average of the capacities of the storage buffers.
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US13/541,792 | 2012-07-05 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| HK1189438A true HK1189438A (en) | 2014-06-06 |
| HK1189438B HK1189438B (en) | 2018-09-21 |
Family
ID=
Cited By (21)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8977749B1 (en) | 2012-07-05 | 2015-03-10 | A10 Networks, Inc. | Allocating buffer for TCP proxy session based on dynamic network conditions |
| US9094364B2 (en) | 2011-12-23 | 2015-07-28 | A10 Networks, Inc. | Methods to manage services over a service gateway |
| US9215275B2 (en) | 2010-09-30 | 2015-12-15 | A10 Networks, Inc. | System and method to balance servers based on server load status |
| US9219751B1 (en) | 2006-10-17 | 2015-12-22 | A10 Networks, Inc. | System and method to apply forwarding policy to an application session |
| US9253152B1 (en) | 2006-10-17 | 2016-02-02 | A10 Networks, Inc. | Applying a packet routing policy to an application session |
| US9270774B2 (en) | 2011-10-24 | 2016-02-23 | A10 Networks, Inc. | Combining stateless and stateful server load balancing |
| US9338225B2 (en) | 2012-12-06 | 2016-05-10 | A10 Networks, Inc. | Forwarding policies on a virtual service network |
| US9386088B2 (en) | 2011-11-29 | 2016-07-05 | A10 Networks, Inc. | Accelerating service processing using fast path TCP |
| US9531846B2 (en) | 2013-01-23 | 2016-12-27 | A10 Networks, Inc. | Reducing buffer usage for TCP proxy session based on delayed acknowledgement |
| US9609052B2 (en) | 2010-12-02 | 2017-03-28 | A10 Networks, Inc. | Distributing application traffic to servers based on dynamic service response time |
| US9705800B2 (en) | 2012-09-25 | 2017-07-11 | A10 Networks, Inc. | Load distribution in data networks |
| US9806943B2 (en) | 2014-04-24 | 2017-10-31 | A10 Networks, Inc. | Enabling planned upgrade/downgrade of network devices without impacting network sessions |
| US9900252B2 (en) | 2013-03-08 | 2018-02-20 | A10 Networks, Inc. | Application delivery controller and global server load balancer |
| US9906422B2 (en) | 2014-05-16 | 2018-02-27 | A10 Networks, Inc. | Distributed system to determine a server's health |
| US9942152B2 (en) | 2014-03-25 | 2018-04-10 | A10 Networks, Inc. | Forwarding data packets using a service-based forwarding policy |
| US9942162B2 (en) | 2014-03-31 | 2018-04-10 | A10 Networks, Inc. | Active application response delay time |
| US9960967B2 (en) | 2009-10-21 | 2018-05-01 | A10 Networks, Inc. | Determining an application delivery server based on geo-location information |
| US10020979B1 (en) | 2014-03-25 | 2018-07-10 | A10 Networks, Inc. | Allocating resources in multi-core computing environments |
| US10318288B2 (en) | 2016-01-13 | 2019-06-11 | A10 Networks, Inc. | System and method to process a chain of network applications |
| US10389835B2 (en) | 2017-01-10 | 2019-08-20 | A10 Networks, Inc. | Application aware systems and methods to process user loadable network applications |
| US10581976B2 (en) | 2015-08-12 | 2020-03-03 | A10 Networks, Inc. | Transmission control of protocol state exchange for dynamic stateful service insertion |
Cited By (32)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9219751B1 (en) | 2006-10-17 | 2015-12-22 | A10 Networks, Inc. | System and method to apply forwarding policy to an application session |
| US9253152B1 (en) | 2006-10-17 | 2016-02-02 | A10 Networks, Inc. | Applying a packet routing policy to an application session |
| US9270705B1 (en) | 2006-10-17 | 2016-02-23 | A10 Networks, Inc. | Applying security policy to an application session |
| US9960967B2 (en) | 2009-10-21 | 2018-05-01 | A10 Networks, Inc. | Determining an application delivery server based on geo-location information |
| US10447775B2 (en) | 2010-09-30 | 2019-10-15 | A10 Networks, Inc. | System and method to balance servers based on server load status |
| US9961135B2 (en) | 2010-09-30 | 2018-05-01 | A10 Networks, Inc. | System and method to balance servers based on server load status |
| US9215275B2 (en) | 2010-09-30 | 2015-12-15 | A10 Networks, Inc. | System and method to balance servers based on server load status |
| US9609052B2 (en) | 2010-12-02 | 2017-03-28 | A10 Networks, Inc. | Distributing application traffic to servers based on dynamic service response time |
| US9961136B2 (en) | 2010-12-02 | 2018-05-01 | A10 Networks, Inc. | Distributing application traffic to servers based on dynamic service response time |
| US9270774B2 (en) | 2011-10-24 | 2016-02-23 | A10 Networks, Inc. | Combining stateless and stateful server load balancing |
| US9906591B2 (en) | 2011-10-24 | 2018-02-27 | A10 Networks, Inc. | Combining stateless and stateful server load balancing |
| US9386088B2 (en) | 2011-11-29 | 2016-07-05 | A10 Networks, Inc. | Accelerating service processing using fast path TCP |
| US9979801B2 (en) | 2011-12-23 | 2018-05-22 | A10 Networks, Inc. | Methods to manage services over a service gateway |
| US9094364B2 (en) | 2011-12-23 | 2015-07-28 | A10 Networks, Inc. | Methods to manage services over a service gateway |
| US9602442B2 (en) | 2012-07-05 | 2017-03-21 | A10 Networks, Inc. | Allocating buffer for TCP proxy session based on dynamic network conditions |
| US9154584B1 (en) | 2012-07-05 | 2015-10-06 | A10 Networks, Inc. | Allocating buffer for TCP proxy session based on dynamic network conditions |
| US8977749B1 (en) | 2012-07-05 | 2015-03-10 | A10 Networks, Inc. | Allocating buffer for TCP proxy session based on dynamic network conditions |
| US9705800B2 (en) | 2012-09-25 | 2017-07-11 | A10 Networks, Inc. | Load distribution in data networks |
| US9338225B2 (en) | 2012-12-06 | 2016-05-10 | A10 Networks, Inc. | Forwarding policies on a virtual service network |
| US9979665B2 (en) | 2013-01-23 | 2018-05-22 | A10 Networks, Inc. | Reducing buffer usage for TCP proxy session based on delayed acknowledgement |
| US9531846B2 (en) | 2013-01-23 | 2016-12-27 | A10 Networks, Inc. | Reducing buffer usage for TCP proxy session based on delayed acknowledgement |
| US9900252B2 (en) | 2013-03-08 | 2018-02-20 | A10 Networks, Inc. | Application delivery controller and global server load balancer |
| US11005762B2 (en) | 2013-03-08 | 2021-05-11 | A10 Networks, Inc. | Application delivery controller and global server load balancer |
| US9942152B2 (en) | 2014-03-25 | 2018-04-10 | A10 Networks, Inc. | Forwarding data packets using a service-based forwarding policy |
| US10020979B1 (en) | 2014-03-25 | 2018-07-10 | A10 Networks, Inc. | Allocating resources in multi-core computing environments |
| US9942162B2 (en) | 2014-03-31 | 2018-04-10 | A10 Networks, Inc. | Active application response delay time |
| US9806943B2 (en) | 2014-04-24 | 2017-10-31 | A10 Networks, Inc. | Enabling planned upgrade/downgrade of network devices without impacting network sessions |
| US10110429B2 (en) | 2014-04-24 | 2018-10-23 | A10 Networks, Inc. | Enabling planned upgrade/downgrade of network devices without impacting network sessions |
| US9906422B2 (en) | 2014-05-16 | 2018-02-27 | A10 Networks, Inc. | Distributed system to determine a server's health |
| US10581976B2 (en) | 2015-08-12 | 2020-03-03 | A10 Networks, Inc. | Transmission control of protocol state exchange for dynamic stateful service insertion |
| US10318288B2 (en) | 2016-01-13 | 2019-06-11 | A10 Networks, Inc. | System and method to process a chain of network applications |
| US10389835B2 (en) | 2017-01-10 | 2019-08-20 | A10 Networks, Inc. | Application aware systems and methods to process user loadable network applications |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US9602442B2 (en) | Allocating buffer for TCP proxy session based on dynamic network conditions | |
| US9979665B2 (en) | Reducing buffer usage for TCP proxy session based on delayed acknowledgement | |
| US10341427B2 (en) | Forwarding policies on a virtual service network | |
| EP2772026B1 (en) | Methods to combine stateless and stateful server load balancing | |
| US10594608B2 (en) | System for bandwidth optimization with initial congestion window determination | |
| US8966123B2 (en) | Unobtrusive content compression in a telecommunications network | |
| US9825815B2 (en) | System and method for aggregating and estimating the bandwidth of multiple network interfaces | |
| KR20160036878A (en) | Apparatus and method for controlling data flow in a communication system | |
| CN106464567B (en) | Dynamic flow control method, device, gateway and fusion access convergent point | |
| HK1189438A (en) | Method to allocate buffer for tcp proxy session based on dynamic network conditions | |
| HK1189438B (en) | Method to allocate buffer for tcp proxy session based on dynamic network conditions | |
| KR20150109767A (en) | Method and apparatus for performing a congestion control in stream control transmission protocol | |
| HK1199779B (en) | Method, medium and system for reducing buffer usage for tcp proxy session based on delayed acknowledgment | |
| JP2010166141A (en) | Packet relaying method and gateway device | |
| Kwon et al. | Quality Adaptation of Constrained Application Protocol Multimedia Streaming in Internet of Things | |
| HK1199153A1 (en) | Method and system of accelerating service processing using fast path tcp |