|トップページへLinuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。ネットワーク古いUNIXは、単純なプロセス間通信の仕組みしか提供していませんでした。ソケットは、それに代わる柔軟性に富んだプロセス間通信インターフェイスとして登場しました。通信プロトコルとしては、TCP/IPが最も一般的に利用されています。UNIXに端を発するこのネットワークの仕組みは、現在ではほとんどのOSで採用されています。ソケットソケットは、任意のプロセス間での通信を可能とします。下位層にさまざまな通信プロトコルを定義可能であり、遠隔ホスト上のプロセスとも通信できます。Linuxカーネルでは、ソケットインターフェイスはカーネル内に実装されています(ライブラリとして実装されているOSもあります)。ソケットが管理する送受信データは、ソケットバッファと呼ばれる仕組みで管理しています。処理機構間でデータのやり取りを単純に実装すると、CPU上ではデータのコピーが何度も発生しがちですが、ソケットバッファは、プロトコル処理でデータのコピーを発生させないように考慮した作りになっています(機能的には、BSDのmbufと呼ばれるものに相当)。以下に述べるTCP/IPプロトコルスタックの送信処理では、TCPヘッダー生成、IPヘッダー生成、イーサネットヘッダー生成において、既存のソケットバッファに対してヘッダー部を簡単に追加できます。データコピーを抑制するための仕組みとして、ソケットバッファのデータ部を共有する仕組みも提供しています。これは、TCPの再送処理などで用いられています。メモリ上の任意のページをソケットバッファのデータとしても登録でき、ファイルシステムなどから送り出すデータをソケットバッファ内にコピーすることなく、ネットワークに送り出すことが可能です。ソケットインターフェイス」で、その実装を説明します。TCP/IPプロトコルスタックBSDの実装をベースとしているOSが多い中、Linuxカーネルは完全に新規にTCP/IPプロトコルスタックを実装しています(図0-7)。Vが採用したSTREAMSなどの汎用機構は使わず、ストレートな実装を採用しています。イーサネットなどの物理デバイスを制御するデバイスドライバ上にIPプロトコルドライバを置き、その上にTCPプロトコルドライバやUDPプロトコルドライバを配置しています。それに加え、Linuxカーネル2.6では、SCTPプロトコルも提供されるようになりました。TCP/IPプロトコルスタック階層LinuxカーネルのTCP/IPプロトコルスタックは、積極的に遅延処理を用いることで最大限のスループットを得ています。マルチプロセッサ構成時に実行並列度が向上するような、さまざまな工夫がなされています。Linuxカーネルは、USAGIチームの活躍により、完成度の高いIPv6スタックも備えています。実装面から見た場合、基本的な構造はIPv4スタックとほぼ同じです。Linux搭載マシンをファイアウォールやロードバランサとして利用可能です。TCP輻輳制御」にわたり、TCP/IPプロトコルスタックを実現するための実装を見ていきます。