192 lines
7.8 KiB
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 ©</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> </TD>
|
|
<TD><A HREF="14.html">14</A></TD>
|
|
<TD> </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> </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> </TD>
|
|
<TD><A HREF="26.html">26</A></TD>
|
|
<TD> </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> </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 ========================================================= -->
|