LinuxのTCP / IPバッファリングに関する質問

LinuxのTCP / IPバッファリングに関する質問

私はLinuxでパケット転送の一部としてTCP / IPで使用されているバッファを見つけようとしました。読むほど、私は混乱します。以下に私の問題があります。誰かが私が理解するのを助けることができますか?

1) ドライバキューは、TCPの受信バッファと送信バッファと同様に、記述子がskbsを指すリングバッファとして実装されていますか?そうでない場合、TCPの受信/送信バッファはいつパケット転送に表示されますか?

2)TCP接続バックログキューは受け入れ/受信キューとは全く異なりますか?バックログキューはパケット転送のどこに適していますか?バックログキューは保留中の接続用のものであることを理解してください。

3)各ソケットにはTCP受信/送信バッファからデータを転送するための別々のバッファがありますか?

4)着信接続の正しいプロセスは何ですか? NIC - >カーネルリングバッファ(skb) - > IPスタック - > TCP受け入れ/受信バッファ - > Qdiscレイヤ - >接続用のソケットバッファ。

ベストアンサー1

通常、ネットワークドライバには独自のキューがあり、Linuxではパケットがsk_buffに格納され、キューに入ります。これは、カーネルパケット処理に関する限り、最も重要な構造です。このバッファ(sk_buff)には、現在TCP、IPv4 / IPv6などのヘッダへのポインタが含まれています。

TCPバックログは、TCPステータスを処理し、再組み立てするパケットをバッファリングするstruct sockによって処理されます。

一般に、最も重要な構造はsk_bufとsockであると言いたいと思います。カーネルのソースコードに加えて、このリンクをチェックするのが役立ちます。

https://ops.tips/blog/how-linux-tcp-introspection/

http://veithen.io/2014/01/01/how-tcp-backlog-works-in-linux.html

それがあなたに役立つことを願っています

おすすめ記事