Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Analysis of error control and flow control schemes M. Veeraraghavan, Sep. 2013 1. Error control There are two steps in error control: error detection and error correction. Error detection schemes include parity codes, checksums, and Cyclic Redundancy Codes (CRC) codes. Error correction schemes include ARQ (Automatic Repeat reQuest) and FEC (Forward Error Correction). We shall analyze ARQ schemes in this course. FEC codes are used to send in the forward direction along with the user data. The receiver is able to correct simple errors that may occur in the data stream using the FEC code. ARQ: The fundamental idea is to use acknowledgments (ACKs) sent from the receiver to the sender for data frames sent from the sender to the receiver. We introduce concepts used in ARQ here: Timers: Sender keeps a timer, if an ACK is not received before the timer expires, it resends the frame. How large should the timer value be? Need for sequence numbers for the frames: If a frame is properly received, but the ACK is lost, then the sender will time-out and retransmit. This will result in the receiver receiving duplicate frames. Hence frames need sequence numbers to allow the receiver to detect duplicates. Need for sequence numbers in the ACKs: If a frame 0 is sent, but the timer times-out before the ACK is received, the sender will resend frame 0. If the ACK for the first frame 0 arrives soon after the sender retransmitted frame 0, the sender will assume that the ACK was for the retransmitted frame 0 and hence send frame 1. Now if frame 1 gets lost, but the receiver sends another ACK for the retransmitted frame 0, the sender may mistakenly think this ACK is for frame 1. If ACKs said what frames they were acknowledging (using their sequence numbers), this problem would not arise. Checkpointing: periodically sending ENQ (enquiries) to see what frames were received. Three modes: Stop-and-wait, Go-back-N, Selective Repeat ARQ 1.1 Stop-and-wait Send a frame, wait for an ACK; if it does not arrive before a time-out occurs then retransmit. This scheme is inefficient because the Delay-bandwidth (BW) product is low. Delay-BW product is bit rate times delay that elapses before any action can take place. Consider a 1.5Mbps link. Say 1 a 1000-bit frame is sent and an ACK awaited before the next frame can be sent. If the round trip delay (including propagation delay) is 40ms, then instead of sending 60Kbits within the 40ms duration ( 1.5Mbps × 40ms = 60Kbits ), we send only 1K bits. This makes stop-and-wait inefficient. Last bit received End of Transmit of ACK Receiver propagation delay Frame ACK Frame ACK Sender transmission delay Start Transmit Last bit of ACK received End Transmit Figure 1:Stop-and-Wait ARQ scheme Efficiency (pg. 290 of [1]): Let link rate be R , frame size in bits be n f , and ACK size in bits be n a . Let there be a processing delay at both ends of t proc . Then the time to send a frame and receive an ACK is: nf na t 0 = 2t prop + 2t proc + ---- + ----R R (1) where n f ⁄ R is the transmission delay of the frame. Therefore effective transmission rate in the absence of errors is n f – n0 0 R eff = --------------t0 (2) where n 0 is the number of overhead bits in the frame. Transmission efficiency of the stop-andwait scheme is then: 2 nf – n0 no --------------1 – ----t0 nf η 0 = ---------------- = -------------------------------------------------------------R n a 2 ( t prop + t proc )R 1 + ----- + ---------------------------------------nf nf (3) The numerator shows loss in efficiency due to header bits (e.g., CRC checks). In the denominator n a ⁄ n f is the loss in efficiency due to the time required for the ACK message. The term 2 ( t prop + t proc )R is the delay-bandwidth product. “In Stop-and-Wait schemes, the delay-bandwidth product can be viewed as a measure of lost opportunity in terms of transmitted bits [1].” In the presence of errors: Let P f be the probability that a received frame has errors. The transmission efficiency of the Stop-and-Wait scheme then becomes: no 1 – ----nf η = ( 1 – P f ) -------------------------------------------------------------n a 2 ( t prop + t proc )R 1 + ----- + ---------------------------------------nf nf (4) Derivation: Let n t be the number of transmissions required to deliver a packet successfully ( ( i – 1 ) transmissions are unsuccessful and the i th is successful): i–1 P [ n t = i ] = ( 1 – P f )P f for i = 1, 2, … (5) [note: this is a geometric random variable - number of attempts until 1st success; if the success itself is omitted, it is called modified geometric random variable in Trivedi’s book, while R uses the latter in dgeom. Another random variable distribution, negative binomial and correspondingly modified negative binomial are number of trials until the rth success; so this distribution has two parameters p and r.] Each unsuccessful attempt costs a time-out period of t out , and the successful one a time period of t 0 (see (1)). 3 ∞ E [ t total ] = t 0 + ∞ ∑ ( i – 1 )tout P [ nt = i ] (6) i=1 i–1 = t 0 + t out ∑ ( i – 1 ) ( 1 – P f )P f i=1 t out ( 1 – P f )P f t out P f - = t 0 + ------------= t 0 + -------------------------------2 1 – Pf ( 1 – Pf ) 2 3 x = a + 2a + 3a + … 2 (7) 3 xa = a + 2a + … 1 1 – (1 – a) 2 3 4 x ( 1 – a ) = a + a + a + a + … = ------------ – ( 1 ) = ------------------------1–a 1–a a x = ------------------2(1 – a) If we assume time-out t out = t 0 , then t0 E [ t total ] = -------------1 – Pf (8) Effective transmission rate (bits sent divided by mean delay): nf – n 0 ( nf – n 0 ) 0 R eff = -------------------- = ( 1 – P f ) -------------------- = ( 1 – P f )R eff (see (2)) E [ t total ] t0 (9) Transmission efficiency is η = ( 1 – P f )η 0 (10) where η 0 is the transmission efficiency in the absence of errors. The effect of errors is to reduce the effective transmission rate and efficiency by a factor of ( 1 – P f ) where P f is probability of an errored frame. n P f = ( 1 – P [ no bit errors in a frame ] ) = ( 1 – ( 1 – p ) f ) ≈ n f p (11) For burst error channels, the following approximation is often used: P f ≈ cn f p 11 ----< c < --10 3 4 (12) The reason for the lower frame error rate is that burst errors tend to cluster in a few frames instead of randomly affecting many frames. 1.2 Go-back-N When a frame is lost, as shown in Fig. 2, either a NAK is generated (as in Fig. 2) or a time-out occurs at the sender waiting for an ACK. This causes all frames starting from the one that was lost to be retransmitted. At the receiver, all frames received past the lost one are discarded. Frames 4,5,6 are retransmitted NAK 4 ACK 3 6 Frame 5 Frame 4 Frame 6 Frame 5 Frame 4 Frame 3 Frame 2 Frame 1 Frame 0 Frame ACK 6 A B Frames 5 and 6 are discarded Figure 2:Go-back-N illustration (figure made by Prof. Jorg Liebeherr) In Fig. 3, we show what happens with Go-Back-N when an ACK is lost. Here NAKs will not be generated. In general, time-outs are the more common way of detecting a lost frame or ACK because in connectionless networks, given that packets can arrive out-of-sequence often it is not prudent to generate a NAK as soon as a frame of higher sequence number than expected arrives. In the scenario shown in Fig. 3, a cumulative ACK is shown as ACK 3. A cumulative ACK is one that acknowledges all frames prior to the sequence number carried in the ACK. The number carried in the ACK indicates the next expected packet at the receiver. Go-back-N could be imple- 5 Frames 0-4 are retransmitted Timeout ACK 5 ACK 3 5 Frame 4 Frame 3 Frame 2 Frame 1 Frame 0 Frame 4 Frame 3 Frame 2 Frame 1 Frame 0 Frame ACK 3 A B Frames 0-4 are discarded Figure 3:Go-Back-N when an ACK is lost: cumulative ACKs are used here mented with an ACK per frame. In this case, frames 0 and 1 would not have had to be retransmitted if they arrived before the time-out occurred for frame 2. Unfortunately even though frame 2 arrived, since ACK 3 is lost, all frames from 2 have to be retransmitted. The sender maintains a window of size W s frames. After frame 0 is sent, transmitter sends W s – 1 frames. W s is the maximum number of frames that can be outstanding (i.e., unacknowl- edged). Pipelining effect occurs improving the efficiency of the protocol. Upon receiving a NAK (negative ACK), or experiencing a time-out, the sender will retransmit. The sender keeps track of S recent , which lies between S last and ( S last + W s – 1 ) , where S last is the last transmitted and yet unacknowledged; S recent is the last one sent. The receiver maintains a variable R next , which is the sequence number of the next expected frame. Typically, this is the number that the receiver sends in an ACK. Go-Back-N is an example of sliding-window protocol ([1], page 280). The receive window size for a Go-Back-N version of the sliding-window protocol is only 1 frame. It 6 expects a frame with sequence number R next . This is why it drops all frames whose number does not match this value. m The window size at the sender should be less than 2 if m bits are used for the sequence numm ber. If W s = 2 , then a problem could arise. If m = 2 bits and the window size is 4, and frames 0, 1, 2, 3 are sent and received properly, but all the ACKs are lost. Then the sender goes back N and retransmits frame 0. When the receiver receives this frame it is a duplicate, but the receiver m does not know this; it thinks it is the next set! Hence the maximum window size is 2 – 1 . For example, if W s = 3 , then sender sends 0, 1, 2. If all are received properly, but ACK for 0 gets lost, sender will retransmit 0. Receiver is expecting frame 3 and so it will realize this is a duplicate and discard and send back an ACK asking for 3. Eventually as the sender receives ACKs for the duplicates 0, 1, 2, it sent, it will move on to segment 3 and all is well! Negative ACK: If the receiver knows for sure that it did not get a packet that it should have, it will send a NAK. Piggybacking ACKs: ACKs are piggybacked on frames sent in the reverse direction if data flow is bidirectional. This makes the transfer more efficient. Thus the receivers at both ends maintains R next , while the senders maintain S last and S last + W s – 1 . Efficiency [1]: nf If W s ---- ≥ RTT or equivalently, R nf ( nf + na ) W s ---- ≥ 2t prop + --------------------- + t proc (see Fig. 4), R R (13) data will be sent continuously by the sender. When the first ACK arrives, the sender can start over from the top of the window. Remember that W s is the maximum number of outstanding frames (unacknowledged frames) at any instant. If we neglect n a and t proc , then it simplifies to 2Rt prop W s ≥ ------------------ + 1 . nf (14) Noting that 2Rt prop is the delay-bandwidth product, we see the relation between window size and this product. In the absence of errors, the efficiency of the Go-Back-N (GBN) scheme in which the parameters meet (13) 7 1st frame received 0 tprop tprop+nf/R Wth frame received Receiver ... Sender 1st ACK received 0 1 Ws-1 2 2tprop+nf/R+na/R+tproc RTT (Round-trip time) Figure 4:Relation between window size and bandwidth-delay product GBN η0 no = 1 – ----nf (15) In the presence of errors: η GBN nf – n 0 ------------------ 1 – n----0- GBN E [ t total ] nf = -------------------- = ( 1 – P f ) ----------------------------------R 1 + ( Ws – 1 ) Pf (16) Derivation is as follows: Let n t be the number of transmissions required to deliver a frame successfully. For each of the first ( i – 1 ) unsuccessful tries (when n t = i ), W s frames need to be retransmitted. This is 8 because it takes W s t f to receive an ACK for the first frame in that window if W s is sized right as in (13). This is the same assumption as in Stop-and-Wait where we set t out = t 0 . Here again, the delay-BW product appears in the form of t out , which is equivalently the time to emit W s frames. nf t f = ---R GBN E [ t total ] GBN E [ t total ] ∞ = t f 1 + Ws ∑ ( i – 1 ) P [ nt = i ] i=1 ∞ i–1 = tf 1 + Ws ∑ ( i – 1 ) Pf ( 1 – Pf ) i=1 (17) (18) (19) Pf 1 + ( Ws – 1 ) Pf = t f 1 + W s -------------- = t f ----------------------------------- 1 – Pf 1 – Pf Thus, the effective transmission rate for GBN ARQ is R eff 1 – n----0- n f – n0 ( nf – n0 ) nf = -------------------- = ( 1 – P f ) --------------------------------------------- = ( 1 – P f ) ------------------------------------------ R E [ t total ] tf { 1 + ( Ws – 1 ) Pf } { 1 + ( Ws – 1 ) Pf } (20) Efficiency is η 1.3 GBN nf – n 0 ------------------ 1 – n----0- GBN E [ t total ] nf = -------------------- = ( 1 – P f ) ----------------------------------R 1 + ( Ws – 1 ) Pf (21) Selective Repeat ARQ If error rates are high, then Go-back-N becomes inefficient. Selective Repeat ARQ is a scheme in which only the errored frames are retransmitted. This is clearly more efficient. This comes at a cost of more complex receivers. The receiver now maintains a window W r , unlike in Go-back-N where the receive window is only big enough to hold one frame. This is the maximum number of frames that the receiver is willing to receive. Out-of-sequence frames will be stored here. Timers are maintained on each frame at the sender (which is needed also in Go-Back-N ARQ). When a 9 timer expires, only the errored frame is retransmitted. Can use NAKs if sequenced delivery is guaranteed. Also piggybacking can be used. The receive window extends from R next to R next + W r – 1 . The maximum allowable window size is W s = W r = 2 m–1 , i.e., half the sequence number space. Let m = 2 , and the window size at the sender and receiver be 3 each (to see what happens m if W s = W r = 2 – 1 - same as in GBN). If sender sends 0, 1, 2, and all three frames reach the receiver successfully but all ACKs are lost. Then the receiver is expecting frames 3, 0, 1. The sender retransmits 0 when it doesn’t get its ACK. But the receiver thinks it is the next frame 0. So m clearly window sizes of 2 – 1 are too large. To see that the maximum allowable size is 2 m–1 , consider the following. Let the sender send frames 0 to W s – 1 , all of which are received without error, but the ACK for frame 0 is lost. At the receiver R next = W s and receive window stretches to R next + W r – 1 = 2 W s – 1 . If ( 2 W s – 1 ) th frame corresponds to a sequence number of 0, then when the 0th frame is retransmitted by the sender, the receiver will not know it is a duplicate. m Therefore 2 W s – 1 can maximally be 2 – 1 . Or W s is a maximum of 2 m–1 . Example: If m = 2 , and W s is 2. Then sender sends 0 and 1. If both are received but the ACK for 0 is retrans- mitted. R next = 2 and R next + W r – 1 = 3 . Therefore when the sender retransmits 0, receiver knows it is a duplicate, and thus replies with an ACK saying it is expecting frame 2. Sender advances its window and sends 2 and then 3, and so on. Bottom line: cannot have a sequence number repeated in the sender buffer and receiver buffer. In other words, packets waiting in the sender buffer for ACKs should have distinct sequence numbers from the sequence numbers of the expected packets at the receiver. Efficiency [1]: In the absence of errors, it is the maximum possible given headers are needed: SEL η0 no = 1 – ----- (same as in GBN) nf In the presence of errors: 10 (22) η SEL no = ( 1 – P f ) 1 – ----- nf (23) Derivation: Since in Selective repeat ARQ, only the failed frame is retransmitted, we do not need the W s multiplying factor as in (18). SEL E [ t total ] ∞ i – 1 = tf 1 + ∑ ( i – 1 ) ( 1 – Pf ) Pf i=1 Pf SEL E [ t total ] = t f 1 + -------------- 1 – Pf (24) (25) Effective transmission rate is SEL R eff n f – n0 n - = ( 1 – P f ) 1 – ----0- R , and = ------------------SEL nf E [ t total ] (26) n0 = ( 1 – P f ) 1 – ----- nf (27) transmission efficiency is η SEL Compare S&W, Go-Back-N and Selective ARQ. The performance of the first two depend on the delay-bandwidth product. In (6), t out appears, which is the round-trip delay, and in (18), it appears in the equivalent form of W s t f . Whereas in (24), for Selective ARQ, the round-trip delay does not appear because even when an error occurs, the sender can keep transmitting new frames. Hence only t f appears in the term corresponding to retransmissions. Compare the first terms of these three equations, (6), (18) and (24). In (6), it is t 0 , which is a RTT, but in (18) and (24), it is just t f , time to emit one frame, which could be a lot smaller. This for the successful transmission. In GBN, one can keep sending frames, and hence a RTT does not appear in a successful transmission. Same for selective ARQ. Example from [1], page 308: Frames are 1250 bytes including 25 bytes of overhead and ACK frames are 25 bytes. Compare the efficiency of S&W and Go-Back-N if link rate is 1Mbps, t 0 is –4 100ms and bit error rate is 10 . Computing P f using the approximation n f p yields 1! With the 11 exact formulation, P f is 1 – 0.368 . Note here that p is not small enough for this approximation. Efficiency is low at 8.9% even without errors with S&W (because of large delay-BW product) and it drops to 3.3% with errors. With GBN, while efficiency is high without errors (at 98%), it drops dramatically in the presence of errors to 4.9% because the delay-BW product does figure here. W s is 11 frames to keep the pipe full. With selective ARQ, delay-BW product does not come in play at all and so even with losses, efficiency stays high. What are the numbers for selective ARQ? Design problem: Given the worst-case round-trip delay and link rate, can determine W s to m keep the pipe full. Now choose the sequence number field size such that W s = 2 – 1 if GBN is used and 2 m–1 if selective ARQ is used. Should sequence numbers be byte-based or segment- based? Answer: byte-based allows for variable-length frames; does segment-based imply that all frames should be equal in length? Can a combination of the segment sequence number and a length field be used? Choose frame size - optimal size based on increased errors with larger frames but more efficient use of medium. 2. FLOW CONTROL 2.1 Source of the flow control problem When the receiver cannot keep with the arriving data rate, we have a flow control problem as Data source Transmitter Data recipient transmission link Receiver Figure 5:Illustration of flow control problem: if the receiver operates at the same bit rate as the transmitter, then what is the source of the problem? It the Data recipient module runs on a slow processor or is hardware clocked at a rate slower than the transmission link rate but the Data source is executed at the rate of the transmission link, then the buffer at the receiver will overflow causing loss. This is the flow control problem. illustrated in Fig. 5. 12 2.2 Solutions to the flow control problem If the error control problem solution is Stop-and-Wait, then the flow control problem is also Stop-and-Wait. In other words, in a Stop-and-Wait system, the receiver should not return the ACK needed for packet delivery confirmation until the application at the receiver has depleted the frame from the receive buffer. If the error control solution is GBN or Selective repeat ARQ, then the flow control solution can be one of three types: On-Off, Window based, Rate based. The ON-OFF technique is used by the receiver to let the sender to stop sending or start. The OFF signal needs to be sent in advance as the buffer approaches capacity. When should the receiver send the OFF signal? The receiver should have capacity to hold 2 ( R snd – R rcv ) t prop when it sends the OFF signal. R snd is the rate of the sender and R rcv is the rate at which the receiver depletes the buffer. See Fig. 6. This scheme is used in HDLC. Sender Receiver B OFF Bleft Bleft=2T prop(Rsnd – Rrcv) Link rate Rsnd Figure 6:Illustration of when the OFF signal should be sent If R snd is higher than R rcv , the rate at which the receiver is depleting its buffer, the OFF signal should be sent when the space left in the buffer B left = 2 t prop ( R snd – R rcv ) , where t prop is the one-way propagation delay. 13 An RNR (Receiver Not Ready) signal is sent as an OFF signal. If the ARQ scheme is GBN, the sender has a window for packets that are transmitted (waiting to see if they need to be retransmitted). For the GBN scheme, the receiver only needs a window of size 1 (i.e., to hold one frame). But for flow control reasons, it could have a buffer and as the buffer fills up, the receiver can send an OFF signal as shown in Fig. 6. If ON-OFF scheme is combined with Selective repeat ARQ, the size of the buffer at the receiver should adhere to the max limit posed by the Selective repeat scheme, 2 m–1 . Window based scheme: The receiver sends the size of the window that it can accept. It can coexist with GBN or selective repeat ARQ, where an ACK frame from the receiver to sender can carry the receive window size to the sender. The sender then sends a minimum of its sending window size and receive window size. With GBN, remember for ARQ reasons we only need a receive window of size 1. But if the flow control mechanism is window based, the receive winFC dow can be some size W r . We use the FC superscript to differentiate this window from W r FC used at the receiver for the Selective repeat ARQ scheme. The sender can send min ( W s, W r ) frames and meet the constraints of both the ARQ and FC schemes. When window-based FC is combined with Selective repeat ARQ, again an ACK can carry the receive window size available from a flow control perspective. TCP is an example of a protocol that uses a window-based FC scheme. On the error control scheme used by TCP, reference [1] on page 303 states that TCP uses a Selective Repeat ARQ scheme. However, Standard TCP, as implemented in TCP Reno, a common TCP implementation, cumulative ACKs are used. Typically, cumulative ACKs are used in conjunction with Go-Back-N ARQ scheme. However, the congestion control schemes of TCP complicates this issue and on close examination it appears as if only selected segments are retransmitted. If an error is detected by a retransmission time-out, then the congestion control scheme that kicks in makes it appear like Selective Repeat. This is because from a congestion control perspective (nothing to do with EC or FC), it lowers its cwnd to 1 segment. Essentially it retransmits lost packet. When the ACK arrives for this segment, it will indicate a sequence number of the next expected segment (which will be a much later segment if all intermediate segments reached the receiver successfully). So it looks like a selective repeat scheme. If a loss is detected through 3 duplicate ACKs, and fast 14 retransmit/recovery is implemented, then the cwnd is dropped to ssthresh + 3 segments. In this case, does it send lost segment followed by segments it had already sent before, in which case it is Go-Back-N, or does it only retransmit lost segment. Reference [2], on page 312 states that only the missing segment is retransmitted. Also, see the example of Fig. 21.7. After segment 63 is sent (retransmission), the next segment sent is a new segment with sequence number 8961. Segments with sequence numbers 6913 through 8705 are not repeated. This is because this example shows fast retransmit, in which case only one segment is sent. Even without fast retransmit, if segment 63 was sent in response to a time-out, cwnd becomes 1 (in case of time-out); so only one segment can be sent; if ack received acknowledges intermediate segments, it appears like selective repeat. Reference [3] motivates the need for selective ACKs (instead of cumulative ACKs only) as follows: “TCP may experience poor performance when multiple packets are lost from one window of data. With the limited information available from cumulative acknowledgments, a TCP sender can only learn about a single lost packet per round trip time. An aggressive sender could choose to retransmit packets early, but such retransmitted segments may have already been successfully received. A Selective Acknowledgment (SACK) mechanism, combined with a selective repeat retransmission policy, can help to overcome these limitations. The receiving TCP sends back SACK packets to the sender informing the sender of data that has been received. The sender can then retransmit only the missing data segments.” In other words, if within a round, multiple packets are lost, the first one would be detected by three duplicate ACKs, but if a second loss occurred (which is likely because the routers were congested when this round is sent), detection will likely be only through a time-out since three other segments may not get through to cause duplicate ACKs to be generated. This has the effect of cwnd falling to 1 segment and delaying recovery. Hence the SACK option was proposed. With this option TCP’s error control scheme becomes truly selective Repeat. Finally, we consider rate control. The question is whether a rate can be agreed to between the receiver and the sender. The receiver commits to depleting its buffer at that rate and the sender commits to only sending at that rate (or could it be lower?). For end-to-end circuits, we think this is the most suitable flow control mechanism to disallow receivers from arbitrarily cutting off use of the circuit as it could in a window-based scheme. The circuits would be under-utilized if this happens. Rate control has not been demonstrated to any good extent on a working network. In the 15 generic implementation of networking software at end hosts it may be hard to implement because of other tasks executed at these end hosts. Example: in telephony networks, flow control is rate-based because data is depleted at 64Kbps. For data networks, rate based control is not easy. If a low rate is selected, buffer overflows can be avoided with no retransmissions, but then delay will be higher. As rate is increased, some buffer overflows may occur, but overall throughput is higher. Retransmissions for three reasons: (i) link errors (ii) buffer overflows at packet switches inside the network (congestion problem) and (iii) buffer overflows at the receiver (flow control problem). Bertsekas and Gallager and Mischa treat the flow control and congestion problem as one since both occur because of buffer overflows. But in circuit-switched networks the latter does not exist on the user plane and hence I prefer keeping these as separate problems. Cumulative ACKs and Go-back-N: does the use of cumulative ACKs imply that the retransmission scheme is Go-Back-N? The sender could just retransmit the segment indicated in the cumulative ACK, but not “go-back-N” and keep sending new frames. So it appears that a cumulative ACK could coexist with selective repeat. So why SACK then? See reasoning for TCP above. References [1] [2] [3] A. Leon Garcia and I. Widjaja, Communication Networks. McGraw Hill, 2000. W. R. Stevens, TCP/IP Illustrated Vol. 1, Addison-Wesley, 1997. M. Mathis, J. Mahdavi, S. Floyd, A. Romanow, “TCP Selective Acknowledgment Options,” IETF RFC 2018, October 1996. 16