Network Stack
とは?
ネットワークI/O を実現するために必要な要素群
NIC, カーネルの NIC ドライバ、カーネルの TCP/IP スタック、ソケット等
パケット送受信、パケットバッファ管理、プロトコル処理などを含む
https://speakerdeck.com/yuukit/linux-network-performance-improvement-at-hatena?slide=14
1. NIC がパケットを受信し、Linux Kenel に送信する
2. Linux Kernel は パケット に対して プロトコル処理 を行う
TCP/IP のパケットヘッダ解析、チェックサム計算など
3. アプリケーションプロセスは、システムコールでそれを読み取る
code:text
+-----+ +--------+ +---------+
| NIC | -> | Kernel | -> | Process |
+-----+ +--------+ +---------+
ネットワークにアタッチされたコンピュータには、ローカルホスト外にTCP/IPパケットを送出するために、何らかのルーティングの機能が必要になる
ほとんどのネットワーク環境はとてもシンプルで、パケット送出には2つのオプションしかないため、大抵非常に単純なものになる
アーキテクチャ
table:architecture
層 空間
Application layer User space
System call interface Kernel space
Protocol agnostic interface Kernel space
Network protocols Kernel space
Device agnostic interface Kernel space
Device drivers Kernel space
The Linux Kernel: ネットワーク
Linux ネットワーク・スタックの徹底調査 - IBM
「はてなにおけるLinuxネットワークスタックパフォーマンス改善」
https://qiita.com/IK_PE/items/4d868e8940885f46e0da
An introduction to Linux network routing | Opensource.com
マルチコアとネットワークスタックの高速化技法