Difference between revisions of "TCP"

From dankwiki
 
(5 intermediate revisions by the same user not shown)
Line 6: Line 6:
 
== Portable APIs ==
 
== Portable APIs ==
 
* TCP_NODELAY: Disable [[Nagle's algorithm]] (coalescing of small packets until an ACK is received or a retransmission triggered). See the [[Linux APIs#IPPROTO_TCP|Linux APIs]] page for interactions with TCP_CORK on that platform.
 
* TCP_NODELAY: Disable [[Nagle's algorithm]] (coalescing of small packets until an ACK is received or a retransmission triggered). See the [[Linux APIs#IPPROTO_TCP|Linux APIs]] page for interactions with TCP_CORK on that platform.
 
+
==Offloading/Coalescing==
 +
LRO/TSO are safe to use on routers and bridges so long as all interfaces involved support the technique.
 +
===LRO===
 +
Large receive offload. Cannot guarantee refragmentation, and thus ought not generally be used on bridges or routers.
 +
===GRO===
 +
Generic receive offload. Generalizes LRO to guarantee possibility of refragmentation, but coalesces a proper subset of packets suitable for LRO.
 +
===TSO===
 +
TCP segmentation offload, also known as TCP Large Send.
 +
===GSO===
 +
Generic segmentation offload, introduced in Linux 2.6.18. Generalizes TSO to guarantee possibility of refragmentation.
 
==Tuning==
 
==Tuning==
 
===TCP auto-tuning on Linux===
 
===TCP auto-tuning on Linux===
 
* netdev 2009-03-11, "[http://patchwork.ozlabs.org/patch/24296/ TCP rx window autotuning harmful at LAN context]"
 
* netdev 2009-03-11, "[http://patchwork.ozlabs.org/patch/24296/ TCP rx window autotuning harmful at LAN context]"
 
+
* The Pittsburgh Supercomputing Center's [http://www.psc.edu/networking/projects/tcptune/#Linux Linux TCP notes]
 +
===TCP auto-tuning on FreeBSD===
 +
* Finally introduced in [FreeBSD 7.2] by [http://people.freebsd.org/~andre/ Andre Oppermann]:
 +
<pre>With TCP send buffer auto scaling and the default values below it supports 20Mbit/s at 100ms and 10Mbit/s at 200ms. Both read and write buffer are auto-sized.</pre>
 
== See also ==
 
== See also ==
 
* [[Linux APIs#IPPROTO_TCP|Linux's]] TCP socket options
 
* [[Linux APIs#IPPROTO_TCP|Linux's]] TCP socket options
 
* [[FreeBSD APIs#IPPROTO_TCP|FreeBSD's]] TCP socket options
 
* [[FreeBSD APIs#IPPROTO_TCP|FreeBSD's]] TCP socket options
 +
* [http://linuxgazette.net/135/pfeiffer.html TCP and Linux' Pluggable Congestion Control Algorithms], a 2007 Linux Gazette article by René Pfeiffer
 +
* [http://thread.gmane.org/gmane.linux.network/114003 'net: Generic Receive Offload], Herbert Xu 2008-12-12 linux-net post
 +
* [http://www.linuxfoundation.org/collaborate/workgroups/networking/gso GSO], The Linux Foundation
 +
* [http://kerneltrap.org/node/397 Linux: TCP Segmentation Offload], KernelTrap 2002-09-03
 +
[[CATEGORY: Networking]]

Latest revision as of 06:01, 12 July 2011

Portable APIs

  • TCP_NODELAY: Disable Nagle's algorithm (coalescing of small packets until an ACK is received or a retransmission triggered). See the Linux APIs page for interactions with TCP_CORK on that platform.

Offloading/Coalescing

LRO/TSO are safe to use on routers and bridges so long as all interfaces involved support the technique.

LRO

Large receive offload. Cannot guarantee refragmentation, and thus ought not generally be used on bridges or routers.

GRO

Generic receive offload. Generalizes LRO to guarantee possibility of refragmentation, but coalesces a proper subset of packets suitable for LRO.

TSO

TCP segmentation offload, also known as TCP Large Send.

GSO

Generic segmentation offload, introduced in Linux 2.6.18. Generalizes TSO to guarantee possibility of refragmentation.

Tuning

TCP auto-tuning on Linux

TCP auto-tuning on FreeBSD

With TCP send buffer auto scaling and the default values below it supports 20Mbit/s at 100ms and 10Mbit/s at 200ms. Both read and write buffer are auto-sized.

See also