Subject: Re: TCP keepalives ignored by kernel when the contain timestamps

From: Charles Bearden <[email-masked]>
Date: Fri, 10 Jun 2011 13:00:02 -0500

On 06/10/2011 11:54 AM, Eric Dumazet wrote:
> Le vendredi 10 juin 2011 à 11:39 -0500, Charles Bearden a écrit :
>> On 06/10/2011 11:17 AM, Eric Dumazet wrote:
>>> Le vendredi 10 juin 2011 à 11:07 -0500, Charles Bearden a écrit :
>>>
>>>> You are correct: the checksums in the keepalives are broken, though they are
>>>> correct in the other segments from the Win2008 server. I have updated the pastes
>>>> linked to above with 'tcpdump -v' output. I apologize for missing that problem
>>>> the first time around.
>>>
>>> Hmm, maybe its OK : If checksums are offloaded to NIC, tcpdump 'lies'
>>> telling checksum is not OK, since tcpdump get a copy of the packet
>>> before being handled by the NIC.
>>>
>>> You should take a tcpdump on the receiving machine (the machine that
>>> apparently doesnt react to the keepalive probes)
>>
>> I should have made this clear before: these dumps were captured on the machine
>> that is ignoring the keepalives ("Ubuntu.host" in the dumps) from the other host
>> ("Win200[38].host" in the dumps). If I understand tcp checksum offloading
>> correctly, it wouldn't play a role here.
>>
>
> OK, thanks.
>
> I am curious, could you check the payload byte included in the keepalive
> probes has the value of last sent byte on the session ?
>
> (linux send keepalive probes with no data, so implementing this
> 'feature' would need to keep track of this value in tcp socket)

Each keepalive from the Win2008 machine has a 1-byte payload 0x00. The last byte 
of the last packet with a payload before that from the Win2008 host (at 
14:40:18.166394 in the paste) is also 0x00. Is that what you were asking about?