old-www/LDP/LG/issue38/tag/3.html

192 lines
7.8 KiB
HTML

<!--startcut ======================================================= -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<META NAME="generator" CONTENT="lgazmail v1.1I.e">
<TITLE>The Answer Guy 38: A Reader Answers: What is the TCP/IP SACK feature?</TITLE>
</HEAD><BODY BGCOLOR="#FFFFFF" TEXT="#000000"
LINK="#3366FF" VLINK="#A000A0">
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<H4>"The Linux Gazette...<I>making Linux just a little more fun!</I>"</H4>
<P> <hr> <P>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<center>
<H1><A NAME="answer">
<img src="../../gx/dennis/qbubble.gif" alt="(?)"
border="0" align="middle">
<font color="#B03060">The Answer Guy</font>
<img src="../../gx/dennis/bbubble.gif" alt="(!)"
border="0" align="middle">
</A></H1>
<BR>
<H4>By James T. Dennis,
<a href="mailto:linux-questions-only@ssc.com">linux-questions-only@ssc.com</a><BR>
Starshine Technical Services,
<A HREF="http://www.starshine.org/">http://www.starshine.org/</A>
</H4>
</center>
<p><hr><p>
<!-- endcut ======================================================= -->
<!-- begin 3 -->
<H3 align="left"><img src="../../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>A Reader Answers: What is the TCP/IP SACK feature?</H3>
<p><strong>From Tom Kludy on Thu, 04 Feb 1999
</strong></p>
<!-- ::
A Reader Answers: What is the TCP/IP SACK feature?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG><FONT COLOR="#000066"><EM><IMG
SRC="../../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0" >
What is the TCP/IP SACK feature? What does it do?
</EM></FONT></STRONG></P>
<blockquote><STRONG><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0" >
SACK = Selective ACKnowledgement. It is an extension to TCP/IP
which allows you to acknowledge reception of specific packets.
(read on)
</STRONG></blockquote>
<P><STRONG><FONT COLOR="#000066"><EM><IMG
SRC="../../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0" >
Why do we need/want it?
</EM></FONT></STRONG></P>
<blockquote><STRONG><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0" >
When sending a group of packets across a network, you need the
receiver to acknowledge those packets that are received. TCP
without SACK simply acknowledges the last packet that was
received. (Actually, the ACK has the number of the next packet
requested, but that's neither here nor there). However, with TCP
there are usually several packets in transit between the source
and destination at any one time. That means that the source will
not recognize that the destination has dropped a packet until it
sees the same ACK several times (4, I think) or until a timeout
has passed. It then resends the packet that has been dropped.
</STRONG></blockquote>
<blockquote><STRONG>
Let's say that there is are 10 packets in route between the source
and destination. Along the line, packets 1,2,3, and 4 are
received, and ACKed. Packet 5 is dropped, but all other packets
are delivered successfully (6,7,8,etc). The receiver will ACK 5
upon receiving 4, 6, 7, 8, etc. But since there are 10 packets in
transit between source and destination, the receiver won't see the
repeating ACKs until it has sent all packets up to about packet 25
(since, at the same time the receiver should be receiving packet
5, the sender is sending packet 15 (5+10), plus the 10 packet
delay until the sender gets the ACK).
</STRONG></blockquote>
<blockquote><STRONG>
At this point, the sender finally knows that packet 5 has been
dropped, and resends it. But it doesn't know that the receiver
has successfully received packets 6 through 25. So, it must wait
until the receiver gets the new packet 5, and returns "ACK 26",
before it knows where to restart. It will take 20
packet-transmission times to get this ACK (or, one whole
round-trip-time). As you can guess, this slows things down
considerably. SACK allows the receiver to say "I've missed packet
5, but I've received packets 6-25". This allows a much quicker
transmission restart, since the source knows within a 1/2
round-trip-time where to resume transmission (instead of a whole
round-trip-time).
</STRONG></blockquote>
<P><STRONG><FONT COLOR="#000066"><EM><IMG
SRC="../../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0" >
It the Linux implementation any better or worse than others? (Or
is it some feature where you pretty much either have it or you
don't and there is no "better" or "worse")?
</EM></FONT></STRONG></P>
<blockquote><STRONG><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0" >
I think it falls under "there is no better or worse", except that
if the underlying TCP implementation is more efficient, then SACK
might help even more..
</STRONG></blockquote>
<blockquote><STRONG>
Hope I have answered the answer guy
<IMG SRC="../../gx/dennis/smily.gif" ALT=":)"
height="24" width="20" align="middle">
Please note that this is
all from memory, as I haven't dealt with this in quite a while.
</STRONG></blockquote>
<blockquote><STRONG>
-Tom Kludy
</STRONG></blockquote>
<BLOCKQUOTE><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Yes. Your answer was perfect. I'm forwarding
it to my editors as is.
</BLOCKQUOTE>
<!-- sig -->
<!-- end 3 -->
<!--startcut ======================================================= -->
<P> <hr> <P>
<H5 align="center"><a href="http://www.linuxgazette.com/copying.html"
>Copyright &copy;</a> 1999, James T. Dennis
<BR>Published in <I>The Linux Gazette</I> Issue 38 March 1999</H5>
<P> <hr> <P>
<!-- begin tagnav ::::::::::::::::::::::::::::::::::::::::::::::::::-->
<TABLE WIDTH="96%"><TR VALIGN="center" ALIGN="center">
<TD ROWSPAN="3" COLSPAN="4" WIDTH="24%"><A HREF="../lg_answer38.html"
><IMG SRC="../../gx/dennis/answernew.gif"
ALT="[ Answer Guy Index ]"></A></td>
<TD WIDTH="6%"><A HREF="1.html">1</A></TD>
<TD WIDTH="6%"><A HREF="2.html">2</A></TD>
<TD WIDTH="6%"><A HREF="3.html">3</A></TD>
<TD WIDTH="6%"><A HREF="4.html">4</A></TD>
<TD WIDTH="6%"><A HREF="5.html">5</A></TD>
<TD WIDTH="6%"><A HREF="6.html">6</A></TD>
<TD WIDTH="6%"><A HREF="7.html">7</A></TD>
<TD WIDTH="6%"><A HREF="8.html">8</A></TD>
<TD WIDTH="6%"><A HREF="9.html">9</A></TD>
<TD WIDTH="6%"><A HREF="10.html">10</A></TD>
<TD WIDTH="6%"><A HREF="11.html">11</A></TD>
</TR><TR VALIGN="center" ALIGN="center">
<TD><A HREF="12.html">12</A></TD>
<TD>&nbsp;</TD>
<TD><A HREF="14.html">14</A></TD>
<TD>&nbsp;</TD>
<TD><A HREF="16.html">16</A></TD>
<TD><A HREF="17.html">17</A></TD>
<TD><A HREF="18.html">18</A></TD>
<TD><A HREF="19.html">19</A></TD>
<TD>&nbsp;</TD>
<TD><A HREF="21.html">21</A></TD>
<TD><A HREF="22.html">22</A></TD>
</TR><TR VALIGN="center" ALIGN="center">
<TD><A HREF="23.html">23</A></TD>
<TD><A HREF="24.html">24</A></TD>
<TD>&nbsp;</TD>
<TD><A HREF="26.html">26</A></TD>
<TD>&nbsp;</TD>
<TD><A HREF="28.html">28</A></TD>
<TD><A HREF="29.html">29</A></TD>
<TD><A HREF="30.html">30</A></TD>
<TD><A HREF="31.html">31</A></TD>
<TD><A HREF="32.html">32</A></TD>
<TD>&nbsp;</TD>
</TR></TABLE>
<!-- end tagnav ::::::::::::::::::::::::::::::::::::::::::::::::::::-->
<P> <hr> <P>
<!-- begin lgnav ::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<A HREF="../index.html"
><IMG SRC="../../gx/indexnew.gif" ALT="[ Table Of Contents ]"></A>
<A HREF="../../index.html"
><IMG SRC="../../gx/homenew.gif" ALT="[ Front Page ]"></A>
<A HREF="../lg_bytes38.html"
><IMG SRC="../../gx/back2.gif" ALT="[ Previous Section ]"></A>
<A HREF="../lg_tips38.html"
><IMG SRC="../../gx/fwd.gif" ALT="[ Next Section ]"></A>
<!-- end lgnav ::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
</BODY></HTML>
<!--endcut ========================================================= -->