lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [lwip-users] TCP not sending initial ACK


From: Pettinato, Jim
Subject: RE: [lwip-users] TCP not sending initial ACK
Date: Thu, 27 Aug 2009 13:20:51 -0400

 
Hello Chuck,
 
The lwIP device is the reciever in this connection, correct? It is implied but not stated, so I wanted to confirm.
 
Could it be simply that the delayed ACK mechanism is the source of your difficulty? Have you verified your TCP timers are firing at least approximately as expected?
 
Is the first packet a full TCP segment's worth of data, or smaller? If a full segment, are you perhaps not calling tcp_recvd() for the first packet received in the app's recv() callback? What do you have #defined for TCP_WND? I would think that the server should go ahead and send additional data in spite of not seeing an immediate ACK response to the first packet, it should not time out... unless of course the receive window would become zero after one packet.
 
Hope this helps,
 
- Jim
 
__
 

James M. Pettinato, Jr.

Software Engineer

E: jim.pettinato@fmcti.com | P: 814 898 5250


FMC Technologies Measurement Solutions Inc.
1602 Wagner Avenue | Erie PA | 16510 USA
Phone: 814 898 5000 | Fax: 814 899-3414
www.fmctechnologies.com

 
 


From: address@hidden [mailto:address@hidden On Behalf Of Chuck Kuecker
Sent: Thursday, August 27, 2009 11:34 AM
To: Mailing list for lwIP users
Subject: RE: [lwip-users] TCP not sending initial ACK

I noticed the 1460 length coming up often. By changing TCP_MSS and TCP_WND, I get different behavior, but can’t seem to reliably get that first packet to ACK.

 

Some combinations of settings produce patterns of resent packets, some produce a clean transfer all the way to the end with no retransmits. None of them so far fixes the original problem.

 

I suppose I could edit off the header from the resent packet, but that seems like a nasty hack, and risky if the HTTP header ever changes.

 


From: address@hidden [mailto:address@hidden On Behalf Of JM
Sent: Thursday, August 27, 2009 10:20 AM
To: Mailing list for lwIP users
Subject: RE: [lwip-users] TCP not sending initial ACK

 

There isn't much out there that describes these settings in good detail.  However, TCP_MSS is simply the maximum amount of data that lwIP will Rx/Tx per packet.  This is data payload only, not including headers, etc.  I believe anything over 1460 is not possible since this is the maximum allowed (if I'm wrong someone please correct this).  I don't believe it has to be a power of 2.  Often, on my streaming connection, I'll get some amount of data per packet that is about 700 bytes.

--- On Thu, 8/27/09, Chuck Kuecker <address@hidden> wrote:


From: Chuck Kuecker <address@hidden>
Subject: RE: [lwip-users] TCP not sending initial ACK
To: "Mailing list for lwIP users" <address@hidden>
Date: Thursday, August 27, 2009, 10:46 AM

I’ve been playing with the TCP options in lwipopts.h. Changing the value of TCP_MSS seems to have an effect on whether or not the initial packet I receive gets ACKed.

 

Is there a tutorial somewhere about what these settings do? I originally had TCP_MSS set to 1500. Is this supposed to be a power of 2?

 


From: address@hidden [mailto:address@hidden On Behalf Of JM
Sent: Thursday, August 27, 2009 6:07 AM
To: Mailing list for lwIP users
Subject: RE: [lwip-users] TCP not sending initial ACK

 

I'd try a switch anyway, although it's unlikely to fix your problem, but it's easy enough to try.  I have not yet tried switching my micro to half duplex, so I can't say if that fixes the hub issue. 

I will say however that while I was trying to determine what was wrong, the most random things would drastically change how well or bad it worked.  Enabling certain sections of debug, changing pbuf sizes, and even what server I was connecting to.  My assumption is it was very sensitive to timing.

Then again, you said only one packet fails, then it's ok.  In my case, things were ok then communications completely broke down.  At any rate, I wish you luck. 

--- On Wed, 8/26/09, Chuck Kuecker <address@hidden> wrote:


From: Chuck Kuecker <address@hidden>
Subject: RE: [lwip-users] TCP not sending initial ACK
To: "Mailing list for lwIP users" <address@hidden>
Date: Wednesday, August 26, 2009, 4:02 PM

Premature celebration. I changed the processor’s settings to half duplex, and have the identical results. It reliably does not ACK the first packet of the download.

 

I’ve been using the hub for months now, and this is the first time it’s been suspect.

 

There has to be something different about how I handle TCP reception in this part of my code as compared to the other section, where I do TCP reception flawlessly, always. I’ve just got to find it.

 

Chuck

 


From: address@hidden [mailto:address@hidden On Behalf Of JM
Sent: Wednesday, August 26, 2009 12:03 PM
To: Mailing list for lwIP users
Subject: RE: [lwip-users] TCP not sending initial ACK

 

It only took me 3 -4 weeks to figure this out, but if you're on a hub, try a switch.  Apparently if your micro is in full duplex mode, a hub is a no-go.  I'm using the LM driver and it works great for receiving lots of data, anyway. 

Take a look at the "Identification" field in the IP header for all packets going one direction.  They should be sequential and incrementing.  If there's a gap in the sequence, that means Wireshark isn't displaying a packet that was sent, either because your hardware or OS discarded it.

I haven't tried half-duplex yet with the hub again.  I'm assuming this would also fix your problem.

--- On Wed, 8/26/09, Chuck Kuecker <address@hidden> wrote:


From: Chuck Kuecker <address@hidden>
Subject: RE: [lwip-users] TCP not sending initial ACK
To: "Mailing list for lwIP users" <address@hidden>
Date: Wednesday, August 26, 2009, 11:54 AM

No, the LWIP timers are called from the main timer tick, and there are
no other threads. This is how LWIP is set up for the Luminary driver
library I am using, and it has always worked before.

Wireshark shows no defective packets.

Chuck

-----Original Message-----
From: address@hidden
[mailto:address@hidden On
Behalf Of address@hidden
Sent: Wednesday, August 26, 2009 10:34 AM
To: Mailing list for lwIP users
Subject: Re: [lwip-users] TCP not sending initial ACK

Chuck Kuecker wrote:
>
> I've tried changing the frequency of LWIP interrupt handler calls,
> both greatly slowing and speeding them up, with no apparent change in
> behavior.
>
What exactly do you mean with "interrupt handler calls"? The timers?
They should *not* be called from an interrupt level: the core code of
lwIP may only be accessed from one context at a time!

If you obeyed this rule and still have problems, have a look at
wireshark packet traces and see if it reports errors in a packet. Also,
have a look at the stats (turn them on in lwipopts.h if not already
done) and find out whether there are packets dropped.

Simon


_______________________________________________
lwip-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/lwip-users


_______________________________________________
lwip-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/lwip-users

 


-----Inline Attachment Follows-----

_______________________________________________
lwip-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/lwip-users

 


-----Inline Attachment Follows-----

_______________________________________________
lwip-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/lwip-users

 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]