rfc7323v5.txt   rfc7323.txt 
skipping to change at page 2, line 14 skipping to change at page 3, line 7
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. TCP Performance . . . . . . . . . . . . . . . . . . . . . 3 1.1. TCP Performance . . . . . . . . . . . . . . . . . . . . . 4
1.2. TCP Reliability . . . . . . . . . . . . . . . . . . . . . 4 1.2. TCP Reliability . . . . . . . . . . . . . . . . . . . . . 5
1.3. Using TCP options . . . . . . . . . . . . . . . . . . . . 5 1.3. Using TCP options . . . . . . . . . . . . . . . . . . . . 6
1.4. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 1.4. Terminology . . . . . . . . . . . . . . . . . . . . . . . 7
2. TCP Window Scale Option . . . . . . . . . . . . . . . . . . . 7 2. TCP Window Scale Option . . . . . . . . . . . . . . . . . . . 8
2.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 7 2.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 8
2.2. Window Scale Option . . . . . . . . . . . . . . . . . . . 7 2.2. Window Scale Option . . . . . . . . . . . . . . . . . . . 8
2.3. Using the Window Scale Option . . . . . . . . . . . . . . 8 2.3. Using the Window Scale Option . . . . . . . . . . . . . . 9
2.4. Addressing Window Retraction . . . . . . . . . . . . . . 9 2.4. Addressing Window Retraction . . . . . . . . . . . . . . 10
3. TCP Timestamps Option . . . . . . . . . . . . . . . . . . . . 10 3. TCP Timestamps Option . . . . . . . . . . . . . . . . . . . . 11
3.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 10 3.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 11
3.2. Timestamps Option . . . . . . . . . . . . . . . . . . . . 11 3.2. Timestamps Option . . . . . . . . . . . . . . . . . . . . 12
4. The RTTM Mechanism . . . . . . . . . . . . . . . . . . . . . 13 4. The RTTM Mechanism . . . . . . . . . . . . . . . . . . . . . 14
4.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 13 4.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 14
4.2. Updating the RTO Value . . . . . . . . . . . . . . . . . 14 4.2. Updating the RTO Value . . . . . . . . . . . . . . . . . 15
4.3. Which Timestamp to Echo . . . . . . . . . . . . . . . . . 15 4.3. Which Timestamp to Echo . . . . . . . . . . . . . . . . . 16
5. PAWS - Protection Against Wrapped Sequences . . . . . . . . . 17 5. PAWS - Protection Against Wrapped Sequences . . . . . . . . . 19
5.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 17 5.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 19
5.2. The PAWS Mechanism . . . . . . . . . . . . . . . . . . . 17 5.2. The PAWS Mechanism . . . . . . . . . . . . . . . . . . . 19
5.3. Basic PAWS Algorithm . . . . . . . . . . . . . . . . . . 19 5.3. Basic PAWS Algorithm . . . . . . . . . . . . . . . . . . 20
5.4. Timestamp Clock . . . . . . . . . . . . . . . . . . . . . 21 5.4. Timestamp Clock . . . . . . . . . . . . . . . . . . . . . 22
5.5. Outdated Timestamps . . . . . . . . . . . . . . . . . . . 22 5.5. Outdated Timestamps . . . . . . . . . . . . . . . . . . . 24
5.6. Header Prediction . . . . . . . . . . . . . . . . . . . . 23 5.6. Header Prediction . . . . . . . . . . . . . . . . . . . . 25
5.7. IP Fragmentation . . . . . . . . . . . . . . . . . . . . 24 5.7. IP Fragmentation . . . . . . . . . . . . . . . . . . . . 26
5.8. Duplicates from Earlier Incarnations of Connection . . . 25 5.8. Duplicates from Earlier Incarnations of Connection . . . 26
6. Conclusions and Acknowledgments . . . . . . . . . . . . . . . 25 6. Conclusions and Acknowledgments . . . . . . . . . . . . . . . 27
7. Security Considerations . . . . . . . . . . . . . . . . . . . 26 7. Security Considerations . . . . . . . . . . . . . . . . . . . 27
7.1. Privacy Considerations . . . . . . . . . . . . . . . . . 27 7.1. Privacy Considerations . . . . . . . . . . . . . . . . . 29
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 30
9.1. Normative References . . . . . . . . . . . . . . . . . . 28 9.1. Normative References . . . . . . . . . . . . . . . . . . 30
9.2. Informative References . . . . . . . . . . . . . . . . . 28 9.2. Informative References . . . . . . . . . . . . . . . . . 30
Appendix A. Implementation Suggestions . . . . . . . . . . . . . 32 Appendix A. Implementation Suggestions . . . . . . . . . . . . . 34
Appendix B. Duplicates from Earlier Connection Incarnations . . 33 Appendix B. Duplicates from Earlier Connection Incarnations . . 35
B.1. System Crash with Loss of State . . . . . . . . . . . . . 33 B.1. System Crash with Loss of State . . . . . . . . . . . . . 35
B.2. Closing and Reopening a Connection . . . . . . . . . . . 33 B.2. Closing and Reopening a Connection . . . . . . . . . . . 35
Appendix C. Summary of Notation . . . . . . . . . . . . . . . . 35 Appendix C. Summary of Notation . . . . . . . . . . . . . . . . 37
Appendix D. Event Processing Summary . . . . . . . . . . . . . . 36 Appendix D. Event Processing Summary . . . . . . . . . . . . . . 38
Appendix E. Timestamps Edge Cases . . . . . . . . . . . . . . . 42 Appendix E. Timestamps Edge Cases . . . . . . . . . . . . . . . 44
Appendix F. Window Retraction Example . . . . . . . . . . . . . 42 Appendix F. Window Retraction Example . . . . . . . . . . . . . 44
Appendix G. RTO Calculation Modification . . . . . . . . . . . . 43 Appendix G. RTO Calculation Modification . . . . . . . . . . . . 45
Appendix H. Changes from RFC 1323 . . . . . . . . . . . . . . . 44 Appendix H. Changes from RFC 1323 . . . . . . . . . . . . . . . 46
1. Introduction 1. Introduction
The TCP protocol [RFC0793] was designed to operate reliably over The TCP protocol [RFC0793] was designed to operate reliably over
almost any transmission medium regardless of transmission rate, almost any transmission medium regardless of transmission rate,
delay, corruption, duplication, or reordering of segments. Over the delay, corruption, duplication, or reordering of segments. Over the
years, advances in networking technology have resulted in ever-higher years, advances in networking technology have resulted in ever-higher
transmission speeds, and the fastest paths are well beyond the domain transmission speeds, and the fastest paths are well beyond the domain
for which TCP was originally engineered. for which TCP was originally engineered.
skipping to change at page 29, line 22 skipping to change at page 31, line 8
'88, Stanford, CA, August 1988, '88, Stanford, CA, August 1988,
<http://ee.lbl.gov/papers/congavoid.pdf>. <http://ee.lbl.gov/papers/congavoid.pdf>.
[Jacobson90a] [Jacobson90a]
Jacobson, V., "4BSD Header Prediction", ACM Computer Jacobson, V., "4BSD Header Prediction", ACM Computer
Communication Review, April 1990. Communication Review, April 1990.
[Jacobson90c] [Jacobson90c]
Jacobson, V., "Subject: modified TCP congestion avoidance Jacobson, V., "Subject: modified TCP congestion avoidance
algorithm", message to the End2End-Interest mailing list, algorithm", message to the End2End-Interest mailing list,
30 April 1990, <ftp://ftp.isi.edu/end2end/end2end- 30 April 1990, <ftp://ftp.isi.edu/end2end/
interest-1990.mail>. end2end-interest-1990.mail>.
[Karn87] Karn, P. and C. Partridge, "Estimating Round-Trip Times in [Karn87] Karn, P. and C. Partridge, "Estimating Round-Trip Times in
Reliable Transport Protocols", Proceedings of SIGCOMM '87, Reliable Transport Protocols", Proceedings of SIGCOMM '87,
August 1987. August 1987.
[Kuehlewind10] [Kuehlewind10]
Kuehlewind, M. and B. Briscoe, "Chirping for Congestion Kuehlewind, M. and B. Briscoe, "Chirping for Congestion
Control - Implementation Feasibility", November 2010, Control - Implementation Feasibility", November 2010,
<bobbriscoe.net/projects/netsvc_i-f/chirp_pfldnet10.pdf>. <http://bobbriscoe.net/projects/netsvc_i-f/
chirp_pfldnet10.pdf>.
[Kuzmanovic03] [Kuzmanovic03]
Kuzmanovic, A. and E. Knightly, "TCP-LP: Low-Priority Kuzmanovic, A. and E. Knightly, "TCP-LP: Low-Priority
Service via End-Point Congestion Control", 2003, Service via End-Point Congestion Control", 2003,
<www.cs.northwestern.edu/~akuzma/doc/TCP-LP-ToN.pdf>. <www.cs.northwestern.edu/~akuzma/doc/TCP-LP-ToN.pdf>.
[Ludwig00] [Ludwig00]
Ludwig, R. and K. Sklower, "The Eifel Retransmission Ludwig, R. and K. Sklower, "The Eifel Retransmission
Timer", ACM SIGCOMM Computer Communication Review Volume Timer", ACM SIGCOMM Computer Communication Review Volume
30 Issue 3, July 2000, 30 Issue 3, July 2000,
skipping to change at page 30, line 22 skipping to change at page 32, line 8
[Medina05] [Medina05]
Medina, A., Allman, M., and S. Floyd, "Measuring the Medina, A., Allman, M., and S. Floyd, "Measuring the
Evolution of Transport Protocols in the Internet", ACM Evolution of Transport Protocols in the Internet", ACM
Computer Communication Review Volume 35, No. 2, April Computer Communication Review Volume 35, No. 2, April
2005, 2005,
<http://icir.net/floyd/papers/TCPevolution-Mar2005.pdf>. <http://icir.net/floyd/papers/TCPevolution-Mar2005.pdf>.
[RE-1323BIS] [RE-1323BIS]
Oppermann, A., "Subject: Re: [tcpm] I-D Action: draft- Oppermann, A., "Subject: Re: [tcpm] I-D Action: draft-
ietf.tcpm-1323bis-13.txt", message to the TCPM mailing ietf.tcpm-1323bis-13.txt", message to the TCPM mailing
list, 01 June 2013, <http://www.ietf.org/mail- list, 01 June 2013, <http://www.ietf.org/
archive/web/tcpm/current/msg08001.html>. mail-archive/web/tcpm/current/msg08001.html>.
[RFC1072] Jacobson, V. and R. Braden, "TCP extensions for long-delay [RFC1072] Jacobson, V. and R. Braden, "TCP extensions for long-delay
paths", RFC 1072, October 1988. paths", RFC 1072, October 1988.
[RFC1122] Braden, R., "Requirements for Internet Hosts - [RFC1122] Braden, R., "Requirements for Internet Hosts -
Communication Layers", STD 3, RFC 1122, October 1989. Communication Layers", STD 3, RFC 1122, October 1989.
[RFC1185] Jacobson, V., Braden, B., and L. Zhang, "TCP Extension for [RFC1185] Jacobson, V., Braden, B., and L. Zhang, "TCP Extension for
High-Speed Paths", RFC 1185, October 1990. High-Speed Paths", RFC 1185, October 1990.
skipping to change at page 36, line 31 skipping to change at page 38, line 22
Receive Sequence Variables Receive Sequence Variables
RCV.NXT: Receive next RCV.NXT: Receive next
RCV.WND: Receive window RCV.WND: Receive window
IRS: Initial receive sequence number IRS: Initial receive sequence number
Appendix D. Event Processing Summary Appendix D. Event Processing Summary
This appendix attempts to specify the algorithms unambiguously by This appendix attempts to specify the algorithms unambiguously by
presenting modifications to the Event Processing rules in Section 3.9 presenting modifications to the Event Processing rules in Section 3.9
of RFC 793. of RFC 793. The change bars ("|") indicate lines that are different
from RFC 793.
OPEN Call OPEN Call
... ...
An initial send sequence number (ISS) is selected. Send a <SYN> An initial send sequence number (ISS) is selected. Send a <SYN>
segment of the form: | segment of the form:
|
<SEQ=ISS><CTL=SYN><TSval=Snd.TSclock><WSopt=Rcv.Wind.Shift> | <SEQ=ISS><CTL=SYN><TSval=Snd.TSclock><WSopt=Rcv.Wind.Shift>
... ...
SEND Call SEND Call
CLOSED STATE (i.e., TCB does not exist) CLOSED STATE (i.e., TCB does not exist)
... ...
LISTEN STATE LISTEN STATE
If the foreign socket is specified, then change the connection If active and the foreign socket is specified, then change the
from passive to active, select an ISS. Send a <SYN> segment connection from passive to active, select an ISS. Send a SYN
containing the options: <TSval=Snd.TSclock> and | segment containing the options: <TSval=Snd.TSclock> and
<WSopt=Rcv.Wind.Shift>. Set SND.UNA to ISS, SND.NXT to ISS+1. | <WSopt=Rcv.Wind.Shift>. Set SND.UNA to ISS, SND.NXT to ISS+1.
Enter SYN-SENT state. ... Enter SYN-SENT state. ...
SYN-SENT STATE SYN-SENT STATE
SYN-RECEIVED STATE SYN-RECEIVED STATE
... ...
ESTABLISHED STATE ESTABLISHED STATE
CLOSE-WAIT STATE CLOSE-WAIT STATE
Segmentize the buffer and send it with a piggybacked Segmentize the buffer and send it with a piggybacked
acknowledgment (acknowledgment value = RCV.NXT). ... acknowledgment (acknowledgment value = RCV.NXT). ...
If the urgent flag is set ... If the urgent flag is set ...
skipping to change at page 37, line 29 skipping to change at page 39, line 14
... ...
ESTABLISHED STATE ESTABLISHED STATE
CLOSE-WAIT STATE CLOSE-WAIT STATE
Segmentize the buffer and send it with a piggybacked Segmentize the buffer and send it with a piggybacked
acknowledgment (acknowledgment value = RCV.NXT). ... acknowledgment (acknowledgment value = RCV.NXT). ...
If the urgent flag is set ... If the urgent flag is set ...
If the Snd.TS.OK flag is set, then include the TCP Timestamps | If the Snd.TS.OK flag is set, then include the TCP Timestamps
option <TSval=Snd.TSclock,TSecr=TS.Recent> in each data | option <TSval=Snd.TSclock,TSecr=TS.Recent> in each data
segment. | segment.
|
Scale the receive window for transmission in the segment | Scale the receive window for transmission in the segment
header: | header:
|
SEG.WND = (RCV.WND >> Rcv.Wind.Shift). | SEG.WND = (RCV.WND >> Rcv.Wind.Shift).
SEGMENT ARRIVES SEGMENT ARRIVES
... ...
If the state is LISTEN then If the state is LISTEN then
first check for an RST first check for an RST
... ...
skipping to change at page 38, line 13 skipping to change at page 39, line 45
... ...
third check for a SYN third check for a SYN
If the SYN bit is set, check the security. If the ... If the SYN bit is set, check the security. If the ...
... ...
If the SEG.PRC is less than the TCB.PRC then continue. If the SEG.PRC is less than the TCB.PRC then continue.
Check for a Window Scale option (WSopt); if one is found, | Check for a Window Scale option (WSopt); if one is found,
save SEG.WSopt in Snd.Wind.Shift and set Snd.WS.OK flag on. | save SEG.WSopt in Snd.Wind.Shift and set Snd.WS.OK flag on.
Otherwise, set both Snd.Wind.Shift and Rcv.Wind.Shift to | Otherwise, set both Snd.Wind.Shift and Rcv.Wind.Shift to
zero and clear Snd.WS.OK flag. | zero and clear Snd.WS.OK flag.
|
Check for a TSopt option; if one is found, save SEG.TSval in | Check for a TSopt option; if one is found, save SEG.TSval in
the variable TS.Recent and turn on the Snd.TS.OK bit. | the variable TS.Recent and turn on the Snd.TS.OK bit.
Set RCV.NXT to SEG.SEQ+1, IRS is set to SEG.SEQ and any Set RCV.NXT to SEG.SEQ+1, IRS is set to SEG.SEQ and any
other control or text should be queued for processing later. other control or text should be queued for processing later.
ISS should be selected and a SYN segment sent of the form: ISS should be selected and a SYN segment sent of the form:
<SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK> <SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK>
If the Snd.WS.OK bit is on, include a WSopt | If the Snd.WS.OK bit is on, include a WSopt
<WSopt=Rcv.Wind.Shift> in this segment. If the Snd.TS.OK | <WSopt=Rcv.Wind.Shift> in this segment. If the Snd.TS.OK
bit is on, include a TSopt <TSval=Snd.TSclock, | bit is on, include a TSopt <TSval=Snd.TSclock,
TSecr=TS.Recent> in this segment. Last.ACK.sent is set to | TSecr=TS.Recent> in this segment. Last.ACK.sent is set to
RCV.NXT. | RCV.NXT.
SND.NXT is set to ISS+1 and SND.UNA to ISS. The connection SND.NXT is set to ISS+1 and SND.UNA to ISS. The connection
state should be changed to SYN-RECEIVED. Note that any state should be changed to SYN-RECEIVED. Note that any
other incoming control or data (combined with SYN) will be other incoming control or data (combined with SYN) will be
processed in the SYN-RECEIVED state, but processing of SYN processed in the SYN-RECEIVED state, but processing of SYN
and ACK should not be repeated. If the listen was not fully and ACK should not be repeated. If the listen was not fully
specified (i.e., the foreign socket was not fully specified (i.e., the foreign socket was not fully
specified), then the unspecified fields should be filled in specified), then the unspecified fields should be filled in
now. now.
skipping to change at page 39, line 11 skipping to change at page 40, line 44
... ...
... ...
fourth check the SYN bit fourth check the SYN bit
... ...
If the SYN bit is on and the security/compartment and If the SYN bit is on and the security/compartment and
precedence are acceptable then, RCV.NXT is set to SEG.SEQ+1, precedence are acceptable then, RCV.NXT is set to SEG.SEQ+1,
IRS is set to SEG.SEQ, and any acknowledgments on the IRS is set to SEG.SEQ. SND.UNA should be advanced to equal
SEG.ACK (if there is an ACK), and any segments on the
retransmission queue which are thereby acknowledged should retransmission queue which are thereby acknowledged should
be removed. be removed.
Check for a Window Scale option (WSopt); if it is found, | Check for a Window Scale option (WSopt); if it is found,
save SEG.WSopt in Snd.Wind.Shift; otherwise, set both | save SEG.WSopt in Snd.Wind.Shift; otherwise, set both
Snd.Wind.Shift and Rcv.Wind.Shift to zero. | Snd.Wind.Shift and Rcv.Wind.Shift to zero.
|
Check for a TSopt option; if one is found, save SEG.TSval in | Check for a TSopt option; if one is found, save SEG.TSval in
variable TS.Recent and turn on the Snd.TS.OK bit in the | variable TS.Recent and turn on the Snd.TS.OK bit in the
connection control block. If the ACK bit is set, use | connection control block. If the ACK bit is set, use
Snd.TSclock - SEG.TSecr as the initial RTT estimate. | Snd.TSclock - SEG.TSecr as the initial RTT estimate.
If SND.UNA > ISS (our SYN has been ACKed), change the If SND.UNA > ISS (our SYN has been ACKed), change the
connection state to ESTABLISHED, form an <ACK> segment: connection state to ESTABLISHED, form an <ACK> segment:
<SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK> <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>
and send it. If the Snd.TS.OK bit is on, include a TSopt | and send it. If the Snd.TS.OK bit is on, include a TSopt
option <TSval=Snd.TSclock,TSecr=TS.Recent> in this <ACK> | option <TSval=Snd.TSclock,TSecr=TS.Recent> in this <ACK>
segment. Last.ACK.sent is set to RCV.NXT. | segment. Last.ACK.sent is set to RCV.NXT.
Data or controls that were queued for transmission may be Data or controls that were queued for transmission may be
included. If there are other controls or text in the included. If there are other controls or text in the
segment, then continue processing at the sixth step below segment, then continue processing at the sixth step below
where the URG bit is checked; otherwise, return. where the URG bit is checked; otherwise, return.
Otherwise, enter SYN-RECEIVED, form a <SYN,ACK> segment: Otherwise, enter SYN-RECEIVED, form a <SYN,ACK> segment:
<SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK> <SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK>
and send it. If the Snd.TS.OK bit is on, include a TSopt | and send it. If the Snd.TS.OK bit is on, include a TSopt
option <TSval=Snd.TSclock,TSecr=TS.Recent> in this segment. | option <TSval=Snd.TSclock,TSecr=TS.Recent> in this segment.
If the Snd.WS.OK bit is on, include a WSopt option | If the Snd.WS.OK bit is on, include a WSopt option
<WSopt=Rcv.Wind.Shift> in this segment. Last.ACK.sent is | <WSopt=Rcv.Wind.Shift> in this segment. Last.ACK.sent is
set to RCV.NXT. | set to RCV.NXT.
If there are other controls or text in the segment, queue If there are other controls or text in the segment, queue
them for processing after the ESTABLISHED state has been them for processing after the ESTABLISHED state has been
reached, return. reached, return.
fifth, if neither of the SYN or RST bits is set then drop the fifth, if neither of the SYN or RST bits is set then drop the
segment and return. segment and return.
Otherwise Otherwise
skipping to change at page 40, line 20 skipping to change at page 42, line 4
first check the sequence number first check the sequence number
SYN-RECEIVED STATE SYN-RECEIVED STATE
ESTABLISHED STATE ESTABLISHED STATE
FIN-WAIT-1 STATE FIN-WAIT-1 STATE
FIN-WAIT-2 STATE FIN-WAIT-2 STATE
CLOSE-WAIT STATE CLOSE-WAIT STATE
CLOSING STATE CLOSING STATE
LAST-ACK STATE LAST-ACK STATE
TIME-WAIT STATE TIME-WAIT STATE
Segments are processed in sequence. Initial tests on Segments are processed in sequence. Initial tests on
arrival are used to discard old duplicates, but further arrival are used to discard old duplicates, but further
processing is done in SEG.SEQ order. If a segment's processing is done in SEG.SEQ order. If a segment's
contents straddle the boundary between old and new, only the contents straddle the boundary between old and new, only the
new parts should be processed. new parts should be processed.
Rescale the received window field: | Rescale the received window field:
|
TrueWindow = SEG.WND << Snd.Wind.Shift, | TrueWindow = SEG.WND << Snd.Wind.Shift,
|
and use "TrueWindow" in place of SEG.WND in the following | and use "TrueWindow" in place of SEG.WND in the following
steps. | steps.
|
Check whether the segment contains a Timestamps option and | Check whether the segment contains a Timestamps option and
if bit Snd.TS.OK is on. If so: | if bit Snd.TS.OK is on. If so:
|
If SEG.TSval < TS.Recent and the RST bit is off: | If SEG.TSval < TS.Recent and the RST bit is off:
|
If the connection has been idle more than 24 days, | If the connection has been idle more than 24 days,
save SEG.TSval in variable TS.Recent, else the segment | save SEG.TSval in variable TS.Recent, else the segment
is not acceptable; follow the steps below for an | is not acceptable; follow the steps below for an
unacceptable segment. | unacceptable segment.
|
If SEG.TSval >= TS.Recent and SEG.SEQ <= Last.ACK.sent, | If SEG.TSval >= TS.Recent and SEG.SEQ <= Last.ACK.sent,
then save SEG.TSval in variable TS.Recent. | then save SEG.TSval in variable TS.Recent.
There are four cases for the acceptability test for an There are four cases for the acceptability test for an
incoming segment: incoming segment:
... ...
If an incoming segment is not acceptable, an acknowledgment If an incoming segment is not acceptable, an acknowledgment
should be sent in reply (unless the RST bit is set; if so should be sent in reply (unless the RST bit is set; if so
drop the segment and return): drop the segment and return):
<SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK> <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>
Last.ACK.sent is set to SEG.ACK of the acknowledgment. If | Last.ACK.sent is set to SEG.ACK of the acknowledgment. If
the Snd.TS.OK bit is on, include the Timestamps option | the Snd.TS.OK bit is on, include the Timestamps option
<TSval=Snd.TSclock,TSecr=TS.Recent> in this <ACK> segment. | <TSval=Snd.TSclock,TSecr=TS.Recent> in this <ACK> segment.
Set Last.ACK.sent to SEG.ACK and send the <ACK> segment. Set Last.ACK.sent to SEG.ACK and send the <ACK> segment.
After sending the acknowledgment, drop the unacceptable After sending the acknowledgment, drop the unacceptable
segment and return. segment and return.
... ...
fifth check the ACK field, fifth check the ACK field,
if the ACK bit is off drop the segment and return if the ACK bit is off drop the segment and return
if the ACK bit is on if the ACK bit is on
... ...
ESTABLISHED STATE ESTABLISHED STATE
If SND.UNA < SEG.ACK <= SND.NXT then, set SND.UNA <- If SND.UNA < SEG.ACK <= SND.NXT then, set SND.UNA <-
SEG.ACK. Also compute a new estimate of round-trip time. | SEG.ACK. Also compute a new estimate of round-trip time.
If Snd.TS.OK bit is on, use Snd.TSclock - SEG.TSecr; | If Snd.TS.OK bit is on, use Snd.TSclock - SEG.TSecr;
otherwise, use the elapsed time since the first segment | otherwise, use the elapsed time since the first segment
in the retransmission queue was sent. Any segments on | in the retransmission queue was sent. Any segments on
the retransmission queue that are thereby entirely the retransmission queue that are thereby entirely
acknowledged... acknowledged...
... ...
seventh, process the segment text, seventh, process the segment text,
ESTABLISHED STATE ESTABLISHED STATE
FIN-WAIT-1 STATE FIN-WAIT-1 STATE
FIN-WAIT-2 STATE FIN-WAIT-2 STATE
... ...
Send an acknowledgment of the form: Send an acknowledgment of the form:
<SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK> <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>
If the Snd.TS.OK bit is on, include the Timestamps option | If the Snd.TS.OK bit is on, include the Timestamps option
<TSval=Snd.TSclock,TSecr=TS.Recent> in this <ACK> segment. | <TSval=Snd.TSclock,TSecr=TS.Recent> in this <ACK> segment.
Set Last.ACK.sent to SEG.ACK of the acknowledgment, and send | Set Last.ACK.sent to SEG.ACK of the acknowledgment, and send
it. This acknowledgment should be piggybacked on a segment | it. This acknowledgment should be piggybacked on a segment
being transmitted if possible without incurring undue delay. being transmitted if possible without incurring undue delay.
... ...
Appendix E. Timestamps Edge Cases Appendix E. Timestamps Edge Cases
While the rules laid out for when to calculate RTTM produce the While the rules laid out for when to calculate RTTM produce the
correct results most of the time, there are some edge cases where an correct results most of the time, there are some edge cases where an
incorrect RTTM can be calculated. All of these situations involve incorrect RTTM can be calculated. All of these situations involve
the loss of segments. It is felt that these scenarios are rare, and the loss of segments. It is felt that these scenarios are rare, and
 End of changes. 21 change blocks. 
125 lines changed or deleted 127 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/