File: 3.html

package info (click to toggle)
lg-issue38 1-2
  • links: PTS
  • area: main
  • in suites: potato
  • size: 2,128 kB
  • ctags: 147
  • sloc: makefile: 36; sh: 4
file content (191 lines) | stat: -rw-r--r-- 8,024 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
<!--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:answerguy@ssc.com">answerguy@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/ssc.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="../lg_toc38.html"
	><IMG SRC="../../gx/indexnew.gif" ALT="[ Table Of Contents ]"></A>
<A HREF="../../lg_frontpage.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 ========================================================= -->