This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RedBoot sends continuous ACKS in TIME_WAIT state.



Following __tcp_close() on a socket, the RedBoot TCP stack
exchanges a continuous stream of ACKs with my Linux box.  The
RedBoot socket is in the TIME_WAIT state.  Do we really want to
send out ACKs in TIME_WAIT state?

The socket has a 120000 tick timer set (I presume a 2 minute
2MSL value).  But we're so busy sending ACKs that the system time
never advances.

The sequence of events:

 No. Time        Source     Destination   Protocol Info
   1 0.000000    10.0.0.2     10.0.0.5      TCP      1511 > 9000 [SYN] Seq=3272446793 Ack=0 Win=32120 Len=0
   2 0.000795    10.0.0.5     10.0.0.2      TCP      9000 > 1511 [SYN, ACK] Seq=0 Ack=3272446794 Win=1460 Len=0
   3 0.000878    10.0.0.2     10.0.0.5      TCP      1511 > 9000 [ACK] Seq=3272446794 Ack=1 Win=32120 Len=0
   4 0.011692    10.0.0.5     10.0.0.2      TCP      9000 > 1511 [PSH, ACK] Seq=1 Ack=3272446794 Win=1460 Len=10
   5 0.011763    10.0.0.2     10.0.0.5      TCP      1511 > 9000 [ACK] Seq=3272446794 Ack=11 Win=32120 Len=0
   6 2.285735    10.0.0.2     10.0.0.5      TCP      1511 > 9000 [PSH, ACK] Seq=3272446794 Ack=11 Win=32120 Len=6
   7 2.286991    10.0.0.5     10.0.0.2      TCP      9000 > 1511 [ACK] Seq=11 Ack=3272446800 Win=1460 Len=0
   8 3.303892    10.0.0.5     10.0.0.2      TCP      9000 > 1511 [FIN, ACK] Seq=11 Ack=3272446800 Win=1460 Len=0
   9 3.303974    10.0.0.2     10.0.0.5      TCP      1511 > 9000 [ACK] Seq=3272446800 Ack=12 Win=32120 Len=0
  10 3.304184    10.0.0.2     10.0.0.5      TCP      1511 > 9000 [FIN, ACK] Seq=3272446800 Ack=12 Win=32120 Len=0

Linux should be in the LAST_ACK state, and isn't supposed to
send anything in response to the next ACK.

  11 3.318369    10.0.0.5     10.0.0.2      TCP      9000 > 1511 [ACK] Seq=11 Ack=3272446801 Win=1460 Len=0

RedBoot stack is in the TIME_WAIT state.

Linux ACKs the ACK (why?)

  12 3.318424    10.0.0.2     10.0.0.5      TCP      1511 > 9000 [ACK] Seq=3272446801 Ack=12 Win=32120 Len=0
  13 3.319083    10.0.0.5     10.0.0.2      TCP      9000 > 1511 [ACK] Seq=11 Ack=3272446801 Win=1460 Len=0
  14 3.319116    10.0.0.2     10.0.0.5      TCP      1511 > 9000 [ACK] Seq=3272446801 Ack=12 Win=32120 Len=0
  15 3.319754    10.0.0.5     10.0.0.2      TCP      9000 > 1511 [ACK] Seq=11 Ack=3272446801 Win=1460 Len=0

This continues as fast as they can send ACKs back and forth.

I don't understand why the Linux stack is ACKing ACKs, but
there's not much I can do about that. Does RedBoot really need
to send ACKs in reponse to received ACKs while in the TIME_WAIT
state?

-- 
Grant Edwards
grante@visi.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]