rt-thread-official/components/net/uip/doc/html/a00154.html

80 lines
5.1 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>uIP 1.0: uIP TCP throughput booster hack</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.6 -->
<div class="tabs">
<ul>
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="classes.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li><a href="examples.html"><span>Examples</span></a></li>
</ul></div>
<h1>uIP TCP throughput booster hack<br>
<small>
[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
The basic uIP TCP implementation only allows each TCP connection to have a single TCP segment in flight at any given time.
<p>
Because of the delayed ACK algorithm employed by most TCP receivers, uIP's limit on the amount of in-flight TCP segments seriously reduces the maximum achievable throughput for sending data from uIP.<p>
The uip-split module is a hack which tries to remedy this situation. By splitting maximum sized outgoing TCP segments into two, the delayed ACK algorithm is not invoked at TCP receivers. This improves the throughput when sending data from uIP by orders of magnitude.<p>
The uip-split module uses the uip-fw module (uIP IP packet forwarding) for sending packets. Therefore, the uip-fw module must be set up with the appropriate network interfaces for this module to work.
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Files</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">uip-split.h</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation. <br></td></tr>
<p>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html#gb4b17aaf20d630f30919b19937b966a3">uip_split_output</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Handle outgoing packets. <a href="#gb4b17aaf20d630f30919b19937b966a3"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="gb4b17aaf20d630f30919b19937b966a3"></a><!-- doxytag: member="uip-split.h::uip_split_output" ref="gb4b17aaf20d630f30919b19937b966a3" args="(void)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top">void uip_split_output </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">void&nbsp;</td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Handle outgoing packets.
<p>
This function inspects an outgoing packet in the uip_buf buffer and sends it out using the uip_fw_output() function. If the packet is a full-sized TCP segment it will be split into two segments and transmitted separately. This function should be called instead of the actual device driver output function, or the uip_fw_output() function.<p>
The headers of the outgoing packet is assumed to be in the uip_buf buffer and the payload is assumed to be wherever uip_appdata points. The length of the outgoing packet is assumed to be in the uip_len variable.
<p>
Definition at line <a class="el" href="a00199.html#l00049">49</a> of file <a class="el" href="a00199.html">uip-split.c</a>.
<p>
References <a class="el" href="a00201.html#l00226">BUF</a>, <a class="el" href="a00201.html#l00192">uip_acc32</a>, <a class="el" href="a00201.html#l00249">uip_add32()</a>, <a class="el" href="a00201.html#l00143">uip_appdata</a>, <a class="el" href="a00206.html#l00379">UIP_BUFSIZE</a>, <a class="el" href="a00201.html#l00318">uip_ipchksum()</a>, <a class="el" href="a00202.html#l01518">UIP_IPH_LEN</a>, <a class="el" href="a00201.html#l00155">uip_len</a>, <a class="el" href="a00206.html#l00448">UIP_LLH_LEN</a>, <a class="el" href="a00202.html#l01510">UIP_PROTO_TCP</a>, <a class="el" href="a00201.html#l00364">uip_tcpchksum()</a>, and <a class="el" href="a00202.html#l01528">UIP_TCPIP_HLEN</a>. </td>
</tr>
</table>
<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
</body>
</html>