(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-11-17
(54)【発明の名称】ネクストホップMACアドレスのプログラムによる決定
(51)【国際特許分類】
H04L 45/74 20220101AFI20231110BHJP
H04L 69/321 20220101ALI20231110BHJP
H04L 69/164 20220101ALI20231110BHJP
【FI】
H04L45/74
H04L69/321
H04L69/164
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023527215
(86)(22)【出願日】2021-11-08
(85)【翻訳文提出日】2023-05-02
(86)【国際出願番号】 US2021058468
(87)【国際公開番号】W WO2022099142
(87)【国際公開日】2022-05-12
(32)【優先日】2020-11-09
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】519008175
【氏名又は名称】クラトス インテグラル ホールディングス,エルエルシー
(74)【代理人】
【識別番号】100114775
【氏名又は名称】高岡 亮一
(74)【代理人】
【識別番号】100121511
【氏名又は名称】小田 直
(74)【代理人】
【識別番号】100202751
【氏名又は名称】岩堀 明代
(74)【代理人】
【識別番号】100208580
【氏名又は名称】三好 玲奈
(74)【代理人】
【識別番号】100191086
【氏名又は名称】高橋 香元
(72)【発明者】
【氏名】ブラック,ガブリエル
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA01
5K030HA08
5K030HD03
5K030JA11
5K030LB05
(57)【要約】
システム、メディア、及び方法は、ネットワークアクセラレーションアプリケーションによって使用されて、加速されたネットワーキング技術を使用して送信されるデータパケットをポピュレートすることができる第2層の宛先アドレスを決定することができる。システム及び方法は、加速されたネットワークを提供するためにNICインタフェースを制御するコンピューティングデバイス上で実行されるソフトウェアアプリケーションを提供する。ソフトウェアアプリケーションは、ネットワークスタックのアプリケーション層にあり、仮想NICまたはTUN/TAPデバイスを介して、カーネル、ネットワークスタック、及びオペレーティングシステム(OS)機能とインタフェース接続され、加速されたネットワークアプリケーションで使用する第2層の宛先アドレスを決定する。本明細書の実施形態は、上記組み合わせにより、ファイアウォールルール、静的ARPエントリ、またはネットワーク操作のために配備された他のシステム管理者ルールを説明することができる。
【選択図】
図3A
【特許請求の範囲】
【請求項1】
プロトコルスタックを有するカーネルを有するシステム内のアプリケーション層にあるアプリケーションによって、ネットワーク内で送信されるパケットの少なくとも1つのネクストホップmacアドレスをプログラムで決定することによって、パケットの送信を加速する方法であって、
プロトコルヘッダを有するファントムデータグラム(UDP)を作成することと、
前記ネクストホップMACアドレスヘッダを未ポピュレートのままにして、前記ファントムUDPの前記プロトコルヘッダの1つ以上をポピュレートすることと、
前記プロトコルスタックをトラバースするために、前記ファントムUDPを前記カーネルにサブミットすることと、
前記カーネルによって前記ネクストホップMACアドレスヘッダがポピュレートされた状態で前記ファントムUDPを前記カーネルから受信することと、
1つ以上の所定の特性に基づいて前記ファントムUDPを認識することと、
前記ファントムUDPからの前記ネクストホップMACアドレスヘッダを記憶することと、
前記ファントムUDPを送信しないことと、
を含む、前記方法。
【請求項2】
次のUDPを作成することと、記憶された前記ネクストホップMACアドレスを取得することと、取得した前記ネクストホップMACアドレスを前記次のUDPのヘッダにポピュレートすることとをさらに含む、請求項1に記載の方法。
【請求項3】
前記カーネルの前記プロトコルスタックは、ルーティングルールを説明する所定のルールセットに基づいて、前記ネクストホップMACアドレスヘッダを決定する、請求項2に記載の方法。
【請求項4】
前記所定のルールセットは、ネットワークルール、セキュリティ対策、ファイアウォール対策のうちの1つ以上を説明する、請求項3に記載の方法。
【請求項5】
前記アプリケーションは、NICを制御し、前記NICに前記ファントムUDPをドロップするように指示することをさらに含む、請求項2に記載の方法。
【請求項6】
前記カーネルをバイパスし、記憶された前記ネクストホップMACアドレスヘッダを次のUDPにポピュレートして前記次のUDPを前記NICに提供することをさらに含む、請求項5に記載の方法。
【請求項7】
バインド呼び出し、及び前記カーネルとの接続呼び出しを使用してソケットを作成することと、
前記カーネルによってポピュレートされた前記ファントムUDPからソースIPとソース宛先を取得して記憶することと、
前記次のUDPのヘッダに、記憶された前記ソースIP及び前記ソース宛先をポピュレートすることと、
をさらに含む、請求項2に記載の方法。
【請求項8】
カーネルを有するシステム内のアプリケーション層にあるアプリケーションによってネットワーク内で送信されるパケットの少なくとも1つの第2層の宛先アドレスをプログラムで決定する方法であって、
ファントムパケットを作成することと、
前記第2層の宛先アドレスを未ポピュレートのままにして、前記ファントムパケットのプロトコルヘッダの1つ以上をポピュレートすることと、
前記ファントムパケットを前記カーネルにサブミットすることと、
前記カーネルによって前記第2層の宛先アドレスヘッダがポピュレートされた状態で前記ファントムパケットを前記カーネルから受信することと、
前記ファントムパケットを認識することと、
前記ファントムパケットからの前記第2層の宛先アドレスを記憶することと、
次のパケットを作成することと、
前記次のパケットのヘッダに、記憶された前記第2層の宛先アドレスをポピュレートすることと、
を含む、前記方法。
【請求項9】
前記カーネルはプロトコルスタックを含み、前記カーネルの前記プロトコルスタックが、ルーティングルールを説明する所定のルールセットに基づいて前記第2層の宛先アドレスを決定することをさらに含む、請求項8に記載の方法。
【請求項10】
前記所定のルールセットは、ネットワークルール、セキュリティ対策、ファイアウォール対策のうちの1つ以上を説明する、請求項9に記載の方法。
【請求項11】
前記アプリケーションは、ネットワークインタフェースコントローラ(NIC)を制御し、前記NICが前記ファントムパケットをドロップすることをさらに含む、請求項8に記載の方法。
【請求項12】
前記カーネルをバイパスし、前記次のパケットを前記NICに提供することをさらに含む、請求項11に記載の方法。
【請求項13】
バインド呼び出し、及び前記カーネルとの接続呼び出しを使用してソケットを作成することと、
前記カーネルによってポピュレートされた前記ファントムパケットからソースIPとソース宛先を取得して記憶することと、
前記次のパケットのヘッダに、記憶された前記ソースIP及び前記ソース宛先をポピュレートすることと、
をさらに含む、請求項8に記載の方法。
【請求項14】
第2層の宛先アドレスをプログラムで決定することにより、ネットワークを介してパケットの伝送を加速するシステムであって、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサと通信し、前記少なくとも1つのプロセッサによって実行されると、前記少なくとも1つのプロセッサに、カーネルを有するオペレーティングシステムを使用して、アプリケーション層にあるアプリケーションを実行させる命令を記憶するメモリであって、前記アプリケーションは、
ファントムパケットを作成し、
前記第2層の宛先アドレスを未ポピュレートのままにして、前記ファントムパケットのプロトコルヘッダの1つ以上をポピュレートし、
前記ファントムパケットを前記カーネルに送信し、
前記カーネルによって前記第2層の宛先アドレスヘッダがポピュレートされた状態で前記ファントムパケットを前記カーネルから受信し、
前記ファントムパケットを認識し、
前記ファントムパケットからの前記第2層の宛先アドレスを記憶し、
次のパケットを作成し、
前記次のパケットのヘッダに、記憶された前記第2層の宛先アドレスをポピュレートするように動作可能である、
前記メモリと、
を含む、前記システム。
【請求項15】
前記カーネルはプロトコルスタックを含み、前記カーネルの前記プロトコルスタックは、ルーティングルールを説明する所定のルールセットに基づいて前記第2層の宛先アドレスを決定するように構成される、請求項14に記載のシステム。
【請求項16】
前記所定のルールセットは、ネットワークルール、セキュリティ対策、ファイアウォール対策のうちの1つ以上を説明する、請求項15に記載のシステム。
【請求項17】
前記アプリケーションはさらに、ネットワークインタフェースコントローラを制御するように動作可能であり、前記ネットワークインタフェースコントローラは前記ファントムパケットをドロップする、請求項14に記載のシステム。
【請求項18】
前記アプリケーションは、さらに、前記カーネルをバイパスし、前記次のパケットを前記ネットワークインタフェースコントローラに提供するように動作可能である、請求項14に記載のシステム。
【請求項19】
前記アプリケーションは、さらに、
バインド呼び出し、及び前記カーネルとの接続呼び出しを使用してソケットを作成し、
前記カーネルによってポピュレートされた前記ファントムパケットからソースIPとソース宛先を取得して記憶し、
前記次のパケットのヘッダに、記憶された前記ソースIP及び前記ソース宛先をポピュレートするように動作可能である、請求項14に記載のシステム。
【請求項20】
前記アプリケーションは、さらに、
前記ファントムUDPのペイロードに認識子をポピュレートし、前記パケットを認識するように動作可能であり、前記前記パケットを認識することは、前記認識子を認識することをさらに含む、請求項14に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2020年11月9日に出願された米国仮特許出願第63/111,487号について優先権を主張し、それらの全体が参照により本明細書に組み込まれる。
【0002】
本出願は、一般に、ネットワークを介してデータパケットをルーティングすること、及びそのようなパケットを加速的にルーティングすることに関する。
【背景技術】
【0003】
一般的なネットワーク環境では、クライアントデバイスは、ネットワークサーバに記憶されるコンテンツを要求してダウンロードする。要求は、ルーター、ゲートウェイ、及び、要求をネットワーク経由でパケットとしてネットワークサーバに送信するその他のネットワークインフラストラクチャデバイスを使用してネットワークサーバに送信される。コンテンツ要求を受信すると、ネットワークサーバは通常、要求されたコンテンツを取得し、要求されたコンテンツをパケットに分割し、要求元のクライアントデバイスにパケットを送信する。ルーター、ゲートウェイ、及びその他のネットワークインフラストラクチャは、これらのパケットをネットワーク経由でクライアントデバイスに送信する。クライアントデバイスは、順番に、パケットからコンテンツを再構築し、クライアントデバイス上のアプリケーションを介してコンテンツをユーザーに提示する。
【0004】
様々なデバイス間のデータの交換は、一連の通信プロトコルに従って実行され得る。通信プロトコルは、デバイス間の通信の構文、セマンティクス、及び同期を定義する一連のルールであり、ハードウェア及び/またはソフトウェアとして実装され得る。プロトコル設計では、プロトコルを階層化してプロトコルスタックを形成し、各層は通信の問題のクラスを解決するために提供される。例示的なプロトコルスタックは、インターネットプロトコルスイート(例えば、TCP/IPプロトコルスイート)、インターネットモデル、TCP/IP5層参照モデル、TCP/IPモデル、アーパネット参照モデル、開放型システム間相互接続モデル(OSIモデル)などのネットワークスタックを含むが、これらに限定されない。ネットワークスタックのもう1つの例は、OSIモデルと同様に、7層のスタックであるLinux(登録商標)オペレーティングシステムに含まれるネットワークスタックである。Linux(登録商標)ネットワークスタックは、アプリケーション層(例えば、第7層)、システムコールインタフェース層(例えば、第6層)、プロトコル非依存インタフェース層(例えば、第5層)、ネットワークプロトコル層(例えば、第4層)、デバイス非依存層(例えば、第3層)、デバイスドライバ層(例えば、第2層)、及び物理ハードウェア層(例えば、第1層)である。アプリケーション層は、ユーザー空間を定義してもよく、第2層~第6層はカーネルで実装されてもよい。
【0005】
図1は、データグラムパケット(UDP)120を構築し、ネットワークスタック130を介して(トラバースして)送信するソフトウェアアプリケーション110を示す概略的な例示的なフローを示している。アプリケーションは、コンピューティングデバイス(例えば、
図5のコンピューティングデバイス500)にインストールされ得、カーネル140を含むオペレーティングシステム(例えば、Linux(登録商標)、Windows(登録商標)、macOS(登録商標))の下で実行され得る。ソフトウェアアプリケーション110は、ソケットアプリケーションプログラミングインタフェース(API)(例えば、第5層)を使用してシステムコール(例えば、ネットワークスタック130の第6層)を行うように構成され得る。アプリケーション110は、第7層に情報を提供し、第3層及び第4層で必要とされる情報(例えば、宛先インターネットプロトコル(IP)及び宛先UDPポート)を提供することもできる。カーネル140と連携するネットワークスタック130は、残りの情報を提供して第2層~第4層にポピュレートするために実装され得る。
【0006】
ステップ1で、アプリケーション層にあるアプリケーション110は、UDP120を送信するためのソケットを作成する。例えば、アプリケーション110は、データに対する要求を含むペイロードを生成し、プロトコルヘッダに宛先(DST)IPアドレス及びDSTポート(緑色で示される)をポピュレートする。残りのプロトコルヘッダは、通常、150内のネットワークスタックの1つ以上の層を介して、カーネル140によってポピュレートされる。アプリケーションは、ソケットAPIを介して、例えばシステムコールインタフェース層を介してカーネル140に対して要求を行う。ネットワークスタックの残りの層は、ルーティングルール(ネットワークルール、セキュリティ、またはファイアウォール対策など)に基づいてプロトコルヘッダを解決し、プロトコルヘッダにソース(SRC)MACアドレス、SRC IPアドレス、SRCポート(ステップ2で緑色で示される)をポピュレートするように構成される。しかしながら、DST MACアドレス(例えば、第2層の宛先アドレス)は、ネットワークスタックの第2層(例えば、デバイスドライバ層)によって、解決手順プロトコルを通じて決定される。解決手順160は、コメント要求(RFC)標準、例えば、RFC6747、RFC826、RFC6575に基づいて実装され得る。例示的な解決手順160は、ネットワークルールに基づくDST IPアドレスに従って第2層の宛先アドレスを記憶するアドレス解決プロトコル(ARP)データベース162(例えば、キャッシュまたは他の一時的データ記憶媒体)にアクセスすることを含み得る。例えば、ARPデータベース162は、データパケットをDST IPアドレスに送信するために使用されるネクストホップ宛先アドレス(例えば、スイッチ要素、ルーター、ゲートウェイなど)のDST MACアドレスを記憶する。ネクストホップMACアドレスは、ネットワークルール、セキュリティ対策、及び/またはファイアウォール対策などのルーティングルールを説明する所定のルールセットに基づいて定義され得る。これらのルールは、ネットワーク/システム管理者によって事前に定義され得る。DST MACアドレスがDST IPアドレスのARPデータベースにある場合、ネットワークスタックの第2層は、解決されたDST宛先アドレス(例えば、DST MACアドレス)を第2層のプロトコルヘッダにポピュレートする。そうでない場合、第2層は、DST IPアドレス及び定位置にあり得るネットワーク管理者ルールに基づいてARP要求パケットを送信することを含むARP解決交換164を実行する。宛先デバイスは、DST宛先アドレスを含むARP応答パケットでARP要求に応答する。次に、第2層は、第2層のプロトコルヘッダにDST宛先アドレスをポピュレートし、後続の手順で使用するためにDST宛先アドレスをARPデータベースに保存する。ステップ3で、UDP120は、(緑色で示すように)各プロトコルヘッダがポピュレートされた状態で完成し、UDP120は、物理層によるネットワークを介した送信(本明細書ではNICまたはNIC TXと呼ばれてもよい)のためにネットワークインタフェースコントローラ(NIC)に提供される。
【0007】
ネットワークでは、ネットワークへのデータ交換速度(アップロード速度及び/またはダウンロード速度など)に影響を与える様々な問題が発生する可能性がある。これらの問題には、各プロトコルヘッダをポピュレートするのに時間がかかる、またはデータのアップロード速度及び/またはダウンロード速度を低下させる大量の要求が含まれる。伝送速度を上げて待ち時間を短縮するために、ネットワーク全体のデバイス(例えば、クライアントデバイス、ネットワークサーバ、及び/またはクライアントデバイスとサーバの間に配置されたルーター及びゲートウェイなどの中間ネットワークデバイス)によって、ネットワークアクセラレーション技術が採用され得る。これらのネットワークアクセラレーション技術は、ソフトウェア及び/またはハードウェアとして実装され得、クライアントデバイスとネットワークサーバとの間のデータフローの速度を向上させるために使用される。これらの技術は、上記の問題、またはデータ交換速度に悪影響を与えるその他の問題に対処できる。
【0008】
例示的なネットワークアクセラレーション技術は、クライアントデバイスにインストールされ、ネットワークスタックをバイパスするように構成されたソフトウェアアプリケーションを提供することである。アプリケーションは、アプリケーション層でプロトコルヘッダをポピュレートするように構成されるため、ネットワークへのパケットフローを直接管理する。つまり、アプリケーション内の命令を実行して、1つ以上のプロトコルヘッダにプログラムでポピュレートすることができる。ネットワークアクセラレーションアプリケーションの例には、データプレーン開発キット(DPDK)、PFRING_ZC、及びNETMAPが含まれる。
【0009】
図2は、ネットワークアクセラレーションアプリケーションの概略流れ図を示す。
図1と同様に、
図2は、オペレーティングシステムに含まれるアプリケーション210及びネットワークスタック130を示す。ネットワークスタック130は、
図1のネットワークスタック130と同一または実質的に同様であり得る。しかしながら、アプリケーション層にあるアプリケーション210は、
図1で上述したようにカーネル140によって制御されるのではなく、NICを直接制御するように構成される。この変更により、アプリケーション210は、ネットワークスタック130をバイパスし、加速された速度でネットワークを介してパケットを直接送信することができる。
【0010】
ネットワークスタック130をバイパスする(「カーネルバイパス」とも呼ばれる)結果として、アプリケーション210は、ネットワークを介して送信するために各パケット(例えば、UDP220)のプロトコルヘッダをポピュレートする必要がある。ただし、第2/3層の交換ネットワークに参加するためには、多くのネットワークプロトコル、Request for Comments(RFC)、及び第2及び3のプロトコルヘッダを適切にポピュレートするためにアプリケーションが実装する必要のある標準が存在するため、課題が現れる。アプローチの一例は、パケット処理を高速化するためのライブラリを提供するDPDKを使用することであり、これにより、(
図1のオレンジ色及び
図2の緑色で示されるように)SRC MACアドレス、SRS IPアドレス、及びSRCポートのポピュレートが容易になる。DPDKが使用するアプローチの一例は、仮想ネットワークインタフェースコントローラ(VNIC)を使用して、現在アプリケーションによって制御されるNICにカーネル内のインタフェースを提供することである。DPDKは、Linux(登録商標)などのネットワークスタックに統合されたネットワークインタフェースを有効にするために、VNICコンセプト(KNI)を提供する。したがって、VNICを実装することにより、アプリケーションによって制御される物理/実際のNICにパケットを送信するためのカーネル用のインタフェースが提供される。したがって、アプリケーション210は、ネットワーク機能(例えば、ARP解決、DNS、PING/ICMPなど)に参加することができる。これらのネットワーク機能は、ネットワークに参加しているノードが実行する必要がある手順である。例えば、サーバが「ping」パケット(ICMPの一種)を受信した場合、サーバは、あらかじめ決められた予想されるコンテンツを含む特定のタイプのパケットで応答する必要がある。ARP解決は、ネットワーク機能/手順の別の例である。これらの様々なタイプの機能に対するこれらの手順は、様々なRFCで定義されるが、システム管理者のポリシーの影響も受ける(例えば、システム管理者は、サーバがICMP(pingパケット)に応答するのを制限するポリシーを有効にすることができる)。仮想NICのさらなる例には、TUN/TAP仮想NICが含まれるが、これらに限定されない。本明細書の実施形態は、列挙されたNICに限定されないが、アプリケーション210によって直接制御されることにより、ネットワークスタック130の他の層をバイパスすることができる任意のNIC(仮想または非仮想)を包む。
【0011】
ただし、パケットごとにネットワークスタック機能を再実装する(したがって毎回ホイールを再発明する)ことなく、スイッチドネットワーク及びルーティングネットワークで行われるように、ソフトウェア実装を介して宛先MACアドレスをプログラムで決定する方法はない。したがって、ファストパス(例えば、ネットワークパスバイパス)の場合、アプリケーション210は、上で概説したようにカーネルのインタフェースを提供する上記VNICを利用する場合でも、オペレーティングシステムによって実行されるネットワーク機能の設備がなければ、第2層の宛先MACアドレス(例えば、ネクストホップMACアドレス)を決定することができない。
【0012】
例えば、Linux(登録商標)では、ネットワークスタックには、第2層の宛先アドレスが何であるべきかをプログラムでクエリするためのAPIがない。したがって、アプリケーション210は、このアドレスをクエリすることができず、その代わりに、
図1に概説されるようにネットワークスタックを介して処理を進めなければならない。言い換えれば、KNI/仮想インタフェースと、あらゆる種類のネットワークスタックAPI呼び出しを介してバイパスするネットワークスタックとを統合する方法はない。したがって、Linux(登録商標)でARP要求を求める唯一の方法は、ソケットを作成し、
図1に関連して前述したプロセスに従ってIPパケットの送信を要求することである。これにより、ARP解決160(
図1)が(必要に応じて)発生する。
【0013】
そのようなAPIが(Windows(登録商標)のように)オペレーティングシステムに存在する場合でも、APIはARPを要求する必要があるか否かに対処しない。これは、ネットワーク/システム管理者によって様々なネットワークルール、セキュリティ、またはファイアウォール対策が講じられている可能性があり、その結果、異なる応答が生じる可能性があるためである。したがって、アプリケーションが宛先MACアドレスを「ハードコーディング」するかまたは何らかの方法で事前ポピュレートすることを決定した場合、ネットワーク/システム管理者によって講じられる可能性のあるセキュリティまたはファイアウォール対策(ネットワークスタックがネットワークルールに基づいて適用するもの)を効果的にバイパスする。
【発明の概要】
【0014】
以下の概要は、本発明のすべての態様を定義することを意図するものではなく、本開示の他の特徴及び利点は、図面を含む以下の詳細な説明から明らかになるであろう。本開示は、統合文書として関連付けられることを意図しており、特徴の組み合わせが本開示の同じ文またはパラグラフまたは節内に一緒に見出されない場合でさえ、本明細書に記載される特徴の全ての組み合わせが想定されることを理解すべきである。さらに、本開示は、追加の態様として、本明細書で具体的に言及された変形よりも何らかの点で範囲が狭い本発明のすべての実施形態を含む。
【0015】
したがって、本明細書で開示される実施形態は、ネットワークアクセラレーションアプリケーションによって使用されて、加速されたネットワーキング技術を使用して送信されるデータパケットをポピュレートすることができる第2層の宛先アドレスを決定できるシステム、メディア、及び方法を提供することによって、これらの問題に対処する。本明細書で記載される様々な実施形態は、加速されたネットワークを提供するためにNICインタフェースを制御するコンピューティングデバイス上で実行されるソフトウェアアプリケーションを提供する。ソフトウェアアプリケーションは、ネットワークスタックのアプリケーション層に存在し、仮想NICまたはTUN/TAPデバイスを介して、カーネル、ネットワークスタック、及びオペレーティングシステム(OS)機能とインタフェース接続され、加速されたネットワークアプリケーションで使用する第2層の宛先アドレスを決定する。本明細書の実施形態は、上記の組み合わせにより、ファイアウォールルール、静的ARPエントリ、またはネットワーク操作のために定位置に配置された他のシステム管理者ルールを説明することができる。例えば、仮想NICまたはTUN/TAPデバイスを介してカーネルとネットワークスタック及びOS機能とインタフェース接続されるソフトウェアアプリケーションによって制御される仮想NICインタフェース(DPDKのKNI、TUN/TAP仮想NIC、iptablesまたはnetfilterによって提供されるポストルーティングルールなど)は、ネクストホップMACアドレスを決定し、解決されたMACアドレスをデータベースに記憶し、記憶されたMACアドレスを使用してデータパケットの第2層のヘッダをポピュレートし、後続のパケットの伝送を高速化する。
【0016】
実施形態は、プロトコルスタックを有するカーネルを有するシステム内のアプリケーション層にあるアプリケーションによって、ネットワーク内で送信されるパケットの少なくとも1つのネクストホップmacアドレスをプログラムで決定することによって、パケットの送信を加速する方法を含む。このような方法は、プロトコルヘッダを有するファントムデータグラム(UDP)を作成することと、ネクストホップMACアドレスヘッダを未ポピュレートのままにして、ファントムUDPの1つ以上のプロトコルヘッダをポピュレートすることと、プロトコルスタックをトラバースするために、ファントムUDPをカーネルにサブミットすることと、カーネルによってネクストホップMACアドレスヘッダがポピュレートされた状態でファントムUDPをカーネルから受信することと、1つ以上の所定の特性に基づいてファントムUDPを認識することと、ファントムUDPからのネクストホップMACアドレスヘッダを記憶することと、ファントムUDPを送信しないこととを含む。
【0017】
このような方法は、また、次のUDPを作成することと、記憶されたネクストホップMACアドレスを取得することと、取得したネクストホップMACアドレスを次のUDPのヘッダにポピュレートすることとを含む。
【0018】
さらに、カーネルのプロトコルスタックは、ルーティングルールを説明する所定のルールセットに基づいてネクストホップMACアドレスヘッダを決定し、所定のルールセットは、ネットワークルール、セキュリティ対策、ファイアウォール対策の1つ以上を説明する。
【0019】
さらに、アプリケーションがNICを制御し、そのような方法は、さらに、NICに、ファントムUDPをドロップするように指示することができる。そのような方法は、さらにカーネルをバイパスし、記憶されたネクストホップMACアドレスヘッダを次のUDPにポピュレートして次のUDPをNICに提供することができる。
【0020】
さらに、そのような方法は、バインド呼び出し及びカーネルとの接続呼び出しを使用してソケットを作成し、カーネルによってポピュレートされたファントムUDPからソースIPとソース宛先を取得して記憶し、次のUDPのヘッダに、記憶されたソースIP及びソース宛先をポピュレートする。
【0021】
実施形態は、また、カーネルを有するシステム内のアプリケーション層にあるアプリケーションによってネットワーク内で送信されるパケットの少なくとも1つの第2層の宛先アドレスをプログラムで決定する方法を含む。そのような方法は、ファントムパケットを作成し、第2層の宛先アドレスを未ポピュレートのままにして、ファントムパケットのプロトコルヘッダの1つ以上をポピュレートし、ファントムパケットをカーネルにサブミットし、カーネルによって第2層の宛先アドレスヘッダがポピュレートされた状態でファントムパケットをカーネルから受信し、ファントムパケットを認識し、ファントムパケットからの第2層の宛先アドレスを記憶し、次のパケットを作成し、次のパケットのヘッダに、記憶された第2層の宛先アドレスをポピュレートすることにより動作する。
【0022】
実施形態は、さらに、第2層の宛先アドレスをプログラムで決定することによって、ネットワークを介してパケットの伝送を加速するシステムを含む。そのようなシステムは、少なくとも1つのプロセッサと、少なくとも1つのプロセッサと通信し、少なくとも1つのプロセッサによって実行されると、少なくとも1つのプロセッサに上記方法のうちの1つ以上を実行させる命令を記憶するメモリとを含む。
【0023】
本開示の実施形態の詳細は、それらの構造及び動作の両方に関して、添付の図面を検討することによって部分的に収集することができ、図面において、同様の参照番号は同様の部品及びまたは機能を指す。
【図面の簡単な説明】
【0024】
【
図1】ネットワークスタックを介してデータグラムパケット(UDP)を構築及び送信するためのソフトウェアアプリケーションの概略機能流れ図を示す。
【
図2】ネットワークアクセラレーションアプリケーションの概略機能流れ図を示す。
【
図3A】ネットワークアクセラレーションアプリケーションの概略機能流れ図を示す。
【
図3B】ネットワークアクセラレーションアプリケーションの概略機能流れ図を示す。
【
図4】本明細書で開示される実施形態に係る、開示されるシステム、方法、及び媒体の実施形態が動作し得るインフラストラクチャの機能ブロック図である。
【
図5】本明細書で説明される様々な実施形態に関連して使用され得る有線または無線処理システムの例を示す機能ブロック図である。
【発明を実施するための形態】
【0025】
図3A及び3Bは、本明細書で開示される実施形態に従って第2層のDSTアドレスを決定するように構成されたネットワークアクセラレーションアプリケーション310の概略機能流れ図を示す。
図2と同様に、
図3は、オペレーティングシステムに含まれるアプリケーション310及びネットワークスタック130を示す。ネットワークスタック130は、
図1のネットワークスタック130と実質的に同様であり得る。アプリケーション310は、ネットワークスタック130のアプリケーション層に存在し、データパケット交換を加速するためにNICを直接制御するように構成される(NICは、例示的にアプリケーション310内に示される)点で、
図2のアプリケーション210と同様であり得る。したがって、アプリケーション210と同様に、アプリケーション310は、カーネル140及びそれによって実装されるネットワークスタックの層をバイパスして、データパケットを直接送信することができる。
【0026】
アプリケーション310は、また、パケットの加速送信で使用するための第2層のDSTアドレスを決定するように構成される。例えば、アプリケーション310は、カーネル140及びネットワークスタック130を活用して第2層のDSTアドレスを決定し、第2層のDSTアドレスをARPデータベース362(例えば、ARPキャッシュまたは他の一時データ記憶媒体)に記憶するように構成される。次に、第2層のDSTアドレスは、(
図3Bに示されるように)、アプリケーション310によってプログラムで取得され、加速されたUDP420の第2層のヘッダをプログラムでポピュレートするために使用され得る。UDP420は、両方のUDPが、それぞれのアプリケーションによって直接制御及び送信される加速されたパケットであるという点で、
図2のUDP220と実質的に同様であり得る。
【0027】
例えば、ステップ1(大きな数字1で示される)で、アプリケーション310は、ファントムUDP320などのファントムパケットを作成するように構成され、作成する。一実施形態では、ファントムUDP320のペイロードに一意認識子(UID)がポピュレートされる。UIDは、ファントムUDP320を一意に認識できる任意のグローバル一意認識子(GUID)であり得る。例えば、いくつかの実施形態では、UIDは64ビットの擬似ランダム値であってもよい。ただし、UIDは、任意のビット長であり得、オペレータの所望に応じて擬似ランダム、ランダム、または非ランダムであり得る。または、アプリケーション310がファントムUDP320を認識するための他の方法を使用することができる。例えば、アプリケーション310が加速されたパケットのみを送信している場合、カーネルからのUDPはすべてファントムUDPでなければならない。さらに別の例として、ファントムUDPのヘッダのソースIPを事前定義されたアドレスに設定する。より一般的には、ファントムUDP320を示すものとしてアプリケーション310に知られている任意の基準または基準のセットを使用することができる。
【0028】
ファントムUDP320は、ネットワークを介した伝送用の加速されたUDP(例えば、UDP220及び/またはUDP420)を作成する前に、第2層のDSTアドレスを解決するために使用される。アプリケーション310は、
図2に関連して上述したように、1つ以上のプロトコルヘッダをポピュレートすることができる。または、ファントムUDP320の1つ以上のプロトコルヘッダが未ポピュレートのままになる。特に、第2層のヘッダ324がプログラムで決定することができないため、ヘッダ324はポピュレートされない。
図3Aは、アプリケーション310がヘッダ324(太字で示されるDST MAC)を除くすべてのヘッダをポピュレートしたことを示す。ファントムUDP320が作成されると、それは、
図1に関連して上述したように、カーネル140にソケット接続されるかまたは提出される。
【0029】
ステップ2(大きな数字2で示される)では、アプリケーション層でアプリケーション310によってポピュレートされなかった任意のプロトコルヘッダが解決され、例えば、
図1に関連して上述したように、カーネル140によってポピュレートされる。具体的には、第2層のヘッダ324がポピュレートされないため、カーネル内の層150(例えば、ネットワークスタック130のデバイスドライバ層または第2層)が第2層のDSTアドレスを解決する。例えば、ネットワークスタック130の第2層は、解決プロセス360を実行し、これは、上述した解決プロセス160と同一または実質的に同様であり得る。ファントムUDP320はネットワークスタック130をトラバースするため、任意のセキュリティ対策、ファイアウォール対策、及び/またはルーティングルールが、ネットワークスタックによってポピュレートされた情報に適用される。したがって、ファントムUDP320は、そのような手段を考慮し、定位置にあるセキュリティプロトコルを回避しない。
【0030】
例えば、解決手順360は、ネットワークルールに従ってDST IPアドレスに従って第2層の宛先アドレスを記憶するアドレス解決プロトコル(ARP)データベース362(例えば、キャッシュまたは他の一時データ記憶媒体)にアクセスすることを含み得る。例えば、ARPデータベース362は、データパケットをDST IPアドレスに送信するために使用されるネクストホップ宛先アドレス(例えば、スイッチ要素、ルーター、ゲートウェイなど)のDST MACアドレスを記憶する。ネクストホップMACアドレスは、ネットワークルール、セキュリティ対策、及び/またはファイアウォール対策などのルーティングルールを説明する所定のルールセットに基づくものであり得る。これらのルールは、ネットワーク/システム管理者によって事前に定義され得る。DST MACアドレスは、ファントムUDP320にポピュレートされたDST IPアドレスのAPPデータベース362にある場合、ネットワークスタック130は、解決されたDST MACアドレスを第2層のプロトコルヘッダにポピュレートする。そうでなければ、ARP解決交換364(交換164と同様であり得る)が実行される。交換164と同様に、ARP解決交換364は、定位置にあるDST IPアドレス及びネットワーク管理者ルールに基づいてARP要求パケットを送信するネットワークスタックの第2層を含む。宛先デバイスは、ネクストホップ宛先デバイスのDST MACアドレスを含むARP応答パケットでARP要求に応答する。ステップ3で、ネットワークスタック(例えば、デバイスドライバ層または第2層)は、第2層のプロトコルヘッダ324にDST MACアドレスをポピュレートする。
【0031】
ステップ3(大きな数字3で示される)で、ファントムUDP320が仮想NIC(例えば、NIC TX)に提供される。仮想NICを制御するアプリケーション310は、ペイロード322内のUIDを認識し、UIDの認識に基づいてパケットをファントムUDPとして認識するように構成される。アプリケーション310は、ペイロードに適用されてUIDを認識し、したがってUDPをファントムUDPとして認識する一連のルールを含み得る。ファントムUDP320が認識されると、アプリケーション310は、関連するプロトコルヘッダ情報、例えば、アプリケーションがステップ1で事前ポピュレートできなかった情報を抽出し、抽出された情報をデータストレージデバイス370に記憶する。例えば、ステップ4(大きな数字4で示される)で、アプリケーション310は、ファントムUDP320の第2層のヘッダ324から第2層のDSTアドレスを抽出し、第2層のDSTアドレスをデータストレージデバイス370に記憶する。いくつかの実施形態では、データストレージデバイス370は、キャッシュメモリまたは他の一時記憶媒体である。
【0032】
また、ステップ4で、アプリケーション310の制御下にある仮想NIC及び/または実際のNIC(一般にNICと呼ばれる)は、所与のUDPを送信のために物理層に提出するか否かを決定する。例えば、アプリケーション310は、ペイロードのUIDに基づいてパケットをファントムUDP320として認識し、仮想NICは、ファントムUDP320がネットワークを介して送信されるべきではなく、ドロップされると判断する。
【0033】
情報がデータストレージデバイス370に記憶されると、その情報を使用して、UDPのプロトコルヘッダにプログラムでポピュレートし、伝送を加速することができる。例えば、
図3Bに示されるように、アプリケーション310は、加速されたUDP420を作成し、データストレージデバイス370から関連情報を取得することによって、第2層のヘッダを含む各プロトコルヘッダにポピュレートする。ステップ5におけるUDP420及びアプリケーション310(大きな数字5で示される)は、第2層のヘッダもアプリケーション310によってポピュレートされることを除いて、
図2のUDP220及びアプリケーション210と同様であり得る。アプリケーション310は、カーネル140及びそれによって実装されるネットワークスタック130の層を完全にバイパスして、パケットを高いデータレートで連続的に送信することができる。
【0034】
本明細書で説明する実施形態の非限定的な利点は、アプリケーション310が、ネットワーク上でデータパケットを不必要に送信することなく、ネットワーク/システム管理者によってポピュレートされた任意のファイアウォールルール/対策、IPテーブル機能、ARP解決手順、または任意の他の構成を利用することによって、ネクストホップMACアドレスを決定することができる。不要なパケットは、必要か否かにかかわらず、各パケットが送信のためにネットワークリソースを必要とするため、データ交換レート/速度を低下させる。換言すれば、本明細書の実施形態は、OSに存在するAPIの欠点を解消して、ネクストホップMACアドレスを決定することができる。同様に、APIが存在する場合でも、本明細書の実施形態は、ネットワーク/システム管理者によって実装されたセキュリティ対策を説明することができる。
【0035】
カーネルネットワークスタックを使用する他のアプリケーションと共にある上記ネットワークスタック(カーネル)バイパス(dpdkを使用するものなど)は、カーネルバイパスソリューションによって確立された接続が、「通常の」ネットワークスタック接続に干渉しないようにする必要がある。潜在的なコンテンション領域の1つは、UDP及びTCPソケットなどのソケット接続で使用される第4層のポートである。以下の例示的な実施形態は、ネットワークスタック(BSD及びLinuxなど)がサーバ及びクライアント接続の両方で使用されるポートをどのように予約するか、及びこれがカーネルバイパスソリューションとどのように衝突するかを説明する。この例では、ソケット通信で使用されるポートを「予約」するために使用される方法は、bind()を呼び出すことである。
【0036】
接続が確立されると、オペレーティングシステムは未使用のソースポート番号を選択する必要がある。例えば、Linuxは、デフォルトでは、32768~61000(選択できるポート数は28Kである)の範囲に設定されるエフェメラルポート範囲からポートを選択する。Linuxでは、エフェメラルポート範囲はグローバルリソースである。実際には、ポート番号は16ビット長であるため、ポート範囲を可能な選択肢の64Kまで拡張できる。複数の宛先アドレスを使用すると、ほぼ無制限の数の接続を確立することができる。ただし、単一の(宛先IP、宛先ポート)ペアに対して64Kを超える同時接続(デフォルトのエフェメラルポート範囲で28K)を確立すると、失敗する。
【0037】
connect()を呼び出す前にbind()を呼び出すことで、特定のソースIPとポートを選択するようカーネルに要求することができる。次に例を示す。
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#
ソースアドレスを192.168.1.21:1234とする。
s.bind((“192.168.1.21”,1234))
s.connect((www.google.com,80))
【0038】
このアプローチは、「bind before connect」と呼ばれることがよくある。ポート番号0を指定するということは、カーネルが、要求アプリケーションのポート割り当てを行う必要があることを意味する。次に例を示す。
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((“192.168.1.21”,0))
s.connect((www.google.com,80))
【0039】
この方法はよく知られているが、キャッチがある。バインドが通常、ソケットをリッスンするために呼び出されるため、カーネルはソースアドレスが他のユーザーと共有されていないことを確認する必要がある。それは問題である。この技術をこの形式で使用する場合、合計で64k(エフェメラルポート範囲)を超える発信接続を確立することは不可能である。その後、bind()を呼び出そうとすると、EADDRINUSEエラー、即ち、すべてのソースポートがビジーになることで失敗する。
【0040】
このキャッチを解消するために、アプリケーションは、SO_REUSEADDR設定を使用することができる。SO_REUSEADDRを設定することにより、アプリケーションは、バインドされたポートを他のユーザーと共有する意図をカーネルに通知するが、共有がプロトコル層で競合を引き起こさない場合に限る。
【0041】
以下は使用例である。
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind(( “192.168.1.21”,0))
s.connect((www.google.com,80))
【0042】
この例では、カーネルは他のソケットと直接競合しないポートを見つけるが、SO_REUSEADDR設定の欠如とは対照的に、TIME_WAIT内のポート及び既に確立された接続によって使用されるポートは再利用され得る。したがって、SO_REUSEADDRフラグを設定することにより、選択した1つのIPから複数の宛先への64k(エフェメラルポート範囲)を超える発信接続を有することができる。
【0043】
しかし、別のキャッチがある。アプリケーションがbind()を呼び出すとき、カーネルは、アプリケーションが要求しているソースアドレスしか知らない。アプリケーションは、後でconnect()を呼び出すときにのみ、宛先アドレスをカーネルに通知する。これは、カーネルが別の接続で既に使用されるソースポートを、アプリケーションが使用したいのと同じ宛先に再利用する可能性があるため、問題を引き起こす可能性がある。そのような場合、connect()はEADDRNOTAVAILエラーで失敗する。
【0044】
アプリケーションが単一の宛先に対して64k(エフェメラルポート範囲)を超える接続を確立したいとき、前述のすべてのアプローチを使用する必要がある。
カーネルパラメータを微調整して、エフェメラルポート範囲を広げる。
bind before connectを使用して、多くのソースIPアドレスを手動で指定する。
発信接続にSO_REUSEADDRフラグを設定する。
カーネルが使用可能なポートを使い果たした場合に備えて、bind()でEADDRINUSEエラーを確認する。
接続の競合がある場合は、connect()でEADDRNOTAVAILエラーを確認し、必要に応じて再試行する。
【0045】
残念ながら、通常のconnect()で確立された接続とbind-before-connectで確立された接続はうまく混合されない。ある技術で使用される発信ポートは、別の手法では再利用されない。connect()を使用して64k接続を確立すると、bind()はEADDRINUSEで失敗する。逆に、何千もの接続がbind before connectを使用している場合、ストレート接続はEADDRNOTAVAILで失敗する可能性がある。
【0046】
他のアプリケーションがbind-before-connectを使用しないシステムでは、エフェメラルポートを予約する前述のbind-before-connectアプローチは、そのようなアプリケーションと競合する可能性がある。したがって、アプリケーション310は、ネットワークスタックを使用して、ソケット接続に対して行う通常のバインド/接続呼び出しを使用してソケットを作成し、上記で説明した方法と同様に、カーネル140及びネットワークスタック150の層を介してファントムUDPを送信する。アプリケーションは、ファントムUDPのヘッダからソースポートと、必要に応じてソースIPを記憶し、それらを後続のカーネルバイパスパケットに使用する。単一のファントムUDP320を使用して、DST MACアドレスとソースポート(及び必要に応じてソースIP)を取得するか、別のファントムUDPを使用することができる。
【0047】
アプリケーションは、上記技術を使用してファントムUDPをNICに返すときに、そのファントムUDPを認識する。NICはファントムUDPをドロップし、送信しない。さらに、アプリケーション310は、ポート割り当てを「予約」したままにするために、カーネルバイパスパケット送信の間、ソケットを開いたままにしておく必要がある。たとえば、アプリケーションは、カーネルバイパスパケット送信の期間が終了するまでソケットを閉じない。
【0048】
本明細書の実施形態は、Linux(登録商標)OSに含まれるネットワークスタックを参照して説明されるが、実施形態は、Linux(登録商標)ネットワークスタックに限定されず、他のオペレーティングシステム(例えば、macOS(登録商標)、Windows(登録商標)など)に含まれるネットワークスタックに等しく適用可能であり得ることが理解される。さらに、本明細書の実施形態は、また、本明細書に記載の7層のプロトコルスタックに限定されず、インターネットプロトコルスイート(例えば、TCP/IPプロトコルスイート)、インターネットモデル、TCP/IP5層参照モデル、TCP/IPモデル、アーパネット参照モデル、開放型システム間相互接続モデル(OSIモデル)など、他のプロトコルスタックにも同様に適用される。
【0049】
図4は、本明細書で開示される実施形態に係る、開示されるシステム、方法、及び媒体の実施形態が動作し得るインフラストラクチャの機能ブロック図を示す。インフラストラクチャは、アプリケーション(複数可)412(例えば、アプリケーション310)、データストレージデバイス(複数可)414、及びネットワークスタック416を備えるクライアントコンピューティングデバイス410を含み得る。コンピューティングデバイス410は、1つ以上のネットワーク(複数可)420を介してデータパケットをコンピューティングデバイス410からネットワークサーバ(複数可)450及び/または1つ以上のネットワークサーバ(複数可)450に送信するために、1つ以上のネットワークノード430に通信可能に接続され得る。
【0050】
コンピューティングデバイス(複数可)410及びネットワークサーバ450は、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、またはその他の携帯電話、サーバ、ゲームコンソール、テレビ、セットトップボックス、電子キオスクを含むが、それらに限定されない有線及び/または無線通信が可能な任意のタイプのコンピューティングデバイスを含み得る。同様に、ノード(複数可)430は、有線及び/または無線通信が可能な任意のタイプのコンピューティングデバイスを含み得る。ノード(複数可)430は、例えば、データパケットをパケットソースデバイス(例えば、コンピューティングデバイス410)から宛先デバイス(例えば、ネットワークサーバ450)に、またはその逆にルーティングまたは送信することによって、ネットワーク間のゲートとして機能して、データが1つのコンピューティングデバイスから別のコンピューティングデバイスに流れるためのリンクを形成する任意のハードウェアデバイスとして実装され得る。ノード(複数可)430は、ルーター、ファイアウォール、サーバ、ハブ、ゲートウェイ、またはトラフィックがネットワークに出入りすることを可能にする任意のデバイスとして実装され得る。さらに、各ノード430は、1つ以上のデバイス及び/または他のノード430と通信可能に接続され得る。インフラストラクチャが、任意の数のゲートウェイ(複数可)、デバイス(複数可)、ユーザーシステム(複数可)、プラットフォーム(複数可)、サーバ(複数可)のセット、及びデータベース(複数可)を含み得ることは理解される。コンピューティングデバイス410及びネットワークサーバ450として実装され得る例示的な有線または無線システムは、
図5の有線または無線システム500として示される。
【0051】
アプリケーション(複数可)412及びネットワークスタック416は、命令としてデータストレージデバイス(複数可)414に記憶され、ピューティングデバイス410によって実行され、そこで機能を実行する。上述のように、ネットワークスタック416は、コンピューティングデバイス410によって実行されるオペレーティングシステムに含まれるカーネルを含む。ネットワークスタック416は、
図1~
図3Bに関連して上述したネットワークスタック430と同様であり得る、または任意の他のタイプの通信プロトコルスタックと同様であり得る。アプリケーション(複数可)412は、アプリケーション410、アプリケーション210、及び/またはアプリケーション310のうちの1つ以上であり得る。例えば、アプリケーション310は、アプリケーション(複数可)414の1つとしてコンピューティングデバイス410にインストールされ、
図3A及び
図3Bに関連して説明された高データレート伝送用の加速ネットワーキングアプリケーションのために実行され得る。したがって、コンピューティングデバイス410は、
図3A及び
図3Bに関連して本明細書で説明したように、ネットワークサーバ(複数可)450にデータパケットを送信することができる。
【0052】
ネットワーク(複数可)420は、インターネットを含み得、サーバ(複数可)450は、ハイパーテキスト転送プロトコル(HTTP)、セキュアHTTP(HTTPS)、ファイル転送プロトコル、FTPセキュア(FTPS)、SSH FTP(SFTP)などの標準伝送プロトコル及び独自のプロトコルを使用して、インターネットを介してノード430及びコンピューティングデバイス410と通信し得る。プラットフォーム410は、ネットワーク(複数可)420の単一のセットを介して様々なシステムに接続されるように示されるが、プラットフォーム410が1つ以上のネットワークの異なるセットを介して様々なシステムに接続され得ることは理解される。
【0053】
ネットワークサーバ(複数可)450は、1つ以上のウェブサイト、ウェブサービス、及び/またはウェブコンテンツをホストするウェブサーバを含み得る。ウェブサイトが提供される実施形態では、ウェブサイトは、例えば、ハイパーテキストマークアップ言語(HTML)または他の言語(例えば、グラフィックベース及び/またはテキストベースの言語)で生成されたウェブページを含む、1つ以上のユーザインタフェースを含み得る。ネットワークサーバ(複数可)450は、コンピューティングデバイス410からの要求に応答して、これらのユーザインタフェースを送信または提供する。ネットワークサーバ(複数可)450へのデータの要求及び応答は、標準通信プロトコル(例えば、HTTP、HTTPS)を使用して、インターネットを含み得るネットワーク(複数可)420を介して通信され得る。応答及び要求は、通信ノード430によって受信され、ルーティングルールに従って通信ノード430によってネットワークサーバ450にルーティングされ得る。ルーティングルールは、例えば、上述のようにデータパケットのプロトコルヘッダをポピュレートする際に参照され得る。
【0054】
コンピューティングデバイス410は、ネットワークサーバ(複数可)450からコンテンツ及びデータを要求し得る。要求は、データパケットの形で送信され得、ネットワーク420を介して要求をパケットとして送信するノード(複数可)430を使用して、ネットワークサーバ(複数可)450に送信される。要求パケットを受信すると、ネットワークサーバ(複数可)は通常、要求されたコンテンツを取得し、要求されたコンテンツをパケットに分割し、要求元のクライアントデバイス410にパケットを送信する。ノード430(複数可)は、ネットワークを介してこれらのパケットをクライアントデバイス410に送信する。
【0055】
図4に示される構成要素を含み得る例示的なプラットフォームは、Channelizer(登録商標)、Combiner(登録商標)、quantumRadio(登録商標)、quantumRX Wideband Software Receiver(登録商標)、DataDefender(登録商標)、Kratos Defence&Security Solutions,Inc.が提供する同様の製品を含むが、これらに限定されない。このような製品は、本明細書で開示される実施形態を活用することによって、高いデータレート及び小さなパケットサイズの転送を達成するために実装され得る。例えば、本明細書のシステムは、1500バイトであり得る各パケットの最大伝送単位(MTU)を使用して、3Gbps以上のパケット伝送速度を達成することができる。しかしながら、他の製造業者からの他のプラットフォームも本明細書の実施形態を利用して、小さなパケットサイズで加速されたデータ伝送速度を達成することができることは理解される。
【0056】
図5は、本明細書で説明される様々な実施形態に関連して使用され得る有線または無線処理システム500の例を示す機能ブロック図である。例えば、システム500は、(例えば、1つ以上のソフトウェアモジュールを記憶及び/または実行する)上記機構、プロセス、方法、または機能のうちの1つ以上として、またはこれらと併せて使用され得、コンピューティングデバイス410、サーバ(複数可)450、通信ノード(複数可)430、及び/または本明細書で説明される他のデバイスの構成要素を表し得る。システム500は、サーバまたは任意の従来のパーソナルコンピュータ、または有線または無線データ通信が可能な任意の他のプロセッサ対応デバイスであり得る。当業者には明らかなように、他のコンピュータシステム及び/またはアーキテクチャも使用することができる。さらに、システム500が特定の要素で示されるが、それが表す特定の構成要素に応じて、示される要素よりも少ないまたは多い要素を含み得ることは理解される。例えば、無線通信機能のないシステム500は、ベースバンド560、無線機565、及びアンテナ570を含まない場合がある。
【0057】
システム500は、好ましくは、プロセッサ510などの1つ以上のプロセッサを含む。入力/出力を管理するための補助プロセッサ、浮動小数点数学的演算を実行する補助プロセッサ、信号処理アルゴリズムの高速実行に適したアーキテクチャを有する専用マイクロプロセッサ(例えば、デジタルシグナルプロセッサ)、メイン処理システムに従属するスレーブプロセッサ(例えば、バックエンドプロセッサ)、デュアルまたはマルチプロセッサシステム用の追加のマイクロプロセッサまたはコントローラ、またはコプロセッサなどの追加のプロセッサは提供され得る。そのような補助プロセッサは、ディスクリートプロセッサであってもよいし、プロセッサ510と統合されてもよい。システム500と共に使用されるプロセッサの例は、Pentium(登録商標)プロセッサ、Core i7(登録商標)プロセッサ、Xeon(登録商標)プロセッサ、及びカリフォルニア州サンタクララのIntel Corporationから入手可能な他のモデル、及びカリフォルニア州サニーベールのAdvanced Micro Deviceなどの他の製造業者からのハードウェアプロセッサを含むが、これらに限定されない。
【0058】
プロセッサ510は、通信バス505に接続されることが好ましい。通信バス505は、ストレージとシステム500の他の周辺コンポーネントとの間の情報転送を容易にするデータチャネルを含み得る。さらに、通信バス505は、データバス、アドレスバス、及び制御バス(図示せず)を含む、プロセッサ510との通信に使用される信号のセットを提供することができる。通信バス505は、業界標準アーキテクチャ(ISA)、拡張業界標準アーキテクチャ(EISA)、マイクロチャネルアーキテクチャ(MCA)、周辺コンポーネント相互接続(PCI)ローカルバス、またはIEEE 488汎用インタフェースバス(GPIB)、IEEE 696/S-100などを含む電気電子技術者協会(IEEE)によって公布された標準に準拠するバスアーキテクチャなど、任意の標準または非標準バスアーキテクチャを含み得る。
【0059】
システム500は、メインメモリ515を含むことが好ましく、二次メモリ520も含むことができる。メインメモリ515は、上記で議論され、少なくとも
図1~
図3Bに示される機能及び/またはモジュールのうちの1つ以上など、プロセッサ510上で実行されるプログラムのための命令及びデータの記憶を提供する非一時的なコンピュータ可読媒体である。メモリに記憶され、プロセッサ510によって実行されるプログラムが、C/C++、Java、JavaScript、Perl、Visual Basic.NET、独自のビジュアルスクリプト言語、独自のスクリプト言語などを含むが、これらに限定されない任意の適切な言語に従って記述及び/またはコンパイルすることができることは理解される。メインメモリ515は、通常、ダイナミックランダムアクセスメモリ(DRAM)及び/またはスタティックランダムアクセスメモリ(SRAM)などの半導体ベースのメモリである。他の半導体ベースのメモリタイプは、例えば、読み取り専用リメモリ(ROM)を含むシンクロナスダイナミックランダムアクセスメモリ(SDRAM)、ラムバスダイナミックランダムアクセスメモリ(RDRAM)、強誘電体ランダムアクセスメモリ(FRAM)などを含む。
【0060】
二次メモリ520は、場合によって、内部メモリ525及び/またはリムーバブル媒体530、例えば、フロッピーディスクドライブ、磁気テープドライブ、コンパクトディスク(CD)ドライブ、デジタル多用途ディスク(DVD)ドライブ、その他の光学ドライブ、フラッシュメモリドライブ、microSDなどを任意に含むことができる。リムーバブルメディア530は、周知の方法で読み取られ、及び/または書き込みされる。リムーバブル記憶媒体530は、例えば、フロッピーディスク、磁気テープ、CD、DVD、SDカード、サムドライブなどであってもよい。
【0061】
リムーバブル記憶媒体530は、コンピュータ実行可能コード(すなわち、ソフトウェア)及び/またはデータを記憶した非一時的なコンピュータ可読媒体である。リムーバブル記憶媒体530に記憶されたコンピュータソフトウェアまたはデータは、プロセッサ510による実行のためにシステム500に読み込まれる。
【0062】
代替的な実施形態において、二次メモリ520は、コンピュータプログラムまたは他のデータまたは命令をシステム500にロードすることを可能にする他の類似の手段を含み得る。そのような手段は、例えば、外部記憶媒体595及びインタフェース540を含み得る。外部記憶媒体595の例は、外部ハードディスクドライブ、外部光学ドライブ、または外部磁気光学ドライブを含み得る。
【0063】
二次メモリ520の他の例は、プログラム可能な読み取り専用メモリ(PROM)、消去可能プログラム可能な読み取り専用メモリ(EPROM)、電気的消去可能な読み取り専用メモリ(EEPROM)、またはフラッシュメモリ(EEPROMと同様のブロック指向メモリ)などの半導体ベースのメモリを含み得る。また、ソフトウェア及びデータを外部媒体560からシステム500に転送できるようにする、任意の他のリムーバブル記憶媒体530及び通信インタフェース540も含まれる。
【0064】
システム500は、通信インタフェース540を含み得る。通信インタフェース540により、システム500と外部装置(例えば、プリンタ)、ネットワーク、または情報源との間でソフトウェア及びデータを転送することが可能になる。例えば、コンピュータソフトウェアまたは実行可能コードは、通信インタフェース540を介してネットワークまたはクラウドサーバからシステム500に転送され得る。通信インタフェース540の例は、内蔵ネットワークアダプタ、ネットワークインタフェースカード(NIC)、パーソナルコンピュータメモリカード国際協会(PCMCIA)ネットワークカード、カードバスネットワークアダプタ、ワイヤレスネットワークアダプタ、ユニバーサルシリアルバス(USB)ネットワークアダプタ、モデム、ネットワークインタフェースカード(NIC)、ワイヤレスデータカード、通信ポート、赤外線インタフェース、IEEE1394ファイヤワイヤ、またはシステム500をネットワークまたは別のピューティングデバイスとインタフェース接続することができる任意の他のデバイスを含む。
【0065】
通信インタフェース540は、好ましくは、イーサネットIEEE802標準、ファイバチャネル、デジタル加入者線(DSL)、非対称型デジタル加入者線(ADSL)、フレームリレー、非同期転送モード、統合デジタルサービス網(ISDN)、パーソナル通信サービス(PCS)、伝送制御プロトコル/インターネットプロトコル(TCP/IP)、シリアルラインインターネットプロトコル/ポイントツーポイントプロトコル(SLIP/PPP)などの業界が公布したプロトコル標準を実装し、カスタマイズされた、または非標準のインタフェースプロトコルも実装し得る。
【0066】
通信インタフェース540を介して転送されるソフトウェア及びデータは、一般に、電気通信信号555の形である。これらの信号555は、通信チャネル550を介して通信インタフェース540に提供されることが好ましい。一実施形態では、通信チャネル550は、有線または無線ネットワーク、または任意の様々な他の通信リンクであってもよい。通信チャネル550は、信号555を搬送し、ほんの数例を挙げると、ワイヤまたはケーブル、光ファイバ、従来の電話回線、携帯電話リンク、無線データ通信リンク、無線周波数(「RF」)リンク、または赤外線リンクを含む様々な有線または無線通信手段を使用して実装される。
【0067】
コンピュータ実行可能コード(即ち、開示されたアプリケーションなどのコンピュータプログラムまたはソフトウェア)は、メインメモリ515及び/または二次メモリ520に記憶される。コンピュータプログラムは、また、通信インタフェース540を介して受信され、メインメモリ515及び/または二次メモリ520に記憶され得る。このようなコンピュータプログラムは、実行されると、システム500が前述の本発明の様々な機能を実行できるようにする。
【0068】
この明細書では、「コンピュータ可読媒体」、「記憶媒体」、及び「媒体」という用語は、システム500にコンピュータ実行可能コード(例えば、ソフトウェア及びコンピュータプログラム)を提供するために使用される任意の非一時的なコンピュータ可読記憶媒体を指すために使用される。これらの媒体の例は、メインメモリ515、二次メモリ520(内部メモリ525、リムーバブル媒体530、及び外部記憶媒体595を含む)、及び通信インタフェース540と通信可能に結合された任意の周辺装置(ネットワーク情報サーバまたは他のネットワークデバイスを含む)を含む。これらの非一時的なコンピュータ可読媒体は、実行可能コード、プログラミング命令、及びソフトウェアをシステム500に提供する手段である。
【0069】
ソフトウェアを使用して実装される実施形態では、ソフトウェアは、コンピュータ可読媒体に記憶され、リムーバブル媒体530、I/Oインタフェース535、または通信インタフェース540を介してシステム500にロードされ得る。そのような実施形態では、ソフトウェアは、電気通信信号555の形でシステム500にロードされる。ソフトウェアは、プロセッサ510によって実行されると、プロセッサ510に、本明細書で前述した発明の特徴及び機能を実行させることが好ましい。
【0070】
一実施形態では、I/Oインタフェース535は、システム500の1つ以上の構成要素と1つ以上の入力及び/または出力デバイスとの間のインタフェースを提供する。入力デバイスの例は、キーボード、タッチスクリーンまたは他のタッチセンシティブデバイス、生体感知デバイス、コンピュータマウス、トラックボール、ペンベースのポインティングデバイスなどを含むが、それらに限定されない。出力デバイスの例は、陰極線管(CRT)、プラズマディスプレイ、発光ダイオード(LED)ディスプレイ、液晶ディスプレイ(LCD)、プリンター、真空蛍光ディスプレイ(VFD)、表面伝導型電子放出素子ディスプレイ(SED)、電界放出ディスプレイ(FED)などを含むが、それらに限定されない。
【0071】
システム500は、音声及びデータネットワークを介した無線通信を容易にするオプションの無線通信コンポーネントも含む。無線通信コンポーネントは、アンテナシステム570、無線システム565、及びベースバンドシステム560を含む。システム500では、無線周波数(RF)信号は、無線システム565の管理下でアンテナシステム570によって無線で送受信される。
【0072】
一実施形態では、アンテナシステム570は、アンテナシステム570に送信及び受信信号経路を提供するスイッチング機能を実行する1つ以上のアンテナ及び1つ以上のマルチプレクサ(図示せず)を含み得る。受信経路では、受信したRF信号を、マルチプレクサから、受信したRF信号を増幅し、増幅した信号を無線システム565に送信する低ノイズ増幅器(図示せず)に結合することができる。
【0073】
代替的な実施形態では、無線システム565は、様々な周波数及びプロトコルを介して通信するように構成された1つ以上の無線機を含み得る。一実施形態では、無線システム565は、復調器(図示せず)と変調器(図示せず)を1つの集積回路(IC)に組み合わせることができる。復調器と変調器は別のコンポーネントにすることもできる。着信経路では、復調器は、RFキャリア信号を取り除き、無線システム565からベースバンドシステム560に送信されるベースバンド受信オーディオ信号を残す。
【0074】
受信信号がオーディオ情報を含む場合、ベースバンドシステム560は信号を復号し、それをアナログ信号に変換する。次に、信号が増幅されてスピーカに送信される。ベースバンドシステム560は、また、マイクロフォンからアナログオーディオ信号を受信する。これらのアナログオーディオ信号は、デジタル信号に変換され、ベースバンドシステム560によって符号化される。ベースバンドシステム560は、また、送信用のデジタル信号を符号化し、無線システム565の変調器部分にルーティングされるベースバンド送信オーディオ信号を生成する。変調器は、ベースバンド送信オーディオ信号を、RF送信信号を生成するRFキャリア信号と混合する。RF送信信号はアンテナシステムにルーティングされ、電力増幅器(図示せず)を通過する場合がある。電力増幅器はRF送信信号を増幅し、それを、信号が送信用のアンテナポートに切り替えられるアンテナシステム570にルーティングする。
【0075】
ベースバンドシステム560はまた、プロセッサ510と通信可能に結合される。中央処理装置510は、データ記憶領域515及び520へのアクセスを有する。中央処理装置510は、好ましくは、メモリ515または二次メモリ520に記憶することができる命令(すなわち、コンピュータプログラムまたはソフトウェア)を実行するように構成される。コンピュータプログラムはまた、ベースバンドシステム560から受信され、データ記憶領域515または二次メモリ520に記憶されるか、または受信時に実行される。このようなコンピュータプログラムは、実行されると、システム500が前述の本発明の様々な機能を実行できるようにする。例えば、データ記憶領域515は、様々なソフトウェアモジュール(図示せず)を含み得る。
【0076】
様々な実施形態はまた、例えば、特定用途向け集積回路(ASIC)またはフィールドプログラマブルゲートアレイ(FPGA)などの構成要素を使用して、主にハードウェアで実装することもできる。本明細書に記載の機能を実行できるハードウェア状態マシンの実施態様も、当業者には明らかである。ハードウェアとソフトウェアの両方の組み合わせを使用して、様々な実施形態を実装することもできる。
【0077】
さらに、当業者は、上記図及び本明細書に開示される実施形態に関連して説明される様々な例示的な論理及び/または機能ブロック、モジュール、回路、及び方法ステップは、多くの場合、電子ハードウェア、コンピュータソフトウェア、またはその両方の組み合わせとして実装されることを理解する。ハードウェア及びソフトウェアのこの互換性を明確に示すために、多様な例示的な構成要素、ブロック、モジュール、回路、及びステップは、概してその機能性の点において上記で説明されている。係る機能性が、ハードウェアとして実装されるのか、それともソフトウェアとして実装されるのかは、特定のアプリケーション、及び全体のシステムに対して課される設計の制約に左右される。当業者は、説明する機能性を、それぞれの特定のアプリケーションに関して様々な点で実装することができるが、係る実施態様の決定は、本発明の範囲からの逸脱を生じさせるとして解釈されるべきではない。さらに、モジュール、ブロック、回路、またはステップ内の機能のグループ化は、説明を簡単にするためのものである。特定の機能またはステップは、本発明から逸脱することなく、あるモジュール、ブロック、または回路から別のモジュール、ブロック、または回路に移すことができる。
【0078】
さらに、本明細書に開示される実施形態に関連して説明された多様な例示的な論理ブロック、モジュール、機能、及び方法は、例えば汎用プロセッサ、デジタルシグナルプロセッサ(DSP)、ASIC、FPGA、または他のプログラマブル論理デバイス、離散ゲートもしくはトランジスタ論理、離散ハードウェア構成要素、または本明細書に説明する機能を実行することを目的としたその任意の組み合わせなどによって実装または実行できる。汎用プロセッサはマイクロプロセッサにすることができるが、代替ではプロセッサは、任意のプロセッサ、コントローラ、マイクロコントローラ、または状態機械にすることができる。プロセッサは、例えば、DSPと、マイクロプロセッサ、複数のマイクロプロセッサ、DSPコアと連動する1つ以上のマイクロプロセッサ、または任意の他の係る構成要素の組み合わせ等、コンピューティングデバイスの組み合わせとしても実装できる。
【0079】
さらに、本明細書に開示される実施形態と関連して説明する方法またはアルゴリズムのステップは、ハードウェアで、プロセッサによって実行されるソフトウェアモジュールで、または該2つの組み合わせで直接的に実現できる。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、またはネットワーク記憶媒体を含む任意の他の形態の記憶媒体にあり得る。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるようにプロセッサに結合され得る。代替では、記憶媒体は、プロセッサに一体である場合がある。プロセッサ及び記憶媒体も、ASICにある場合がある。
【0080】
本明細書で説明するソフトウェアコンポーネントのいずれも、様々な形態をとることができる。例えば、コンポーネントは、スタンドアロンのソフトウェアパッケージである場合もあれば、より大きなソフトウェア製品に「ツール」として組み込まれたソフトウェアパッケージである場合もある。スタンドアロン製品として、または既存のソフトウェアアプリケーションにインストールするための増設パッケージとして、ウェブサイトなどのネットワークからダウンロードされてもよい。また、クライアントサーバソフトウェアアプリケーション、Web対応ソフトウェアアプリケーション、及び/またはモバイルアプリケーションとして利用できる場合もある。
【0081】
開示される実施形態の上記説明は、いずれかの当業者が発明を作成または使用することを可能にするために提供される。それらの実施形態に対する様々な修正は、当業者にとって容易に明らかであり、本明細書で説明された一般的な原理は、本発明の精神または範囲から逸脱することなく他の実施形態に適用されることができる。よって、本明細書で提示される説明及び図面は、本発明の現時点で好ましい実施形態を表し、したがって、本発明によって広く考慮される主題を表すことが理解されることになる。更に、本発明の範囲は、当業者にとって明白なることができる他の実施形態を完全に包含し、したがって、本発明の範囲は限定されないことが理解される。
【国際調査報告】