ネットワークとオペレーティング システム カーネルは、私にとっては馴染みのないものですが、魅力的でもあります。私はそれらの背後にある真実を明らかにしたいと思っています。 前回の投稿では、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 |
<<: エッジコンピューティングは長い間私たちの身近に存在してきました
昨今、SEOに取り組む人はますます増え、SEO業界も混沌としていますが、SEOで本当に儲かる人は多く...
今日、百度で商品キーワードを検索したところ、突然検索結果に「百度微盘」というセクションがあり、百度百...
2018年は中国のインターネットにとって異例の年だった。今年、国家市場監督管理総局は独占禁止法に基づ...
月収10万元の起業の夢を実現するミニプログラム起業支援プラン現在、多くの企業が SEO の最適化とプ...
あなたのウェブサイトが Baidu でもっと上位にランクインしたい場合、あるいはウェブサイトのキーワ...
毎年恒例のブラックフライデーが到来し、オランダの老舗サーバー商人である maple-hosting ...
以前、Kafka の原則について多くの情報を共有しました。今日は、Kafka の数千億のデータ量に基...
人類が誕生して以来、データの記録と処理能力の探求は止まることはありませんでした。たとえば、古代におけ...
今日は春節休暇後の最初の営業日です。多くの企業は、2月3日から7日まで、従業員が自宅からリモートワー...
昨今の地域ウェブサイトには多くのカテゴリがあります。7月に私は自身の学生時代を背景に、地元の学生を集...
多くの人がウェブサイトの構築を始めるとき、ウェブサイトの種類を選択することが準備作業です。ウェブサイ...
私は情報管理を専攻し、2011年6月に三流大学を卒業した後、教育研修会社でSEOとして働いていました...
imidc は、直接接続の香港 VPS と台湾 VPS (cn2 ネットワーク) を 50% 割引で...
オンライン マーケティング プロモーションの実践において、SEM を行う人の多くはアカウント操作に力...
Fengniao Technology 傘下のホスティング ブランドである CubeCloud は、...