ネットワークとオペレーティング システム カーネルは、私にとっては馴染みのないものですが、魅力的でもあります。私はそれらの背後にある真実を明らかにしたいと思っています。 前回の投稿では、Kubernetes ネットワーク モデルについて詳しく説明しました。今回はもう少し深く掘り下げて、Kubernetes でパケットがどのように送信されるかを理解し、Kubernetes の eBPF ネットワーク アクセラレーションを学習する準備をし、ネットワークとオペレーティング システム カーネルについての理解を深めたいと思います。記事に漏れがあるかも知れませんので、アドバイスを頂ければ幸いです。 始める前に、私の学習成果を一文でまとめます。データ パケットのフローは、実際にはネットワーク ソケット記述子 (ソケット ファイル記述子、中国語は少し長いので、以下ではソケット fd と呼びます) のアドレス指定プロセスです。これは単にソケット fd のメモリ アドレスを参照するだけでなく、そのネットワーク アドレスも含まれます。 Unix および Unix ライクなシステムでは、すべてがファイルであり、ソケットもファイル記述子を通じて操作できます。 基礎データパックデータ パケットの流れについて説明するので、まずはデータ パケットとは何かを見てみましょう。 ネットワーク パケットは、ネットワーク データグラムまたはネットワーク フレームとも呼ばれ、コンピュータ ネットワークを介して送信されるデータの単位です。最も一般的な TCP データ パケットを例にとると、次の部分が含まれます。
アプリケーションがソケットを使用してデータをネットワークに送信するプロセスは、TCP パケット、IP パケット、イーサネット パケットなどのヘッダー情報を使用してデータをカプセル化するプロセスとして簡単に理解できます。逆に、ネットワークからイーサネット パケットを受信して、アプリケーションが処理できるデータに変換するのが、アンパックのプロセスです。パケットのカプセル化とカプセル化解除のプロセスは、カーネル ネットワーク プロトコル スタックによって完了します。 以下では、ソケットとカーネル ネットワーク プロトコル スタックの処理についてそれぞれ説明します。 ソケットソケットは、コンピュータ ネットワークで使用されるプログラミング インターフェイスであり、ユーザー スペース (ユーザー アプリケーションが実行されるスペース) とカーネル ネットワーク プロトコル スタック (データをカプセル化して解凍するカーネル内のコンポーネント) の間にあります。 プログラミング インターフェイスとして、ソケットは次の操作を提供します (一部のみをリストします)。
次の図から、各操作の役割を直感的に感じることができます。 カーネルネットワークプロトコルスタックの説明を始める前に、まずメモリ内のデータパケットのデータ構造であるsk_buff[1]について説明します。 sk_バフsk_buff は、Linux カーネルでネットワーク パケットを管理するために使用されるデータ構造です。パケットのプロトコル、データ長、送信元アドレスと宛先アドレスなど、受信および送信されたネットワーク パケットのさまざまな情報とプロパティが含まれます。sk_buff は、ネットワーク層とデータ リンク層の間で渡すことができるデータ構造であり、TCP/IP、UDP、ICMP など、すべてのタイプのネットワーク プロトコル スタックで使用できます。 sk_buff は、データリンク層、ネットワーク層、トランスポート層など、ネットワーク プロトコル スタックのさまざまな層の Linux カーネルで広く使用されています。 sk_buff データ構造には、4 つの重要なフィールドを含む多くのフィールドがあり、それらはすべてポインター型です。さまざまなレイヤーでの sk_buff の使用は、これらのポインターを変更して、ヘッダーを追加 (パッケージ化) したり、ヘッダーを削除 (アンパック) したりすることによって実現されます。
カーネルネットワークプロトコルスタックパケットアプリケーションは、ソケットの sendmsg 操作を使用してデータを送信します (netfilter、トラフィック制御、およびキュー規律についてはここでは詳しく説明しません)。
開梱NIC はネットワークからデータ パケットを受信します (ダイレクト メモリ アクセス、ネットフィルタ、トラフィック制御についてはここでは詳しく説明しません)。
Kubernetes ネットワーク モデル基本的な知識のもう 1 つの部分は、Kubernetes ネットワーク モデルです。前の記事「Kubernetes ネットワーク モデルとネットワーク通信の詳細な調査」を参照してください。 Kubernetes におけるパケットフローここでは、前回の記事で説明した 3 つの通信シナリオについて引き続き説明します。ポッド間の通信にはポッドの IP アドレスが使用されます。サービス経由のアクセスについて議論する場合、netfilter が含まれると議論の長さが大幅に長くなります。 同じポッド内のコンテナ間の通信ポッド内の 2 つのコンテナ間の方法では、通常、ループバック アドレス 127.0.0.1 が使用されます。パケットルーティングプロセス#4では、ループバックネットワークカードloを使用して送信することが決定されます。 同じノード上のポッド間の通信curl によって送信された要求は、パケット #4 で eth0 インターフェイスを使用しているものとして識別されます。次に、eth0に接続されたトンネル veth1 を介してノードのルート ネットワーク空間に到達します。 veth1 は、ブリッジ cni0 と仮想イーサネット インターフェイス vethX を介して他のポッドに接続されます。パケット #10 L2 アドレス指定では、ARP 要求がブリッジを介してすべての接続されたインターフェイスに送信され、元の要求の宛先 IP アドレス (ここでは 10.42.1.9) があるかどうかが確認されます。 veth0のMACアドレスを取得した後、パケット#11のデータパケットのリンク層情報を設定します。データ パケットが送信されると、veth0 トンネルを介してポッド httpbin の eth0 インターフェイスに入り、解凍プロセスが開始されます。 解凍プロセスは特別なものではなく、httpbin によって使用されるソケットが決定されます。 異なるノード上のポッド間の通信ここでの状況は少し異なります。 cni0 を介して ARP 要求を送信した後、応答が受信されない場合は、ホストのルーティング テーブルであるルート名前空間を使用して、ターゲット ホストの IP アドレスが決定されます。次に、ARP 要求がホストの eth0 を介して送信され、ターゲット ホストから応答が受信されます。パケット#11にMACアドレスを書き込みます。 データ パケットがターゲット ホストに送信された後、解凍プロセスが開始され、最終的にターゲット ポッドに入ります。
要約する統計によると、3 つのシナリオすべてにおいて、カーネル ネットワーク プロトコル スタックは、同じポッドまたはノード内であっても、パケットを 2 回処理します (netfilter プロセスを含む)。これら両方の状況は実際には同じカーネル空間で発生します。 同じカーネル空間内の 2 つのソケットがデータを直接送信できる場合、カーネル ネットワーク プロトコル スタックの処理によって発生する遅延を回避できますか? 次の記事に続きます。 参考文献[1] sk_buff: https://elixir.bootlin.com/linux/latest/source/include/linux/skbuff.h#L843 |
<<: エッジコンピューティングは長い間私たちの身近に存在してきました
LinodeはAkamaiに買収されて以降、インドネシアのクラウドサーバー事業を運営するため、南アジ...
月給5,000~50,000のこれらのプロジェクトはあなたの将来です仕事に復帰して数日経ちますが、各...
ヘルスケアは、人工知能やクラウド コンピューティングなどの最新テクノロジーの助けを借りて、患者により...
過去数年間の暗号通貨ネットワークの発展において、容量拡張を特徴とするプロジェクトは数多くありましたが...
著者についてCtrip のシニア R&D マネージャーである CH3CHO は、クラウド ネ...
SEO は誰もが行う必要があることは知っているかもしれませんが、どのように行うのか、多くの人は「コン...
テキスト | 王冠雄これは中国のインターネット業界の合併と買収の記録となるはずだった。モバイルブラウ...
企業のウェブサイトを最適化する目的は、商品マーケティングです。現在、PC 側の SEO 最適化はボト...
2018 年 11 月 13 日、上海 - Linux Foundation が主催する毎年恒例のオ...
kvmlaは国内の古いブランド(2011年~)です。最近、日本のソフトバンク回線でVPSを取得しまし...
企業は、インテリジェントなデータ管理の将来のニーズにどのように対応すべきでしょうか?最近、Lenov...
Pacificrack からの最新ニュースによると、公式が VPS を補充し、現在約 200 個の ...
百度が8月22日にアルゴリズム調整の通知を発表し、8月25日に大規模なアップデートと調整を行ってから...
人々が IT に取り組む方法や IT について考える方法は根本的に変化し、現在では成功した IT プ...
クラウド コンピューティングは、新しいビジネス配信モデルであると同時に、新しい IT インフラストラ...