(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-15
(45)【発行日】2023-08-23
(54)【発明の名称】ハードウェアオフロードを有するアクセラレートされたQUICパケット処理のための技術
(51)【国際特許分類】
H04L 69/164 20220101AFI20230816BHJP
H04L 47/43 20220101ALI20230816BHJP
【FI】
H04L69/164
H04L47/43
【外国語出願】
(21)【出願番号】P 2019009999
(22)【出願日】2019-01-24
【審査請求日】2022-01-20
(32)【優先日】2018-03-16
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-06-29
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】マナシ デヴァル
(72)【発明者】
【氏名】グレゴリー バウアーズ
【審査官】鈴木 香苗
(56)【参考文献】
【文献】特開2008-042773(JP,A)
【文献】特開2010-283635(JP,A)
【文献】米国特許出願公開第2017/0180329(US,A1)
【文献】中国特許出願公開第104718720(CN,A)
【文献】中国特許出願公開第106921618(CN,A)
【文献】中国特許出願公開第106656909(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 69/164
H04L 47/43
(57)【特許請求の範囲】
【請求項1】
アクセラレートされたパケット処理のためのコンピューティングデバイスであって、
ネットワークコントローラと、
(i)前記ネットワークコントローラをQUIC接続に関連づけられた暗号化キーでプログラムし、(ii)第1のQUICパケットを前記ネットワークコントローラに渡すネットワークコントローラドライバであり、前記第1のQUICパケットは、QUICヘッダと平文ペイロードとを含むUDPパケットを含み、前記第1のQUICパケットは前記QUIC接続に関連づけられる、ネットワークコントローラドライバと、を含み、
前記ネットワークコントローラは、前記第1のQUICパケットの前記平文ペイロードを前記暗号化キーで暗号化して前記第1のQUICパケットの暗号化されたペイロードを生成する暗号アクセラレータを含み、
前記ネットワークコントローラは、前記平文ペイロードの暗号化に応答して、前記暗号化されたペイロードを含む前記第1のQUICパケットを前記QUIC接続に関連づけられたリモートコンピューティングデバイスに送信する、コンピューティングデバイス。
【請求項2】
前記第1のQUICパケットの前記平文ペイロードを暗号化することは、前記平文ペイロードをアプリケーションレイヤ暗号化プロトコルで暗号化することを含む、請求項1に記載のコンピューティングデバイス。
【請求項3】
前記ネットワークコントローラは、前記第1のQUICパケットを複数のセグメント化されたQUICパケットにセグメント化する大容量送信オフロードアクセラレータをさらに含み、前記セグメント化されたQUICパケットの各々は平文ペイロードを含み、所定のサイズ以下であり、
前記平文ペイロードを暗号化することは、前記セグメント化されたQUICパケットの各々の前記平文ペイロードを前記暗号化キーで暗号化して前記セグメント化されたQUICパケットの各々の暗号化されたペイロードを生成することを含み、
前記第1のQUICパケットを送信することは、前記複数のセグメント化されたQUICパケットを送信することを含む、請求項1に記載のコンピューティングデバイス。
【請求項4】
前記大容量送信オフロードアクセラレータはさらに、
前記第1のQUICパケットから前記QUICヘッダを前記セグメント化されたQUICパケットの各々にコピーし、
前記セグメント化されたQUICパケットの各々の前記QUICヘッダのパケット番号を更新する、請求項3に記載のコンピューティングデバイス。
【請求項5】
前記第1のQUICパケットを生成し、前記第1のQUICパケットの前記QUICヘッダはパケット番号を含み、
前記第1のQUICパケットの長さに基づいて前記第1のQUICパケットから生成されるセグメント化されたQUICパケットの数を計算し、
前記第1のQUICパケットの前記パケット番号と前記セグメント化されたQUICパケットの数とに基づいて、次のQUICパケットのための次パケット番号を計算するQUICプロトコルスタック、をさらに含む請求項3に記載のコンピューティングデバイス。
【請求項6】
コンピューティングデバイスのネットワークコントローラをQUIC接続に関連づけられた暗号化キーでプログラム
し、
第1のQUICパケットを前記コンピューティングデバイスの前記ネットワークコントローラに渡
し、前記第1のQUICパケットは、QUICヘッダと平文ペイロードとを含むUDPパケットを含み、前記第1のQUICパケットは前記QUIC接続に関連づけら
れ、
前記ネットワークコントローラにより、前記第1のQUICパケットの前記平文ペイロードを前記暗号化キーで暗号化して前記第1のQUICパケットの暗号化されたペイロードを生成
し、
前記ネットワークコントローラにより、前記平文ペイロード
を暗号化
したことに応答して、前記暗号化されたペイロードを含む前記第1のQUICパケットを前記QUIC接続に関連づけられたリモートコンピューティングデバイスに送信す
る
ことを前記コンピューティングデバイス
にさせるコンピュータプログラム。
【請求項7】
前記ネットワークコントローラにより、前記第1のQUICパケットの認証データを計算
し、
前記ネットワークコントローラにより、前記認証データを前記第1のQUICパケットに追加す
る
ことを前記コンピューティングデバイスにさら
にさせ、
前記第1のQUICパケットを送信することは、前記認証データを追加したことに応答して前記第1のQUICパケットを送信することを含む、請求項6に記載のコンピュータプログラム。
【請求項8】
前記ネットワークコントローラにより、前記第1のQUICパケットを複数のセグメント化されたQUICパケットにセグメント化
し、前記セグメント化されたQUICパケットの各々は平文ペイロードを含み、所定のサイズ以下であ
る
ことを前記コンピューティングデバイスにさら
にさせ、
前記平文ペイロードを暗号化することは、前記セグメント化されたQUICパケットの各々の前記平文ペイロードを前記暗号化キーで暗号化して前記セグメント化されたQUICパケットの各々の暗号化されたペイロードを生成することを含み、
前記第1のQUICパケットを送信することは、前記複数のセグメント化されたQUICパケットを送信することを含む、請求項6に記載のコンピュータプログラム。
【請求項9】
前記ネットワークコントローラにより、前記第1のQUICパケットから前記QUICヘッダを前記セグメント化されたQUICパケットの各々にコピー
し、
前記ネットワークコントローラにより、前記セグメント化されたQUICパケットの各々の前記QUICヘッダのパケット番号を更新す
る
ことを前記コンピューティングデバイスにさら
にさせる、請求項8に記載のコンピュータプログラム。
【請求項10】
アクセラレートされたパケット処理のためのコンピューティングデバイスであって、
ネットワークコントローラと、
前記ネットワークコントローラをQUIC接続に関連づけられた暗号化キーでプログラムするネットワークコントローラドライバと、を含み、
前記ネットワークコントローラは、(i)リモートコンピューティングデバイスから第1のネットワークパケットを受信し、(ii)前記第1のネットワークパケットがQUICパケットを含むかどうかを決定し、前記QUICパケットは、QUICヘッダと暗号化されたペイロードとを含むUDPパケットを含み、前記QUICパケットは前記QUIC接続に関連づけられ、
前記ネットワークコントローラは、前記第1のネットワークパケットがQUICパケットを含むとの決定に応答して前記第1のネットワークパケットの前記暗号化されたペイロードを前記暗号化キーで解読して前記第1のネットワークパケットの平文ペイロードを生成する暗号アクセラレータを含む、コンピューティングデバイス。
【請求項11】
第1のプロセッサコアとQUICプロトコルスタックとをさらに含み、
前記ネットワークコントローラは、(i)前記暗号化されたペイロードの解読に応答して所定の割り当て機能を所定のエントロピーソースで評価してキュー識別子を生成し、
前記所定のエントロピーソースは、前記第1のネットワークパケットに含まれる1つ以上のフィールドに対応し、前記所定の割り当て機能を前記所定のエントロピーソースで評価することは、前記所定の割り当て機能への入力として提供された前記所定のエントロピーソースに基づいて前記キュー識別子に対応する値を出力することを含み、(ii)前記所定の割り当て機能の評価に応答して前記第1のネットワークパケットを前記キュー識別子に関連づけられた受信キューに転送する受信側スケーリングアクセラレータをさらに含み、
前記QUICプロトコルスタックは、前記第1のプロセッサコアにより、前記第1のネットワークパケットの前記受信キューへの転送に応答して前記第1のネットワークパケットを処理し、前記第1のプロセッサコアは前記受信キューに関連づけられる、請求項10に記載のコンピューティングデバイス。
【請求項12】
前記ネットワークコントローラドライバはさらに、前記ネットワークコントローラ
により使用される前記所定のエントロピーソース
を指定する、請求項11に記載のコンピューティングデバイス。
【請求項13】
前記エントロピーソースは、前記第1のネットワークパケットの前記QUICヘッダのフィールドを含む、請求項11に記載のコンピューティングデバイス。
【請求項14】
前記エントロピーソースは、QUIC接続識別子又はQUICショートパケットタイプフィールドを含む、請求項13に記載のコンピューティングデバイス。
【請求項15】
前記エントロピーソースは、前記第1のネットワークパケットの前記平文ペイロードのフィールドを含む、請求項11に記載のコンピューティングデバイス。
【請求項16】
前記エントロピーソースは、QUICストリーム識別子を含む、請求項15に記載のコンピューティングデバイス。
【請求項17】
前記エントロピーソースは、前記第1のネットワークパケットのUDPソースIPアドレスとUDP宛先IPアドレスとUDPソースポートとUDP宛先ポートとを含むタプルを含む、請求項11に記載のコンピューティングデバイス。
【請求項18】
前記ネットワークコントローラドライバはさらに、前記ネットワークコントローラを前記所定の割り当て機能で構成する、請求項11に記載のコンピューティングデバイス。
【請求項19】
前記所定の割り当て機能は、前記エントロピーソースに基づくフィルタ機能を含む、請求項11に記載のコンピューティングデバイス。
【請求項20】
コンピューティングデバイスのネットワークコントローラをQUIC接続に関連づけられた暗号化キーでプログラム
し、
前記ネットワークコントローラにより、リモートコンピューティングデバイスから第1のネットワークパケットを受信
し、
前記ネットワークコントローラにより、前記第1のネットワークパケットがQUICパケットを含むかどうかを決定
し、前記QUICパケットは、QUICヘッダと暗号化されたペイロードとを含むUDPパケットを含み、前記QUICパケットは前記QUIC接続に関連づけら
れ、
前記ネットワークコントローラにより、前記第1のネットワークパケットがQUICパケットを含むと決定したことに応答して、前記第1のネットワークパケットの前記暗号化されたペイロードを前記暗号化キーで解読して前記第1のネットワークパケットの平文ペイロードを生成す
る
ことを前記コンピューティングデバイス
にさせるコンピュータプログラム。
【請求項21】
前記ネットワークコントローラにより、前記暗号化されたペイロードを解読したことに応答して、所定の割り当て機能を所定のエントロピーソースで評価してキュー識別子を生成
し、前記所定のエントロピーソースは、前記第1のネットワークパケットに含まれる1つ以上のフィールドに対応し、前記所定の割り当て機能を前記所定のエントロピーソースで評価することは、前記所定の割り当て機能への入力として提供された前記所定のエントロピーソースに基づいて前記キュー識別子に対応する値を出力することを含み、
前記ネットワークコントローラにより、前記所定の割り当て機能を評価したことに応答して、前記第1のネットワークパケットを前記キュー識別子に関連づけられた受信キューに転送
し、
前記コンピューティングデバイスの第1のプロセッサコアにより、前記第1のネットワークパケットを前記受信キューに転送したことに応答して前記第1のネットワークパケットを処理
し、前記第1のプロセッサコアは前記受信キューに関連づけられ
る
ことを前記コンピューティングデバイスにさら
にさせる、請求項20に記載のコンピュータプログラム。
【請求項22】
前記エントロピーソースは、前記第1のネットワークパケットの前記QUICヘッダのフィールドを含む、請求項21に記載のコンピュータプログラム。
【請求項23】
前記エントロピーソースは、前記第1のネットワークパケットの前記平文ペイロードのフィールドを含む、請求項21に記載のコンピュータプログラム。
【請求項24】
前記エントロピーソースは、前記第1のネットワークパケットのUDPソースIPアドレスとUDP宛先IPアドレスとUDPソースポートとUDP宛先ポートとを含むタプルを含む、請求項21に記載のコンピュータプログラム。
【請求項25】
前記所定の割り当て機能は、前記エントロピーソースに基づくフィルタ機能を含む、請求項21に記載のコンピュータプログラム。
【請求項26】
請求項6乃至9又は請求項20乃至25のうちいずれか1項に記載のコンピュータプログラムを記憶したコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【背景技術】
【0001】
QUIC(クイックUDPインターネット接続(Quick UDP Internet Connections))は、トランスミッションコントロールプロトコル(Transmission Control Protocol;TCP)のような従来のネットワークプロトコルに取って代わるために使用され得る比較的新しいネットワークプロトコルである。QUICは、UDP(ユーザデータグラムプロトコル(User Datagram Protocol))の上に構築されたトランスポートレイヤプロトコルである。QUICは、UDPを通じての2つのエンドポイント間の多重された接続のセットをサポートし、低減された接続及びトランスポートレイテンシと共にTLS/SSLと同等のセキュリティ保護を、並びに輻輳を回避するために各方向における帯域幅推定を提供し得る。ゆえに、QUICは、TCPのような従来のプロトコルと比較して改善された暗号化及び改善された接続レイテンシを提供することが意図され、同時に、柔軟な輻輳管理及び既存のネットワークインフラストラクチャとの互換性も提供する。比較的新しくはあるが、QUICは全インターネットトラフィックのうち7%をすでに形成し、特定の大規模ネットワークユーザがQUICを現在有効にしている。現在のQUICプロトコル実装(例えば、ユーザモードプロトコルスタック及びライブラリ)はソフトウェアで十分に実装されている。
【0002】
関連出願の相互参照
本出願は、2018年3月16日に出願された米国仮特許出願第62/644,045号の利益を主張する。
【図面の簡単な説明】
【0003】
本明細書で説明される概念は、添付図面において限定としてでなく例として示される。例示の簡潔さ及び明確さのため、図に示される要素は必ずしも縮尺どおりに描かれていない。適切と考えられる場合、参照ラベルは、対応する又は類似の要素を示すために複数の図の中で繰り返されている。
【
図1】アクセラレートされたQUICパケット処理のためのシステムの少なくとも1つの実施例の簡略ブロック図である。
【
図2】
図1のコンピューティングデバイスの環境の少なくとも1つの実施例の簡略ブロック図である。
【
図3】
図1~2のシステムにより実行できるハードウェアオフロードでQUICパケット処理をアクセラレートする方法の少なくとも1つの実施例の簡略相互作用図である。
【
図4】
図1~2のコンピューティングデバイスにより実行できるアクセラレートされたラージパケットセグメンテーションのための方法の少なくとも1つの実施例の簡略フロー図である。
【
図5】
図1~2のコンピューティングデバイスにより実行できるアクセラレートされたパケット暗号化のための方法の少なくとも1つの実施例の簡略フロー図である。
【
図6】
図1~2のコンピューティングデバイスにより実行できるアクセラレートされたパケット解読のための方法の少なくとも1つの実施例の簡略フロー図である。
【
図7】
図1~2のコンピューティングデバイスにより実行できるアクセラレートされた受信側スケーリング及びフィルタリングのための方法の少なくとも1つの実施例の簡略フロー図である。
【発明を実施するための形態】
【0004】
本開示の概念は様々な変更及び代替形式を受け入れる余地があるが、その具体的な実施例が図面に例として示されており、本明細書で詳細に説明される。しかしながら、本開示の概念を開示される特定の形式に限定する意図はないことが理解されるべきであり、逆に、その意図は本開示及び別記の特許請求の範囲と一貫する全ての変更、均等物、及び代替物をカバーすることである。
【0005】
明細書における「1つの実施例」、「実施例」、「例示的な実施例」等への参照は、説明される実施例が特定の特徴、構造、又は特性を含み得るが、あらゆる実施例が必ずその特定の特徴、構造、又は特性を含んでもよく、あるいは含まなくてもよいことを示す。さらに、こうした表現は、必ずしも同じ実施例を参照するわけではない。さらに、特定の特徴、構造、又は特性が一実施例と関連して説明されるとき、明示的に説明されるか否かにかかわらず、他の実施例と関連してこうした特徴、構造、又は特性を達成することは当業者の知識の範囲内であると考えられる。さらに、「少なくとも1つのA、B、及びC」の形式のリストに含まれる項目は、(A)、(B)、(C)、(A及びB)、(A及びC)、(B及びC)、又は(A、B、及びC)を意味し得ることが十分理解されるべきである。同様に、「A、B、又はCのうち少なくとも1つ」の形式で列挙された項目は、(A)、(B)、(C)、(A及びB)、(A及びC)、(B及びC)、又は(A、B、及びC)を意味し得る。
【0006】
開示される実施例は、いくつかの場合、ハードウェア、ファームウェア、ソフトウェア、又はこれらの任意の組み合わせで実現されてよい。開示される実施例は、1つ以上のプロセッサにより読み出し及び実行できる、一時的又は非一時的なマシン読取可能(例えば、コンピュータ読取可能)記憶媒体により搬送された命令又は該記憶媒体に記憶された命令として実現されてもよい。マシン読取可能記憶媒体は、任意の記憶デバイス、機構、又はマシンにより読取可能な形式の情報を記憶又は送信する他の物理的構造(例えば、揮発又は不揮発性のメモリ、媒体ディスク、又は他の媒体デバイス)として具現化されてよい。
【0007】
図面において、いくつかの構造的又は方法の特徴が具体的な配置及び/又は順序づけで示されることがある。しかしながら、こうした具体的な配置及び/又は順序づけは要求されない可能性があることが十分理解されるべきである。むしろ、いくつかの実施例において、こうした特徴は、例示的な図に示されるのとは異なる方式及び/又は順序で配置されることがある。さらに、特定の図に構造的又は方法の特徴を含むことは、こうした特徴が全ての実施例で要求されることを示すようには意図されず、いくつかの実施例において、含まれなくてもよく、あるいは他の特徴と組み合わせられてもよい。
【0008】
次に
図1を参照し、アクセラレートされた(accelerated)QUICパケット処理のためのシステム100が、ネットワーク104を通じて通信する複数のコンピューティングデバイス102を含む。各コンピューティングデバイスは、QUICプロトコルネットワークトラフィックのためのハードウェアアクセラレータサポートを含む。送信において、ハードウェアアクセラレータはQUICペイロードを暗号化し、ラージ(large)QUICパケットを必要に応じてより小さいパケットにセグメント化する。受信において、ハードウェアアクセラレータはQUICペイロードを解読し、複数の利用可能な方法のうち1つを使用して受信キューを選択して、多くのプロセッサ120コアにわたりホスト処理を分配する。ゆえに、コンピューティングデバイス102は、現在の解決策により使用されるソフトウェアのみのQUICと比較されたとき、大きく改善されたQUICプロトコル性能を提供し、改善されたスループット及び低減されたプロセッサ使用量を提供し得る。さらに、ハードウェアアクセラレートされたQUICプロトコルパケット処理は、ホストプロセッサのプロセッササイクル使用量を低減し、クラウドサービスプロバイダに価値を提供し得る。
【0009】
各コンピューティングデバイス102は、本明細書で説明される機能を実行できる任意のタイプの計算又はコンピュータデバイスとして具現化されてよく、コンピュータ、サーバ、ワークステーション、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、モバイルコンピューティングデバイス、ウェアラブルコンピューティングデバイス、ネットワーク電化製品、ウェブ電化製品、分散コンピューティングシステム、プロセッサベースのシステム、及び/又は消費者電子デバイスを限定なく含む。
図1に示されるように、コンピューティングデバイス102は、プロセッサ120、入力/出力サブシステム124、メモリ126、データ記憶デバイス128、通信サブシステム130、アクセラレータ140、及び/又はサーバ若しくは同様のコンピューティングデバイスで一般に見られる他のコンポーネント及びデバイスを例示的に含む。当然ながら、コンピューティングデバイス102は、他の実施例において、サーバコンピュータで一般に見られるもののような他の又はさらなるコンポーネント(例えば、様々な入力/出力デバイス)を含んでもよい。さらに、いくつかの実施例において、例示的なコンポーネントの1つ以上が別のコンポーネントに組み込まれ、あるいはその他の方法で別のコンポーネントの一部を形成してもよい。例えば、メモリ126又はその一部が、いくつかの実施例においてプロセッサ120に組み込まれてもよい。
【0010】
プロセッサ120は、本明細書で説明される機能を実行できる任意のタイプのプロセッサとして具現化されてよい。プロセッサ120は例示的にマルチコアプロセッサであるが、他の実施例において、プロセッサ120はシングル若しくはマルチコアプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ、又は他のプロセッサ若しくは処理/制御回路として具現化されてもよい。例示的なプロセッサ120は複数のプロセッサコア122を含み、その各々はプログラムされた命令を実行できる独立した汎用処理ユニットである。例えば、各プロセッサコア122は、IA‐32又はIntel(登録商標)64のような汎用命令セットアーキテクチャ(instruction set architecture;ISA)からの命令を実行してもよい。1つのプロセッサコア122で例示されているが、いくつかの実施例においてプロセッサ120は、より多数のプロセッサコア122、例えば、4つのプロセッサコア122、14個のプロセッサコア122、28個のプロセッサコア122、又は異なる数を含んでもよい。さらに、単一のプロセッサ120を含むものとして例示されているが、いくつかの実施例においてコンピューティングデバイス102は、複数のプロセッサ120を有するマルチソケットサーバとして具現化されてもよい。
【0011】
メモリ126は、本明細書で説明される機能を実行できる任意のタイプの揮発又は不揮発性のメモリ又はデータ記憶装置として具現化されてよい。動作において、メモリ126は、オペレーティングシステム、アプリケーション、プログラム、ライブラリ、及びドライバのような、コンピューティングデバイス102の動作の間に使用される様々なデータ及びソフトウェアを記憶してよい。メモリ126は、I/Oサブシステム124を介してプロセッサ120に通信可能に結合され、I/Oサブシステム124は、プロセッサ120、アクセラレータ134、メモリ126、及びコンピューティングデバイス102の他のコンポーネントとの入力/出力動作を容易にする回路及び/又はコンポーネントとして具現化されてよい。例えば、I/Oサブシステム124は、メモリコントローラハブ、入力/出力制御ハブ、センサハブ、ファームウェアデバイス、通信リンク(すなわち、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、光ガイド、印刷回路板トレース等)、及び/又は入力/出力動作を容易にする他のコンポーネント及びサブシステムとして具現化され、あるいはその他の方法で含んでもよい。いくつかの実施例において、I/Oサブシステム124は、システムオンチップ(SoC)の一部を形成し、プロセッサ120、メモリ126、及びコンピューティングデバイス102の他のコンポーネントと共に単一の集積回路チップに組み込まれてもよい。
【0012】
データ記憶デバイス128は、例えば、メモリデバイス及び回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、不揮発フラッシュメモリ、又は他のデータ記憶デバイスのような、データの短期又は長期記憶について構成された任意のタイプの1つ又は複数のデバイスとして具現化されてよい。コンピューティングデバイス102は、通信サブシステム130をさらに含み、通信サブシステム130は、コンピュータネットワーク104を通じてコンピューティングデバイス102と他のリモートデバイスとの間の通信を可能にできる任意の通信回路、デバイス、又はこれらの集合として具現化されてよい。例えば、通信サブシステム130は、ネットワークインターフェースコントローラ(network interface controller;NIC)132、又はリモートデバイスとの間でネットワークデータを送信及び/又は受信する他のネットワークコントローラとして具現化され、あるいはその他の方法で含んでもよい。NIC132は、任意のネットワークインターフェースカード、ネットワークアダプタ、ホストファブリックインターフェース、ネットワークコプロセッサ、又はコンピューティングデバイス102をネットワーク104に接続する他のコンポーネントとして具現化されてよい。通信サブシステム130は、任意の1つ以上の通信技術(例えば、有線又は無線通信)及び関連プロトコル(例えば、イーサネット(登録商標)、InfiniBand(登録商標)、Bluetooth(登録商標)、Wi‐Fi(登録商標)、WiMAX(登録商標)、3G、4G LTE(登録商標)等)を使用してこうした通信を達成するように構成されてよい。いくつかの実施例において、通信サブシステム132及び/又はNIC132は、SoCの一部を形成し、プロセッサ120及びコンピューティングデバイス102の他のコンポーネントと共に単一の集積回路チップに組み込まれてもよい。
【0013】
図1に示されるように、コンピューティングデバイス102は、アクセラレータ134をさらに含んでよい。アクセラレータ134は、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、組み込みデジタル論理ブロック、コプロセッサ、又はアクセラレートされたネットワーク機能を実行できる他のデジタル論理デバイスとして具現化されてよい。別個のコンポーネントとして例示されているが、いくつかの実施例において、アクセラレータ134はNIC132に組み込まれ、あるいはその他の方法で結合されてもよいことが理解されるべきである。さらに、又は別法として、いくつかの実施例において、アクセラレータ134は、プロセッサ120及びNIC132と共にマルチチップパッケージに含まれるFPGAとして具現化されてもよい。アクセラレータ134は、コヒーレント及び/又は非コヒーレントインターコネクトを含む複数の高速接続インターフェースを介してプロセッサ120及び/又はNIC132に結合されてもよい。
【0014】
コンピューティングデバイス102は、1つ以上の周辺デバイス136をさらに含んでよい。周辺デバイス136は、任意数のさらなる入力/出力デバイス、インターフェースデバイス、及び/又は他の周辺デバイスを含んでよい。例えば、いくつかの実施例において、周辺デバイス136は、タッチスクリーン、グラフィックス回路、グラフィカル処理ユニット(GPU)及び/又はプロセッサグラフィックス、オーディオデバイス、マイクロフォン、カメラ、キーボード、マウス、ネットワークインターフェース、及び/又は他の入力/出力デバイス、インターフェースデバイス、及び/又は周辺デバイスを含んでもよい。
【0015】
さらに、又は別法として、コンピューティングデバイス102に含まれるものとして例示されているが、プロセッサ120、メモリ126、データ記憶デバイス128、NIC132、及び/又はアクセラレータ134のようなコンピューティングデバイス102の1つ以上のコンポーネントが、複数のラック、スレッド、又は他のコンピューティングシャーシの中で物理的に分けられ、あるいはその他の方法で分散されてもよいことが理解されるべきである。こうした実施例において、コンピューティングデバイス102の1つ以上が、複数の分けられたコンポーネントからプールされ、あるいはその他の方法で構成されてもよい。こうした実施例において、NIC132は、仮想スイッチ又は他の仮想化環境に含まれてもよい。
【0016】
コンピューティングデバイス102は、ネットワーク104を通じて互いに及び/又はシステム100の他のデバイスとデータを送信及び受信するように構成されてよい。ネットワーク104は、任意数の様々な有線及び/又は無線ネットワークとして具現化されてよい。例えば、ネットワーク104は、有線若しくは無線のローカルエリアネットワーク(LAN)及び/又は有線若しくは無線のワイドエリアネットワーク(WAN)として具現化され、あるいはその他の方法で含んでもよい。そのようなものとして、ネットワーク104は、システム100のデバイス間の通信を容易にするための、さらなるコンピュータ、ルータ、及びスイッチのような任意数のさらなるデバイスを含んでもよい。例示的な実施例において、ネットワーク104は、ローカルイーサネットネットワークとして具現化される。
【0017】
次に
図2を参照し、例示的な実施例において、コンピューティングデバイス102は、動作の間に環境200を確立する。例示的な環境200は、アプリケーション202、QUICプロトコルスタック204、NICドライバ206、及びNIC132を含む。NIC132は、暗号アクセラレータ208、大容量送信オフロード(large send offload;LSO)アクセラレータ210、及び受信側スケーリング(receive-side scaling;RSS)アクセラレータ212をさらに含む。図示されるように、環境200の様々なコンポーネントは、ハードウェア、マイクロコード、ファームウェア、ソフトウェア、又はこれらの組み合わせとして具現化されてよい。そのようなものとして、いくつかの実施例において、環境200のコンポーネントの1つ以上が、回路又は電子デバイスの集合(例えば、アプリケーション回路202、QUICプロトコルスタック回路204、ドライバ回路206、暗号アクセラレータ回路208、LSOアクセラレータ回路210、及び/又はRSSアクセラレータ回路212)として具現化されてもよい。こうした実施例において、アプリケーション回路202、QUICプロトコルスタック回路204、ドライバ回路206、暗号アクセラレータ回路208、LSOアクセラレータ回路210、及び/又はRSSアクセラレータ回路212のうち1つ以上が、プロセッサ120、NIC132、アクセラレータ134、I/Oサブシステム124、及び/又はコンピューティングデバイス102の他のコンポーネントの一部を形成してもよいことが十分理解されるべきである。例示的な実施例において、アプリケーション202、QUICプロトコルスタック204、及びNICドライバ206は、プロセッサ120の1つ以上のプロセッサコア122により実行され、暗号アクセラレータ208、LSOアクセラレータ210、及びRSSアクセラレータ212は、ハードウェア、ファームウェア、マイクロコード、又はNIC132の他のリソースとして具現化される。さらに、又は別法として、いくつかの実施例において、暗号アクセラレータ208、LSOアクセラレータ210、及び/又はRSSアクセラレータ212は、1つ以上のスタンドアロンアクセラレータ134として具現化され、あるいはその他の方法で含まれてもよい。さらに、いくつかの実施例において、例示的なコンポーネントの1つ以上が別のコンポーネントの一部を形成してもよく、かつ/あるいは、例示的なコンポーネントの1つ以上が互いから独立していてもよい。
【0018】
アプリケーション202は、送信されるネットワークデータを生成し、かつ/あるいは受信したネットワークデータを処理するように構成されてよい。例えば、アプリケーション202は、パケットデータをメモリ126内の1つ以上のアプリケーションバッファに記憶してもよい。アプリケーション202は、任意のクライアント、サーバ、又はコンピューティングデバイス102により実行される他のネットワークアプリケーションとして具現化されてよい。
【0019】
QUICプロトコルスタック204は、送信されるQUICパケットを生成するように構成される。各QUICパケットは、QUICヘッダと平文ペイロードとを含むUDPパケットとして具現化されてよい。各QUICパケットは、リモートホスト(例えば、リモートコンピューティングデバイス102)とのQUIC接続に関連づけられてよい。ペイロードは、複数の多重されたQUICストリームを含んでよく、ゆえに、複数のQUICストリームヘッダを含んでもよい。各QUICパケットのQUICヘッダは、パケット番号を含む。いくつかの実施例において、各QUICパケットは、ネットワーク104及び/又はシステム100の他のデバイスによりサポートされる最大セグメントサイズ(maximum segment size;MSS)より大きくてもよい。QUICプロトコルスタック204は、各QUICパケットから生成されるセグメント化されたQUICパケットの数を、そのQUICパケットの長さに基づいて計算し、生成されることになるセグメント化されたQUICパケットの数に基づいて次のQUICパケットのパケット番号を更新するように構成されてよい。QUICプロトコルスタック204は、コンピューティングデバイス102の1つ以上のプロセッサコア122により、受信したネットワークパケットを処理するようにさらに構成される。プロセッサコア122は、これらパケットが関連づけられた受信キューに転送されたことに応答してネットワークパケットを処理してよい。
【0020】
NICドライバ206は、NIC132を各QUIC接続に関連づけられた暗号化キーでプログラムする(program)ように構成される。NICドライバ206は、QUICパケットを送信のためにネットワークコントローラ132に渡すようにさらに構成される。NICドライバ206は、NIC132が大容量送信オフロード(LSO)が可能であるかどうかを決定し、そうでない場合、QUICパケットを複数のセグメント化されたQUICパケットにセグメント化するようにさらに構成されてもよい。NICドライバ206は、NIC132を所定のエントロピーソースで構成するようにさらに構成されてもよい。エントロピーソースは、QUIC接続識別子又はQUICショートパケットタイプフィールドのようなQUICヘッダのフィールドとして、QUICストリーム識別子のような平文ペイロードのフィールドとして、UDPソースIPアドレスとUDP宛先IPアドレスとUDPソースポートとUDP宛先ポートとを含むタプルとして、又は各々の受信したネットワークパケットから抽出された他のデータとして具現化されてよい。NICドライバ206は、NIC132を所定の割り当て機能(assignment function)で構成するようにさらに構成されてもよく、所定の割り当て機能は、ハッシュ機能、フィルタ機能、又は入力としてエントロピーソースを使用する他の機能として具現化されてよい。ドライバ206は、プロセッサコア122をそれぞれの受信キューに関連づけるようにさらに構成されてもよい。
【0021】
LSOアクセラレータ210は、QUICパケットが所定のMSSより大きいかどうかを決定し、そうである場合、QUICパケットを複数のセグメント化されたQUICパケットにセグメント化するように構成される。セグメント化されたQUICパケットの各々は平文ペイロードを含み、所定のMSS以下である。LSOアクセラレータ210は、QUICパケットからQUICヘッダをセグメント化されたQUICパケットの各々にコピーし、セグメント化されたQUICパケットの各々のQUICヘッダのパケット番号を更新するようにさらに構成されてもよい。
【0022】
暗号アクセラレータ208は、各々のQUICパケット及び/又はセグメント化されたQUICパケットの平文ペイロードを暗号化キーで暗号化して暗号化されたペイロードを生成するように構成される。いくつかの実施例において、QUIC暗号化は、ペイロードの暗号化の後、パケット番号を別個に暗号化してもよい。暗号アクセラレータ208は、各々のQUICパケット及び/又はセグメント化されたQUICパケットの認証データを計算し、認証データをそれぞれのQUICパケットに追加するようにさらに構成されてもよい。暗号アクセラレータ208は、受信したQUICパケットの暗号化されたペイロードを暗号化キーで解読して対応する平文ペイロードを生成するようにさらに構成される。暗号アクセラレータ208は、受信したQUICパケットに含まれる認証データを使用して受信したQUICパケットを検証するようにさらに構成されてもよい。
【0023】
RSSアクセラレータ212は、暗号化されたペイロードを解読したことに応答して、各々の受信したQUICパケットについて所定の割り当て機能を所定のエントロピーソースで評価してキュー識別子を生成するように構成される。RSSアクセラレータ212は、各々の受信したQUICパケットを対応するキュー識別子に関連づけられた受信キューに転送するようにさらに構成される。
【0024】
NIC132は、平文ペイロードを暗号化したことに応答して、暗号化されたペイロードを含むQUICパケット及び/又はセグメント化されたQUICパケットを、QUIC接続に関連づけられたリモートホストに送信するように構成される。NIC132は、リモートホストからネットワークパケットを受信し、各々の受信したネットワークパケットがQUICパケットであるかどうかを決定するようにさらに構成される。受信したネットワークパケットがQUICパケットである場合、NIC132は、上述されたように、受信したQUICパケットを暗号アクセラレータ208及び/又はRSSアクセラレータ212で処理してよい。
【0025】
次に
図3を参照し、使用において、システム100の2つのコンピューティングデバイス102a、102bが、アクセラレートされたQUICパケット処理のための方法300を実行し得る。いくつかの実施例において、方法300の動作は、
図2に示される各コンピューティングデバイス102の環境200の1つ以上のコンポーネントにより実行されてもよいことが十分理解されるべきである。例示的な例において、コンピューティングデバイス102aは送信機であり、コンピューティングデバイス102bは受信機である。しかしながら、いくつかの実施例において、各コンピューティングデバイス102a、102bは、送信機及び受信機の双方の動作を実行してもよい。方法300はブロック302で開始し、ブロック302において、プロセッサコア122aを有するコンピューティングデバイス102aは、QUICパケットを作成する。例えば、QUICパケットは、アプリケーション202、QUICプロトコルスタック204、及びNICドライバ206のうち1つ以上により生成されてもよい。QUICパケットは、QUICヘッダ及び平文ペイロードを含んでよく、平文ペイロードは、1つ以上の多重されたQUICストリームを含んでよい。プロセッサ122aは、QUICパケットを処理のためにNIC132aに渡す。
【0026】
ブロック304において、NIC132aを有するコンピューティングデバイス102aは、大容量送信オフロード(LSO)アクセラレーション(acceleration)を実行してよい。いくつかの実施例において、プロセッサ122aにより生成されたQUICパケットは、ネットワーク104又はシステム100の他のデバイスの最大セグメントサイズ(MSS)より大きくてもよい。NIC132aは、ラージQUICパケットを送信のために複数のより小さいQUICパケットにセグメント化してよい。LSOアクセラレーションのための方法の1つの可能な実施例が、以下で
図4に関連してさらに説明される。
【0027】
ブロック306において、NIC132aを有するコンピューティングデバイス102aは、送信される1つ以上のQUICパケットの平文ペイロードを暗号化する。NIC132aは、アプリケーションレイヤ暗号化プロトコルを含むQUICプロトコルに適した任意の暗号化プロトコルを使用してペイロードを暗号化してよい。NIC132aは、各QUIC接続について暗号化キーでコア122aによりプログラムされてよい。暗号化のアクセラレーションのための方法の1つの可能な実施例が、以下で
図5に関連してさらに説明される。
【0028】
ブロック308において、NIC132aを有するコンピューティングデバイス102aは、暗号化されたQUICパケットをリモートコンピューティングデバイス102bに送信する。ブロック310において、NIC132bを有するコンピューティングデバイス102bは、暗号化されたQUICパケットを受信する。NIC132bは、受信したパケットをQUICパケットとして認識し、次いでさらなる処理(例えば、解読及び/又は受信側スケーリング及びフィルタリング)を実行してよい。例えば、NIC132は、QUICパケットを特定の宛先ポートを有するUDPパケットとして認識してもよい。
【0029】
ブロック312において、NIC132bを有するコンピューティングデバイス102bは、受信したQUICパケットの暗号化されたペイロードを解読する。NIC132bは、QUICプロトコルに適した任意の暗号化プロトコルを使用してペイロードを解読してよい。NIC132bは、各QUIC接続について暗号化キーでコア122bによりプログラムされてよい。解読のアクセラレーションのための方法の1つの可能な実施例が、以下で
図6に関連してさらに説明される。
【0030】
ブロック314において、NIC132bを有するコンピューティングデバイス102bは、受信したQUICパケットの受信側スケーリング(RSS)及びフィルタリングを実行する。NIC132bは、受信したQUICパケットを処理のために1つ以上のプロセッサコア122(例えば、例示のプロセッサコア122b、122c)に分散する。NIC132bは、1つ以上の割り当て機能及び関連づけられたエントロピーソースでプログラムされてQUICパケットのプロセッサコア122への分散を制御してもよい。例えば、NIC132bは、QUICパケットをプロセッサコア122間で均等に分散してもよく、あるいは、NIC132bは、特定のプロセッサコア122に対して受信したQUICパケットをフィルタしてもよい。RSS及びフィルタリングアクセラレーションのための方法の1つの可能な実施例が、以下で
図7に関連して説明される。
【0031】
ブロック316a、316bにおいて、プロセッサコア122b、122cを有するコンピューティングデバイス102bは、それぞれ、受信したQUICパケットを処理する。コンピューティングデバイス102bは、例えば、QUICヘッダをQUICプロトコルスタック204で処理し、解読されたペイロードデータをアプリケーション202で処理してもよい。パケットを処理のためにプロセッサコア122に分散した後、方法300は完了する。方法300は、さらなるパケットを処理するために繰り返されてよい。
【0032】
次に
図4を参照し、使用において、コンピューティングデバイス102は、アクセラレートされたラージパケットセグメンテーションのための方法400を実行し得る。方法400は、例えば、上述されたように
図3のブロック304と関連して実行されてもよい。いくつかの実施例において、方法400の動作は、
図2に示されるコンピューティングデバイス102の環境200の1つ以上のコンポーネントにより実行されてもよいことが十分理解されるべきである。方法400はブロック402で開始し、ブロック402において、コンピューティングデバイス102のQUICプロトコルスタック204は、トランジットセグメンテーションオフロード(transit segmentation offload;TSO)能力としても知られるNIC132の大容量送信オフロード(LSO)能力についてNICドライバ206に問い合わせる。QUICプロトコルスタック204は、例えば、QUICプロトコルスタック204の初期化の間、及び/又はその他の方法で出ていくQUICパケットを処理する前に、NICドライバ206に問い合わせてもよい。ブロック404において、コンピューティングデバイス102は、NIC132がLSOアクセラレーションを実行できるかどうかを決定する。そうでない場合、方法400はブロック406に分岐し、ブロック406において、コンピューティングデバイス102は、ラージQUICパケットのソフトウェアセグメンテーションを実行する。例えば、QUICプロトコルスタック204及び/又はドライバ206は、プロセッサ120の処理リソースを使用してラージQUICパケットをより小さいQUICパケットにセグメント化してもよい。ブロック404を再び参照し、NIC132がLSOアクセラレーションが可能である場合、方法400はブロック408に進む。
【0033】
ブロック408において、QUICプロトコルスタック204は、QUICヘッダ及びペイロードを有するラージパケットをNICドライバ206に渡す。QUICプロトコルスタック204は、アプリケーションバッファ又は他のメモリバッファ内にアプリケーション202により提供されるデータに基づいてパケットを生成してよい。QUICプロトコルスタック204は、ヘッダ又は他のデータでパケットデータを追加し、あるいはその他の方法でフレーム化して、QUICパケットを作成してよい。QUICヘッダはパケット番号を含み、パケット番号はQUICプロトコルスタック204により記憶され、更新されてよい。結果的なラージパケットは、ネットワーク104及び/又はシステム100の他のデバイスの最大セグメントサイズ(MSS)より大きいサイズを有する。ラージパケットのペイロードは、1つ以上のQUICストリームヘッダを含んでよく、該QUICストリームヘッダは、ペイロード内でセグメント境界にマッチする位置に作成されてよい。ブロック410において、QUICプロトコルスタック204は、セグメンテーションにより生成されるセグメント化されたQUICパケットの数に基づいて、送信される次のパケットのパケット番号を計算する。例示的な例において、QUICプロトコルスタック204は、ラージQUICパケットのサイズに基づいて、LSOアクセラレータ210が3つのセグメント化されたQUICパケットを生成すると決定してもよい。この例示的な例において、QUICプロトコルスタック204は、パケット番号を3だけインクリメントしてもよい。その結果、次に送信されるQUICパケットは、正しいパケット番号を含むことになる。QUICプロトコルスタック204は、パケットセグメンテーションを実際に実行することなく次のQUICパケットのパケット番号を計算し得ることに留意する。
【0034】
ブロック412において、NICドライバ206は、QUICプロトコルスタックから受信したラージQUICパケットがLSOアクセラレータ210の任意のハードウェア固有要件に合うかどうかを検証する。ブロック414において、NICドライバ206は、ラージパケットがLSOアクセラレータ210の要件を満たすかどうかを確認する。そうでない場合、方法400はブロック406に分岐して、上述されたようにソフトウェアセグメンテーションを実行する。NICドライバ206は、QUICプロトコルスタック204にエラーをさらに示してもよい。ブロック414を再び参照し、ラージパケットがLSOアクセラレータ210の要件を満たす場合、方法400はブロック416に進む。
【0035】
ブロック416において、NICドライバ206は、ラージパケットをNIC132に渡す。ブロック418において、NIC132のLSOアクセラレータ210は、ラージパケットを複数のより小さいパケットにセグメント化する。(任意のヘッダを含む)より小さいパケットの各々は、ネットワーク104のMSSより小さいサイズを有する。より小さいパケットの各々は、ラージQUICパケットからコピーされ又はその他の方法で抽出されたペイロードデータを含んでよい。ブロック420において、NIC132のLSOアクセラレータ210は、ラージQUICパケットのための供給されたQUICヘッダを使用して、ワイヤ(すなわち、ネットワーク104)で送信されることになるより小さいQUICパケットの各々のためのQUICヘッダを構築する。NIC132は、例えば、ラージパケットのQUICヘッダをより小さいQUICパケットの各々にコピーしてもよい。NIC132は、ワイヤで送信されることになるより小さいパケットの各々のQUICヘッダ内のパケット番号を、例えば、このことに応じてパケット番号をインクリメントすることにより、さらに更新してもよい。いくつかの実施例において、NIC132は、QUICヘッダを複製することと同様に、QUICペイロードの先頭からQUICストリームヘッダをさらに複製してもよい。別法として、上述されたように、QUICストリームヘッダは、QUICプロトコルスタック204及び/又はドライバ206によりセグメント境界でラージペイロードに含まれていてもよい。ラージQUICパケットを複数のより小さいQUICパケットにセグメント化した後、方法400はブロック408にループバックし、さらなるラージQUICパケットを処理する。上述されたように、セグメンテーションが完了した後、セグメント化されたQUICパケットはNIC132により暗号化され、次いでリモートデバイスに送信されてよい。
【0036】
次に
図5を参照し、使用において、コンピューティングデバイス102は、アクセラレートされたパケット暗号化のための方法500を実行し得る。方法500は、例えば、上述されたように
図3のブロック306と関連して実行されてもよい。いくつかの実施例において、方法500の動作は、
図2に示されるコンピューティングデバイス102の環境200の1つ以上のコンポーネントにより実行されてもよいことが十分理解されるべきである。方法500はブロック502で開始し、ブロック502において、NICドライバ206は、NIC132をQUIC接続に関連づけられた1つ以上の暗号化キーで(例えば、特定のQUIC接続IDで)プログラムする。NIC132は、QUIC接続がリモートホストでオープンされたとき又はQUIC接続がその他の方法で初期化されたとき、暗号化キーでプログラムされてよい。暗号化キーは、例えば、セキュアキー交換又は他のセキュアプロセスを使用して、リモートホストとの間で確立されてもよい。暗号化キーは、関連づけられたQUIC接続の存続期間の間、NIC132により記憶されてよい。いくつかの実施例において、暗号化キーは、関連づけられたQUIC接続の存続期間の間、必要に応じて、QUICプロトコルスタック204により更新されてもよい。
【0037】
ブロック504において、NICドライバ206は、QUICパケットを送信のためにNIC132に渡す。いくつかの実施例において、ブロック506において、NIC132は、
図3及び
図4と関連して上述されたように、大容量送信オフロード(LSO)アクセラレーションを実行してもよい。当然ながら、いくつかの実施例において、供給されたQUICパケットはMSSより小さくてもよく、あるいはその他の方法でハードウェアLSOアクセラレーションを要求しなくてもよい。
【0038】
ブロック508において、NIC132は、関連づけられたQUIC接続に対してプログラムされた暗号化キーを使用して、QUICパケットの(又は、必要に応じて、LSOアクセラレーションから出力されたセグメント化されたQUICパケットの)平文ペイロードを暗号化する。NIC132は、各QUICパケットの平文ペイロードを暗号化されたペイロードで置換してよい。NIC132は、QUICプロトコルに適した任意の暗号化プロトコルを使用してペイロードを暗号化してよい。例えば、NIC132は、TLS/SSL又はHTTPセキュア(HTTPS)暗号化のような1つ以上のアプリケーションレイヤ暗号化プロトコルを実行してもよい。さらに、平文ペイロードとして説明されているが、いくつかの実施例において、QUICパケットのペイロードは、NIC132により暗号化される前に、スクランブルされ、暗号化され、あるいはその他の方法で前処理されてもよいことが理解されるべきである。いくつかの実施例において、NIC132は、ペイロードの暗号化の後、パケット番号を別個に暗号化してもよい。ブロック510において、NIC132は、チェックサム、署名、認証タグ、又はQUICパケットが本物であるか又はその他の方法で改ざんされていないことを検証するために使用できる他の情報を計算してもよい。ブロック512において、NIC132は、認証データを各QUICパケットに追加する。認証データを追加した後、方法500はブロック504にループバックし、パケットデータを処理することを継続する。上述されたように、暗号化が完了した後、暗号化されたQUICパケットはリモートホストに送信される。
【0039】
次に
図6を参照し、使用において、コンピューティングデバイス102は、アクセラレートされたパケット解読のための方法600を実行し得る。方法600は、例えば、上述されたように
図3のブロック312と関連して実行されてもよい。いくつかの実施例において、方法600の動作は、
図2に示されるコンピューティングデバイス102の環境200の1つ以上のコンポーネントにより実行されてもよいことが十分理解されるべきである。方法600はブロック602で開始し、ブロック602において、NICドライバ206は、NIC132をQUIC接続に関連づけられた1つ以上の暗号化キーで(例えば、特定のQUIC接続IDで)プログラムする。上述されたように、NIC132は、QUIC接続がリモートホストでオープンされたとき又はQUIC接続がその他の方法で初期化されたとき、暗号化キーでプログラムされてよい。暗号化キーは、例えば、セキュアキー交換又は他のセキュアプロセスを使用して、リモートホストとの間で確立されてもよい。暗号化キーは、関連づけられたQUIC接続の存続期間の間、NIC132により記憶されてよい。いくつかの実施例において、暗号化キーは、関連づけられたQUIC接続の存続期間の間、必要に応じて、QUICプロトコルスタック204により更新されてもよい。
【0040】
ブロック604において、NIC132は、リモートホストからネットワーク104を通じて受信したQUICパケットを認識する。NIC132は、入ってくるネットワークパケットのパケットヘッダを解析し、実行時構成(runtime configuration)を介してQUICパケットを認識してよい。例えば、NIC132は、QUICパケットを特定の宛先ポートを有するUDPパケットとして認識してもよい。この例において、ポート番号はNICドライバ206により供給される。
【0041】
ブロック606において、NIC132は、関連づけられたQUIC接続に対してプログラムされた暗号化キーを使用して、受信したQUICパケットの暗号化されたペイロードを解読する。NIC132は、各QUICパケットの暗号化されたペイロードを、解読された平文ペイロードで置換してよい。NIC132は、QUICプロトコルに適した任意の暗号化プロトコルを使用してペイロードを解読してよい。例えば、NIC132は、TLS/SSL又はHTTPセキュア(HTTPS)暗号化のような1つ以上のアプリケーションレイヤ暗号化プロトコルを実行してもよい。さらに、平文ペイロードとして説明されているが、いくつかの実施例において、NIC132による解読の後のQUICパケットのペイロードは、さらにデスクランブルされ、解読され、あるいはその他の方法で後処理されてもよいことが理解されるべきである。いくつかの実施例において、NIC132は、ペイロードの解読の前、パケット番号を別個に解読してもよい。ブロック608において、NIC132は、QUICパケットに含まれる認証データを使用して、受信したQUICパケットを検証する。例えば、NIC132は、チェックサム、署名、認証タグ、又はQUICパケットが本物であるか又はその他の方法で改ざんされていないことを検証するために使用できる他の情報を検証してもよい。QUICパケットを解読し、検証した後、方法600はブロック604にループバックし、QUICパケットを処理することを継続する。
図3と関連して上述されたように、解読の後、受信したパケットは、受信側スケーリング又はフィルタリングを使用する処理のためにプロセッサコア122に転送されてよい。
【0042】
次に
図7を参照し、使用において、コンピューティングデバイス102は、アクセラレートされた受信側スケーリング及びフィルタリングのための方法700を実行し得る。方法700は、例えば、上述されたように
図3のブロック314と関連して実行されてもよい。いくつかの実施例において、方法700の動作は、
図2に示されるコンピューティングデバイス102の環境200の1つ以上のコンポーネントにより実行されてもよいことが十分理解されるべきである。方法700はブロック702で開始し、ブロック702において、NICドライバ206は、1つ以上の受信キューをコンピューティングデバイス102のプロセッサコア122に関連づける。以下でさらに説明されるように、各プロセッサコア122は、そのプロセッサコア122に関連づけられた1つ以上の受信キューから受信したQUICパケットを処理する。各受信キューは関連づけられたキュー識別子を有し、これは整数値として具現化されてもよい。
【0043】
ブロック704において、NICドライバ206は、NIC132を、受信したQUICパケット内のエントロピーの1つ以上のソースで構成する。例えば、NICドライバ206は、QUIC接続ID又はQUICショートパケットタイプフィールドのようなQUICヘッダの1つ以上のフィールドを指定してもよい。別の例として、NICドライバ206は、QUICストリームIDのような平文ペイロード内の1つ以上のフィールドを指定してもよい。ゆえに、いくつかの実施例において、QUICパケットの平文コンテンツに基づいてRSS及び/又はフィルタリングを実行することは、NIC132によりハードウェアで解読を実行することをさらに要求する。別の例として、NICドライバ206は、ソースIPアドレスとソースUDPポートと宛先IPアドレスと宛先UDPポートとを含むUDP4タプルを指定してもよい。
【0044】
ブロック706において、NICドライバ206は、NIC132を、エントロピーの所与のソースに基づいて値の範囲を生成する割り当て機能で構成する。以下でさらに説明されるように、割り当て機能により出力された値の範囲は、受信したQUICパケットを処理するために使用される受信キューのキュー識別子に対応する。いくつかの実施例において、割り当て機能は、受信したQUICパケットを受信キューにわたり均等に(及び、これにより、対応するプロセッサコア122にわたり均等に)分配するために使用されてもよい。例えば、割り当て機能は、値の範囲にわたり一様に動作するハッシュ機能として具現化されてもよい。別の例として、割り当て機能は、スケジューリング機能(例えば、ラウンドロビンスケジューリング、優先度スケジューリング、又は他のスケジューリングアルゴリズム)として具現化されてもよい。さらに、又は別法として、いくつかの実施例においてQUICパケットをプロセッサコア122にわたり均等に分配するのでなく、いくつかの実施例において割り当て機能は、特定のQUICパケットを特定のプロセッサコア122に割り当てるフィルタリング機能を実行してもよい。例えば、割り当て機能は、特定の値(及び、ゆえに特定の受信キュー)を特定のアプリケーション、接続ID、又は他のパケットデータに割り当ててもよい。この例において、特定のアプリケーション、QUIC接続、又は他のパケットデータに関連づけられたすべてのQUICパケットは、同じプロセッサコア122により処理されてもよい。
【0045】
ブロック708において、NIC132は、リモートホストからネットワーク104を通じて受信したQUICパケットを認識する。上述されたように、NIC132は、入ってくるネットワークパケットのパケットヘッダを解析し、実行時構成を介してQUICパケットを認識してよい。例えば、NIC132は、QUICパケットを特定の宛先ポートを有するUDPパケットとして認識してもよい。この例において、ポート番号はNICドライバ206により供給される。いくつかの実施例において、ブロック710において、NIC132は、
図3及び
図6と関連して上述されたように、QUICパケットペイロードを解読し、検証してもよい。
【0046】
ブロック712において、NIC132は、割り当て機能を構成されたエントロピーソースで評価してキュー識別子を決定する。例えば、NIC132は、ネットワークパケットから1つ以上のフィールド(例えば、QUIC接続ID、QUICショートパケットタイプフィールド、QUICストリームID、UDP4タプル、又は他のフィールド)を抽出し、抽出されたフィールドを割り当て機能への入力として提供してもよい。割り当て機能は、キュー識別子に対応する値を出力する。ブロック714において、NIC132は、受信したQUICパケットを識別された受信キューに転送する。例えば、NIC132は、受信したQUICパケットをメモリ126内の適切な位置に記憶してもよい。
【0047】
ブロック716において、プロセッサコア122は、関連づけられた受信キュー内の受信したQUICパケットを処理する。プロセッサコア122は、例えば、割り込み、DMA完了、又はNIC132により生成される別の通知に応答して、QUICパケットを処理してもよい。プロセッサコア122は、パケットヘッダ及び平文ペイロードを含むQUICパケットに対して任意のネットワーク又は他のアプリケーション処理を実行してよい。いくつかの実施例において、ブロック718において、QUICプロトコルスタック204は、受信したパケットの1つ以上のQUICヘッダを処理してもよい。いくつかの実施例において、ブロック720において、アプリケーション202は、QUICパケットの平文ペイロードを処理してもよい。QUICパケットデータを適切なプロセッサコア122に転送した後、方法700はブロック708にループバックし、入ってくるネットワークパケットデータを処理することを継続する。
【0048】
いくつかの実施例において、方法300、400、500、600、及び/又は700はコンピュータ読取可能媒体に記憶された様々な命令として具現化されてよく、該命令がプロセッサ120、NIC132、アクセラレータ134、及び/又はコンピューティングデバイス102の他のコンポーネントにより実行されて、コンピューティングデバイス102にそれぞれの方法300、400、500、600、及び/又は700を実行させてもよい。コンピュータ読取可能媒体は、これらに限られないがメモリ126、データ記憶デバイス128、ファームウェアデバイス、マイクロコード、コンピューティングデバイス102の他のメモリ若しくはデータ記憶デバイス、コンピューティングデバイス102の周辺デバイス136により読み取り可能なポータブル媒体、及び/又は他の媒体を含む、コンピューティングデバイス102により読み取りが可能な任意のタイプの媒体として具現化されてよい。
【0049】
本明細書で開示される技術の例示的な例が以下で提供される。技術の実施例は、以下で説明される例のうち任意の1つ以上及び任意の組み合わせを含み得る。
【0050】
例1は、アクセラレートされたパケット処理のためのコンピューティングデバイスを含み、当該コンピューティングデバイスは、ネットワークコントローラと、(i)上記ネットワークコントローラをQUIC接続に関連づけられた暗号化キーでプログラムし、(ii)第1のQUICパケットを上記ネットワークコントローラに渡すネットワークコントローラドライバであり、上記第1のQUICパケットは、QUICヘッダと平文ペイロードとを含むUDPパケットを含み、上記第1のQUICパケットは上記QUIC接続に関連づけられる、ネットワークコントローラドライバと、を含み、上記ネットワークコントローラは、上記第1のQUICパケットの上記平文ペイロードを上記暗号化キーで暗号化して上記第1のQUICパケットの暗号化されたペイロードを生成する暗号アクセラレータを含み、上記ネットワークコントローラは、上記平文ペイロードの暗号化に応答して、上記暗号化されたペイロードを含む上記第1のQUICパケットを上記QUIC接続に関連づけられたリモートコンピューティングデバイスに送信する。
【0051】
例2は、例1に記載の構成要件を含み、上記第1のQUICパケットの上記平文ペイロードを暗号化することは、上記平文ペイロードをアプリケーションレイヤ暗号化プロトコルで暗号化することを含む。
【0052】
例3は、例1及び2のうちいずれか1つに記載の構成要件を含み、上記暗号アクセラレータはさらに、(i)上記第1のQUICパケットの認証データを計算し、(ii)上記認証データを上記第1のQUICパケットに追加し、上記第1のQUICパケットを送信することは、上記認証データの追加に応答して上記第1のQUICパケットを送信することを含む。
【0053】
例4は、例1~3のうちいずれか1つに記載の構成要件を含み、上記ネットワークコントローラは、上記第1のQUICパケットを複数のセグメント化されたQUICパケットにセグメント化する大容量送信オフロードアクセラレータをさらに含み、上記セグメント化されたQUICパケットの各々は平文ペイロードを含み、所定のサイズ以下であり、上記平文ペイロードを暗号化することは、上記セグメント化されたQUICパケットの各々の上記平文ペイロードを上記暗号化キーで暗号化して上記セグメント化されたQUICパケットの各々の暗号化されたペイロードを生成することを含み、上記第1のQUICパケットを送信することは、上記複数のセグメント化されたQUICパケットを送信することを含む。
【0054】
例5は、例1~4のうちいずれか1つに記載の構成要件を含み、上記大容量送信オフロードアクセラレータはさらに、上記第1のQUICパケットから上記QUICヘッダを上記セグメント化されたQUICパケットの各々にコピーし、上記セグメント化されたQUICパケットの各々の上記QUICヘッダのパケット番号を更新する。
【0055】
例6は、例1~5のうちいずれか1つに記載の構成要件を含み、上記第1のQUICパケットを生成し、上記第1のQUICパケットの上記QUICヘッダはパケット番号を含み、上記第1のQUICパケットの長さに基づいて上記第1のQUICパケットから生成されるセグメント化されたQUICパケットの数を計算し、上記第1のQUICパケットの上記パケット番号と上記セグメント化されたQUICパケットの数とに基づいて、次のQUICパケットのための次パケット番号を計算するQUICプロトコルスタック、をさらに含む。
【0056】
例7は、例1~6のうちいずれか1つに記載の構成要件を含み、上記ネットワークコントローラドライバはさらに、上記ネットワークコントローラが大容量送信オフロードが可能かどうかを決定し、上記ネットワークコントローラが大容量送信オフロードが可能でないとの決定に応答して上記第1のQUICパケットを上記複数のセグメント化されたQUICパケットにセグメント化する。
【0057】
例8は、アクセラレートされたパケット処理のためのコンピューティングデバイスを含み、当該コンピューティングデバイスは、ネットワークコントローラと、上記ネットワークコントローラをQUIC接続に関連づけられた暗号化キーでプログラムするネットワークコントローラドライバと、を含み、上記ネットワークコントローラは、(i)リモートコンピューティングデバイスから第1のネットワークパケットを受信し、(ii)上記第1のネットワークパケットがQUICパケットを含むかどうかを決定し、上記QUICパケットは、QUICヘッダと暗号化されたペイロードとを含むUDPパケットを含み、上記QUICパケットは上記QUIC接続に関連づけられ、上記ネットワークコントローラは、上記第1のネットワークパケットがQUICパケットを含むとの決定に応答して上記第1のネットワークパケットの上記暗号化されたペイロードを上記暗号化キーで解読して上記第1のネットワークパケットの平文ペイロードを生成する暗号アクセラレータを含む。
【0058】
例9は、例8に記載の構成要件を含み、上記第1のネットワークパケットの上記暗号化されたペイロードを解読することは、上記暗号化されたペイロードをアプリケーションレイヤ暗号化プロトコルで解読することを含む。
【0059】
例10は、例8及び9のうちいずれか1つに記載の構成要件を含み、上記第1のネットワークパケットは認証データをさらに含み、上記暗号アクセラレータはさらに、上記第1のネットワークパケットがQUICパケットを含むとの決定に応答して上記第1のネットワークパケットを上記認証データで検証する。
【0060】
例11は、例8~10のうちいずれか1つに記載の構成要件を含み、第1のプロセッサコアとQUICプロトコルスタックとをさらに含み、上記ネットワークコントローラは、(i)上記暗号化されたペイロードの解読に応答して所定の割り当て機能を所定のエントロピーソースで評価してキュー識別子を生成し、(ii)上記所定の割り当て機能の評価に応答して上記第1のネットワークパケットを上記キュー識別子に関連づけられた受信キューに転送する受信側スケーリングアクセラレータをさらに含み、上記QUICプロトコルスタックは、上記第1のプロセッサコアにより、上記第1のネットワークパケットの上記受信キューへの転送に応答して上記第1のネットワークパケットを処理し、上記第1のプロセッサコアは上記受信キューに関連づけられる。
【0061】
例12は、例8~11のうちいずれか1つに記載の構成要件を含み、上記ネットワークコントローラドライバはさらに、上記ネットワークコントローラを上記所定のエントロピーソースで構成する。
【0062】
例13は、例8~12のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、上記第1のネットワークパケットの上記QUICヘッダのフィールドを含む。
【0063】
例14は、例8~13のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、QUIC接続識別子又はQUICショートパケットタイプフィールドを含む。
【0064】
例15は、例8~14のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、上記第1のネットワークパケットの上記平文ペイロードのフィールドを含む。
【0065】
例16は、例8~15のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、QUICストリーム識別子を含む。
【0066】
例17は、例8~16のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、上記第1のネットワークパケットのUDPソースIPアドレスとUDP宛先IPアドレスとUDPソースポートとUDP宛先ポートとを含むタプルを含む。
【0067】
例18は、例8~17のうちいずれか1つに記載の構成要件を含み、上記ネットワークコントローラドライバはさらに、上記ネットワークコントローラを上記所定の割り当て機能で構成する。
【0068】
例19は、例8~18のうちいずれか1つに記載の構成要件を含み、上記所定の割り当て機能は、上記エントロピーソースに基づくフィルタ機能を含む。
【0069】
例20は、例8~19のうちいずれか1つに記載の構成要件を含み、上記ネットワークコントローラドライバはさらに、上記第1のプロセッサコアを上記受信キューに関連づける。
【0070】
例21は、アクセラレートされたパケット処理のための方法を含み、当該方法は、コンピューティングデバイスにより、上記コンピューティングデバイスのネットワークコントローラをQUIC接続に関連づけられた暗号化キーでプログラムするステップと、上記コンピューティングデバイスにより、第1のQUICパケットを上記コンピューティングデバイスの上記ネットワークコントローラに渡すステップであり、上記第1のQUICパケットは、QUICヘッダと平文ペイロードとを含むUDPパケットを含み、上記第1のQUICパケットは上記QUIC接続に関連づけられる、ステップと、上記ネットワークコントローラにより、上記第1のQUICパケットの上記平文ペイロードを上記暗号化キーで暗号化して上記第1のQUICパケットの暗号化されたペイロードを生成するステップと、上記ネットワークコントローラにより、上記平文ペイロードの暗号化に応答して、上記暗号化されたペイロードを含む上記第1のQUICパケットを上記QUIC接続に関連づけられたリモートコンピューティングデバイスに送信するステップと、を含む。
【0071】
例22は、例21に記載の構成要件を含み、上記第1のQUICパケットの上記平文ペイロードを暗号化することは、上記平文ペイロードをアプリケーションレイヤ暗号化プロトコルで暗号化することを含む。
【0072】
例23は、例21及び22のうちいずれか1つに記載の構成要件を含み、上記ネットワークコントローラにより、上記第1のQUICパケットの認証データを計算するステップと、上記ネットワークコントローラにより、上記認証データを上記第1のQUICパケットに追加するステップと、をさらに含み、上記第1のQUICパケットを送信するステップは、上記認証データを追加したことに応答して上記第1のQUICパケットを送信するステップを含む。
【0073】
例24は、例21~23のうちいずれか1つに記載の構成要件を含み、上記ネットワークコントローラにより、上記第1のQUICパケットを複数のセグメント化されたQUICパケットにセグメント化するステップ、をさらに含み、上記セグメント化されたQUICパケットの各々は平文ペイロードを含み、所定のサイズ以下であり、上記平文ペイロードを暗号化することは、上記セグメント化されたQUICパケットの各々の上記平文ペイロードを上記暗号化キーで暗号化して上記セグメント化されたQUICパケットの各々の暗号化されたペイロードを生成することを含み、上記第1のQUICパケットを送信するステップは、上記複数のセグメント化されたQUICパケットを送信するステップを含む。
【0074】
例25は、例21~24のうちいずれか1つに記載の構成要件を含み、上記ネットワークコントローラにより、上記第1のQUICパケットから上記QUICヘッダを上記セグメント化されたQUICパケットの各々にコピーするステップと、上記ネットワークコントローラにより、上記セグメント化されたQUICパケットの各々の上記QUICヘッダのパケット番号を更新するステップと、をさらに含む。
【0075】
例26は、例21~25のうちいずれか1つに記載の構成要件を含み、上記コンピューティングデバイスにより、上記第1のQUICパケットを生成するステップであり、上記第1のQUICパケットの上記QUICヘッダはパケット番号を含む、ステップと、上記コンピューティングデバイスにより、上記第1のQUICパケットの長さに基づいて上記第1のQUICパケットから生成されるセグメント化されたQUICパケットの数を計算するステップと、上記コンピューティングデバイスにより、上記第1のQUICパケットの上記パケット番号と上記セグメント化されたQUICパケットの数とに基づいて、次のQUICパケットのための次パケット番号を計算するステップと、をさらに含む。
【0076】
例27は、例21~26のうちいずれか1つに記載の構成要件を含み、上記コンピューティングデバイスにより、上記ネットワークコントローラが大容量送信オフロードが可能かどうかを決定するステップと、上記コンピューティングデバイスのプロセッサコアにより、上記ネットワークコントローラが大容量送信オフロードが可能でないと決定したことに応答して上記第1のQUICパケットを上記複数のセグメント化されたQUICパケットにセグメント化するステップと、をさらに含む。
【0077】
例28は、アクセラレートされたパケット処理のための方法を含み、当該方法は、コンピューティングデバイスにより、上記コンピューティングデバイスのネットワークコントローラをQUIC接続に関連づけられた暗号化キーでプログラムするステップと、上記ネットワークコントローラにより、リモートコンピューティングデバイスから第1のネットワークパケットを受信するステップと、上記ネットワークコントローラにより、上記第1のネットワークパケットがQUICパケットを含むかどうかを決定するステップであり、上記QUICパケットは、QUICヘッダと暗号化されたペイロードとを含むUDPパケットを含み、上記QUICパケットは上記QUIC接続に関連づけられる、ステップと、上記ネットワークコントローラにより、上記第1のネットワークパケットがQUICパケットを含むと決定したことに応答して、上記第1のネットワークパケットの上記暗号化されたペイロードを上記暗号化キーで解読して上記第1のネットワークパケットの平文ペイロードを生成するステップと、を含む。
【0078】
例29は、例28に記載の構成要件を含み、上記第1のネットワークパケットの上記暗号化されたペイロードを解読することは、上記暗号化されたペイロードをアプリケーションレイヤ暗号化プロトコルで解読することを含む。
【0079】
例30は、例28及び29のうちいずれか1つに記載の構成要件を含み、上記第1のネットワークパケットは認証データをさらに含み、当該方法は、上記ネットワークコントローラにより、上記第1のネットワークパケットがQUICパケットを含むと決定したことに応答して上記第1のネットワークパケットを上記認証データで検証するステップをさらに含む。
【0080】
例31は、例28~30のうちいずれか1つに記載の構成要件を含み、上記ネットワークコントローラにより、上記暗号化されたペイロードを解読したことに応答して所定の割り当て機能を所定のエントロピーソースで評価してキュー識別子を生成するステップと、上記ネットワークコントローラにより、上記所定の割り当て機能を評価したことに応答して上記第1のネットワークパケットを上記キュー識別子に関連づけられた受信キューに転送するステップと、上記コンピューティングデバイスの第1のプロセッサコアにより、上記第1のネットワークパケットを上記受信キューに転送したことに応答して上記第1のネットワークパケットを処理するステップであり、上記第1のプロセッサコアは上記受信キューに関連づけられる、ステップと、をさらに含む。
【0081】
例32は、例28~31のうちいずれか1つに記載の構成要件を含み、上記コンピューティングデバイスにより、上記ネットワークコントローラを上記所定のエントロピーソースで構成するステップ、をさらに含む。
【0082】
例33は、例28~32のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、上記第1のネットワークパケットの上記QUICヘッダのフィールドを含む。
【0083】
例34は、例28~33のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、QUIC接続識別子又はQUICショートパケットタイプフィールドを含む。
【0084】
例35は、例28~34のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、上記第1のネットワークパケットの上記平文ペイロードのフィールドを含む。
【0085】
例36は、例28~35のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、QUICストリーム識別子を含む。
【0086】
例37は、例28~36のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、上記第1のネットワークパケットのUDPソースIPアドレスとUDP宛先IPアドレスとUDPソースポートとUDP宛先ポートとを含むタプルを含む。
【0087】
例38は、例28~37のうちいずれか1つに記載の構成要件を含み、上記コンピューティングデバイスにより、上記ネットワークコントローラを上記所定の割り当て機能で構成するステップ、をさらに含む。
【0088】
例39は、例28~38のうちいずれか1つに記載の構成要件を含み、上記所定の割り当て機能は、上記エントロピーソースに基づくフィルタ機能を含む。
【0089】
例40は、例28~39のうちいずれか1つに記載の構成要件を含み、上記コンピューティングデバイスにより、上記第1のプロセッサコアを上記受信キューに関連づけるステップ、をさらに含む。
【0090】
例41は、記憶された複数の命令を含む1つ以上のコンピュータ読取可能記憶媒体を含み、上記命令は、実行されたことに応答してコンピューティングデバイスに、上記コンピューティングデバイスのネットワークコントローラをQUIC接続に関連づけられた暗号化キーでプログラムするステップと、第1のQUICパケットを上記コンピューティングデバイスの上記ネットワークコントローラに渡すステップであり、上記第1のQUICパケットは、QUICヘッダと平文ペイロードとを含むUDPパケットを含み、上記第1のQUICパケットは上記QUIC接続に関連づけられる、ステップと、上記第1のQUICパケットの上記平文ペイロードを上記暗号化キーで暗号化して上記第1のQUICパケットの暗号化されたペイロードを生成するステップと、上記平文ペイロードの暗号化に応答して、上記暗号化されたペイロードを含む上記第1のQUICパケットを上記QUIC接続に関連づけられたリモートコンピューティングデバイスに送信するステップと、を実行させる。
【0091】
例42は、例41に記載の構成要件を含み、上記第1のQUICパケットの上記平文ペイロードを暗号化することは、上記平文ペイロードをアプリケーションレイヤ暗号化プロトコルで暗号化することを含む。
【0092】
例43は、例41及び42のうちいずれか1つに記載の構成要件を含み、記憶された複数の命令をさらに含み、上記命令は、実行されたことに応答して上記コンピューティングデバイスに、上記ネットワークコントローラにより、上記第1のQUICパケットの認証データを計算するステップと、上記ネットワークコントローラにより、上記認証データを上記第1のQUICパケットに追加するステップと、を実行させ、上記第1のQUICパケットを送信するステップは、上記認証データを追加したことに応答して上記第1のQUICパケットを送信するステップを含む。
【0093】
例44は、例41~43のうちいずれか1つに記載の構成要件を含み、記憶された複数の命令をさらに含み、上記命令は、実行されたことに応答して上記コンピューティングデバイスに、上記ネットワークコントローラにより、上記第1のQUICパケットを複数のセグメント化されたQUICパケットにセグメント化するステップ、を実行させ、上記セグメント化されたQUICパケットの各々は平文ペイロードを含み、所定のサイズ以下であり、上記平文ペイロードを暗号化することは、上記セグメント化されたQUICパケットの各々の上記平文ペイロードを上記暗号化キーで暗号化して上記セグメント化されたQUICパケットの各々の暗号化されたペイロードを生成することを含み、上記第1のQUICパケットを送信するステップは、上記複数のセグメント化されたQUICパケットを送信するステップを含む。
【0094】
例45は、例41~44のうちいずれか1つに記載の構成要件を含み、記憶された複数の命令をさらに含み、上記命令は、実行されたことに応答して上記コンピューティングデバイスに、上記ネットワークコントローラにより、上記第1のQUICパケットから上記QUICヘッダを上記セグメント化されたQUICパケットの各々にコピーするステップと、上記ネットワークコントローラにより、上記セグメント化されたQUICパケットの各々の上記QUICヘッダのパケット番号を更新するステップと、を実行させる。
【0095】
例46は、例41~45のうちいずれか1つに記載の構成要件を含み、記憶された複数の命令をさらに含み、上記命令は、実行されたことに応答して上記コンピューティングデバイスに、上記コンピューティングデバイスにより、上記第1のQUICパケットを生成するステップであり、上記第1のQUICパケットの上記QUICヘッダはパケット番号を含む、ステップと、上記コンピューティングデバイスにより、上記第1のQUICパケットの長さに基づいて上記第1のQUICパケットから生成されるセグメント化されたQUICパケットの数を計算するステップと、上記コンピューティングデバイスにより、上記第1のQUICパケットの上記パケット番号と上記セグメント化されたQUICパケットの数とに基づいて、次のQUICパケットのための次パケット番号を計算するステップと、を実行させる。
【0096】
例47は、例41~46のうちいずれか1つに記載の構成要件を含み、記憶された複数の命令をさらに含み、上記命令は、実行されたことに応答して上記コンピューティングデバイスに、上記ネットワークコントローラが大容量送信オフロードが可能かどうかを決定するステップと、上記コンピューティングデバイスのプロセッサコアにより、上記ネットワークコントローラが大容量送信オフロードが可能でないと決定したことに応答して上記第1のQUICパケットを上記複数のセグメント化されたQUICパケットにセグメント化するステップと、を実行させる。
【0097】
例48は、記憶された複数の命令を含む1つ以上のコンピュータ読取可能記憶媒体を含み、上記命令は、実行されたことに応答してコンピューティングデバイスに、上記コンピューティングデバイスのネットワークコントローラをQUIC接続に関連づけられた暗号化キーでプログラムするステップと、上記ネットワークコントローラにより、リモートコンピューティングデバイスから第1のネットワークパケットを受信するステップと、上記ネットワークコントローラにより、上記第1のネットワークパケットがQUICパケットを含むかどうかを決定するステップであり、上記QUICパケットは、QUICヘッダと暗号化されたペイロードとを含むUDPパケットを含み、上記QUICパケットは上記QUIC接続に関連づけられる、ステップと、上記ネットワークコントローラにより、上記第1のネットワークパケットがQUICパケットを含むと決定したことに応答して、上記第1のネットワークパケットの上記暗号化されたペイロードを上記暗号化キーで解読して上記第1のネットワークパケットの平文ペイロードを生成するステップと、を実行させる。
【0098】
例49は、例48に記載の構成要件を含み、上記第1のネットワークパケットの上記暗号化されたペイロードを解読することは、上記暗号化されたペイロードをアプリケーションレイヤ暗号化プロトコルで解読することを含む。
【0099】
例50は、例48及び49のうちいずれか1つに記載の構成要件を含み、上記第1のネットワークパケットは認証データをさらに含み、当該1つ以上のコンピュータ読取可能記憶媒体は、記憶された複数の命令をさらに含み、上記命令は、実行されたことに応答して上記コンピューティングデバイスに、上記ネットワークコントローラにより、上記第1のネットワークパケットがQUICパケットを含むと決定したことに応答して上記第1のネットワークパケットを上記認証データで検証するステップを実行させる。
【0100】
例51は、例48~50のうちいずれか1つに記載の構成要件を含み、記憶された複数の命令をさらに含み、上記命令は、実行されたことに応答して上記コンピューティングデバイスに、上記ネットワークコントローラにより、上記暗号化されたペイロードを解読したことに応答して所定の割り当て機能を所定のエントロピーソースで評価してキュー識別子を生成するステップと、上記ネットワークコントローラにより、上記所定の割り当て機能を評価したことに応答して上記第1のネットワークパケットを上記キュー識別子に関連づけられた受信キューに転送するステップと、上記コンピューティングデバイスの第1のプロセッサコアにより、上記第1のネットワークパケットを上記受信キューに転送したことに応答して上記第1のネットワークパケットを処理するステップであり、上記第1のプロセッサコアは上記受信キューに関連づけられる、ステップと、を実行させる。
【0101】
例52は、例48~51のうちいずれか1つに記載の構成要件を含み、記憶された複数の命令をさらに含み、上記命令は、実行されたことに応答して上記コンピューティングデバイスに、上記ネットワークコントローラを上記所定のエントロピーソースで構成するステップ、を実行させる。
【0102】
例53は、例48~52のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、上記第1のネットワークパケットの上記QUICヘッダのフィールドを含む。
【0103】
例54は、例48~53のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、QUIC接続識別子又はQUICショートパケットタイプフィールドを含む。
【0104】
例55は、例48~54のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、上記第1のネットワークパケットの上記平文ペイロードのフィールドを含む。
【0105】
例56は、例48~55のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、QUICストリーム識別子を含む。
【0106】
例57は、例48~56のうちいずれか1つに記載の構成要件を含み、上記エントロピーソースは、上記第1のネットワークパケットのUDPソースIPアドレスとUDP宛先IPアドレスとUDPソースポートとUDP宛先ポートとを含むタプルを含む。
【0107】
例58は、例48~57のうちいずれか1つに記載の構成要件を含み、記憶された複数の命令をさらに含み、上記命令は、実行されたことに応答して上記コンピューティングデバイスに、上記ネットワークコントローラを上記所定の割り当て機能で構成するステップ、を実行させる。
【0108】
例59は、例48~58のうちいずれか1つに記載の構成要件を含み、上記所定の割り当て機能は、上記エントロピーソースに基づくフィルタ機能を含む。
【0109】
例60は、例48~59のうちいずれか1つに記載の構成要件を含み、記憶された複数の命令をさらに含み、上記命令は、実行されたことに応答して上記コンピューティングデバイスに、上記第1のプロセッサコアを上記受信キューに関連づけるステップ、を実行させる。