カーネル TCP/IP 実装 - 承認キュー情報

カーネル TCP/IP 実装 - 承認キュー情報

私は最近Linuxカーネル(バージョン4.4)のTCP / IP実装について学んでいますが、受け入れキューについては非常に混乱しています。私はstruct inet_connection_sock次のキューがあることを知っています。キューを受け入れる:

struct inet_connection_sock {
    ...
    /* @icsk_accept_queue:     FIFO of established children */
    struct request_sock_queue icsk_accept_queue;
    ...
}

そしてその中にメンバーがあるのにqlen、キューの長さを表すのに使われるようです。

LISTENソケットがSYNパケットを受信すると、関数内tcp_conn_requestinet_csk_reqsk_queue_hash_addこの呼び出しは、新しく作成されたNEW_SYN_RECVソックスをehashテーブルに入れます(ではありませんicsk_accept_queue)。しかし今inet_csk_reqsk_queue_hash_addinet_csk_reqsk_queue_addedicsk_accept_queue.len私の質問はqlen何も挿入されていないので、なぜ増加するのですかicsk_accept_queue

さらに重要なのは、tcp_conn_requestまた〜として知られていますinet_csk_reqsk_queue_addクイックオープンソックス(有効になっている場合)を追加しますicsk_accept_queueが、この関数は最終的に増加しますsk.sk_ack_backlog(呼び出しによって)。sk_acceptq_added)代わりにicsk_accept_queue.qlen…私が何を見逃しているのでしょうか?

ベストアンサー1

おすすめ記事