socket
kernel

Kernel Network について

More than 1 year has passed since last update.

はじめに

kernelのネットワークがどのような仕組みになっているのか、気になったので少し調べてみました。
まだ軽くしか調べられていないが、一旦アウトプット。

概要

  • プロセスはソケットを介して通信を行う。
  • ソケットは、ファイルインターフェースを拡張して作られているので、kernelレベルではファイルの利用手順とほぼ同じである

Kernelのネットワークスタックはどのようになっているのか?

ソケットインターフェース

  • プロセス間通信が可能。遠隔のプロセスとの通信も可能
  • ソケットバッファによってデータのコーピー処理を頻繁に発生させない仕組みになっている

  • 通信確立までの流れ

    1. サーバ側がクライアントを受け付けるソケットファイルを作成する(socket()を呼び出す)
    2. 受付用ソケットファイルに名前をつける(bind()を呼び出す)
    3. ソケット・キューを作成する(listen()を呼び出す)
    4. ソケット・キューに入っているクライアントからの接続の最初の1つを受け付ける(accept()を呼び出す)
    5. クライアント側ではソケットファイルを作成する(socket()を呼び出す)
    6. クライアント側からサーバへ接続要求を出す(connect()を呼び出す)
    7. サーバ側で、受付用ソケットファイルとは別に、接続用ソケットファイルを作成する。
    8. 結果、read()やwrite()などのシステムコールを呼び出せるようになる
  • 通信切断時は、close()を呼び出し、切断