Re: http://lists.samba.org/pipermail/rsync/2001-February/003628.html Some more email was exhanged the last couple days on the subject of a TCP hang between Solaris and Linux: ------------------------------------------------------------------------ > Date: Mon, 26 Feb 2001 12:06:08 -0600 > From: Dave Dykstra <[EMAIL PROTECTED]> > To: "David S. Miller" <[EMAIL PROTECTED]> > Cc: [EMAIL PROTECTED], [EMAIL PROTECTED] > Subject: Re: Linux 2.2.16 through 2.2.18preX TCP hang bug triggered by rsync > > David, > > Regarding the patch you sent us (below) to try to help solve the problem of > Solaris sending acks with a sequence number that was out-of-window: > > We have now completed extensive testing with it and analysis of tcpdumps > and have determined that the patch is working as expected (accepting the > acks) but it isn't enough to work around the state that Solaris gets itself > into; the connection still hangs. It looks like Alexey was right. Linux > is able to make further progress getting data sent to Solaris but it isn't > enough to recover the whole session; the Linux receive window stays at 0 so > I presume the rsync application isn't reading the data because it's waiting > for the Solaris side to complete something. Oddly, every 30 or 60 seconds > after this situation occurs, Linux sends another 2-4 1460 byte packets and > they're acknowledged by Solaris. It seems unlikely that the rsync > application would be sending exact multiples of 1460, but I didn't do a > trace during the hang to see if it was generating extra data for some > reason. > > I have attached the tcpdump in case you're interested. Recall that 'static' > is Linux and 'dynamic' is Solaris. We have added our interpretation on > some of the lines. > > We also have had an initial response from Sun where they recommended > upgrading with a certain patch but that too hasn't solved the problem (the > attached tcpdump is with the Solaris patch in place). > > Thanks for your help and I'll let you know if we do ever get a satisfactory > answer from Sun. > > - Dave Dykstra ------------------------------------------------------------------------ > Date: Tue, 27 Feb 2001 13:13:32 -0600 > From: Dave Dykstra <[EMAIL PROTECTED]> > To: [EMAIL PROTECTED] > Cc: [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], > [EMAIL PROTECTED] > Subject: Re: Linux 2.2.16 through 2.2.18preX TCP hang bug triggered by rsync > > > On Tue, Feb 27, 2001 at 09:51:36PM +0300, [EMAIL PROTECTED] wrote: > > Hello! > > > > > into; the connection still hangs. It looks like Alexey was right. Linux > > > is able to make further progress getting data sent to Solaris but it isn't > > > enough to recover the whole session; the Linux receive window stays at 0 so > > > I presume the rsync application isn't reading the data because it's waiting > > > for the Solaris side to complete something. Oddly, every 30 or 60 seconds > > > after this situation occurs, Linux sends another 2-4 1460 byte packets and > > > they're acknowledged by Solaris. > > > > The situation is rather opposite. Solaris does not enter persist mode (#1) > > and sets SND.NXT to an invalid value (#2) (these are two different problems). > > So, its ACKs are valid only when it retransmits. With changes made > > at Linux side the session does not hang, but becomes clocked by Solaris > > retransmission timer. When Solaris retransmits, we see ACK and send > > to new window. Apparently, if window from linux side is not open > > for tcp timeout, solaris aborts session. > > That makes sense. > > > > I talked to sun engineer; he said they are aware of both these bugs, > > but patch fixing this is still not available. > > I'm glad to hear that it's gotten to the engineer who will be able to make > a difference. Could you please give me his email address? When a patch is > available I'm willing to test it for him. > > > > [ Also, he was suprised with rsync. 8)8) Though transmissions with closed > > window are legal and it would work if solaris was not buggy, > > I have to agree: this application is really stupid, it uses tcp > > in maximally suboptimal way. > > ] > > > > Actually, this place is one the most thin place in tcp protocol. > > Due to obscurity of specifications, most of OSes have bugs here > > (both fatal like solaris and not fatal, but still affecting performance). > > To avoid such problems maintainers of rsync could take care of not holding > > window closed. > > I have added the rsync author to the Cc and will forward your message to > the rsync mailing list. > > > > Moreover, I have seen report on deadlock in rsync itself, > > when both sides stay with zero window forever, because both sides > > want to write. > > I have been closely following rsync for a couple years now and have never > seen a confirmed case of that, so I'm quite skeptical. There have been > numerous cases of triggering OS bugs, however, so I'm not surprised by your > comment about it being the "most thin place" in the tcp protocol. > > Thanks! > > - Dave Dykstra
diff -u --recursive --new-file --exclude=CVS --exclude=.cvsignore ../vanilla/2.2/linux/net/ipv4/tcp_input.c linux/net/ipv4/tcp_input.c --- ../vanilla/2.2/linux/net/ipv4/tcp_input.c Sun Dec 10 16:49:44 2000 +++ linux/net/ipv4/tcp_input.c Thu Feb 1 17:50:39 2001 @@ -5,7 +5,7 @@ * * Implementation of the Transmission Control Protocol(TCP). * - * Version: $Id: tcp_input.c,v 1.164.2.18 2000/12/08 20:29:33 davem Exp $ + * Version: $Id: tcp_input.c,v 1.164.2.19 2001/02/02 01:50:39 davem Exp $ * * Authors: Ross Biro, <[EMAIL PROTECTED]> * Fred N. van Kempen, <[EMAIL PROTECTED]> @@ -246,26 +246,22 @@ } -static int __tcp_sequence(struct tcp_opt *tp, u32 seq, u32 end_seq) -{ - u32 end_window = tp->rcv_wup + tp->rcv_wnd; - - if (tp->rcv_wnd && - after(end_seq, tp->rcv_nxt) && - before(seq, end_window)) - return 1; - if (seq != end_window) - return 0; - return (seq == end_seq); -} - -/* This functions checks to see if the tcp header is actually acceptable. */ -extern __inline__ int tcp_sequence(struct tcp_opt *tp, u32 seq, u32 end_seq) +/* Check segment sequence number for validity. + * + * Segment controls are considered valid, if the segment + * fits to the window after truncation to the window. Acceptability + * of data (and SYN, FIN, of course) is checked separately. + * See tcp_data_queue(), for example. + * + * Also, controls (RST is main one) are accepted using RCV.WUP instead + * of RCV.NXT. Peer still did not advance his SND.UNA when we + * delayed ACK, so that hisSND.UNA<=ourRCV.WUP. + * (borrowed from freebsd) + */ +static inline int tcp_sequence(struct tcp_opt *tp, u32 seq, u32 end_seq) { - if (seq == tp->rcv_nxt) - return (tp->rcv_wnd || (end_seq == seq)); - - return __tcp_sequence(tp, seq, end_seq); + return !before(end_seq, tp->rcv_wup) && + !after(seq, tp->rcv_nxt + tcp_receive_window(tp)); } /* When we get a reset we do this. */ @@ -1415,6 +1411,11 @@ if (TCP_SKB_CB(skb)->seq == tp->rcv_nxt) { /* Ok. In sequence. */ queue_and_out: + if (tcp_receive_window(tp) == 0) + goto out_of_window; + + /* We know it is in window now too. */ + dst_confirm(sk->dst_cache); __skb_queue_tail(&sk->receive_queue, skb); tp->rcv_nxt = TCP_SKB_CB(skb)->end_seq; @@ -1441,6 +1442,7 @@ /* A retransmit, 2nd most common case. Force an imediate ack. */ SOCK_DEBUG(sk, "retransmit received: seq %X\n", TCP_SKB_CB(skb)->seq); tcp_enter_quickack_mode(tp); +out_of_window: kfree_skb(skb); return; } @@ -1453,6 +1455,16 @@ goto queue_and_out; } + + /* Out of window. F.e. zero window probe. + * + * Note: it is highly possible that we may open window and enqueue + * this segment now. However, this will be known only after we queue + * it, which will result in queue full of successive 1 byte BSD + * window probes, it is SWS in fact. So, always reject it and send ACK. + */ + if (!before(TCP_SKB_CB(skb)->seq, tp->rcv_nxt+tcp_receive_window(tp))) + goto out_of_window; /* Ok. This is an out_of_order segment, force an ack. */ tp->delayed_acks++;
18:53:57.739331 eth0 < dynamic.32921 > static.8664: . 67294:67294(0) ack 1639367 win 8760 (DF) 18:53:57.739418 eth0 > static.8664 > dynamic.32921: . 1645207:1646667(1460) ack 67294 win 0 (DF) 18:53:57.739438 eth0 > static.8664 > dynamic.32921: P 1646667:1648127(1460) ack 67294 win 0 (DF) 18:53:57.747477 eth0 > static.8664 > dynamic.32921: . 1648127:1648127(0) ack 67294 win 1460 (DF) 18:53:57.748256 eth0 < dynamic.32921 > static.8664: . 67294:67294(0) ack 1642287 win 5840 (DF) 18:53:57.748323 eth0 < dynamic.32921 > static.8664: . 67294:67294(0) ack 1645207 win 2920 (DF) 18:53:57.748395 eth0 < dynamic.32921 > static.8664: . 67294:67294(0) ack 1648127 win 0 (DF) 18:53:57.748464 eth0 < dynamic.32921 > static.8664: . 67294:67295(1) ack 1648127 win 0 (DF) 18:53:58.008822 eth0 > static.8664 > dynamic.32921: . 1648127:1648127(0) ack 67295 win 1460 (DF) Static acks 67295 win=1460 18:53:58.011149 eth0 < dynamic.32921 > static.8664: P 67295:68464(1169) ack 1648127 win 0 (DF) Dynamic sends 68464 18:53:58.011444 eth0 < dynamic.32921 > static.8664: P 68464:68755(291) ack 1648127 win 0 (DF) Dynamic sends 68755, filling window 18:53:58.018813 eth0 > static.8664 > dynamic.32921: . 1648126:1648126(0) ack 68755 win 0 (DF) static acks 68755, but win=0 18:53:58.020724 eth0 < dynamic.32921 > static.8664: P 68755:69636(881) ack 1648127 win 0 (DF) Dynamic send outside of window 18:53:58.021248 eth0 < dynamic.32921 > static.8664: P 69636:70215(579) ack 1648127 win 0 (DF) Dynamic sends 70215, outside of window 18:53:58.021295 eth0 > static.8664 > dynamic.32921: . 1648127:1648127(0) ack 68755 win 0 (DF) Static acks 68755 18:53:58.021315 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1648127 win 0 (DF) Dynamic acks 1648127 18:53:58.021354 eth0 > static.8664 > dynamic.32921: . 1648127:1648127(0) ack 68755 win 0 (DF) Static acks 68755 win=0 18:53:58.511556 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1648127 win 0 (DF) Dynamic resends 68755:70215, but that's outside the window 18:53:58.878252 eth0 < dynamic.32921 > static.8664: . 68755:68755(0) ack 1648127 win 8760 (DF) 18:53:58.878326 eth0 > static.8664 > dynamic.32921: . 1648127:1649587(1460) ack 68755 win 0 (DF) 18:53:58.878349 eth0 > static.8664 > dynamic.32921: . 1649587:1651047(1460) ack 68755 win 0 (DF) 18:53:58.878369 eth0 > static.8664 > dynamic.32921: P 1651047:1652507(1460) ack 68755 win 0 (DF) 18:53:58.878389 eth0 > static.8664 > dynamic.32921: P 1652507:1653967(1460) ack 68755 win 0 (DF) 18:53:58.878408 eth0 > static.8664 > dynamic.32921: P 1653967:1655427(1460) ack 68755 win 0 (DF) 18:53:58.878428 eth0 > static.8664 > dynamic.32921: P 1655427:1656887(1460) ack 68755 win 0 (DF) 18:53:58.899155 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1649587 win 8760 (DF) 18:53:58.899226 eth0 > static.8664 > dynamic.32921: . 1656887:1656887(0) ack 68755 win 0 (DF) 18:53:58.899218 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1652507 win 8760 (DF) 18:53:58.899263 eth0 > static.8664 > dynamic.32921: . 1656887:1656887(0) ack 68755 win 0 (DF) 18:53:58.899293 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1655427 win 8760 (DF) 18:53:58.899322 eth0 > static.8664 > dynamic.32921: . 1656887:1656887(0) ack 68755 win 0 (DF) 18:53:58.999139 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1656887 win 8760 (DF) 18:53:58.999187 eth0 > static.8664 > dynamic.32921: . 1656887:1656887(0) ack 68755 win 0 (DF) 18:53:59.138821 eth0 > static.8664 > dynamic.32921: . 1648127:1649587(1460) ack 68755 win 0 (DF) 18:53:59.141677 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1656887 win 8760 (DF) 18:53:59.141728 eth0 > static.8664 > dynamic.32921: . 1656887:1656887(0) ack 68755 win 0 (DF) 18:53:59.491549 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1656887 win 8760 (DF) 18:53:59.491667 eth0 > static.8664 > dynamic.32921: . 1656887:1658347(1460) ack 68755 win 0 (DF) 18:53:59.491690 eth0 > static.8664 > dynamic.32921: . 1658347:1659807(1460) ack 68755 win 0 (DF) 18:53:59.495603 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1658347 win 8760 (DF) 18:53:59.495651 eth0 > static.8664 > dynamic.32921: . 1659807:1659807(0) ack 68755 win 0 (DF) 18:53:59.589158 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1659807 win 8760 (DF) 18:53:59.589211 eth0 > static.8664 > dynamic.32921: . 1659807:1659807(0) ack 68755 win 0 (DF) 18:54:00.028844 eth0 > static.8664 > dynamic.32921: . 1656887:1658347(1460) ack 68755 win 0 (DF) 18:54:00.031722 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1659807 win 8760 (DF) 18:54:00.031776 eth0 > static.8664 > dynamic.32921: . 1659807:1659807(0) ack 68755 win 0 (DF) 18:54:01.108840 eth0 > static.8664 > dynamic.32921: . 1656887:1658347(1460) ack 68755 win 0 (DF) 18:54:01.111746 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1659807 win 8760 (DF) 18:54:01.111812 eth0 > static.8664 > dynamic.32921: . 1659807:1659807(0) ack 68755 win 0 (DF) 18:54:01.451563 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1659807 win 8760 (DF) 18:54:01.451689 eth0 > static.8664 > dynamic.32921: P 1659807:1661267(1460) ack 68755 win 0 (DF) 18:54:01.451713 eth0 > static.8664 > dynamic.32921: . 1661267:1662727(1460) ack 68755 win 0 (DF) 18:54:01.455627 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1661267 win 8760 (DF) 18:54:01.455668 eth0 > static.8664 > dynamic.32921: . 1662727:1662727(0) ack 68755 win 0 (DF) 18:54:01.549122 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1662727 win 8760 (DF) 18:54:01.549173 eth0 > static.8664 > dynamic.32921: . 1662727:1662727(0) ack 68755 win 0 (DF) 18:54:03.608849 eth0 > static.8664 > dynamic.32921: P 1659807:1661267(1460) ack 68755 win 0 (DF) 18:54:03.611755 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1662727 win 8760 (DF) 18:54:03.611813 eth0 > static.8664 > dynamic.32921: . 1662727:1662727(0) ack 68755 win 0 (DF) 18:54:05.371648 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1662727 win 8760 (DF) 18:54:05.371768 eth0 > static.8664 > dynamic.32921: P 1662727:1664187(1460) ack 68755 win 0 (DF) 18:54:05.371793 eth0 > static.8664 > dynamic.32921: P 1664187:1665647(1460) ack 68755 win 0 (DF) 18:54:05.375712 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1664187 win 8760 (DF) 18:54:05.375759 eth0 > static.8664 > dynamic.32921: . 1665647:1665647(0) ack 68755 win 0 (DF) 18:54:05.469122 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1665647 win 8760 (DF) 18:54:05.469196 eth0 > static.8664 > dynamic.32921: . 1665647:1665647(0) ack 68755 win 0 (DF) 18:54:09.688833 eth0 > static.8664 > dynamic.32921: P 1662727:1664187(1460) ack 68755 win 0 (DF) 18:54:09.691753 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1665647 win 8760 (DF) 18:54:09.691813 eth0 > static.8664 > dynamic.32921: . 1665647:1665647(0) ack 68755 win 0 (DF) 18:54:13.219371 eth0 B arp who-has static (Broadcast) tell dynamic 18:54:13.219419 eth0 > arp reply static (0:60:b0:ee:6:2e) is-at 0:60:b0:ee:6:2e (8:0:20:a6:bc:8) 18:54:13.222303 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1665647 win 8760 (DF) 18:54:13.222424 eth0 > static.8664 > dynamic.32921: P 1665647:1667107(1460) ack 68755 win 0 (DF) 18:54:13.222446 eth0 > static.8664 > dynamic.32921: P 1667107:1668567(1460) ack 68755 win 0 (DF) 18:54:13.226406 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1667107 win 8760 (DF) 18:54:13.226448 eth0 > static.8664 > dynamic.32921: . 1668567:1668567(0) ack 68755 win 0 (DF) 18:54:13.319106 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1668567 win 8760 (DF) 18:54:13.319152 eth0 > static.8664 > dynamic.32921: . 1668567:1668567(0) ack 68755 win 0 (DF) 18:54:21.858851 eth0 > static.8664 > dynamic.32921: P 1665647:1667107(1460) ack 68755 win 0 (DF) 18:54:21.861820 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1668567 win 8760 (DF) 18:54:21.861881 eth0 > static.8664 > dynamic.32921: . 1668567:1668567(0) ack 68755 win 0 (DF) 18:54:28.931507 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1668567 win 8760 (DF) 18:54:28.931632 eth0 > static.8664 > dynamic.32921: P 1668567:1670027(1460) ack 68755 win 0 (DF) 18:54:28.931657 eth0 > static.8664 > dynamic.32921: P 1670027:1671487(1460) ack 68755 win 0 (DF) 18:54:28.935575 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1670027 win 8760 (DF) 18:54:28.935621 eth0 > static.8664 > dynamic.32921: . 1671487:1671487(0) ack 68755 win 0 (DF) 18:54:29.029093 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1671487 win 8760 (DF) 18:54:29.029142 eth0 > static.8664 > dynamic.32921: . 1671487:1671487(0) ack 68755 win 0 (DF) 18:54:46.208834 eth0 > static.8664 > dynamic.32921: P 1668567:1670027(1460) ack 68755 win 0 (DF) 18:54:46.211803 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1671487 win 8760 (DF) 18:54:46.211864 eth0 > static.8664 > dynamic.32921: . 1671487:1671487(0) ack 68755 win 0 (DF) 18:55:00.351430 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1671487 win 8760 (DF) 18:55:00.351549 eth0 > static.8664 > dynamic.32921: P 1671487:1672947(1460) ack 68755 win 0 (DF) 18:55:00.351574 eth0 > static.8664 > dynamic.32921: P 1672947:1674407(1460) ack 68755 win 0 (DF) 18:55:00.355486 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1672947 win 8760 (DF) 18:55:00.355534 eth0 > static.8664 > dynamic.32921: . 1674407:1674407(0) ack 68755 win 0 (DF) 18:55:00.448980 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1674407 win 8760 (DF) 18:55:00.449033 eth0 > static.8664 > dynamic.32921: . 1674407:1674407(0) ack 68755 win 0 (DF) 18:55:34.908842 eth0 > static.8664 > dynamic.32921: P 1671487:1672947(1460) ack 68755 win 0 (DF) 18:55:34.911810 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1674407 win 8760 (DF) 18:55:34.911872 eth0 > static.8664 > dynamic.32921: . 1674407:1674407(0) ack 68755 win 0 (DF) 18:56:00.351256 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1674407 win 8760 (DF) 18:56:00.351396 eth0 > static.8664 > dynamic.32921: P 1674407:1675867(1460) ack 68755 win 0 (DF) 18:56:00.351423 eth0 > static.8664 > dynamic.32921: P 1675867:1677327(1460) ack 68755 win 0 (DF) 18:56:00.355334 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1675867 win 8760 (DF) 18:56:00.355379 eth0 > static.8664 > dynamic.32921: . 1677327:1677327(0) ack 68755 win 0 (DF) 18:56:00.448813 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1677327 win 8760 (DF) 18:56:00.448868 eth0 > static.8664 > dynamic.32921: . 1677327:1677327(0) ack 68755 win 0 (DF) 18:57:00.351088 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1677327 win 8760 (DF) 18:57:00.351225 eth0 > static.8664 > dynamic.32921: P 1677327:1678787(1460) ack 68755 win 0 (DF) 18:57:00.351251 eth0 > static.8664 > dynamic.32921: P 1678787:1680247(1460) ack 68755 win 0 (DF) 18:57:00.351272 eth0 > static.8664 > dynamic.32921: P 1680247:1681707(1460) ack 68755 win 0 (DF) 18:57:00.368799 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1680247 win 8760 (DF) 18:57:00.368852 eth0 > static.8664 > dynamic.32921: . 1681707:1681707(0) ack 68755 win 0 (DF) 18:57:00.468619 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1681707 win 8760 (DF) 18:57:00.468677 eth0 > static.8664 > dynamic.32921: . 1681707:1681707(0) ack 68755 win 0 (DF) 18:58:00.350921 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1681707 win 8760 (DF) 18:58:00.351058 eth0 > static.8664 > dynamic.32921: P 1681707:1683167(1460) ack 68755 win 0 (DF) 18:58:00.351085 eth0 > static.8664 > dynamic.32921: P 1683167:1684627(1460) ack 68755 win 0 (DF) 18:58:00.351105 eth0 > static.8664 > dynamic.32921: P 1684627:1686087(1460) ack 68755 win 0 (DF) 18:58:00.368619 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1684627 win 8760 (DF) 18:58:00.368675 eth0 > static.8664 > dynamic.32921: . 1686087:1686087(0) ack 68755 win 0 (DF) 18:58:00.468459 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1686087 win 8760 (DF) 18:58:00.468518 eth0 > static.8664 > dynamic.32921: . 1686087:1686087(0) ack 68755 win 0 (DF) 18:59:00.350736 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1686087 win 8760 (DF) 18:59:00.350872 eth0 > static.8664 > dynamic.32921: P 1686087:1687547(1460) ack 68755 win 0 (DF) 18:59:00.350899 eth0 > static.8664 > dynamic.32921: P 1687547:1689007(1460) ack 68755 win 0 (DF) 18:59:00.350920 eth0 > static.8664 > dynamic.32921: P 1689007:1690467(1460) ack 68755 win 0 (DF) 18:59:00.368558 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1689007 win 8760 (DF) 18:59:00.368608 eth0 > static.8664 > dynamic.32921: . 1690467:1690467(0) ack 68755 win 0 (DF) 18:59:00.468273 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1690467 win 8760 (DF) 18:59:00.468327 eth0 > static.8664 > dynamic.32921: . 1690467:1690467(0) ack 68755 win 0 (DF) 19:00:00.350594 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1690467 win 8760 (DF) 19:00:00.350761 eth0 > static.8664 > dynamic.32921: P 1690467:1691927(1460) ack 68755 win 0 (DF) 19:00:00.350789 eth0 > static.8664 > dynamic.32921: P 1691927:1693387(1460) ack 68755 win 0 (DF) 19:00:00.350812 eth0 > static.8664 > dynamic.32921: P 1693387:1694847(1460) ack 68755 win 0 (DF) 19:00:00.368271 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1693387 win 8760 (DF) 19:00:00.368322 eth0 > static.8664 > dynamic.32921: . 1694847:1694847(0) ack 68755 win 0 (DF) 19:00:00.468106 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1694847 win 8760 (DF) 19:00:00.468159 eth0 > static.8664 > dynamic.32921: . 1694847:1694847(0) ack 68755 win 0 (DF) 19:01:00.350403 eth0 < dynamic.32921 > static.8664: . 68755:70215(1460) ack 1694847 win 8760 (DF) 19:01:00.350569 eth0 > static.8664 > dynamic.32921: P 1694847:1696307(1460) ack 68755 win 0 (DF) 19:01:00.350596 eth0 > static.8664 > dynamic.32921: P 1696307:1697767(1460) ack 68755 win 0 (DF) 19:01:00.350617 eth0 > static.8664 > dynamic.32921: P 1697767:1699227(1460) ack 68755 win 0 (DF) 19:01:00.350639 eth0 > static.8664 > dynamic.32921: P 1699227:1700687(1460) ack 68755 win 0 (DF) 19:01:00.368108 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1697767 win 8760 (DF) 19:01:00.368182 eth0 > static.8664 > dynamic.32921: . 1700687:1700687(0) ack 68755 win 0 (DF) 19:01:00.368173 eth0 < dynamic.32921 > static.8664: . 70215:70215(0) ack 1700687 win 8760 (DF) 019:01:00.368222 eth0 > static.8664 > dynamic.32921: . 1700687:1700687(0) ack 68755 win 0 (DF) 19:02:05.398817 eth0 > arp who-has dynamic tell static (0:60:b0:ee:6:2e) 19:02:05.399276 eth0 < arp reply dynamic is-at 8:0:20:a6:bc:8 (0:60:b0:ee:6:2e) 19:02:17.192157 eth0 < dynamic.32927 > static.9016: S 1156788666:1156788666(0) win 8760 <mss 1460> (DF) 19:02:17.192243 eth0 > static.9016 > dynamic.32927: R 0:0(0) ack 1156788667 win 0