Allocating buffer for TCP proxy session based on dynamic network conditions

Information

  • Patent Grant
  • 9602442
  • Patent Number
    9,602,442
  • Date Filed
    Wednesday, September 23, 2015
    8 years ago
  • Date Issued
    Tuesday, March 21, 2017
    7 years ago
Abstract
Allocation of buffers for a TCP proxy session between a client and a server by a service gateway includes monitoring dynamic network behaviors for server and client side sessions of the TCP proxy session; and allocating capacity for a server side buffer and capacity for a client side buffer in a memory buffer based on the dynamic server side network behaviors, the dynamic client side network behaviors, and a weighted average of a capacity of the memory buffer. In one approach to the allocation, the gateway determines whether an available capacity of the server or client side buffer is sufficient to store a data packet. If not sufficient, the allocated capacity of the server or client side buffer is increased based on measurements of the dynamic network behaviors and the weighted average, and the available capacity of the server or client side buffer is adjusted accordingly.
Description
BACKGROUND OF THE INVENTION

Field


This invention relates generally to data communications, and more specifically, to a service gateway.


Background


Many service gateways such as firewalls and server load balancers provide Transmission Control Protocol (TCP) proxy functionality for some time. Typical uses of TCP proxy include network analysis, security, and traffic adaptation due to asymmetric client and server condition. A TCP proxy server typically allocates a fix amount of memory buffer to handle the data packet buffering of a TCP proxy session between a client device and a server. The memory buffer is used to handle data packet buffers for client side session and server side session. The allocation of memory space among the client side session send and receive buffers, and server side session send and receive buffers does not often take performance into consideration. Common allocation methods include equally dividing the memory buffer among the session send and receive buffers, or a fix weighted average between the send and receive buffers, such as two to one ratio between server side receive buffer and client side send buffer.


Although TCP proxy is known for some time, it has 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, many service gateway applications such as HTTP proxy, content filtering applications, advanced server load balancing methods, are deployed widely. Performance of these applications is in part depending on the performance of the TCP proxy session buffer allocation method.


Due to the different and dynamic network characteristics of client devices and servers, a pre-determined allocation of buffer spaces does not perform well on different network conditions. Therefore there is a need to allocate buffer spaces for a TCP proxy session based on one or more dynamic network conditions.


BRIEF SUMMARY OF THE INVENTION

According to one embodiment of the present invention, a method for allocating buffers for a TCP proxy session between a client and a server by a service gateway comprising a processor, comprises: monitoring, by the processor, dynamic server side network behaviors for a server side session of the TCP proxy session and dynamic client side network behaviors for a client side session of the TCP proxy session; and allocating, by the processor, capacity for a server side buffer and capacity for a client side buffer in a memory buffer based on the dynamic server side network behaviors, the dynamic client side network behaviors, and a weighted average of a capacity of the memory buffer.


In one aspect of the present invention, the allocating comprises: calculating a maximum capacity for the server side buffer and a maximum capacity for the client side buffer based on the dynamic server side network behaviors, the dynamic client side network behaviors, and the weighted average of the capacity of the memory buffer; and allocating the capacity for the server side buffer and the capacity for the client side buffer based on the maximum capacity for the server side buffer and the maximum capacity for the client side buffer.


In one aspect of the present invention, the allocating comprises: receiving a server side session data from the server, or receiving a client side session data packet from the client; determining whether an available capacity of the server side buffer is sufficient to store the server side session data packet, or determining whether an available capacity of the client side buffer is sufficient to store the client side session data packet; in response to determining that the available capacity of the server side buffer is not sufficient to store the server side session data packet, increasing the allocated capacity of the server side buffer, or in response to determining that the available capacity of the client side buffer is not sufficient to store the client side session data packet, increasing the allocated capacity of the client side buffer; and adjusting the available capacity of the server side buffer according to the increase of the allocated capacity of the server side buffer, or adjusting the available capacity of the client side buffer according to the increase of the allocated capacity of the client side buffer.


In one aspect of the present invention, the increasing comprises: in response to determining that the available capacity of the server side buffer is not sufficient to store the server side session data packet, determining whether the allocated capacity of the server side buffer is smaller than a maximum capacity of the server side buffer, or in response to determining that the available capacity of the client side buffer is not sufficient to store the client side session data packet, determining whether the allocated capacity of the client side buffer is smaller than a maximum capacity of the client side buffer; and in response to determining that the allocated capacity of the server side buffer is smaller than the maximum capacity of the server side buffer, determining whether there is sufficient memory space within the maximum capacity of the server side buffer to store the server side session data packet, or in response to determining that the allocated capacity of the client side buffer is smaller than the maximum capacity of the client side buffer, determining whether there is sufficient memory space within the maximum capacity of the client side buffer to store the client side session data packet; in response to determining that there is sufficient memory space within the maximum capacity of the server side buffer to store the server side session data packet, allocating the memory space to the server side buffer and adjusting the available capacity of the server side buffer according to the allocated memory space, or in response to determining that there is sufficient memory space within the maximum capacity of the client side buffer to store the client side session data packet, allocating the memory space to the client side buffer and adjusting the available capacity of the client side buffer according to the allocated memory space.


In one aspect of the present invention, the monitoring and the calculating comprises: measuring a server side data packet round trip time (RTT) and a client side data packet RTT; and calculating the maximum capacity for the server side buffer and the maximum capacity for the client side buffer using the server side data packet RTT, the client side RTT, and the weighted average of the capacity of the memory buffer.


In one aspect of the present invention, the weighted average of the capacity of the memory buffer is biased toward the server in calculating the maximum capacity for the server side buffer, or wherein the weighted average of the capacity of the memory buffer is biased toward the client in calculating the maximum capacity for the client side buffer.


In one aspect of the present invention, the monitoring further comprises: obtaining new measurements for the server side data packet RTT and the client side data packet RTT; and modifying the maximum capacity for the server side buffer and the maximum capacity for the client side buffer using the new server side data packet RTT, the new client side data packet RTT, and the weighted average of the capacity of the memory buffer.


In one aspect of the present invention, the measuring and the calculating comprises: 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 calculating the maximum capacity for the server side buffer and the maximum capacity for 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 the weighted average of the capacity of the memory buffer.


In one aspect of the present invention, the monitoring further comprises: obtaining new measurements for the server side transmission rate and the client side transmission rate; and modifying the maximum capacity for the server side buffer and the maximum capacity for 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 the weighted average of the capacity of the memory buffer.


System and computer program products corresponding to the above-summarized methods are also described and claimed herein.





BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE FIGURES


FIG. 1 illustrates an embodiment of a service gateway servicing 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 receiving a data packet from server according to the present invention.



FIG. 2B illustrates an embodiment of a service gateway sending a data packet to client device according to the present invention.



FIG. 3 illustrates an embodiment of a service gateway monitoring a server side network behavior and a client side network behavior according to the present invention.



FIG. 4 illustrates an embodiment of a memory space allocation process for server side receive buffer and client side send buffer according to the present invention.



FIG. 5A illustrates an embodiment of a service gateway storing data packet into server side receive buffer according to the present invention.



FIG. 5B illustrates an embodiment of a service gateway storing data packet into client side send buffer according to the present invention.



FIG. 6 illustrates an embodiment of a service gateway receiving a data packet from client device according to the present invention.



FIG. 7 illustrates an embodiment of a memory space allocation process for client side receive buffer and server side send buffer according to the present invention.



FIG. 8A illustrates an embodiment of a service gateway storing data packet into client side receive buffer according to the present invention.



FIG. 8B illustrates an embodiment a service gateway storing data packet into server side send buffer according to the present invention.





DETAILED DESCRIPTION OF THE INVENTION

The present 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 present invention is implemented in software, which includes but is not limited to firmware, resident software, microcode, etc.


Furthermore, the present 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 eh 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, point 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 flowchart 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 or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified local 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 servicing a TCP proxy session 400 between a client device 100 and a server 200 via a data network 153.


In one embodiment, data network 153 includes an Internet Protocol (IP) network, a corporate data network, a regional corporate data network, an 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, data network 153 resides in a data center, or connects to a network or application network cloud.


Client device 100 is typically a computing device with network access capabilities. In one embodiment, client device 100 is a workstation, a desktop personal computer or a laptop personal computer, a Personal Data Assistant (PDA), a tablet computing device, a smartphone, or a cellular phone, a set-top box, an Internet media viewer, an Internet media player, a smart sensor, a smart medical device, a net-top box, a networked television set, a networked DVR, a networked Blu-ray player, a networked handheld gaming device, or a media center.


In one embodiment, client device 100 is a residential broadband gateway, a business Internet gateway, a business Web proxy server, a network customer premise device (CPE), or an Internet access gateway.


In one embodiment, client device 100 includes a broadband remote access server (BRAS), a Digital Subscriber Line Access Multiplexer (DSLAM), a Cable Modem Terminating System (CMTS), or a service provider access gateway.


In one embodiment, client device 100 includes a mobile broadband access gateway such as a Gateway GPRS Support Node (GGSN), a Home Agent (HA), or a PDN Gateway (PGW).


In one embodiment, 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 datacenter access gateway.


In one embodiment, client device 100 is a device that performs functions similar to service gateway 300.


Client device 100 initiates TCP session 400 towards server 200 via service gateway 300.


Server 200 is a computing device typically coupled to a processor and a computer readable medium which stores computer readable program code. Server 200, with the processor and the computer readable program code, implements functionality of a Web server, a file server, a video server, a database server, an application server, a voice system, a conferencing server, a media gateway, a media center, an app server or a network server providing a TCP-based service or an application service to client device 100 using the TCP session 400.


In one embodiment, server 200 is a device that performs functions similar to service gateway 300.


In one embodiment, TCP session 400 includes a HTTP session, a 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 an TCP-based network communication sessions.


Service gateway 300 is operationally coupled to a processor 310, a memory module 320, a network module 330, and a computer readable medium 340. The computer readable medium 340 stores computer readable program code, which when executed by the processor 310 using the memory module 320, implements the various embodiments of the present invention as described herein. In some 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 for video servers, a gateway to distribute 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 of servicing TCP proxy session 400 between client device 100 and server 200, service gateway 300 establishes a client side TCP session 420 with client device 100, and a server side TCP session 470 with server 200.


In one embodiment, computer readable medium 340 includes instructions for a service application 350 and processor 310 executes service application 350.


In one embodiment, service application 350 implements functionality of a VPN firewall, a gateway security application, a HTTP proxy, a TCP-based audio or video streaming session proxy, a Web session proxy, content filtering, server load balancing, firewall, or a network application session proxy.


In one embodiment, service gateway 300 includes a memory buffer 327 for processing TCP proxy session 400. In one embodiment, memory buffer 327 capacity is pre-determined, for example 1 MB, 400 KB, 200 KB or 2 MB. In an embodiment, service gateway 300 reserves a portion of memory module 320 as memory buffer 327 to process TCP proxy session 400.


In one embodiment, service gateway 300 allocates a client side send buffer 424 for client side TCP session 420 and a server side receive buffer 474 for server side TCP session 470, where client side send buffer 424 and server side receive buffer 474 reside in memory buffer 327.


In one embodiment, service gateway 300 monitors a dynamic server side network behavior 460 for server side session TCP 470 and a dynamic client side network behavior 410 for client side TCP session 420. Service gateway 300 allocates client side send buffer 424 and allocates server side receive buffer 474 based on dynamic client side network behavior 410 and dynamic server side network behavior 460.


In one embodiment as illustrated in FIG. 2A, service gateway 300 receives a data packet 479 of server side TCP session 470 from server 200. Service gateway 300 stores data packet 479 in 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 creates a data packet 429 using data packet 479. Service application 350 sends data packet 429 to client device 100, by placing data packet 429 into client side send buffer 424. Service gateway 300 instructs network module 330 to transmit data packet 429 from client side send buffer 424 to client device 100.


In one embodiment, service gateway 300 determines that available capacity 484 of server side receive buffer 474 is sufficient to store data packet 479. Service gateway 300 stores data packet 479 into server side receive buffer 474 and reduces available capacity 484 by the amount of memory space necessary to store data packet 479.


In one embodiment, service gateway 300 determines available capacity 484 is not sufficient, service gateway 300 increases the allocated capacity 494 of server side receive buffer 474, and adjusts available capacity 484 according to the increase of allocated capacity 494. If the adjusted available capacity 484 is sufficient, service gateway 300 stores data packet 479 into server side receive buffer 474 and reduces available capacity 484 according to the memory space necessary to store data packet 479.


In one embodiment where service gateway 300 determines available capacity 484 is insufficient, even after adjustment, service gateway 300 discards data packet 479.


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 according to the memory space consumed by data packet 479.


In one embodiment as illustrated in FIG. 2B, before service gateway 300 stores data packet 429 into client side send buffer 424, service gateway 300 checks if an available capacity 434 of client side send buffer 424 is sufficient to store data packet 429. If the check is affirmative, service gateway 300 stores data packet 429 into client side send buffer 424 and reduces available capacity 434 according to the memory space necessary to store data packet 429.


In one embodiment, service gateway 300 determines available capacity 434 is not sufficient, service gateway 300 increases allocated capacity 444 of client side send buffer 424, and adjusts available capacity 434 according to the increase of allocated capacity 444. If the adjusted available capacity 434 is sufficient, service gateway 300 stores data packet 429 into client side send buffer 424 and reduces available capacity 434 according to the memory space necessary to store data packet 429.


In one embodiment where service gateway 300 determines available capacity 434 is insufficient, even after adjustment, service gateway 300 discards data packet 429. In one embodiment, service gateway 300 waits until available capacity 434 becomes sufficient after adjustment.


In one embodiment, network module 330 successfully transmits data packet 429 from client side send buffer 424. Service gateway 300 removes data packet 429 from client side send buffer 424 and increases available capacity 434 according to the memory space consumed by data packet 429.


In an embodiment illustrated in FIG. 3, service gateway 300 monitors dynamic server side network behavior 460 for server side session 470. In one embodiment, dynamic server side network behavior 460 includes a server side data packet round trip time (RTT) 462, a server side transmission rate 463, or a dynamic server side network attribute that affects service gateway 300 receiving data packet 479. In one embodiment, server side RTT 462 affects the time data packet 479 is transmitted through data network 153. In one embodiment, server side transmission rate 463 affects the rate of receiving data packet 479 by network module 330. In one embodiment, RTT 462 and transmission rate 463 are related.


Service gateway 300 measures or estimates server side RTT 462 for server side session 470. In one example embodiment, service gateway 300 measures server side RTT 462 based on a duration between a time service gateway 300 sending a data packet of server side session 470 to server 200 and a time service gateway 300 receiving an acknowledgement for the sent data packet. In one embodiment, service gateway 300 measures RTT 462 from time to time during server side TCP session 470. In one embodiment, service gateway 300 estimates server side RTT 462 based on one or more prior server side TCP sessions with server 200. In one embodiment, service gateway 300 estimates server side RTT 462 to be 10 milliseconds, 100 milliseconds, 3 milliseconds, 22 milliseconds, or 3 seconds.


In one embodiment, service gateway 300 calculates server side transmission rate 463 as a bandwidth of a network interface used by network module 330 to receive data packets of server side TCP session 470. In one embodiment, server side transmission rate 463 is the bandwidth of a virtual network interface. In one embodiment, service gateway 300 calculates server side transmission rate 463 by calculating one or more transmission rate of one or data packets of server side TCP session 470 over a period of time. In one embodiment, service gateway 300 calculates a new transmission rate 463 from time to time. In one embodiment, service gateway 300 calculates server side transmission rate 463 to be 1 Mbps, 43 Mbps, 100 Mbps, 1 Gbps, 600 Mbps, 25 Mbps or 10 Gbps.


In one embodiment, service gateway 300 monitors dynamic client side network behavior 410 of client side session 420. In one embodiment, dynamic client side network behavior 410 includes a client side data packet round trip time (RTT) 412, a client side transmission rate 413, or a dynamic network attribute that affects service gateway 300 sending data packet 429. In one embodiment, client side RTT 412 affects the time data packet 429 is transmitted through data network 153. In one embodiment, client side transmission rate 413 affects the rate of sending data packet 429 by network module 330. In one embodiment, RTT 412 and transmission rate 413 are related.


Service gateway 300 measures or estimates client side RTT 412. In one example embodiment, service gateway 300 measures client side RTT 412 based on a duration between a time service gateway 300 sends a data packet of client side session 420 to client device 100 and a time service gateway 300 receives an acknowledgement for the sent data packet. In one embodiment, service gateway 300 measures RTT 412 from time to time during client side TCP session 420. In one embodiment, service gateway 300 estimates client side RTT 412 based on one or more prior server side TCP sessions with client device 100. In one embodiment, service gateway 300 estimates server side RTT 462 to be 10 milliseconds, 100 milliseconds, 3 milliseconds, 22 milliseconds, or 3 seconds.


In one embodiment, service gateway 300 calculates client side transmission rate 413 as a bandwidth of a network interface used by network module 330 to transmit data packets of client side TCP session 420. In one embodiment, client side transmission rate 413 is the bandwidth of a virtual network interface. In one embodiment, service gateway 300 calculates client side transmission rate 413 by calculating one or more transmission rate of one or data packets of client side TCP session 420 over a period of time. In one embodiment, service gateway 300 calculates a new transmission rate 413 from time to time. In one embodiment, service gateway 300 calculates client side transmission rate 413 to be 1 Mbps, 43 Mbps, 100 Mbps, 1 Gbps, 600 Mbps, 25 Mbps or 10 Gbps.



FIG. 4 illustrates an embodiment for service gateway 300 to allocate memory space from memory buffer 327 to server side receive buffer 474 and client side send buffer 424. In one embodiment, service gateway 300 reserves a portion of memory buffer 327 for server side receive buffer 474 and a portion for client side send buffer 424, when service gateway 300 starts processing TCP proxy session 400. In one embodiment, service gateway 300 starts processing TCP proxy session 400 when service gateway 300 establishes server side TCP session 470 and/or client side TCP session 420. In one embodiment, service gateway 300 allocates initially a pre-determined capacity 494 of server side receive buffer 474. For example allocated capacity 494 is initially pre-determined at 10% of memory buffer 327, 8%, ⅛, or another pre-determined fraction of memory buffer 327. In another embodiment, initially allocated capacity 494 is preset to be 30 KB, 32 KB, 4 KB, 64 KB or 100 KB. Similarly service gateway 300 pre-determines the initially allocated capacity 444 of client side send buffer 424. Service gateway 300 further sets available capacity 484 of server side receive buffer 474 to be the same as allocated capacity 494, and available capacity 434 of client side send buffer 424 to be the same as allocated capacity 444.


In one embodiment, service gateway 300 calculates the maximum capacity 492 for server side receive buffer 474 and maximum capacity 442 client side send buffer 424. In one embodiment, service gateway 300 calculates using RTT 462 and RTT 412 according to equation 1 and equation 2, using a weighted average of capacity 328 of memory buffer 327 based on RTT 462 and RTT 412. The weighted average has a bias towards server side receive buffer 474.










maximum





capacity





492

=



2
*
RTT





462



RTT





412

+

2
*
RTT





462



*
capacity





328





Equation





1







maximum





capacity





442

=



RTT





412



RTT





412

+

2
*
RTT





462



*
capacity





328





Equation





2







Equation 1 and equation 2 illustrate an embodiment wherein the sum of maximum capacity 492 and maximum capacity 442 equals capacity 328. In this embodiment, the factor of 2 for RTT 462 is selected such that service gateway 300 advertises ½ or half the maximum capacity 492 of server side receive buffer 474 for server side TCP session 470. It is appropriate to adjust the factor 2 with a different factor relating to the portion of server side receive buffer 474 advertised for server side TCP session 470.


In one embodiment, service gateway 300 obtains a new measurement of server side RTT 462 and/or a new measurement of client side RTT 412. Service gateway 300 applies equation 1 and equation 2 to modify maximum capacity 492 and maximum capacity 442.


In one embodiment, service gateway 300 further considers server side transmission rate 463 and client side transmission rate 413. Service gateway calculates using equation 3 and equation 4, using a weighted average of capacity 328 based on combination of transmission rate 463 and RTT 462, and transmission rate 413 and RTT 412. The weighted average has a bias towards server side receive buffer 474.

maximum capacity 492=((2*transmission rate 463*RTT 462)/(transmission rate 413*RTT 412+2*transmission rate 463*RTT 462))*capacity 328  Equation 3
maximum capacity 442=((transmission rate 413*RTT 412)/(transmission rate 413*RTT 412+2*transmission rate 463*RTT 462))*capacity 328  Equation 4


Equation 3 and equation 4 illustrate an embodiment wherein the sum of maximum capacity 492 and maximum capacity 442 equals capacity 328.


In one embodiment, service gateway 300 obtains a new server side transmission rate 463 and/or a new client side transmission rate 413. Service gateway 300 applies equations 3 and 4 to modify maximum capacity 492 and maximum capacity 442. In one embodiment, service gateway 300 obtains a new measurement of server side RTT 462 and/or a new measurement of client side RTT 412. Service gateway 300 applies equation 3 and equation 4 to modify maximum capacity 492 and maximum capacity 442.


In FIG. 5A, further illustrating an embodiment in FIG. 2A where service gateway 300 stores server side data packet 479 into server side receive buffer 474 and finds that available capacity 484 of server side receive buffer 474 is insufficient. Service gateway 300 checks if allocated capacity 494 of server side receive buffer 474 is smaller than maximum capacity 492 of server side receive buffer 474. If allocated capacity 494 is at least that of maximum capacity 492 or the difference between allocated capacity 494 and maximum capacity 492 is smaller than the memory necessary to store data packet 479, service gateway 300 discards data packet 479.


In one embodiment, service gateway 300 determines there is sufficient memory space within maximum capacity 492 to store data packet 479. Service gateway 300 allocates a memory space 321 from memory buffer 327. In one embodiment, memory space 321 has a capacity 322. Service gateway 300 increases allocated capacity 494 of server side receive buffer 474 by an amount of capacity 322, and includes memory space 321 into server side receive buffer 474. Service gateway 300 allocates memory space 321 such that adjusted allocated capacity 494 does not exceed maximum capacity 492 of server side receive buffer 474. After storing data packet 479 into the updated server side receive buffer 474, service gateway 300 updates available capacity 484 of server side receive buffer 474 using capacity 322, and the space consumed by data packet 479.


In FIG. 5B, further illustrating an embodiment in FIG. 2B where service gateway 300 stores data packet 429 into client side send buffer 424 and finds that available capacity 434 of client side send buffer 424 is insufficient. Service gateway 300 checks if allocated capacity 444 of client side send buffer 424 is smaller than maximum capacity 442 of client side send buffer 424. If allocated capacity 444 is at least that of maximum capacity 442 or the difference between allocated capacity 444 and maximum capacity 442 is smaller than the memory necessary to store data packet 429, service gateway 300 discards data packet 429.


In one embodiment, service gateway 300 determines there is sufficient memory space within maximum capacity 442 to store data packet 429. Service gateway 300 allocates a memory space 325 from memory buffer 327. In one embodiment, memory space 325 has a capacity 326. Service gateway 300 increases allocated capacity 444 of client side send buffer 424 by an amount of capacity 326, and includes memory space 325 into client side send buffer 424. Service gateway 300 allocates memory space 325 such that adjusted allocated capacity 444 does not exceed maximum capacity 442 of client side send buffer 424. After storing data packet 429 into the updated client side send buffer 424, service gateway 300 updates available capacity 434 using capacity 326, and the space consumed by data packet 429.


In one embodiment, client device 100 sends a data packet 421 to service gateway 300 via client side TCP session 420. As illustrated in FIG. 6, in one embodiment, service gateway 300 includes a memory buffer 377 which includes a client side receive buffer 426 and a server side send buffer 476. Memory buffer 377 is associated with a capacity 378. Client side receive buffer 426 is associated with an allocated capacity 446, an available capacity 436 and a maximum capacity 448. Server side send buffer 476 is associated with an allocated capacity 496, an available capacity 486 and a maximum capacity 498.


Service gateway 300 uses client side receive buffer 426 and server side send buffer 476 to handle data packet 421. Service gateway 300 receives data packet 421 and stores data packet 421 in client side receive buffer 426. Service application 350 retrieves data packet 421 from client side receive buffer 426, and generates a data packet 471 based on data packet 421. Service application 350 places data packet 471 in server side send buffer 476. Service gateway 300 transmits data packet 471 from server side send buffer 476 to server 200.


In one embodiment, service gateway 300 reserves a pre-determined capacity 378 of memory buffer 377 to handle TCP proxy session 400. In one embodiment, capacity 378 of memory buffer 377 is the same as capacity 328 of memory buffer 327. In one embodiment, capacity 378 is different from capacity 328.



FIG. 7 illustrates an embodiment for service gateway 300 to allocate memory space from memory buffer 377 to server side send buffer 476 and client side receive buffer 426. In one embodiment, service gateway 300 reserves a portion of memory buffer 377 for server side send buffer 476 and a portion for client side receive buffer 426, when service gateway 300 starts processing TCP proxy session 400. In one embodiment, service gateway 300 starts processing TCP proxy session 400 when service gateway 300 establishes server side TCP session 470 and/or client side TCP session 420. In one embodiment, service gateway 300 allocates initially a pre-determined capacity 496 of server side send buffer 476. For example allocated capacity 496 is initially pre-determined at 10% of memory buffer 377, 8%, ⅛, or another fraction of memory buffer 377. In another embodiment, initial value of allocated capacity 496 is preset to be 30 KB, 32 KB, 4 KB, 64 KB or 100 KB. Similarly service gateway 300 pre-determines the initial allocated capacity 446 of client side receive buffer 426. Service gateway 300 further sets available capacity 486 of server side send buffer 476 to be the same as allocated capacity 496, and available capacity 436 of client side receive buffer 426 to be the same as allocated capacity 446.


In one embodiment, RTT 462 of network condition 460 affects sending of data packet 471. In one embodiment, network condition 460 includes a server side transmission rate 464. Service gateway 300 calculates server side transmission rate 464 as the bandwidth of a network interface used by network module 330 to transmit data packets of server side TCP session 470. In one embodiment, server side transmission rate 464 is the bandwidth of a virtual network interface. In one embodiment, service gateway 300 calculates server side transmission rate 464 by calculating one or more transmission rate of one or data packets of server side TCP session 470 over a period of time. In one embodiment, service gateway 300 calculates a new transmission rate 464 from time to time. In one embodiment, service gateway 300 calculates server side transmission rate 464 to be 1 Mbps, 43 Mbps, 100 Mbps, 1 Gbps, 600 Mbps, 25 Mbps or 10 Gbps.


In one embodiment, RTT 412 of network condition 410 also affects receiving of data packet 421. In one embodiment, network condition 410 includes a client side transmission rate 414. Service gateway 300 calculates client side transmission rate 414 as the bandwidth of a network interface used by network module 330 to receive data packets of client side TCP session 420. In one embodiment, client side transmission rate 414 is the bandwidth of a virtual network interface. In one embodiment, service gateway 300 calculates client side transmission rate 414 by calculating one or more transmission rate of one or data packets of client side TCP session 420 over a period of time. In one embodiment, service gateway 300 calculates a new transmission rate 414 from time to time. In one embodiment, service gateway 300 calculates client side transmission rate 414 to be 1 Mbps, 43 Mbps, 100 Mbps, 1 Gbps, 600 Mbps, 25 Mbps or 10 Gbps.


In one embodiment, service gateway 300 calculates maximum capacity 498 and maximum capacity 448, using network condition 460 and network condition 410, according to equation 5 and equation 6, using a weighted average of capacity 378 based on RTT 462 and RTT 412. The weighted average has a bias towards client side receive buffer 426.










maximum





capacity





498

=



RTT





462



2
*
RTT





412

+

RTT





462



*
capacity





378





Equation





5







maximum





capacity





448

=



2
*
RTT





412



2
*
RTT





412

+

RTT





462



*
capacity





378





Equation





6







Equation 5 and equation 6 illustrate an embodiment wherein the sum of maximum capacity 498 and maximum capacity 448 equals capacity 378. In this embodiment, the factor of 2 for RTT 412 is selected such that service gateway 300 advertises ½ or half the maximum capacity 448 of client side receive buffer 426 for client side TCP session 420. It is appropriate to adjust the factor 2 with a different factor relating to the portion of client side receive buffer 426 advertised for client side TCP session 420.


In one embodiment, service gateway 300 obtains a new measurement of server side RTT 462 and/or a new measurement of client side RTT 412. Service gateway 300 applies equation 5 and equation 6 to modify maximum capacity 498 and maximum capacity 448.


In one embodiment, service gateway 300 further considers server side transmission rate 464 and client side transmission rate 414. Service gateway calculates using equation 7 and equation 8, using a weighted average of capacity 378 based on combination of transmission rate 464 and RTT 462, and transmission rate 414 and RTT 412. The weighted average has a bias towards client side receive buffer 426.

maximum capacity 498=((transmission rate 464*RTT 462)/(2*transmission rate 414*RTT 412+transmission rate 464*RTT 462))*capacity 378  Equation 7
maximum capacity 448=((2*transmission rate 414*RTT 412)/(2*transmission rate 414*RTT 412+transmission rate 464*RTT 462))*capacity 378  Equation 9


Equation 7 and equation 8 illustrate an embodiment wherein the sum of maximum capacity 498 and maximum capacity 448 equals capacity 378.


In one embodiment, service gateway 300 obtains a new server side transmission rate 464 and/or a new client side transmission rate 414, service gateway 300 applies equation 7 and equation 8 to modify maximum capacity 498 and maximum capacity 448. In one embodiment, service gateway 300 obtains a new measurement of server side RTT 462 and/or a new measurement of client side RTT 412, service gateway 300 applies equation 7 and equation 8 to modify maximum capacity 492 and maximum capacity 442.


In FIG. 8A, service gateway 300 receives data packet 421 from client device 100 and stores data packet 421 into client side receive buffer 426 and finds that available capacity 436 of client side receive buffer 426 is insufficient. Service gateway 300 checks if allocated capacity 446 of client side receive buffer 426 is smaller than maximum capacity 448 of client side receive buffer 426. If allocated capacity 446 is at least that of maximum capacity 448 or the difference between allocated capacity 446 and maximum capacity 448 is smaller than the memory necessary to store data packet 421, service gateway 300 discards data packet 421.


In one embodiment, service gateway 300 determines 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, memory space 375 has a capacity 376. Service gateway 300 increases allocated capacity 446 by an amount of capacity 376, and includes memory space 375 into client side receive buffer 426. Service gateway 300 allocates memory space 375 such that adjusted allocated capacity 446 does not exceed maximum capacity 448 of client side send buffer 426. After storing data packet 421 into the updated client side receive buffer 426, service gateway 300 updates available capacity 436 of client side receive buffer 426 using capacity 376, and the space consumed by data packet 421.


In FIG. 8B, service gateway 300 stores data packet 471 into server side send buffer 476. In one embodiment, service gateway 300 finds that available capacity 486 of server side send buffer 476 is insufficient. Service gateway 300 checks if allocated capacity 496 of server side send buffer 476 is smaller than maximum capacity 498 of server side send buffer 476. If allocated capacity 496 is at least that of maximum capacity 498 or the difference between allocated capacity 496 and maximum capacity 498 is smaller than the memory necessary to store data packet 471, service gateway 300 discards data packet 471.


In one embodiment, service gateway 300 determines there is sufficient memory space within maximum capacity 498 to store data packet 471. Service gateway 300 allocates a memory space 371 from memory buffer 377. In one embodiment, memory space 371 has a capacity 372. Service gateway 300 increases allocated capacity 496 by an amount of capacity 372, and includes memory space 371 into server side send buffer 476. Service gateway 300 allocates memory space 371 such that adjusted allocated capacity 496 does not exceed maximum capacity 498. After storing data packet 471 into the updated server side send buffer 476, service gateway 300 updates available capacity 486 of server side send buffer 476 using capacity 372, and the space consumed by data packet 471.


In one embodiment, service application 350 retrieves data packet 471 from client side receive buffer 426. Service gateway 300 removes data packet 471 from client side receive buffer 426 and increase available capacity 436 according to the memory space consumed by data packet 471.


In one embodiment, network module 330 successfully transmits data packet 471 from server side send buffer 476. Service gateway 300 remove data packet 471 from server side send buffer 476 and increases available capacity 486 according to the memory space consumed by data packet 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
  • 1. A method for allocating by a processor memory space in a memory buffer to a server side receive buffer and a client side send buffer, the method comprising: establishing at least one of a server side session and a client side session;processing a proxy session;allocating a first portion of the memory buffer to the server side receive buffer and a second portion of the memory buffer to the client side send buffer;determining at least one of a maximum capacity of the server side receive buffer and a maximum capacity of the client side send buffer; andre-allocating a third portion of the memory buffer to the server side receive buffer and a fourth portion of the memory buffer to the client side send buffer using the at least one of the maximum capacity of the server side receive buffer and the maximum capacity of the client side send buffer, wherein the maximum capacity of the server side receive buffer is substantially [(n*a server side data packet round trip time (RTT))/(a client side data packet RTT+n*the server side data packet RTT)]*a memory buffer capacity, and the maximum capacity of the client side send buffer is substantially [(the client side data packet RTT)/(the client side data packet RTT+2*the server side data packet RTT)]*the memory buffer capacity.
  • 2. The method of claim 1 wherein each of the first portion and the second portion are pre-determined proportions of the memory buffer.
  • 3. The method of claim 1 wherein the memory buffer has a capacity comprising a sum of the maximum capacity of the server side receive buffer and the maximum capacity of the client side send buffer.
  • 4. The method of claim 3 further comprising calculating at least one of the maximum capacity of the server side receive buffer and the maximum capacity of the client side send buffer using the server side data packet RTT and the client side data packet RTT.
  • 5. The method of claim 1 wherein n is selected such that 1/n is a fraction of the server side receive buffer advertised for the server side session.
  • 6. The method of claim 1 wherein n is 2.
  • 7. The method of claim 5 further comprising calculating at least one of the maximum capacity of the server side receive buffer and the maximum capacity of the client side send buffer further using a server side transmission rate and a client side transmission rate.
  • 8. The method of claim 7 wherein the maximum capacity of the server side receive buffer is substantially [(n*the server side transmission rate*the server side data packet RTT)/(the client side transmission rate*the client side data packet RTT+n*the server side transmission rate*the server side data packet RTT)]*the memory buffer capacity, and the maximum capacity of the client side send buffer is substantially [(the client side transmission rate*the client side data packet RTT)/(the client side transmission rate*the client side data packet RTT+2*the server side transmission rate*the server side data packet RTT)]*the memory buffer capacity.
  • 9. The method of claim 8 wherein n is selected such that 1/n is a fraction of the server side receive buffer advertised for the server side session.
  • 10. The method of claim 9 wherein n is 2.
  • 11. A system for allocating by a processor memory space in a memory buffer to a server side receive buffer and a client side send buffer, the system comprising: a processor; anda memory coupled to the processor, the processor storing a program executable by the processor to perform a method, the method comprising: establishing at least one of a server side session and a client side session;processing a proxy session;allocating a first portion of the memory buffer to the server side receive buffer and a second portion of the memory buffer to the client side send buffer;determining at least one of a maximum capacity of the server side receive buffer and a maximum capacity of the client side send buffer; andre-allocating a third portion of the memory buffer to the server side receive buffer and a fourth portion of the memory buffer to the client side send buffer using the at least one of the maximum capacity of the server side receive buffer and the maximum capacity of the client side send buffer, wherein the maximum capacity of the server side receive buffer is substantially [(n*a server side data packet round trip time (RTT))/(a client side data packet RTT+n*the server side data packet RTT)]*a memory buffer capacity, and the maximum capacity of the client side send buffer is substantially [(the client side data packet RTT)/(the client side data packet RTT+2*the server side data packet RTT)]*the memory buffer capacity.
  • 12. The system of claim 11 wherein each of the first portion and the second portion are pre-determined proportions of the memory buffer.
  • 13. The system of claim 11 wherein the memory buffer has a capacity comprising a sum of the maximum capacity of the server side receive buffer and the maximum capacity of the client side send buffer.
  • 14. The system of claim 13 wherein the method further comprises calculating at least one of the maximum capacity of the server side receive buffer and the maximum capacity of the client side send buffer using a server side data packet RTT and client side data packet RTT.
  • 15. The system of claim 11 wherein n is selected such that 1/n is a fraction of the server side receive buffer advertised for the server side session.
  • 16. The system of claim 11 further comprising calculating at least one of the maximum capacity of the server side receive buffer and the maximum capacity of the client side send buffer further using a server side transmission rate and a client side transmission rate.
  • 17. The system of claim 11 wherein the maximum capacity of the server side receive buffer is substantially [(n*a server side transmission rate*the server side data packet RTT)/(a client side transmission rate*the client side RTT+n*the server side transmission rate*the server side data packet RTT)]*the memory buffer capacity, and the maximum capacity of the client side send buffer is substantially [(the client side transmission rate*the client side data packet RTT)/(the client side transmission rate*the client side data packet RTT+2*the server side transmission rate*the server side data packet RTT)]*the memory buffer capacity.
  • 18. The system of claim 17 wherein n is selected such that 1/n is a fraction of the server side receive buffer advertised for the server side session.
CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation and claims the priority benefit of U.S. patent application Ser. No. 14/573,704 filed on Dec. 17, 2014, now U.S. Pat. No. 9,154,584 issued on Oct. 6, 2015 and entitled “Allocating Buffer for TCP Proxy Session Based on Dynamic Network Conditions”, which in turn is a continuation of and claims the priority benefit of U.S. patent application Ser. No. 14/293,641 filed on Jun. 2, 2014, now U.S. Pat. No. 8,977,749 issued on Mar. 10, 2015 and entitled “Allocating Buffer for TCP Proxy Session Based on Dynamic Network Conditions”, which in turn is a continuation of and claims the priority benefit of U.S. patent application Ser. No. 13/541,792 filed on Jul. 5, 2012, now U.S. Pat. No. 8,782,221 issued on Jul. 15, 2014 and entitled “Method to Allocate Buffer for TCP Proxy Session Based on Dynamic Network Conditions”. The disclosures of each of the above-referenced applications are incorporated herein by reference in their entirety for all purposes.

US Referenced Citations (400)
Number Name Date Kind
5218602 Grant et al. Jun 1993 A
5774660 Brendel et al. Jun 1998 A
5862339 Bonnaure et al. Jan 1999 A
5875185 Wang et al. Feb 1999 A
5935207 Logue et al. Aug 1999 A
5958053 Denker Sep 1999 A
6003069 Cavill Dec 1999 A
6047268 Bartoli et al. Apr 2000 A
6075783 Voit Jun 2000 A
6131163 Wiegel Oct 2000 A
6219706 Fan et al. Apr 2001 B1
6259705 Takahashi et al. Jul 2001 B1
6321338 Porras et al. Nov 2001 B1
6374300 Masters Apr 2002 B2
6456617 Oda et al. Sep 2002 B1
6459682 Ellesson et al. Oct 2002 B1
6483600 Schuster et al. Nov 2002 B1
6535516 Leu et al. Mar 2003 B1
6578066 Logan et al. Jun 2003 B1
6587866 Modi et al. Jul 2003 B1
6600738 Alperovich et al. Jul 2003 B1
6658114 Farn et al. Dec 2003 B1
6748414 Bournas Jun 2004 B1
6772205 Lavian et al. Aug 2004 B1
6772334 Glawitsch Aug 2004 B1
6779033 Watson et al. Aug 2004 B1
6804224 Schuster et al. Oct 2004 B1
7010605 Dharmarajan Mar 2006 B1
7013482 Krumel Mar 2006 B1
7058718 Fontes et al. Jun 2006 B2
7069438 Balabine et al. Jun 2006 B2
7076555 Orman et al. Jul 2006 B1
7143087 Fairweather Nov 2006 B2
7167927 Philbrick et al. Jan 2007 B2
7181524 Lele Feb 2007 B1
7228359 Monteiro Jun 2007 B1
7234161 Maufer et al. Jun 2007 B1
7236457 Joe Jun 2007 B2
7254133 Govindarajan et al. Aug 2007 B2
7269850 Govindarajan et al. Sep 2007 B2
7277963 Dolson et al. Oct 2007 B2
7301899 Goldstone Nov 2007 B2
7308499 Chavez Dec 2007 B2
7310686 Uysal Dec 2007 B2
7328267 Bashyam et al. Feb 2008 B1
7334232 Jacobs et al. Feb 2008 B2
7337241 Boucher et al. Feb 2008 B2
7343399 Hayball et al. Mar 2008 B2
7349970 Clement et al. Mar 2008 B2
7370353 Yang May 2008 B2
7373500 Ramelson et al. May 2008 B2
7391725 Huitema et al. Jun 2008 B2
7398317 Chen et al. Jul 2008 B2
7423977 Joshi Sep 2008 B1
7430755 Hughes et al. Sep 2008 B1
7463648 Eppstein et al. Dec 2008 B1
7467202 Savchuk Dec 2008 B2
7472190 Robinson Dec 2008 B2
7492766 Cabeca et al. Feb 2009 B2
7506360 Wilkinson et al. Mar 2009 B1
7509369 Tormasov Mar 2009 B1
7512980 Copeland et al. Mar 2009 B2
7533409 Keane et al. May 2009 B2
7552323 Shay Jun 2009 B2
7584262 Wang et al. Sep 2009 B1
7584301 Joshi Sep 2009 B1
7590736 Hydrie et al. Sep 2009 B2
7610622 Touitou et al. Oct 2009 B2
7613193 Swami et al. Nov 2009 B2
7613822 Joy et al. Nov 2009 B2
7673072 Boucher et al. Mar 2010 B2
7675854 Chen et al. Mar 2010 B2
7703102 Eppstein et al. Apr 2010 B1
7707295 Szeto et al. Apr 2010 B1
7711790 Barrett et al. May 2010 B1
7733866 Mishra et al. Jun 2010 B2
7747748 Allen Jun 2010 B2
7765328 Bryers et al. Jul 2010 B2
7792113 Foschiano et al. Sep 2010 B1
7808994 Vinokour et al. Oct 2010 B1
7826487 Mukerji et al. Nov 2010 B1
7881215 Daigle et al. Feb 2011 B1
7948952 Hurtta et al. May 2011 B2
7965727 Sakata Jun 2011 B2
7970934 Patel Jun 2011 B1
7979694 Touitou et al. Jul 2011 B2
7983258 Ruben et al. Jul 2011 B1
7990847 Leroy et al. Aug 2011 B1
7991859 Miller et al. Aug 2011 B1
7992201 Aldridge et al. Aug 2011 B2
8019870 Eppstein et al. Sep 2011 B1
8032634 Eppstein et al. Oct 2011 B1
8081640 Ozawa et al. Dec 2011 B2
8090866 Bashyam et al. Jan 2012 B1
8099492 Dahlin Jan 2012 B2
8116312 Riddoch et al. Feb 2012 B2
8122116 Matsunaga Feb 2012 B2
8151019 Le et al. Apr 2012 B1
8179809 Eppstein et al. May 2012 B1
8185651 Moran et al. May 2012 B2
8191106 Choyi et al. May 2012 B2
8224971 Miller et al. Jul 2012 B1
8261339 Aldridge et al. Sep 2012 B2
8296434 Miller et al. Oct 2012 B1
8312507 Chen et al. Nov 2012 B2
8379515 Mukerji Feb 2013 B1
8499093 Grosser et al. Jul 2013 B2
8539075 Bali et al. Sep 2013 B2
8554929 Szeto et al. Oct 2013 B1
8559437 Mishra et al. Oct 2013 B2
8560693 Wang et al. Oct 2013 B1
8584199 Chen et al. Nov 2013 B1
8595791 Chen et al. Nov 2013 B1
RE44701 Chen et al. Jan 2014 E
8675488 Sidebottom et al. Mar 2014 B1
8681610 Mukerji Mar 2014 B1
8750164 Casado et al. Jun 2014 B2
8782221 Han Jul 2014 B2
8813180 Chen et al. Aug 2014 B1
8826372 Chen et al. Sep 2014 B1
8879427 Krumel Nov 2014 B2
8885463 Medved et al. Nov 2014 B1
8897154 Jalan et al. Nov 2014 B2
8965957 Barros Feb 2015 B2
8977749 Han Mar 2015 B1
8990262 Chen et al. Mar 2015 B2
9094364 Jalan et al. Jul 2015 B2
9106561 Jalan et al. Aug 2015 B2
9137301 Dunlap et al. Sep 2015 B1
9154584 Han Oct 2015 B1
9215275 Kannan et al. Dec 2015 B2
9219751 Chen et al. Dec 2015 B1
9253152 Chen et al. Feb 2016 B1
9270705 Chen et al. Feb 2016 B1
9270774 Jalan et al. Feb 2016 B2
9386088 Zheng et al. Jul 2016 B2
9531846 Han et al. Dec 2016 B2
20010042200 Lamberton et al. Nov 2001 A1
20010049741 Skene et al. Dec 2001 A1
20020026515 Michielsens et al. Feb 2002 A1
20020032777 Kawata et al. Mar 2002 A1
20020032799 Wiedeman et al. Mar 2002 A1
20020078164 Reinschmidt Jun 2002 A1
20020091844 Craft et al. Jul 2002 A1
20020103916 Chen et al. Aug 2002 A1
20020133491 Sim et al. Sep 2002 A1
20020138618 Szabo Sep 2002 A1
20020141386 Minert et al. Oct 2002 A1
20020143991 Chow et al. Oct 2002 A1
20020178259 Doyle et al. Nov 2002 A1
20020188678 Edecker et al. Dec 2002 A1
20020191575 Kalavade et al. Dec 2002 A1
20020194335 Maynard Dec 2002 A1
20020194350 Lu et al. Dec 2002 A1
20030009591 Hayball et al. Jan 2003 A1
20030014544 Pettey Jan 2003 A1
20030023711 Parmar et al. Jan 2003 A1
20030023873 Ben-Itzhak Jan 2003 A1
20030035409 Wang et al. Feb 2003 A1
20030035420 Niu Feb 2003 A1
20030061506 Cooper et al. Mar 2003 A1
20030131245 Linderman Jul 2003 A1
20030135625 Fontes et al. Jul 2003 A1
20030195962 Kikuchi et al. Oct 2003 A1
20040010545 Pandya Jan 2004 A1
20040062246 Boucher et al. Apr 2004 A1
20040073703 Boucher et al. Apr 2004 A1
20040078419 Ferrari et al. Apr 2004 A1
20040078480 Boucher et al. Apr 2004 A1
20040103315 Cooper et al. May 2004 A1
20040111516 Cain Jun 2004 A1
20040187032 Gels et al. Sep 2004 A1
20040199616 Karhu Oct 2004 A1
20040199646 Susai et al. Oct 2004 A1
20040202182 Lund et al. Oct 2004 A1
20040210623 Hydrie et al. Oct 2004 A1
20040210663 Phillips et al. Oct 2004 A1
20040213158 Collett et al. Oct 2004 A1
20040250059 Ramelson et al. Dec 2004 A1
20050005207 Herneque Jan 2005 A1
20050009520 Herrero et al. Jan 2005 A1
20050021848 Jorgenson Jan 2005 A1
20050027862 Nguyen et al. Feb 2005 A1
20050036501 Chung et al. Feb 2005 A1
20050036511 Baratakke et al. Feb 2005 A1
20050039033 Meyers et al. Feb 2005 A1
20050044270 Grove et al. Feb 2005 A1
20050074013 Hershey et al. Apr 2005 A1
20050080890 Yang et al. Apr 2005 A1
20050102400 Nakahara et al. May 2005 A1
20050125276 Rusu Jun 2005 A1
20050163073 Heller et al. Jul 2005 A1
20050198335 Brown et al. Sep 2005 A1
20050213586 Cyganski et al. Sep 2005 A1
20050240989 Kim et al. Oct 2005 A1
20050249225 Singhal Nov 2005 A1
20050281190 McGee et al. Dec 2005 A1
20060023721 Miyake et al. Feb 2006 A1
20060036610 Wang Feb 2006 A1
20060036733 Fujimoto et al. Feb 2006 A1
20060041745 Parnes Feb 2006 A1
20060069774 Chen et al. Mar 2006 A1
20060069804 Miyake et al. Mar 2006 A1
20060077926 Rune Apr 2006 A1
20060092950 Arregoces et al. May 2006 A1
20060098645 Walkin May 2006 A1
20060164978 Werner et al. Jul 2006 A1
20060168319 Trossen Jul 2006 A1
20060187901 Cortes et al. Aug 2006 A1
20060190997 Mahajani et al. Aug 2006 A1
20060209789 Gupta et al. Sep 2006 A1
20060230129 Swami et al. Oct 2006 A1
20060233100 Luft et al. Oct 2006 A1
20060251057 Kwon et al. Nov 2006 A1
20060277303 Hegde et al. Dec 2006 A1
20060280121 Matoba Dec 2006 A1
20070019543 Wei et al. Jan 2007 A1
20070022479 Sikdar et al. Jan 2007 A1
20070076653 Park et al. Apr 2007 A1
20070086382 Narayanan et al. Apr 2007 A1
20070094396 Takano et al. Apr 2007 A1
20070118881 Mitchell et al. May 2007 A1
20070124502 Li May 2007 A1
20070156919 Potti et al. Jul 2007 A1
20070165622 O'Rourke et al. Jul 2007 A1
20070180119 Khivesara et al. Aug 2007 A1
20070185998 Touitou et al. Aug 2007 A1
20070195792 Chen et al. Aug 2007 A1
20070230337 Igarashi et al. Oct 2007 A1
20070242738 Park et al. Oct 2007 A1
20070243879 Park et al. Oct 2007 A1
20070245090 King et al. Oct 2007 A1
20070248009 Petersen Oct 2007 A1
20070259673 Willars et al. Nov 2007 A1
20070283429 Chen et al. Dec 2007 A1
20070286077 Wu Dec 2007 A1
20070288247 Mackay Dec 2007 A1
20070294209 Strub et al. Dec 2007 A1
20080016161 Tsirtsis et al. Jan 2008 A1
20080031263 Ervin et al. Feb 2008 A1
20080076432 Senarath et al. Mar 2008 A1
20080101396 Miyata May 2008 A1
20080109452 Patterson May 2008 A1
20080109870 Sherlock et al. May 2008 A1
20080120129 Seubert et al. May 2008 A1
20080134332 Keohane et al. Jun 2008 A1
20080162679 Maher et al. Jul 2008 A1
20080225722 Khemani et al. Sep 2008 A1
20080228781 Chen et al. Sep 2008 A1
20080250099 Shen et al. Oct 2008 A1
20080253390 Das et al. Oct 2008 A1
20080271130 Ramamoorthy Oct 2008 A1
20080291911 Lee et al. Nov 2008 A1
20080298303 Tsirtsis Dec 2008 A1
20090024722 Sethuraman et al. Jan 2009 A1
20090031415 Aldridge et al. Jan 2009 A1
20090049198 Blinn et al. Feb 2009 A1
20090070470 Bauman et al. Mar 2009 A1
20090077651 Poeluev Mar 2009 A1
20090092124 Singhal et al. Apr 2009 A1
20090106830 Maher Apr 2009 A1
20090138606 Moran et al. May 2009 A1
20090138945 Savchuk May 2009 A1
20090141634 Rothstein et al. Jun 2009 A1
20090164614 Christian et al. Jun 2009 A1
20090172093 Matsubara Jul 2009 A1
20090213858 Dolganow et al. Aug 2009 A1
20090222583 Josefsberg et al. Sep 2009 A1
20090227228 Hu et al. Sep 2009 A1
20090228547 Miyaoka et al. Sep 2009 A1
20090262741 Jungck et al. Oct 2009 A1
20090285196 Lee et al. Nov 2009 A1
20090313379 Rydnell et al. Dec 2009 A1
20100008229 Bi et al. Jan 2010 A1
20100023621 Ezolt et al. Jan 2010 A1
20100036952 Hazlewood et al. Feb 2010 A1
20100054139 Chun et al. Mar 2010 A1
20100061319 Aso et al. Mar 2010 A1
20100064008 Yan et al. Mar 2010 A1
20100082787 Kommula et al. Apr 2010 A1
20100083076 Ushiyama Apr 2010 A1
20100094985 Abu-Samaha et al. Apr 2010 A1
20100095018 Khemani et al. Apr 2010 A1
20100106833 Banerjee et al. Apr 2010 A1
20100106854 Kim et al. Apr 2010 A1
20100162378 Jayawardena et al. Jun 2010 A1
20100205310 Altshuler Aug 2010 A1
20100210265 Borzsei et al. Aug 2010 A1
20100217793 Preiss Aug 2010 A1
20100217819 Chen et al. Aug 2010 A1
20100223630 Degenkolb et al. Sep 2010 A1
20100228819 Wei Sep 2010 A1
20100235507 Szeto et al. Sep 2010 A1
20100235522 Chen et al. Sep 2010 A1
20100235880 Chen et al. Sep 2010 A1
20100238828 Russell Sep 2010 A1
20100265824 Chao et al. Oct 2010 A1
20100268814 Cross et al. Oct 2010 A1
20100293296 Hsu et al. Nov 2010 A1
20100312740 Clemm et al. Dec 2010 A1
20100318631 Shukla Dec 2010 A1
20100322252 Suganthi et al. Dec 2010 A1
20100330971 Selitser et al. Dec 2010 A1
20100333101 Pope et al. Dec 2010 A1
20110007652 Bai Jan 2011 A1
20110019550 Bryers et al. Jan 2011 A1
20110023071 Li et al. Jan 2011 A1
20110029599 Pulleyn et al. Feb 2011 A1
20110032941 Quach et al. Feb 2011 A1
20110040826 Chadzelek et al. Feb 2011 A1
20110047294 Singh et al. Feb 2011 A1
20110060831 Ishii et al. Mar 2011 A1
20110083174 Aldridge et al. Apr 2011 A1
20110093522 Chen et al. Apr 2011 A1
20110099623 Garrard et al. Apr 2011 A1
20110110294 Valluri et al. May 2011 A1
20110145324 Reinart et al. Jun 2011 A1
20110149879 Noriega et al. Jun 2011 A1
20110153834 Bharrat Jun 2011 A1
20110185073 Jagadeeswaran et al. Jul 2011 A1
20110191773 Pavel et al. Aug 2011 A1
20110196971 Reguraman et al. Aug 2011 A1
20110276695 Maldaner Nov 2011 A1
20110276982 Nakayama et al. Nov 2011 A1
20110289496 Steer Nov 2011 A1
20110292939 Subramaian et al. Dec 2011 A1
20110302256 Sureshehandra et al. Dec 2011 A1
20110307541 Walsh et al. Dec 2011 A1
20120008495 Shen Jan 2012 A1
20120023231 Ueno Jan 2012 A1
20120026897 Guichard et al. Feb 2012 A1
20120030341 Jensen et al. Feb 2012 A1
20120066371 Patel et al. Mar 2012 A1
20120084419 Kannan et al. Apr 2012 A1
20120084460 McGinnity et al. Apr 2012 A1
20120117382 Larson et al. May 2012 A1
20120117571 Davis et al. May 2012 A1
20120144014 Natham et al. Jun 2012 A1
20120144015 Jalan et al. Jun 2012 A1
20120151353 Joanny Jun 2012 A1
20120170548 Rajagopalan et al. Jul 2012 A1
20120173759 Agarwal et al. Jul 2012 A1
20120191839 Maynard Jul 2012 A1
20120215910 Wada Aug 2012 A1
20120239792 Banerjee et al. Sep 2012 A1
20120240185 Kapoor et al. Sep 2012 A1
20120290727 Tivig Nov 2012 A1
20120297046 Raja et al. Nov 2012 A1
20130046876 Narayana et al. Feb 2013 A1
20130058335 Koponen et al. Mar 2013 A1
20130074177 Varadhan et al. Mar 2013 A1
20130083725 Mallya et al. Apr 2013 A1
20130100958 Jalan et al. Apr 2013 A1
20130124713 Feinberg et al. May 2013 A1
20130135996 Torres et al. May 2013 A1
20130136139 Zheng et al. May 2013 A1
20130148500 Sonoda et al. Jun 2013 A1
20130166762 Jalan et al. Jun 2013 A1
20130173795 McPherson Jul 2013 A1
20130176854 Chisu et al. Jul 2013 A1
20130191486 Someya et al. Jul 2013 A1
20130198385 Han et al. Aug 2013 A1
20130250765 Ehsan et al. Sep 2013 A1
20130258846 Damola Oct 2013 A1
20130282791 Kruglick Oct 2013 A1
20140012972 Han Jan 2014 A1
20140089500 Sankar et al. Mar 2014 A1
20140164617 Jalan et al. Jun 2014 A1
20140169168 Jalan et al. Jun 2014 A1
20140207845 Han et al. Jul 2014 A1
20140258465 Li Sep 2014 A1
20140258536 Chiong Sep 2014 A1
20140269728 Jalan et al. Sep 2014 A1
20140286313 Fu et al. Sep 2014 A1
20140298091 Carlen et al. Oct 2014 A1
20140330982 Jalan et al. Nov 2014 A1
20140334485 Jain et al. Nov 2014 A1
20140359052 Joachimpillai et al. Dec 2014 A1
20150039671 Jalan et al. Feb 2015 A1
20150156223 Xu et al. Jun 2015 A1
20150215436 Kancherla Jul 2015 A1
20150237173 Virkki et al. Aug 2015 A1
20150244566 Puimedon Aug 2015 A1
20150281087 Jalan et al. Oct 2015 A1
20150281104 Golshan et al. Oct 2015 A1
20150296058 Jalan et al. Oct 2015 A1
20150312092 Golshan et al. Oct 2015 A1
20150312268 Ray Oct 2015 A1
20150333988 Jalan et al. Nov 2015 A1
20150350048 Sampat et al. Dec 2015 A1
20150350379 Jalan et al. Dec 2015 A1
20160014126 Jalan et al. Jan 2016 A1
20160036778 Chen et al. Feb 2016 A1
20160042014 Jalan et al. Feb 2016 A1
20160043901 Sankar et al. Feb 2016 A1
20160044095 Sankar et al. Feb 2016 A1
20160050233 Chen et al. Feb 2016 A1
20160088074 Kannan et al. Mar 2016 A1
20160105395 Chen et al. Apr 2016 A1
20160105446 Chen et al. Apr 2016 A1
Foreign Referenced Citations (97)
Number Date Country
1372662 Oct 2002 CN
1449618 Oct 2003 CN
1473300 Feb 2004 CN
1529460 Sep 2004 CN
1575582 Feb 2005 CN
1714545 Dec 2005 CN
1725702 Jan 2006 CN
1910869 Feb 2007 CN
101004740 Jul 2007 CN
101094225 Dec 2007 CN
101163336 Apr 2008 CN
101169785 Apr 2008 CN
101189598 May 2008 CN
101247349 Aug 2008 CN
101261644 Sep 2008 CN
101442425 May 2009 CN
101682532 Mar 2010 CN
102123156 Jul 2011 CN
102546590 Jul 2012 CN
102571742 Jul 2012 CN
102577252 Jul 2012 CN
102918801 Feb 2013 CN
103533018 Jan 2014 CN
103944954 Jul 2014 CN
104040990 Sep 2014 CN
104067569 Sep 2014 CN
104106241 Oct 2014 CN
104137491 Nov 2014 CN
104796396 Jul 2015 CN
102577252 Mar 2016 CN
1209876 May 2002 EP
1770915 Apr 2007 EP
1885096 Feb 2008 EP
02296313 Mar 2011 EP
2577910 Apr 2013 EP
2622795 Aug 2013 EP
2647174 Oct 2013 EP
2760170 Jul 2014 EP
2772026 Sep 2014 EP
2901308 Aug 2015 EP
1182560 Nov 2013 HK
1183569 Dec 2013 HK
1183996 Jan 2014 HK
1189438 Jun 2014 HK
1198565 May 2015 HK
1198848 Jun 2015 HK
1199153 Jun 2015 HK
1199779 Jul 2015 HK
1200617 Aug 2015 HK
261CHE2014 Jul 2016 IN
H09-097233 Apr 1997 JP
1999096128 Apr 1999 JP
H11-338836 Oct 1999 JP
2000276432 Oct 2000 JP
2000307634 Nov 2000 JP
2001051859 Feb 2001 JP
2003141068 May 2003 JP
2005141441 Jun 2005 JP
2006332825 Dec 2006 JP
2008040718 Feb 2008 JP
2013528330 Jul 2013 JP
2014143686 Aug 2014 JP
2015507380 Mar 2015 JP
5855663 Dec 2015 JP
5906263 Apr 2016 JP
100830413 May 2008 KR
20130096624 Aug 2013 KR
101576585 Dec 2015 KR
269763 Feb 1996 TW
425821 Mar 2001 TW
444478 Jul 2001 TW
WO0113228 Feb 2001 WO
WO0114990 Mar 2001 WO
WO0145349 Jun 2001 WO
WO03103237 Dec 2003 WO
WO2004084085 Sep 2004 WO
WO2006098033 Sep 2006 WO
WO2008053954 May 2008 WO
WO2008078593 Jul 2008 WO
WO2011049770 Apr 2011 WO
WO2011079381 Jul 2011 WO
WO2011149796 Dec 2011 WO
WO2012050747 Apr 2012 WO
WO2012075237 Jun 2012 WO
WO2013070391 May 2013 WO
WO2013081952 Jun 2013 WO
WO2013096019 Jun 2013 WO
WO2013112492 Aug 2013 WO
WO2014031046 Feb 2014 WO
WO2014052099 Apr 2014 WO
WO2014088741 Jun 2014 WO
WO2014093829 Jun 2014 WO
WO2014138483 Sep 2014 WO
WO2014144837 Sep 2014 WO
WO2014179753 Nov 2014 WO
WO2015153020 Oct 2015 WO
WO2015164026 Oct 2015 WO
Non-Patent Literature Citations (16)
Entry
Cardellini et al., “Dynamic Load Balancing on Web-server Systems”, IEEE Internet Computing, vol. 3, No. 3, pp. 28-39, May-Jun. 1999.
Spatscheck et al., “Optimizing TCP Forwarder Performance”, IEEE/ACM Transactions on Networking, vol. 8, No. 2, Apr. 2000.
Kjaer et al. “Resource allocation and disturbance rejection in web servers using SLAs and virtualized servers”, IEEE Transactions on Network and Service Management, IEEE, US, vol. 6, No. 4, Dec. 1, 2009.
Sharifian et al. “An approximation-based load-balancing algorithm with admission control for cluster web servers with dynamic workloads”, The Journal of Supercomputing, Kluwer Academic Publishers, BO, vol. 53, No. 3, Jul. 3, 2009.
Goldszmidt et al. NetDispatcher: A TCP Connection Router, IBM Research Report RC 20853, May 19, 1997.
Koike et al., “Transport Middleware for Network-Based Control,” IEICE Technical Report, Jun. 22, 2000, vol. 100, No. 53, pp. 13-18.
Yamamoto et al., “Performance Evaluation of Window Size in Proxy-based TCP for Multi-hop Wireless Networks,” IPSJ SIG Technical Reports, May 15, 2008, vol. 2008, No. 44, pp. 109-114.
Abe et al., “Adaptive Split Connection Schemes in Advanced Relay Nodes,” IEICE Technical Report, Feb. 22, 2010, vol. 109, No. 438, pp. 25-30.
Gite, Vivek, “Linux Tune Network Stack (Buffers Size) to Increase Networking Performance,” accessed Apr. 13, 2016 at URL: <<http://www.cyberciti.biz/faq/linux-tcp-tuning/>>, Jul. 8, 2009, 24 pages.
“Tcp—TCP Protocol”, Linux Programmer's Manual, accessed Apr. 13, 2016 at URL: <<https://www.freebsd.org/cgi/man.cgi?query=tcp&apropos=0&sektion=7&manpath=SuSE+Linux%2Fi386+11.0&format=asci>>, Nov. 25, 2007, 11 pages.
In Journal 39/2015, Sep. 25, 2015, Jalan et al., In Cumulative version of WO2013070391.
“Enhanced Interior Gateway Routing Protocol”, Cisco, Document ID 16406, Sep. 9, 2005 update, 43 pages.
Crotti, Manuel et al., “Detecting HTTP Tunnels with Statistical Mechanisms”, IEEE International Conference on Communications, Jun. 24-28, 2007, pp. 6162-6168.
Haruyama, Takahiro et al., “Dial-to-Connect VPN System for Remote DLNA Communication”, IEEE Consumer communications and Networking Conference, CCNC 2008. 5th IEEE, Jan. 10-12, 2008, pp. 1224-1225.
Chen, Jianhua et al., “SSL/TLS-based Secure Tunnel Gateway System Design and Implementation”, IEEE International Workshop on Anti-counterfeiting, Security, Identification, Apr. 16-18, 2007, pp. 258-261.
“EIGRP MPLS VPN PE-CE Site of Origin (SoO)”, Cisco Systems, Feb. 28, 2006, 14 pages.
Related Publications (1)
Number Date Country
20160014052 A1 Jan 2016 US
Continuations (3)
Number Date Country
Parent 14573704 Dec 2014 US
Child 14863083 US
Parent 14293641 Jun 2014 US
Child 14573704 US
Parent 13541792 Jul 2012 US
Child 14293641 US