banner
ShuWa

ShuWa

是进亦忧,退亦忧。然则何时而乐耶?
twitter

OSIとTCP/IPネットワークモデル

OSI 七層モデル#

OSI の七層モデルは、概念が明確で理論的にも完全ですが、複雑で実用的ではなく、一部の機能が複数の層で重複しています。
物理層:データの物理的な転送、例えばケーブルやネットワークカードの標準です。
データリンク層:データの基本的な形式、転送方法、識別方法の定義、例えばネットワークカードの MAC アドレスです。
ネットワーク層:IP アドレッシングの定義、ルーティング機能の定義、例えば異なるデバイス間のデータ転送です。
トランスポート層:エンドツーエンドのデータ転送の基本機能、例えば TCP、UDP です。
セッション層:アプリケーション間のセッション機能の制御、例えば異なるソフトウェアにデータを配布します。
プレゼンテーション層:データ形式の識別、基本的な圧縮および暗号化機能です。
アプリケーション層:さまざまなアプリケーションソフトウェア、Web アプリケーションを含みます。
image

TCP/IP 四層モデル#

TCP/IP 四層モデルは、現在広く採用されているモデルであり、TCP/IP モデルは OSI 七層モデルの簡略版と見なすことができます。以下の 4 つのレイヤーで構成されています:

  • アプリケーション層
  • トランスポート層
  • ネットワーク層
  • ネットワークインターフェース層
    image

アプリケーション層#

アプリケーション層は、トランスポート層の上にあり、2 つの端末デバイス間でのアプリケーション間の情報交換サービスを提供します。情報交換の形式を定義し、メッセージは次のトランスポート層に渡されます。アプリケーション層のデータユニットはメッセージと呼ばれます。
したがって、アプリケーション層はユーザーにアプリケーション機能を提供することに集中する必要があります。例えば、HTTP、FTP、Telnet、DNS、SMTPなどです。

image

また、アプリケーション層はオペレーティングシステムのユーザーモードで動作し、トランスポート層以下はカーネルモードで動作します。

トランスポート層#

トランスポート層の主な役割は、2 つの端末デバイスプロセス間の通信に汎用のデータ転送サービスを提供することです。アプリケーションプロセスは、このサービスを使用してアプリケーション層のメッセージを送信します。 「汎用の」は、特定のネットワークアプリケーションに対してではなく、複数のアプリケーションが同じトランスポート層サービスを使用できることを意味します。
一般的なトランスポート層プロトコル:

  • TCP(Transmisson Control Protocol、トランスポート制御プロトコル):接続指向信頼性のある **** バイトストリーム転送サービスを提供します。
  • UDP(User Datagram Protocol、ユーザーデータグラムプロトコル):接続レスベストエフォートのデータ転送サービス(データ転送の信頼性は保証されません)を提供します。

ネットワーク層#

ネットワーク層は、パケットスイッチングネットワーク上の異なるホスト間の通信サービスを提供します。データを送信する際、ネットワーク層はトランスポート層またはユーザーデータグラムをパケットやフレームにカプセル化して送信します。TCP/IP アーキテクチャでは、ネットワーク層が IP プロトコルを使用するため、パケットは IP データグラムと呼ばれ、データグラムとも呼ばれます。
ネットワーク層のもう一つの役割は、適切なルートを選択して、ソースホストのトランスポート層から渡されたパケットがネットワーク層内のルーターを介して目的ホストに到達できるようにすることです。
インターネットは、ルーターによって相互接続された多数の異種ネットワークで構成されています。インターネットは、無接続のインターネットプロトコル(Internet Protocol)と多くのルーティングプロトコルを使用するため、インターネットのネットワーク層はインターネット層または IP 層とも呼ばれます。
ネットワーク層の一般的なプロトコル:

  • IP(Internet Protocol、インターネットプロトコル):TCP/IP プロトコルの中で最も重要なプロトコルの 1 つであり、データパケットの形式を定義し、パケットのルーティングとアドレッシングを行い、ネットワークを横断して正しい宛先に到達できるようにします。現在、IP プロトコルは主に 2 つのタイプに分かれています。1 つは過去の IPv4 で、もう 1 つはより新しい IPv6 です。現在、これらの 2 つのプロトコルは両方とも使用されていますが、後者は前者の代替として提案されています。
  • ARP(Address Resolution Protocol、アドレス解決プロトコル):ARP プロトコルは、ネットワーク層アドレスとデータリンク層アドレスの変換を解決します。IP データグラムは物理的に転送される際に、次のホップ(物理的な次の宛先)がどこに行くかを常に知る必要がありますが、IP アドレスは論理アドレスであり、MAC アドレスが物理アドレスです。ARP プロトコルは、IP アドレスを MAC アドレスに変換するためのいくつかの問題を解決します。
  • ICMP(Internet Control Message Protocol、インターネット制御メッセージプロトコル):ネットワークの状態とエラーメッセージを転送するためのプロトコルであり、ネットワークの診断とトラブルシューティングによく使用されます。たとえば、Ping ツールはネットワークの接続性をテストするために ICMP プロトコルを使用します。
  • NAT(Network Address Translation、ネットワークアドレス変換プロトコル):NAT プロトコルは、内部ネットワークから外部ネットワークへのアドレス変換プロセスに使用されます。具体的には、小規模なサブネット(ローカルエリアネットワーク、LAN)では、各ホストが同じ LAN の IP アドレスを使用しますが、LAN の外部であるワイドエリアネットワーク(WAN)では、インターネット全体での LAN の位置を識別するために統一された IP アドレスが必要です。
  • OSPF(Open Shortest Path First、オープン最短経路優先):内部ゲートウェイプロトコル(Interior Gateway Protocol、IGP)の 1 つであり、広く使用されている動的ルーティングプロトコルであり、リンクステートアルゴリズムに基づいており、帯域幅、遅延などのリンクの特性を考慮して最適なパスを選択します。
  • RIP(Routing Information Protocol、ルーティング情報プロトコル):内部ゲートウェイプロトコル(Interior Gateway Protocol、IGP)の 1 つであり、距離ベクトルアルゴリズムに基づいており、ホップ数をメトリックとして使用し、最小のホップ数のパスを最適なパスとして選択します。
  • BGP(Border Gateway Protocol、ボーダーゲートウェイプロトコル):ネットワーク層到達性情報(Network Layer Reachability Information、NLRI)を交換するためのルーティングプロトコルであり、高い柔軟性と拡張性を持っています。

ネットワークインターフェース層#

ネットワークインターフェース層は、データリンク層と物理層の組み合わせと見なすことができます。

  • データリンク層(data link layer)は通常、リンク層(2 つのホスト間のデータ転送は、常にセグメントごとにリンクを介して行われる)とも呼ばれます。データリンク層の役割は、ネットワーク層から受け取った IP データグラムをフレームに組み立て、隣接するノード間のリンクでフレームを送信することです。各フレームにはデータと必要な制御情報(同期情報、アドレス情報、エラー制御など)が含まれます。
  • 物理層の役割は、隣接するコンピュータノード間のビットストリームの透過的な転送を実現し、具体的な転送媒体や物理デバイスの差異をできるだけ隠蔽することです。ネットワークインターフェース層の重要な機能とプロトコルは次の図に示されています:
    image

TCP/IP 四層モデルに基づくソケットネットワークプログラミング#

Linux ネットワークプロトコルスタック#

ネットワークプロトコルスタックの図からわかるように:

  • アプリケーションプログラムは、システムコールを使用してソケットレイヤとデータのやり取りを行います。
  • ソケットレイヤの下にはトランスポート層、ネットワーク層、ネットワークインターフェース層があります。
  • 最下層はネットワークカードドライバとハードウェアネットワークカードです。
    image

受信プロセス#

ネットワークカードは、コンピュータ内のハードウェアであり、ネットワークパケットの受信と送信を専門に担当しています。ネットワークカードがネットワークパケットを受信すると、DMA 技術を使用して指定されたメモリアドレスにネットワークパケットを書き込みます。これはリングバッファと呼ばれる環状バッファです。その後、ネットワークカードはオペレーティングシステムにこのネットワークパケットが到着したことを通知します。

では、オペレーティングシステムにネットワークパケットが到着したことをどのように通知するのでしょうか?

割り込みの発生:ネットワークカードがネットワークパケットを受信するたびに、オペレーティングシステムに割り込みを発生させて通知します。
ただし、これによりオペレーティングシステムが頻繁にネットワークパケットを受信すると、頻繁に割り込みが発生し、オペレーティングシステムの実行効率に影響を与えます。
この問題を解決するために、NAPI メカニズムが採用されており、ネットワークパケットの受信には「割り込みとポーリングの混合」の方法が使用されます。その核心コンセプトは、データの読み取りに中断を使用せず、まずデータ受信のサービスプログラムを中断で起こし、次にデータをポーリングすることです。

NAPI メカニズム?

したがって、ネットワークパケットが到着すると、DMA 技術を使用してネットワークパケットを指定されたメモリアドレスに書き込み、ネットワークカードは CPU にハードウェア割り込みを発生させます。CPU がハードウェア割り込み要求を受け取ると、登録された割り込み処理関数を呼び出します。
ハードウェア割り込み処理関数は次のことを行います:

  • まず、「一時的に割り込みをマスク」する必要があります。これは、メモリにデータが存在することを既に知っていることを示し、次回データパケットが到着した場合にはメモリに直接書き込むようにネットワークカードに通知しないようにするためです。これにより、CPU が連続的に割り込まれることを避け、効率を向上させることができます。
  • 次に、「ソフトウェア割り込み」を発生させ、さきほどマスクした割り込みを復元します。

これで、ハードウェア割り込み処理関数の仕事は完了です。

ソフトウェア割り込み?

カーネル内の ksoftirqd スレッドがソフトウェア割り込みの処理を専門に担当し、ソフトウェア割り込みを受け取るとデータをポーリングして処理します。
ksoftirqd スレッドは、リングバッファから sk_buff という形式でフレームを取得し、ネットワークプロトコルスタックに渡して階層的に処理できるようにします。

ネットワークプロトコルスタック

image
最初に、ネットワークインターフェース層に入り、ここではパケットの妥当性をチェックし、妥当でない場合は破棄し、妥当な場合はパケットの上位プロトコルのタイプ(IPv4 または IPv6 など)を特定し、フレームヘッダとフレームフッタを削除してネットワーク層に渡します。
ネットワーク層では、IP パケットを取り出し、パケットの次のステップを決定します。パケットをローカルに送信する必要があることが確認されると、IP ヘッダから上位プロトコルのタイプ(TCP または UDP など)を取得し、IP ヘッダを削除してトランスポート層に渡します。
トランスポート層では、TCP ヘッダまたは UDP ヘッダを取り出し、4 つの要素(ソース IP、ソースポート、宛先 IP、宛先ポート)を識別子として使用して対応するソケットを見つけ、データをソケットの受信バッファに配置します。
最後に、アプリケーションレイヤープログラムは、ソケットインタフェースを呼び出してカーネルのソケット受信バッファからデータを「コピー」し、アプリケーションのバッファにデータを格納し、ユーザープロセスを起こします。
以上で、ネットワークパケットの受信プロセスが終了しました。また、下の図の左側からネットワークパケットの受信プロセスを見ることができ、右側はその逆のネットワークパケットの送信プロセスです。

ネットワークデータを送信する際、いくつのメモリコピー操作が関与しますか?

1 回目は、データを送信するシステムコールを呼び出すと、カーネルはカーネルモードの sk_buff メモリを割り当て、ユーザーが送信するデータを sk_buff メモリにコピーし、送信バッファに追加します。
2 回目は、TCP 転送プロトコルを使用する場合にのみ発生します。トランスポート層からネットワーク層に入るときに、各 sk_buff は新しいコピーが作成されます。コピーされた sk_buff はネットワーク層に送信され、送信が完了すると解放され、元の sk_buff はトランスポート層に保持されます。これは TCP の信頼性のある転送を実現するためであり、このデータパケットの ACK を受信すると、元の sk_buff が解放されます。
3 回目は、IP 層で sk_buff が MTU よりも大きい場合にのみ発生します。追加の sk_buff が割り当てられ、元の sk_buff が複数の小さな sk_buff にコピーされます。

参考:
小林 coding
JavaGuide

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。