Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Jun 2006 09:58:40 +0800
From:      Blue <Susan.Lan@zyxel.com.tw>
To:        freebsd-net@freebsd.org
Subject:   [freeBSD-6.1RELEASE] wonderings about function tcp_input()
Message-ID:  <449604D0.8090701@zyxel.com.tw>

next in thread | raw e-mail | index | archive | help
Hi, all:

  I have a question about line 1765 to 1776 in tcp_input():

    /*
     * If the ACK bit is off:  if in SYN-RECEIVED state or SENDSYN
     * flag is on (half-synchronized state), then queue data for
     * later processing; else drop segment and return.
     */
    if ((thflags & TH_ACK) == 0) {
        if (tp->t_state == TCPS_SYN_RECEIVED ||
            (tp->t_flags & TF_NEEDSYN))
            goto step6;
        else
            goto drop;
    }

My question is: if we are currently in TCPS_SYN_RECEIVED state, why does 
a segment without ACK bother? Why we need to store the segment and 
process it? Without considering T/TCP, the code should be:

if ((thflags & TH_ACK) == 0) {
    goto drop;
}

Best regards,

blue





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?449604D0.8090701>