JP7387335B2 - 通信装置、制御方法およびプログラム - Google Patents
通信装置、制御方法およびプログラム Download PDFInfo
- Publication number
- JP7387335B2 JP7387335B2 JP2019155592A JP2019155592A JP7387335B2 JP 7387335 B2 JP7387335 B2 JP 7387335B2 JP 2019155592 A JP2019155592 A JP 2019155592A JP 2019155592 A JP2019155592 A JP 2019155592A JP 7387335 B2 JP7387335 B2 JP 7387335B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- management data
- segment
- communication device
- buffer management
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000004891 communication Methods 0.000 title claims description 92
- 238000000034 method Methods 0.000 title claims description 26
- 230000005540 biological transmission Effects 0.000 claims description 21
- 230000006870 function Effects 0.000 claims description 21
- 238000007726 management method Methods 0.000 description 161
- 238000010586 diagram Methods 0.000 description 11
- 238000004364 calculation method Methods 0.000 description 8
- 238000013523 data management Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Description
本発明は、上記した課題に鑑みてなされたものであり、送信データの処理負担の分散を簡便な構成で実現できるようにすることを目的とする。
<通信装置のハードウェア構成>
図1は、本実施形態における通信装置100のハードウェア構成の一例を示す図である。通信装置100は、カメラ、プリンタ、スマートフォン、タブレット、PC(Personal Computer)、プロジェクタ等の通信機能を備えた装置である。通信装置100は、CPU102と、ROM103と、RAM104と、通信デバイス105と、オフロード処理ハードウェア106とを有する。システムバス101は、CPU102、ROM103、RAM104、通信デバイス105およびオフロード処理ハードウェア106を接続し、各種データの転送経路となる。CPUはCentral Processing Unitの略である。ROMはRead Only Memoryの略である。RAMはRandom Access Memoryの略である。
ROM103は、CPU102で実行されるOSやデバイスドライバ等の制御プログラムを格納している。
RAM104は、CPU102の主メモリおよびワークエリア等として機能し、プログラムやデータを一時記憶する。
DMAC109は、RAM104に記憶されているデータを、プロトコル処理ハードウェア110に転送したり、逆にプロトコル処理ハードウェア110で処理したデータをRAM104に転送したりする。DMAC109によるデータ転送は、CPU102により制御される。なお、図1には1つのDMAC109しか示されていないが、オフロード処理ハードウェア106に複数のDMAC109を設けてもよい。複数のDMACとは、例えば、RAM104からデータを読み込むためのDMACと、RAM104にデータを書き込むためのDMACである。
なお、図1に示した構成は一例であり、通信装置100は図1に示されていない構成要素を備えてもよい。例えば、通信装置100はタイマ管理部を備えてもよい。タイマ管理部は、所定時間が経過したかを管理する。また、図1には1つのCPU102しか示されていないが、複数のCPUを設けてもよい。あるいは、CPU102は1つまたは複数のプロセッサにより置換されてもよい。通信装置100がカメラの場合には、撮像部や表示部を備えてもよい。
図2は、本実施形態における通信装置100の機能構成の一例を示す図である。尚、本実施形態では、CPU102が実行するOSカーネル201はLinux(登録商標)を想定するが、OSカーネル201はLinuxに限定されない。
アプリケーション200は、ユーザアプリケーションである。アプリケーション200により、任意のサイズの、送信対象のアプリケーションデータ(送信データ)がプロトコルスタック202に入力される。尚、本実施形態では、アプリケーション200は、TCP/IPv4通信を行うアプリケーションとして説明するが、UDP通信を行うアプリケーションでもよいし、IPv6通信を行うアプリケーションでもよい。
コネクション管理部203は、通信装置100の通信コネクションを管理する。例えば、コネクション管理部203は、アプリケーション200に対する通信コネクションのMSSやオフロード設定情報等のソケット情報やARP(Address Resolution Protocol)テーブルのエントリ情報等を管理する。ARPテーブルには、送信すべきセグメントデータのMACアドレスとIPアドレスが、エントリ情報として記憶される。
第一プロトコル処理部206は、TCPやUDPのトランスポート層の処理、IPのネットワーク層の処理、具体的には各プロトコルのヘッダ生成処理を行う。
バッファ管理データフック部208は、第一プロトコル処理部206がIP処理をしている途中でバッファ管理データをフックして処理するコールバックを登録する機能を有する。例えば、Linuxでは、Netfilterと呼ばれるフレームワークで提供されるAPIを使ってバッファ管理データフック部208が実現される。ここで、バッファ管理データのフックとは、バッファ管理データの取得処理を意味する。
コールバック登録部211は、バッファ管理データフック部208が提供する機能を用いて、バッファ管理データをIPプロトコル処理中にフックして処理するコールバックを登録する。つまり、本実施形態において、コールバック登録部211は、バッファ管理データをフックする機能を有する。
第二セグメント分割処理部217は、DMACを備えており、フックしたバッファ管理データで管理されるセグメントデータのアドレスを読み出し元とし、セグメントデータを取得する。第二セグメント分割処理部217は、取得したセグメントデータを、MSS単位でセグメントデータをメモリコピーすることでセグメント分割処理を行う。より詳しくは、第二セグメント分割処理部217は、第二バッファ管理データ生成部215で生成した複数のバッファ管理データに対し、管理されるデータ領域を書き出し先としてMSS単位でセグメントデータをメモリコピーすることでセグメント分割処理を行う。
また、図2に示した構成は一例であり、複数の機能部が1つの機能部に統合されてもよいし、いずれかの機能部が複数の機能部に分けられてもよい。さらに、図2に示した機能部に含まれる一部または全部の機能がハードウェア化されていてもよい。ハードウェア化は、例えばASIC(Application Specific Integrated Circuit)により実現される。
図3は、本実施形態におけるバッファ管理データ処理判定部212の判定フロー図である。バッファ管理データ処理判定部212は、プロトコルスタック202からフックしたバッファ管理データを解析し、処理の方法を決定する。図3において、SはStepの略である。図3の処理は、例えば、図1のCPU102がROM103に記憶されたプログラムを読み出して実行することにより行われる。
S302において、バッファ管理データ処理判定部212は、フックしたバッファ管理データのTCPヘッダからポート番号を確認し、オフロード処理対象のポート番号かどうかを判定する。対象ポート番号であればS303に進み、対象ポート番号でなければS306に進む。なお、ポート番号によるフィルタリングは無くてもよい(つまりS302は省略してもよい)が、例えば、特定のアプリケーションのみオフロード処理を行いたい場合はS302を実行する。S302を実行するためには、オフロード処理を行いたいアプリケーションで使用するポート番号を予め入力しておく。
S304では、バッファ管理データ処理判定部212は、ARPテーブルを参照して、次に送信すべきセグメントデータに関する近傍エントリ情報があるかどうかを判定する。近傍エントリ情報がなければ(S304の判定結果がNoの場合)、第二プロトコル処理部218でMACヘッダが生成できないため、フックしたバッファ管理データをプロトコル処理に戻す(S306)。近傍エントリ情報があればS305に進む。
S306において、バッファ管理データ処理判定部212は、フックしたバッファ管理データがオフロード処理対象ではなく、プロトコル処理に戻すと判定する。そして、バッファ管理データ処理判定部212は、当該バッファ管理データをプロトコル処理返付部213に送る。
S308において、バッファ管理データ処理判定部212は、フックしたバッファ管理データのソケット情報を書き換えると判定する。そして、バッファ管理データ処理判定部212は、当該バッファ管理データをソケット情報書き換え部214に送る。
図4は、第二セグメント分割処理部217におけるセグメントデータのコピー(複製)および分割と、第二プロトコル処理部218におけるプロトコル処理後のバッファ管理データを示した図である。
バッファ管理データ400はプロトコルスタック202からフックしたバッファ管理データである。
セグメントデータ401はバッファ管理データ400で管理されるセグメントデータである。セグメントデータ401はMSSを超えるセグメントサイズの場合にオフロード処理対象となる。
バッファ管理データ403、404、405、406は、第二バッファ管理データ生成部215で生成されるバッファ管理データ(第二のバッファ管理データ)である。図4は、第二のバッファ管理データが4つの場合を示しているが、第二のバッファ管理データの数は4に限定されない。
ヘッダデータ411、412、413、414は、ヘッダデータ402に基づいて生成され、セグメントデータ407、408、409、410に付けられるヘッダデータである。より詳しくは、第二プロトコル処理部218でプロトコル処理されたバッファ管理データ403~406が管理するデータヘッダ411~414には、ヘッダデータ402に基づいて生成されたTCPヘッダとIPヘッダが付与される。そして、ヘッダデータ411~414には、ARPテーブルの近傍エントリ情報から得られるMACヘッダも付与される。ヘッダデータ402および411~414は通信ヘッダと称してもよい。
また、バッファ管理データ処理判定部212は、TCPウインドウスケールのシフトカウント(3ウエイシェイクハンド後)が、所定値(例えば、1)以上であれば、フックしたバッファ管理データのソケット情報を書き換えるという判定をしてもよい。
S306を実行した時点で、チェックサム計算がオフになっているならば、プロトコル処理返付部213は、チェックサム計算を行ってから、当該バッファ管理データをプロトコルスタック202に戻してもよい。この場合、プロトコル処理返付部213は、バッファ管理データをIP層に戻す。
実施形態1では、第二セグメント分割処理部217において、フックしたバッファ管理データ400が管理するセグメントデータ401を、バッファ管理データ403~406が管理するセグメントデータ領域に分割しつつコピーした。実施形態2では、第二セグメント分割処理部217において、セグメントデータ401をコピーしない場合を説明する。以下の記載において、実施形態1と同様な構成、機能および処理については、同じ参照符号を付ける。
図5は、実施形態2における通信装置100の機能構成の一例を示す図である。実施形態1(図2)と異なる部分のみ説明する。実施形態2の動的ロードソフトウェア210は、図2の構成と比較すると、バッファ管理データ管理部500をさらに備えている。
バッファ管理データ管理部500は、第二バッファ管理データ生成部215で生成されたバッファ管理データをクローンし、動的ロードソフトウェア210内で管理する。クローンは、セグメントデータ(図4の符号407~410)自体をコピーする処理を行うのではなく、当該セグメントデータへの参照を持ったバッファ管理データを生成する処理を行う。例えば、Linuxにおいては、skb_clone()により、バッファ管理データ(クローン)が生成される。また、バッファ管理データ管理部500は、管理しているバッファ管理データについて、現在の確認応答番号(ACK番号、シーケンス番号)から当該バッファ管理データが不要かどうかを確認し、不要であれば解放する。解放可否確認のタイミングはコールバックが呼ばれた際に毎回確認してもよいし、コールバックの任意の回数毎に確認してもよし、所定時間経過毎に確認してもよい。
図6は、本実施形態における第二セグメント分割処理部217におけるセグメントデータの分割、および第二プロトコル処理部218におけるプロトコル処理後のバッファ管理データを示した図である。
バッファ管理データ400、セグメントデータ401、ヘッダデータ402、バッファ管理データ403~406、ヘッダデータ411~414については実施形態1における図4と同様であるため説明を省略する。
バッファ管理データ403~406のヘッダデータ411~414とセグメントデータ401は連続領域に存在しないため、通信デバイス105への転送時にGather機能を用いて連結する。そのため、本実施形態では、通信デバイス転送処理部209がGather機能を備えているとする。
Claims (9)
- 送信すべきセグメントデータを分割して、所定の通信プロトコルに基づいて送信する通信装置であって、
前記セグメントデータを記憶する記憶手段と、
OS(Operating System)カーネルが前記セグメントデータに対する前記所定の通信プロトコルによるプロトコル処理を実行中に、前記セグメントデータを管理する第一の管理データをOSカーネルから取得する取得手段と、
前記第一の管理データにより管理されるセグメントデータのセグメントサイズが所定のサイズを超える場合、前記第一の管理データが管理する前記セグメントデータを前記記憶手段から取得し、前記取得した前記セグメントデータを分割する分割手段と、
前記分割手段により分割されたセグメントデータを前記記憶手段に送信する第一の送信手段と、
前記通信装置が前記分割されたセグメントデータを送信する際に用いるべきヘッダ情報を含む第二の管理データを、前記第一の管理データが管理するヘッダ情報に少なくとも基づき生成する生成手段と、
前記生成手段によって生成された前記第二の管理データを前記OSカーネルに送信する第二の送信手段と、
前記第二の送信手段により送信された前記第二の管理データが管理するヘッダ情報と前記分割されたセグメントデータに基づいてフレームの生成を行い、当該フレームを外部装置へ送信する第三の送信手段と、
を備えることを特徴とする通信装置。 - 前記取得手段は、前記OSカーネルが備えている機能を用いて、前記第一の管理データを取得することを特徴とする請求項1に記載の通信装置。
- 前記第二の送信手段は、前記OSカーネルが備えている機能を用いて、前記第一の管理データを前記OSカーネルに送信することを特徴とする請求項1または2に記載の通信装置。
- 前記分割手段および前記生成手段は、前記OSカーネルと異なるソフトウェアの機能、または、前記通信装置のCPUと異なるハードウェアの機能により実現されることを特徴とする請求項1から3のいずれか1項に記載の通信装置。
- 前記第一の送信手段および前記第二の送信手段は、前記OSカーネルと異なるソフトウェアの機能により実現されることを特徴とする請求項1から4のいずれか1項に記載の通信装置。
- 前記第三の送信手段は、前記第二の管理データが管理するセグメントデータのセグメントサイズと、ソケット情報と、前記所定の通信プロトコルの種類と、宛先のポート番号と、送信元ポート番号と、ARP(Address Resolution Protocol)テーブルのエントリ情報と、宛先IPアドレスと、TCP(Transmission Control Protocol)ウインドウスケールのシフトカウントの少なくとも一つに基づいて、前記フレームの生成を行うことを特徴とする請求項1から5のいずれか1項に記載の通信装置。
- 前記所定の通信プロトコルは、TCP/IPプロトコルであることを特徴とする請求項1から6のいずれか1項に記載の通信装置。
- 送信すべきセグメントデータを分割して、所定の通信プロトコルに基づいて送信する通信装置の制御方法であって、
前記セグメントデータを所定の記憶領域に記憶する記憶ステップと、
OS(Operating System)カーネルが前記セグメントデータに対する前記所定の通信プロトコルによるプロトコル処理を実行中に、前記セグメントデータを管理する第一の管理データをOSカーネルから取得する取得ステップと、
前記第一の管理データにより管理されるセグメントデータのセグメントサイズが所定のサイズを超える場合、前記第一の管理データが管理する前記セグメントデータを前記所定の記憶領域から取得し、前記取得した前記セグメントデータを分割する分割ステップと、
前記分割ステップにおいて分割されたセグメントデータを前記所定の記憶領域に送信する第一の送信ステップと、
前記通信装置が前記分割されたセグメントデータを送信する際に用いるべきヘッダ情報を含む第二の管理データを、前記第一の管理データが管理するヘッダ情報に少なくとも基づき生成する生成ステップと、
前記生成ステップにおいて生成された前記第二の管理データを、前記OSカーネルに送信する第二の送信ステップと、
前記第二の送信ステップにおいて送信された前記第二の管理データが管理するヘッダ情報と前記分割されたセグメントデータに基づいてフレームの生成を行い、当該フレームを外部装置へ送信する第三の送信ステップと、
を有することを特徴とする制御方法。 - コンピュータを請求項1から7のいずれか1項に記載の通信装置として動作させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019155592A JP7387335B2 (ja) | 2019-08-28 | 2019-08-28 | 通信装置、制御方法およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019155592A JP7387335B2 (ja) | 2019-08-28 | 2019-08-28 | 通信装置、制御方法およびプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2021034954A JP2021034954A (ja) | 2021-03-01 |
JP7387335B2 true JP7387335B2 (ja) | 2023-11-28 |
Family
ID=74676662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019155592A Active JP7387335B2 (ja) | 2019-08-28 | 2019-08-28 | 通信装置、制御方法およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP7387335B2 (ja) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006005878A (ja) | 2004-06-21 | 2006-01-05 | Fujitsu Ltd | 通信システムの制御方法、通信制御装置、プログラム |
JP2008507201A (ja) | 2004-07-14 | 2008-03-06 | インターナショナル・ビジネス・マシーンズ・コーポレーション | ネットワーク・プロトコル処理のオフロードにおいて接続確立をサポートする装置および方法 |
JP2010097252A (ja) | 2008-10-14 | 2010-04-30 | Canon Inc | プロセッサ間通信方法、マルチプロセッサシステム及びプロセッサ。 |
JP2014071478A (ja) | 2012-09-27 | 2014-04-21 | Toshiba Corp | 情報処理装置および命令のオフローディング方法 |
JP2018196053A (ja) | 2017-05-19 | 2018-12-06 | キヤノン株式会社 | 通信装置、通信方法、およびプログラム |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8990422B1 (en) * | 2011-06-21 | 2015-03-24 | Netlogic Microsystems, Inc. | TCP segmentation offload (TSO) using a hybrid approach of manipulating memory pointers and actual packet data |
-
2019
- 2019-08-28 JP JP2019155592A patent/JP7387335B2/ja active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006005878A (ja) | 2004-06-21 | 2006-01-05 | Fujitsu Ltd | 通信システムの制御方法、通信制御装置、プログラム |
JP2008507201A (ja) | 2004-07-14 | 2008-03-06 | インターナショナル・ビジネス・マシーンズ・コーポレーション | ネットワーク・プロトコル処理のオフロードにおいて接続確立をサポートする装置および方法 |
JP2010097252A (ja) | 2008-10-14 | 2010-04-30 | Canon Inc | プロセッサ間通信方法、マルチプロセッサシステム及びプロセッサ。 |
JP2014071478A (ja) | 2012-09-27 | 2014-04-21 | Toshiba Corp | 情報処理装置および命令のオフローディング方法 |
JP2018196053A (ja) | 2017-05-19 | 2018-12-06 | キヤノン株式会社 | 通信装置、通信方法、およびプログラム |
Also Published As
Publication number | Publication date |
---|---|
JP2021034954A (ja) | 2021-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2021007249A (ja) | 仮想ルータクラスタ、データ転送方法および装置 | |
US20070297334A1 (en) | Method and system for network protocol offloading | |
JP5074872B2 (ja) | プロトコル処理装置及び制御方法 | |
US20120213118A1 (en) | Method and system for network interface controller (nic) address resolution protocol (arp) batching | |
US7761587B2 (en) | Apparatus and method for transmitting packet IP offload | |
JP2005167965A (ja) | パケット処理方法および装置 | |
JP7387335B2 (ja) | 通信装置、制御方法およびプログラム | |
JP5915314B2 (ja) | 通信装置 | |
WO2017219777A1 (zh) | 一种报文处理方法及装置 | |
JP6758858B2 (ja) | 通信装置、通信方法及びプログラム | |
JP2009088918A (ja) | 無線lanアクセスポイントおよびプログラム | |
JP4499622B2 (ja) | トラフィック分散装置,トラフィック分散プログラム及びパケット中継方法 | |
US20230062831A1 (en) | Communication apparatus and control method thereof, and storage medium | |
JP2006197051A (ja) | ネットワーク通信制御装置およびネットワーク通信制御方法 | |
JP6279970B2 (ja) | プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム | |
JP7321913B2 (ja) | 通信装置、制御方法およびプログラム | |
WO2023238326A1 (ja) | スイッチ | |
WO2018142866A1 (ja) | 転送装置、転送方法及びプログラム | |
JP2008535341A (ja) | ホスト・イーサネット(登録商標)・アダプタ(hea)において待ち時間を短縮するためのシステム及び方法 | |
JP2019066969A (ja) | 情報処理装置及び情報処理プログラム | |
JP6891201B2 (ja) | 通信装置、通信装置の制御方法およびプログラム | |
JP2022161570A (ja) | 通信装置、通信方法およびプログラム | |
JP6568571B2 (ja) | データ転送装置、データ転送方法および通信装置 | |
JP6794202B2 (ja) | 通信装置およびその制御方法 | |
JP5680018B2 (ja) | 情報処理装置および画像形成装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20220706 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20230425 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20230516 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230710 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20231017 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20231115 |
|
R151 | Written notification of patent or utility model registration |
Ref document number: 7387335 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |