ホームページ  >  記事  >  システムチュートリアル  >  オペレーティング システムの理解を覆す - Linux ディストリビューションの概要

オペレーティング システムの理解を覆す - Linux ディストリビューションの概要

王林
王林転載
2024-02-13 21:15:02531ブラウズ

あなたが上級プログラマーであろうと初心者であろうと、Windows または macOS ユーザーであっても、コンピューターのオペレーティング システムについてある程度の知識があるのであれば、Linux という名前は間違いなく馴染みがあるでしょう。ただし、Linux オペレーティング システムの表面をなぞっただけかもしれません。実際、多くの Linux ディストリビューションがあり、それぞれに独自の機能とアプリケーション シナリオがあります。以下では、いくつかの一般的な Linux ディストリビューションを紹介し、オペレーティング システムの従来の理解を覆すのに役立ちます。

複数のデバイスがネットワークを介して相互に通信できるようにし、ネットワーク相互接続におけるさまざまなデバイスの互換性の問題を解決するために、国際標準化機構はオープン システム相互接続参照モデル (オープン システム相互接続参照モデル) を策定しました。 OSIネットワークモデルは、主にアプリケーション層、プレゼンテーション層、セッション層、トランスポート層、ネットワーク層、データリンク層、物理層の7層で構成されています。

オペレーティング システムの理解を覆す - Linux ディストリビューションの概要
各層は次のような異なる機能を担当します:

•アプリケーション層は、アプリケーションに統合インターフェイスを提供する責任があります;

•プレゼンテーション層は、データを別のシステムと互換性のある形式に変換する役割を果たします。

•セッション層。プレゼンテーション層エンティティ間の通信セッションの確立、管理、終了を担当します。

•トランスポート層、エンドツーエンドのデータ送信を担当します;

•ネットワーク層。データのルーティング、転送、断片化を担当します。

•データ リンク層。データ フレーミングとエラー検出、および MAC アドレス指定を担当します。

•物理層。物理ネットワーク内でのデータ フレームの送信を担当します。

OSI モデルは複雑すぎるため、提案されているのは概念的かつ理論的な階層化だけであり、具体的な実装計画は提供されていません。実際、より一般的で実用的な 4 層モデルは TCP/IP ネットワーク モデルであり、Linux システムはこのネットワーク モデルに従ってネットワーク プロトコル スタックを実装します。

TCP/IP のネットワーク モデルは、アプリケーション層、トランスポート層、ネットワーク層、ネットワーク インターフェイス層の 4 層で構成されており、各層の機能は次のとおりです。

•アプリケーション層。HTTP、DNS、FTP などの一連のアプリケーションをユーザーに提供する役割を果たします。;

•トランスポート層。TCP、UDP などのエンドツーエンド通信を担当します。;

•ネットワーク層。IP、ICMP などのネットワーク パケットのカプセル化、フラグメンテーション、ルーティング、転送を担当します。;

•ネットワーク インターフェイス層。ネットワーク パケット フレーミング、MAC アドレス指定、エラー検出、ネットワーク カードを介したネットワーク フレームの送信など、物理ネットワーク内でのネットワーク パケットの送信を担当します。

OSI ネットワーク モデルと比較して、TCP/IP ネットワーク モデルは非常にシンプルで覚えやすいため、両者の関係は次のとおりです。

ただし、私たちがよく話題にする 7 層および 4 層の負荷分散は、OSI ネットワーク モデルで記述されており、第 7 層はアプリケーション層に相当し、第 4 層はトランスポート層に相当します。

オペレーティング システムの理解を覆す - Linux ディストリビューションの概要
Linux ネットワーク プロトコル スタック

私たちの体をアプリケーション層のデータと比較し、基本的な衣服をトランスポート層の TCP ヘッダーと比較し、コートをネットワーク層の IP ヘッダーと比較し、帽子と靴をフレーム ヘッダーと比較できます。ネットワークインターフェース層とフレームの終端。

冬の季節、家から遊びに行くときは、当然のことながら、まずベースの服を着て、次に暖かいジャケットを着て、最後に帽子と靴を履いて出かけることになります。これは、TCP プロトコルを適用したときのようなものです。通信ネットワーク パケットが送信されると、アプリケーション層のデータはカプセル化され、ネットワーク プロトコル スタックに従って層ごとに処理されます。

下の図から、各層のアプリケーション層データのカプセル化形式がわかります。

で:###

•トランスポート層はアプリケーション データの前に TCP ヘッダーを追加します;オペレーティング システムの理解を覆す - Linux ディストリビューションの概要
•ネットワーク層、TCP パケットの前に IP ヘッダーを追加します;

•ネットワーク インターフェイス層は、IP パケットの前後にフレーム ヘッダーとフレーム トレーラーを追加します。

これらの新しい追加、ヘッダーと末尾はすべて独自の機能を持ち、特定のプロトコル形式に従って埋められます。各層は独自のプロトコル ヘッダーを追加するため、必然的にネットワーク パケットのサイズが増加します。ただし、物理リンクははいかなるサイズのデータ​​ パケットも送信できないため、イーサネットでは最大送信単位 (MTU) が 1500 バイトと規定されており、これにより 1 回の送信の最大 IP パケット サイズも指定されます。

ネットワーク パケットが MTU サイズを超えると、断片化された IP パケットが MTU サイズを超えないようにするために、ネットワーク層で断片化されます。MTU が小さい場合、より多くのパケットが必要になるため、ネットワーク スループット容量が低下します。逆に、MTU が大きいほど、必要なパケットが小さくなり、ネットワーク スループットが向上します。

TCP/IP ネットワーク モデルとネットワーク パケットのカプセル化原理を理解した後は、Linux ネットワーク プロトコル スタックがどのようなものかを推測できたはずです。実際には、TCP/IP の 4 層構造に似ています。

オペレーティング システムの理解を覆す - Linux ディストリビューションの概要
上の図のネットワーク プロトコル スタックから、次のことがわかります:

•アプリケーションはシステム コールを通じてソケット層と対話する必要があります;

•ソケット層の下には、トランスポート層、ネットワーク層、ネットワーク インターフェイス層があります。

•最下層はネットワーク カード ドライバーとハードウェア ネットワーク カード デバイスです;

Linux のネットワーク パケット受信プロセス

ネットワーク カードは、ネットワーク パケットの送受信を担当するコンピュータのハードウェアの一部です。ネットワーク カードがネットワーク パケットを受信すると、DMA テクノロジを通じてネットワーク パケットをリング バッファに入れます。これはリング バッファ: バッファはカーネル メモリ内のネットワーク カード ドライバ内にあります。

ネットワーク パケットを受信した後、ネットワーク パケットが到着したことをオペレーティング システムにどのように伝える必要がありますか?

最も簡単な方法は、割り込みをトリガーすることです。つまり、ネットワーク カードがネットワーク パケットを受信するたびに、割り込みをトリガーしてオペレーティング システムに通知します。

ただし、問題があります。高性能ネットワーク シナリオでは、ネットワーク パケットの数が非常に多くなり、多数の割り込みがトリガーされます。CPU が割り込みを受け取ると、CPU が割り込みを受け取ると、実行中の処理を停止します。これらのネットワーク パケットを処理するには、処理が完了した後でのみ、他の処理を続行するために戻ります。割り込みを頻繁にトリガーすると、CPU に無限の処理割り込みが発生し、他のタスクが実行できなくなる可能性があります。全体的な効率。

そこで、頻繁な割り込みによって引き起こされるパフォーマンスのオーバーヘッドを解決するために、Linux カーネルはバージョン 2.6 で、「割り込みとポーリング」を組み合わせてネットワーク パケットを受信する NAPI メカニズムを導入しました。その中心的な概念は、割り込みを使用しないことです。データを読み取りますが、最初に割り込みを使用してデータ受信のためにサービス プログラムを起動し、次にポーリング メソッドを使用してデータをポーリングします。

例えば、ネットワークパケットが到着すると、ネットワークカードはハードウェア割り込みを発生させ、ネットワークカードのハードウェア割り込み処理関数が実行されますが、割り込み処理関数の処理後に「一時的に割り込みをマスクする」必要があります。を起動し、データをポーリングして処理するために「ソフト割り込み」を起動します。新しいデータがなくなるまで割り込みは再開されません。このようにして、1 回の割り込みで複数のネットワーク パケットが処理されるため、ネットワーク カードによるパフォーマンスのオーバーヘッドが軽減されます。中断。

ソフト割り込みはネットワーク パケットをどのように処理しますか?データはリング バッファからカーネル構造体 sk_buff バッファにコピーされ、レイヤーごとの処理用のネットワーク パケットとしてネットワーク プロトコル スタックに渡されるようになります。

まず、ネットワークインターフェイス層に入ります。この層では、パケットの正当性がチェックされ、不正な場合は破棄されます。正当な場合は、そのパケットの上位層プロトコルの種類が決まります。 IPv4 や IPv6 などのネットワーク パケットが検出され、フレーム ヘッダーとフレーム トレーラーが削除されて、ネットワーク層に渡されます。

ネットワーク層では、IP パケットを取り出し、上位層に渡して処理するか転送するかなど、ネットワーク パケットの次の方向を決定します。ネットワーク パケットがローカル マシンに送信されることが確認されると、IP ヘッダーを見て上位層プロトコルの種類が TCP か UDP かを確認し、IP ヘッダーを削除してローカル マシンに渡します。トランスポート層。

トランスポート層は、TCP ヘッダーまたは UDP ヘッダーを取り出し、「送信元 IP、送信元ポート、宛先 IP、宛先ポート」の 4 つのタプルを識別子として使用して、対応するソケットを見つけ、データをソケットの受信側にコピーします。バッファ。

最後に、アプリケーション層プログラムはソケット インターフェイスを呼び出し、新しく到着したデータをカーネルのソケット受信バッファからアプリケーション層に読み取ります。

この時点で、ネットワーク パケットの受信処理は終了です。下図の左側からもネットワーク パケットの受信処理がわかります。右側はその逆で、送信処理です。ネットワークパケット。

オペレーティング システムの理解を覆す - Linux ディストリビューションの概要

Linux のネットワーク パケット送信プロセス

上の図の半分に示されているように、ネットワーク パケットの送信プロセスは受信プロセスとまったく逆です。

まず、アプリケーションはデータ パケットを送信するために Socket のインターフェイスを呼び出します。これはシステム コールであるため、ユーザー モードからカーネル モードのソケット層に落ちます。ソケット層はアプリケーション層のデータをコピーします。ソケット送信バッファに。

次に、ネットワーク プロトコル スタックはソケット送信バッファからデータ パケットを取り出し、TCP/IP プロトコル スタックに従って上から下まで層ごとに処理します。

TCP 伝送プロトコルを使用してデータを送信する場合、TCP ヘッダーがトランスポート層に追加されてからネットワーク層に渡され、ネットワーク層はデータ パケットに IP パケットを追加して、ルーティング テーブルにクエリを実行してネクスト ホップ IP を取得し、MTU サイズに応じてフラグメント化します。

断片化されたネットワーク パケットはネットワーク インターフェイス層に送信され、ARP プロトコルを通じてネクスト ホップの MAC アドレスが取得され、フレーム ヘッダーとフレーム トレーラーが追加されてパケット送信キューに配置されます。 。

これらが準備された後、ソフト割り込みがトリガーされ、送信する必要のある新しいネットワーク パケットがあることをネットワーク カード ドライバーに伝えます。最後に、ドライバーは DMA を通じてパケット送信キューからネットワーク パケットを読み取り、それらを配置しますハードウェア ネットワーク カードのキューに格納され、物理ネットワーク カードがそれを送信します。

要約

コンピュータは通常、通信ネットワーク カード、スイッチ、ルータなどのネットワーク デバイスによって相互に接続されています。ネットワーク デバイスの異種性のため、国際標準化機構は 7 層の OSI ネットワーク モデルを定義しています。ただし、このモデルは比較的複雑なため、実際のアプリケーションでは使用されません。代わりに、より単純化された TCP/IP モデルが使用されます。Linux ネットワーク プロトコル スタックは、このモデルに従って実装されます。

TCP/IP モデルは主に 4 つの層に分かれています: アプリケーション層、トランスポート層、ネットワーク層、ネットワーク インターフェイス層です。各層は異なる責任を負います。これは Linux ネットワーク プロトコル スタックの主要コンポーネントでもあります。

アプリケーションがソケット インターフェイスを介してデータ パケットを送信すると、データ パケットはネットワーク カード キューに送信される前にネットワーク プロトコル スタックによって上から下までレイヤーごとに処理され、その後ネットワーク カードはネットワークパケットアウト。

ネットワーク パケットを受信すると、最終的にアプリケーション プログラムに送信される前に、ネットワーク プロトコル スタックの下から上まで層ごとに処理する必要があります。

つまり、Linux は無料のオープンソース オペレーティング システムとしてテクノロジーの分野に登場し、広く使用されています。経験豊富なプログラマーであっても、一般ユーザーであっても、自分に合った Linux ディストリビューションを選択すると、実際に多くの予期せぬメリットがもたらされます。この記事が Linux ディストリビューションについての理解を深めるのに役立つと思います。また、ご自身のコンピュータで Linux の魅力を体験していただければ幸いです。

以上がオペレーティング システムの理解を覆す - Linux ディストリビューションの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlxlinux.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。