Skip to content
  • Alexander Duyck's avatar
    c31b70c9
    tcp: Add logic to check for SYN w/ data in tcp_simple_retransmit · c31b70c9
    Alexander Duyck authored
    
    
    There are cases where a fastopen SYN may trigger either a ICMP_TOOBIG
    message in the case of IPv6 or a fragmentation request in the case of
    IPv4. This results in the socket stalling for a second or more as it does
    not respond to the message by retransmitting the SYN frame.
    
    Normally a SYN frame should not be able to trigger a ICMP_TOOBIG or
    ICMP_FRAG_NEEDED however in the case of fastopen we can have a frame that
    makes use of the entire MSS. In the case of fastopen it does, and an
    additional complication is that the retransmit queue doesn't contain the
    original frames. As a result when tcp_simple_retransmit is called and
    walks the list of frames in the queue it may not mark the frames as lost
    because both the SYN and the data packet each individually are smaller than
    the MSS size after the adjustment. This results in the socket being stalled
    until the retransmit timer kicks in and forces the SYN frame out again
    without the data attached.
    
    In order to resolve this we can reduce the MSS the packets are compared
    to in tcp_simple_retransmit to -1 for cases where we are still in the
    TCP_SYN_SENT state for a fastopen socket. Doing this we will mark all of
    the packets related to the fastopen SYN as lost.
    
    Signed-off-by: default avatarAlexander Duyck <alexanderduyck@fb.com>
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
    Link: https://lore.kernel.org/r/160780498125.3272.15437756269539236825.stgit@localhost.localdomain
    
    
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    c31b70c9
    tcp: Add logic to check for SYN w/ data in tcp_simple_retransmit
    Alexander Duyck authored
    
    
    There are cases where a fastopen SYN may trigger either a ICMP_TOOBIG
    message in the case of IPv6 or a fragmentation request in the case of
    IPv4. This results in the socket stalling for a second or more as it does
    not respond to the message by retransmitting the SYN frame.
    
    Normally a SYN frame should not be able to trigger a ICMP_TOOBIG or
    ICMP_FRAG_NEEDED however in the case of fastopen we can have a frame that
    makes use of the entire MSS. In the case of fastopen it does, and an
    additional complication is that the retransmit queue doesn't contain the
    original frames. As a result when tcp_simple_retransmit is called and
    walks the list of frames in the queue it may not mark the frames as lost
    because both the SYN and the data packet each individually are smaller than
    the MSS size after the adjustment. This results in the socket being stalled
    until the retransmit timer kicks in and forces the SYN frame out again
    without the data attached.
    
    In order to resolve this we can reduce the MSS the packets are compared
    to in tcp_simple_retransmit to -1 for cases where we are still in the
    TCP_SYN_SENT state for a fastopen socket. Doing this we will mark all of
    the packets related to the fastopen SYN as lost.
    
    Signed-off-by: default avatarAlexander Duyck <alexanderduyck@fb.com>
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
    Link: https://lore.kernel.org/r/160780498125.3272.15437756269539236825.stgit@localhost.localdomain
    
    
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Loading