JP2021087172A - 通信装置、通信方法およびプログラム - Google Patents
通信装置、通信方法およびプログラム Download PDFInfo
- Publication number
- JP2021087172A JP2021087172A JP2019216581A JP2019216581A JP2021087172A JP 2021087172 A JP2021087172 A JP 2021087172A JP 2019216581 A JP2019216581 A JP 2019216581A JP 2019216581 A JP2019216581 A JP 2019216581A JP 2021087172 A JP2021087172 A JP 2021087172A
- Authority
- JP
- Japan
- Prior art keywords
- packet
- transmission
- header
- communication device
- generated
- 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.)
- Pending
Links
Images
Landscapes
- Bus Control (AREA)
- Communication Control (AREA)
Abstract
【課題】送信データのヘッダ又はパケットを生成する際、当該生成処理の完了待ちをポーリング又は割り込みで行うかを適切に選択できるようにすること。【解決手段】送信データを通信相手装置に送信する通信装置10であって、送信データのパケット又はヘッダを生成する生成手段と、生成手段の処理内容に基づいて、生成手段の処理完了待ちをポーリングで行うか割り込みで行うかを選択する選択手段401と、生成手段により生成されたパケット又は生成手段により生成されたヘッダに対応するパケットを送信する送信手段と、を備える。【選択図】図2
Description
本発明は、パケットを送信する通信装置に関する。
TCP/IPのプロトコル処理では、CPUの処理軽減および高速送信のため、オフロード処理が用いられる。オフロード処理では、指定されたユーザデータをソケットAPI send()のコール毎にネットワークバッファへ転送する処理とチェックサム計算を同時にハードウェウェアオフロードで処理する。この場合、事前に計算したチェックサム値を用いて1MSS以下のデータサイズを一つずつCPU処理でパケット化する。TCP/IPは、Transmission Control Protocol/Internet Protocolの略である。CPUはCentral Processing Unit(中央演算処理装置)の略である。APIはApplication Programming Interfaceの略である。MSSはMaximum Segment Sizeの略である。
特許文献1には、リモートダイレクトメモリアクセスを使用して入力/出力処理をオフロードする技術が開示されている。特許文献1では、入力/出力処理が、ポーリングモード又は割り込みモードで完了する。
しかしながら、特許文献1では、オフロード処理の内容に関係なく、入力/出力処理がポーリングモード又は割り込みモードで完了する。従って、ハードウェアオフロードを利用して送信データに対応するヘッダもしくはパケットを生成する際、例えば、ポーリングモード(あるいは割り込みモード)のみを使用したために通信効率が悪くなる場合も有り得る。例えば、ポーリングのみを使用して、オフロード処理の完了を応答性が高い周期で確認すると、CPUの処理負担が大きくなる。
本発明は上記した課題に鑑み、送信データのヘッダ又はパケットを生成する際、当該生成処理の完了待ちをポーリング又は割り込みで行うかを適切に選択できる技術を提供することを目的とする。
本発明は上記した課題に鑑み、送信データのヘッダ又はパケットを生成する際、当該生成処理の完了待ちをポーリング又は割り込みで行うかを適切に選択できる技術を提供することを目的とする。
上記目的を達成するべく、本発明の1つの態様による通信装置は、送信データを通信相手装置に送信する通信装置であって、前記送信データのパケット又はヘッダを生成する生成手段と、前記生成手段の処理内容に基づいて、前記生成手段の処理完了待ちをポーリングで行うか割り込みで行うかを選択する選択手段と、前記生成手段により生成されたパケット又は前記生成手段により生成されたヘッダに対応するパケットを送信する送信手段と、を備える。
本発明によれば、送信データのヘッダ又はパケットを生成する際、当該生成処理の完了待ちをポーリング又は割り込みで行うかを適切に選択できる。
以下、添付図面を参照して本発明の実施形態を詳細に説明する。なお、以下の実施形態は本発明を限定するものではなく、また、実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。実施形態の構成は、本発明が適用される装置の仕様や各種条件(使用条件、使用環境等)によって適宜修正又は変更され得る。本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されない。
[実施形態1]
図1は、実施形態1における通信装置10のハードウェア構成例を示すブロック図である。
実施形態1では、通信プロトコルとしてTCP/IPを使用する。TCP/IPのプロトコル処理では、送信側(図1の通信装置10)は、送信データのパケット化や再送処理のために、ネットワークバッファ(送信バッファ)を用意する。送信側におけるTCP/IPパケットの送信処理において、ソケットAPI send()によって指定された送信データ(ユーザデータ)が送信バッファに転送され、MTU(最大伝送単位)でチャンク化される。そして、チャンク化されたデータと擬似ヘッダのチェックサムが計算され、TCPヘッダとIPヘッダが追加されたTCP/IPパケットが生成される。伝送経路がイーサネット(登録商標)の場合、これらヘッダに加えて、イーサネットヘッダが付加されたイーサネットフレームが生成され、送信される。MTUはMaximum Transmission Unitの略である。
図1は、実施形態1における通信装置10のハードウェア構成例を示すブロック図である。
実施形態1では、通信プロトコルとしてTCP/IPを使用する。TCP/IPのプロトコル処理では、送信側(図1の通信装置10)は、送信データのパケット化や再送処理のために、ネットワークバッファ(送信バッファ)を用意する。送信側におけるTCP/IPパケットの送信処理において、ソケットAPI send()によって指定された送信データ(ユーザデータ)が送信バッファに転送され、MTU(最大伝送単位)でチャンク化される。そして、チャンク化されたデータと擬似ヘッダのチェックサムが計算され、TCPヘッダとIPヘッダが追加されたTCP/IPパケットが生成される。伝送経路がイーサネット(登録商標)の場合、これらヘッダに加えて、イーサネットヘッダが付加されたイーサネットフレームが生成され、送信される。MTUはMaximum Transmission Unitの略である。
また、TCP/IPのプロトコル処理では、送信側のパケット送信の度に受信側がACK(Acknowledgement)を送信することによる通信速度の低下を回避するために、所定のウィンドウサイズを利用するウィンドウ制御が行われる。TCP/IPのウィンドウ制御では、受信側(図1の通信相手装置113)は、受信バッファの残りサイズをウィンドウサイズに設定したACKを送信し、送信側は、ウィンドウサイズになるまでACKを待つことなく送信データを送信することができる。更に、TCP/IPのウィンドウ制御では、通信速度をより向上させるために、スライディングウィンドウが用いられる。スライディングウィンドウでは、受信側はパケットを受信する度にACKを送信し、送信側は最初のACKを受信するとウィンドウをスライドさせて、ACKを待つことなくウィンドウサイズ分のデータを連続的に送信することが可能となる。
通信装置10は、RAM101、CPU102、ROM103、記録媒体104および通信部105を有する。RAMはRandom Access Memoryの略である。ROMはRead Only Memoryの略である。通信装置10は、例えば、通信機能を備えるパーソナルコンピュータ、タブレット端末、スマートフォン、カメラ、プリンタ、プロジェクタなどである。
RAM101は、各種データを保存したり、ワークメモリ(ワークエリア)として使用される。RAM101は送受信データを格納して管理するためのメモリ領域101aを有する。
CPU102は、RAM101をワークメモリとして、ROM103や記録媒体104に格納された各種プログラムを実行する。
ROM103は、CPU102により実行される各種プログラム等を記憶する。
記録媒体104は、ハードディスクなどのプログラム格納部である。
RAM101は、各種データを保存したり、ワークメモリ(ワークエリア)として使用される。RAM101は送受信データを格納して管理するためのメモリ領域101aを有する。
CPU102は、RAM101をワークメモリとして、ROM103や記録媒体104に格納された各種プログラムを実行する。
ROM103は、CPU102により実行される各種プログラム等を記憶する。
記録媒体104は、ハードディスクなどのプログラム格納部である。
通信部105は、MAC(Media Access Control)モジュール109とPHY(Physical Layer)モジュール110を有し、イーサネット(商標登録)などのネットワーク112を介して通信相手装置113との通信を行う。通信装置10のデータの送受信は、CPU102によりネットワークドライバが実行され、これに応じてMACモジュール109が制御されることにより行われる。なお、本実施形態では、通信部105は、イーサネット(登録商標)を介した通信を行うものとするが、イーサネットに替えて、無線LAN(Wi−Fi)などのIP通信可能な媒体を介して通信を行うことも可能である。LANはLocal Area Networkの略である。
本実施形態の通信装置10は更に、バッファ管理部114、データ転送部115、フレーム生成部116、パケット生成部117、チェックサム計算部118およびタイマ管理部119を有する。
バッファ管理部114は、ヘッダ又はパケットを格納するバッファと関連付けた管理情報の取得を行う。
データ転送部115は、例えばDMA(Direct Memory Access)を行うDMAコントローラにより構成され、RAM101に記憶されているデータを、DMAでフレーム生成部116やパケット生成部117に転送する。なお、データ転送部115は、データを転送する際にCPU102により制御されてもよい(DMA転送でなくてもよい)。
バッファ管理部114は、ヘッダ又はパケットを格納するバッファと関連付けた管理情報の取得を行う。
データ転送部115は、例えばDMA(Direct Memory Access)を行うDMAコントローラにより構成され、RAM101に記憶されているデータを、DMAでフレーム生成部116やパケット生成部117に転送する。なお、データ転送部115は、データを転送する際にCPU102により制御されてもよい(DMA転送でなくてもよい)。
フレーム生成部116は、送信する送信データサイズを決定し、決定したサイズの送信データと、送信データに対するヘッダ情報を生成するためのヘッダ情報生成処理を行う。
パケット生成部117は、フレーム生成部116により生成された送信データとヘッダ情報に基づいて、送信データのセグメント化およびヘッダの生成を行い、当該セグメントとヘッダから送信パケットを生成する。
チェックサム計算部118は、RAM101に記憶されているデータに対してチェックサム計算を行う。
タイマ管理部119は、パケット送信に関して必要な所定時間を管理する。
なお、以下に説明するパケットは、IP通信上で送受信されるデータの単位である。パケットの組み立て方法については、本実施形態の本質ではないので、説明を省略する。
パケット生成部117は、フレーム生成部116により生成された送信データとヘッダ情報に基づいて、送信データのセグメント化およびヘッダの生成を行い、当該セグメントとヘッダから送信パケットを生成する。
チェックサム計算部118は、RAM101に記憶されているデータに対してチェックサム計算を行う。
タイマ管理部119は、パケット送信に関して必要な所定時間を管理する。
なお、以下に説明するパケットは、IP通信上で送受信されるデータの単位である。パケットの組み立て方法については、本実施形態の本質ではないので、説明を省略する。
図2は、本実施形態における通信装置10の機能構成例を示すブロック図である。アプリケーション201は、ユーザアプリケーションを指す。アプリケーション201により、任意のサイズの、送信対象のアプリケーションデータ(送信データ)がプロトコルスタック202に入力される。プロトコルスタック202は、ネットワークバッファ管理部203、セグメント処理部204、通信プロトコル処理部205、コネクション管理部206、TCPウィンドウ制御部207および輻輳制御部208から構成される。
プロトコルスタック202は、アプリケーション201から入力された送信データ(RAM101のメモリ領域101aに格納されている送信バッファ)を、ネットワークバッファ管理部203により管理する。
ネットワークバッファ管理部203は、図1のバッファ管理部114に対応している。ネットワークバッファ管理部203は、図1のRAM101のメモリ領域101aに格納されている送信バッファにヘッダ又はパケットを格納する。また、ネットワークバッファ管理部203は、メモリ領域101aに格納している送信データのサイズを管理する。
コネクション管理部206は、通信装置10の通信コネクションを管理する。例えば、コネクション管理部206は、アプリケーション201に対する通信コネクションにおけるMSS等のコネクション情報を管理する。
TCPウィンドウ制御部207は、通信インタフェース制御部209を介して受信した確認応答から、TCPコネクションの送信ウィンドウサイズを取得し、管理する。
輻輳制御部208は、TCPコネクションにおける輻輳制御を管理する。例えば、輻輳制御部208は、アプリケーション201に対する通信コネクションにおける輻輳ウィンドウ(輻輳ウィンドウサイズ)を管理する。
ネットワークバッファ管理部203は、図1のバッファ管理部114に対応している。ネットワークバッファ管理部203は、図1のRAM101のメモリ領域101aに格納されている送信バッファにヘッダ又はパケットを格納する。また、ネットワークバッファ管理部203は、メモリ領域101aに格納している送信データのサイズを管理する。
コネクション管理部206は、通信装置10の通信コネクションを管理する。例えば、コネクション管理部206は、アプリケーション201に対する通信コネクションにおけるMSS等のコネクション情報を管理する。
TCPウィンドウ制御部207は、通信インタフェース制御部209を介して受信した確認応答から、TCPコネクションの送信ウィンドウサイズを取得し、管理する。
輻輳制御部208は、TCPコネクションにおける輻輳制御を管理する。例えば、輻輳制御部208は、アプリケーション201に対する通信コネクションにおける輻輳ウィンドウ(輻輳ウィンドウサイズ)を管理する。
セグメント処理部204は、ネットワークバッファ管理部203により管理される。セグメント処理部204は、メモリ領域101aに格納されている送信バッファの送信データのサイズ、コネクション管理部206で管理されているMSS、TCPウィンドウ制御部207で管理されている送信ウィンドウサイズ、輻輳制御部208で管理されている輻輳ウィンドウサイズ等に基づいて、送信データサイズを決定する。
通信プロトコル処理部205は、TCPセグメントのTCPヘッダやUDPヘッダやIPヘッダの生成と、それに伴うチェックサム計算等の処理を行い、送信パケットを生成する。
通信プロトコル処理部205は、TCPセグメントのTCPヘッダやUDPヘッダやIPヘッダの生成と、それに伴うチェックサム計算等の処理を行い、送信パケットを生成する。
パケット生成処理部300は、パケット生成完了通知選択部401、データ転送部402、イーサネット/TCP/UDP/IPヘッダ生成部403、パケット生成部404から構成される。パケット生成処理部300は、オフロード処理部(ハードウェア)である。
パケット生成完了通知選択部401は、データ転送部402とイーサネット/TCP/UDP/IPヘッダ生成部403とパケット生成部404によるパケット化処理の完了通知を、割り込みで行うかポーリングで行うかの選択をする。
データ転送部402は図1のデータ転送部115に対応し、データのチャンク機能、チェックサム計算機能、転送機能を持つ。チャンク機能は、送信データをデータ転送する際、所定の単位(例えばMSS単位)にチャンク化する。チェックサム計算機能は図1のチェックサム計算部118に対応する。チェックサム計算機能は、所定の単位にチャンク化した各データに対するチェックサム計算を行う。
パケット生成完了通知選択部401は、データ転送部402とイーサネット/TCP/UDP/IPヘッダ生成部403とパケット生成部404によるパケット化処理の完了通知を、割り込みで行うかポーリングで行うかの選択をする。
データ転送部402は図1のデータ転送部115に対応し、データのチャンク機能、チェックサム計算機能、転送機能を持つ。チャンク機能は、送信データをデータ転送する際、所定の単位(例えばMSS単位)にチャンク化する。チェックサム計算機能は図1のチェックサム計算部118に対応する。チェックサム計算機能は、所定の単位にチャンク化した各データに対するチェックサム計算を行う。
イーサネット/TCP/UDP/IPヘッダ生成部403は、所定のヘッダ情報に基づいて、ネットワークバッファ管理部203が管理しているメモリ領域101aのバッファを用いて、TCP/IPヘッダ、UDP/IPヘッダ、イーサネットヘッダを生成する。
パケット生成部404は、データ転送部402とイーサネット/TCP/UDP/IPヘッダ生成部403から出力されたデータを用いて、パケット化処理を行う。
パケット生成部404は、データ転送部402とイーサネット/TCP/UDP/IPヘッダ生成部403から出力されたデータを用いて、パケット化処理を行う。
本実施形態では、セグメント処理部204により決定された送信データサイズに応じて、通信プロトコル処理部205又はパケット生成処理部300が、ネットワークバッファ管理部203が管理するバッファを用いて送信パケットを生成する。送信パケットの生成手法については、図3を用いて後述する。パケット生成処理部300による処理は、ハードウェアオフロード処理である。
通信プロトコル処理部205又はパケット生成処理部300により生成された送信パケットは、通信インタフェース制御部209に入力される。通信インタフェース制御部209は、プロトコルスタック202と通信インタフェース210との間でデータや情報のやり取りを行う。通信インタフェース210は、図1のMACモジュール109、PHYモジュール110に対応し、ネットワーク112と通信を行う。送信パケットの送信は、タイマ管理部119により一定時間以上経過したことが通知された場合に、行われてもよい。
次に、図3を参照して、本実施形態の通信装置10により行われるデータ送信処理を説明する。図3のフローチャートでは、ソケットAPI send()によるデータ送信処理を説明する。なお、sendto()、sendmsg()、sendmmsg()によるデータ送信処理の場合も、図3と同様なフローチャートを用いることができる。
本実施形態では、ウィンドウサイズを使用するプロトコルのデータ送信処理において、パケット生成処理の完了待ちに割り込み又はポーリングを選択し、パケット送信を行う。SはStepの略である。
本実施形態では、ウィンドウサイズを使用するプロトコルのデータ送信処理において、パケット生成処理の完了待ちに割り込み又はポーリングを選択し、パケット送信を行う。SはStepの略である。
まず、S101において、ソケットAPIの呼び出しを行う。より詳しくは、CPU102により、ROM103に格納されている所定のプログラムが実行されることに応じて、アプリケーション201は、send()を呼び出す。
send()が呼び出されると、データ転送部115は、S102で、不図示のユーザバッファのデータ転送先であるRAM101内の送信バッファへ送信データを転送しチャンク化を行う。送信データは送信バッファに格納される。ゼロコピーでsend()が呼び出された場合は、データ転送部115は、ユーザバッファの格納場所の情報を送信バッファへ転送する。
send()が呼び出されると、データ転送部115は、S102で、不図示のユーザバッファのデータ転送先であるRAM101内の送信バッファへ送信データを転送しチャンク化を行う。送信データは送信バッファに格納される。ゼロコピーでsend()が呼び出された場合は、データ転送部115は、ユーザバッファの格納場所の情報を送信バッファへ転送する。
S103において、セグメント処理部204は、送信バッファに格納されている送信データのサイズが、TCPウィンドウ制御部207により管理されている送信ウィンドウサイズを超えるかどうかを判定する。S103の判定結果がNoの場合、処理はS104に進む。S103の判定結果がYesの場合、処理はS105に進む。
S104において、セグメント処理部204は、送信バッファに格納されている送信データのサイズを、送信データサイズとして決定する。
S105において、セグメント処理部204は、送信ウィンドウサイズを送信データサイズとして決定する。
S104において、セグメント処理部204は、送信バッファに格納されている送信データのサイズを、送信データサイズとして決定する。
S105において、セグメント処理部204は、送信ウィンドウサイズを送信データサイズとして決定する。
S106において、通信プロトコル処理部205は、S104又はS105で決定した送信データサイズが、コネクション管理部206で管理されているMSSを超えるかどうか判定する。決定した送信データサイズがMSS以下の場合は(S106:No)、処理はS107に進む。
S107において、通信プロトコル処理部205は、パケット生成部117を制御してチェックサムを計算してTCP/IPヘッダを生成し、TCP/IPヘッダを用いて送信データをパケット化し、TCP/IPパケットを生成する。通信プロトコル処理部205は、更に、イーサネットヘッダを生成し、当該イーサネットヘッダを用いて、TCP/IPパケットをイーサネットフレーム化し、S114に進む。
S107において、通信プロトコル処理部205は、パケット生成部117を制御してチェックサムを計算してTCP/IPヘッダを生成し、TCP/IPヘッダを用いて送信データをパケット化し、TCP/IPパケットを生成する。通信プロトコル処理部205は、更に、イーサネットヘッダを生成し、当該イーサネットヘッダを用いて、TCP/IPパケットをイーサネットフレーム化し、S114に進む。
一方、決定した送信データサイズがMSSを超える場合は(S106:Yes)、処理はS108へ進む。S108において、フレーム生成部116は、TCP/IPヘッダとイーサネットヘッダを生成するための情報としてヘッダ情報を生成し、S109へ進む。
S109において、パケット生成完了通知選択部401は、パケット生成が所定のパケット数以下か、又はヘッダ生成のみかを判定する。send()が呼び出された際に送信データがRAM101のメモリ領域101a内の送信バッファに転送された場合には、パケット生成が行われる。ゼロコピーでsend()が呼び出された際にユーザバッファの格納場所の情報を転送した場合には、ヘッダ生成になる。所定のパケット数には、通信インタフェース制御部209が一度に送信できる最大数(イーサネットコントローラのFIFOのサイズ、又は無線LANモジュールの内部バッファサイズ)が設定される。FIFOはFirst In, First Outの略である。
S109において、パケット生成完了通知選択部401は、パケット生成が所定のパケット数以下か、又はヘッダ生成のみかを判定する。send()が呼び出された際に送信データがRAM101のメモリ領域101a内の送信バッファに転送された場合には、パケット生成が行われる。ゼロコピーでsend()が呼び出された際にユーザバッファの格納場所の情報を転送した場合には、ヘッダ生成になる。所定のパケット数には、通信インタフェース制御部209が一度に送信できる最大数(イーサネットコントローラのFIFOのサイズ、又は無線LANモジュールの内部バッファサイズ)が設定される。FIFOはFirst In, First Outの略である。
S109において、生成されるパケットの数が所定数を超えた場合(S109:No)、又はヘッダ生成ではない場合(S109:No)、S111に進む。
S111において、パケット生成完了通知選択部401は、処理完了待ちに割り込みを選択し、処理はS112に進む。
S109において、生成されるパケットの数が所定数以下の場合(S109:Yes)、又はヘッダ生成の場合(S109:Yes)、S110に進む。
S110において、パケット生成完了通知選択部401は、処理完了待ちにポーリングを選択し、S112に進む。
このように、S109〜S111では、パケット生成処理部300の処理内容に基づいて、処理完了待ちをポーリングで行うか割り込みで行うかを選択する。
S111において、パケット生成完了通知選択部401は、処理完了待ちに割り込みを選択し、処理はS112に進む。
S109において、生成されるパケットの数が所定数以下の場合(S109:Yes)、又はヘッダ生成の場合(S109:Yes)、S110に進む。
S110において、パケット生成完了通知選択部401は、処理完了待ちにポーリングを選択し、S112に進む。
このように、S109〜S111では、パケット生成処理部300の処理内容に基づいて、処理完了待ちをポーリングで行うか割り込みで行うかを選択する。
S112は、パケット生成部117に対応するパケット生成処理部300が行う処理である。S112において、データ転送部402は、送信データがチャンク化されていない場合にはチャンク化とチェックサム計算を行い、チャンク化されている場合にはチェックサム計算を行う。また、S112において、イーサネット/TCP/UDP/IPヘッダ生成部403は、S108で生成されたヘッダ情報を使用し、送信データがMSS単位にチャンク化されて得られる各セグメントに対してTCP/IPヘッダとイーサネットヘッダを(自動)生成する。send()が呼び出された際に送信データがRAM101内の送信バッファに転送された場合には、パケット生成によりイーサネットフレーム化される。ゼロコピーでsend()が呼び出されている場合には、生成されたTCP/IPヘッダとイーサネットヘッダとユーザバッファの格納場所の情報とを関連付けし、イーサネットフレーム化する。
S113において、プロトコルスタック202は、S112の処理が完了しているかを判定する。つまり、S113において、S112の処理の処理完了待ちを割り込み又はポーリングで行う(CPU102は、オフロードによるパケット処理の完了通知を、割り込み又はポーリングで待つ)。S112の処理が完了していない場合(S113:No)、S113を繰り返す。S112の処理が完了した場合(S113:Yes)、S114に進む。
S114において、通信プロトコル処理部205は、イーサネットフレームを通信インタフェース制御部209に送信し、S115に進む。
S115において、送信すべき全てのパケットについてパケット生成処理が完了しているかどうかを判定する。パケット生成処理がすべて完了していない場合は(S115:Yes)、S113に戻り処理を繰り返す。パケット生成処理がすべて完了した場合は(S115:No)、データ送信処理を終了する。
S114において、通信プロトコル処理部205は、イーサネットフレームを通信インタフェース制御部209に送信し、S115に進む。
S115において、送信すべき全てのパケットについてパケット生成処理が完了しているかどうかを判定する。パケット生成処理がすべて完了していない場合は(S115:Yes)、S113に戻り処理を繰り返す。パケット生成処理がすべて完了した場合は(S115:No)、データ送信処理を終了する。
このように、各送信データとTCP/IPヘッダ生成とイーサネットフレーム化を実施するパケット生成処理部300の処理を処理データサイズに応じて(S109〜S112の処理)、処理完了待ちに割り込みか、ポーリングかを選択することができる。つまり、一度に生成するパケット数が少ない場合(またはヘッダ生成の場合)、パケット生成オフロードの処理完了が速いので、本実施形態では、ポーリングによる処理完了通知を使用する(S109Yesで、S110)。一方、一度に生成するパケット数が多い場合、他のタスクと並行して処理をさせるためにハード割り込みによる処理完了通知を使用する(S109Noで、S111)。このような完了待ち選択により、通信装置10の処理効率を上げることができる。
なお、パケット生成処理部300のハードウェアによる処理をソフトウェアで実行した場合においても、本実施形態を適用できる。
本実施形態では、通信インタフェース210が一つであったが、通信インタフェースが複数ある場合にも本実施形態を適用することができる。
上記した実施形態では、TCP/IPプロトコルを使用したが、UDPプロトコル等の他のプロトコルを使用することも可能である。
本実施形態では、通信インタフェース210が一つであったが、通信インタフェースが複数ある場合にも本実施形態を適用することができる。
上記した実施形態では、TCP/IPプロトコルを使用したが、UDPプロトコル等の他のプロトコルを使用することも可能である。
S109で用いる所定のパケット数は、無線LANモジュール、無線LANの規格に応じて変更してよい。
S109の「所定のパケット数以下か」は「所定のデータサイズ以下か」にしてもよい。1パケット毎のデータサイズが小さい場合もパケット生成オフロードの処理完了が速いので、ポーリングによる処理完了通知を使用する。
S109の「所定のパケット数以下か」は「送信先の通信インタフェースが有線LAN側か」、又は「送信先の通信インタフェースが無線LAN側か」にしてもよい。通信インタフェースによっては割り込み通知によるオーバーヘッドを軽減するため、ポーリングによる処理完了通知を使用する。
本実施形態によれば、ハードウェアオフロードを使用した場合に処理時間に応じて割り込み通知又はポーリングを選択できるため、送信処理の効率が改善される。
S109の「所定のパケット数以下か」は「所定のデータサイズ以下か」にしてもよい。1パケット毎のデータサイズが小さい場合もパケット生成オフロードの処理完了が速いので、ポーリングによる処理完了通知を使用する。
S109の「所定のパケット数以下か」は「送信先の通信インタフェースが有線LAN側か」、又は「送信先の通信インタフェースが無線LAN側か」にしてもよい。通信インタフェースによっては割り込み通知によるオーバーヘッドを軽減するため、ポーリングによる処理完了通知を使用する。
本実施形態によれば、ハードウェアオフロードを使用した場合に処理時間に応じて割り込み通知又はポーリングを選択できるため、送信処理の効率が改善される。
[実施形態2]
以下、図1、図2および図4を用いて、本発明の実施形態2の通信装置による通信処理を説明する。なお、実施形態2において、実施形態1と同様の構成および機能については、同一符号を付して、その詳細な説明は省略する。
実施形態2では通信プロトコルとしてUDPを使用する。通信プロトコル処理部205は、UDP/IPヘッダおよびUDP/IPパケットを生成する。UDPはUser Datagram Protocolの略である。UDPは、TCP/IPと異なり、ハンドシェイクを省いたコネクションレスのプロトコルである。UDPのデータ転送は、送受信されるデータの順序性の保障なく、送信先からの確認応答がないため信頼性を保障していない。しかし、通信の処理にかかるコストが少ないため、途中でデータが抜け落ちても問題が少ないストリーミング、及び通信処理のオーバーヘッドを軽減したいリアルタイムシステム通信でよく使われている。
以下、図1、図2および図4を用いて、本発明の実施形態2の通信装置による通信処理を説明する。なお、実施形態2において、実施形態1と同様の構成および機能については、同一符号を付して、その詳細な説明は省略する。
実施形態2では通信プロトコルとしてUDPを使用する。通信プロトコル処理部205は、UDP/IPヘッダおよびUDP/IPパケットを生成する。UDPはUser Datagram Protocolの略である。UDPは、TCP/IPと異なり、ハンドシェイクを省いたコネクションレスのプロトコルである。UDPのデータ転送は、送受信されるデータの順序性の保障なく、送信先からの確認応答がないため信頼性を保障していない。しかし、通信の処理にかかるコストが少ないため、途中でデータが抜け落ちても問題が少ないストリーミング、及び通信処理のオーバーヘッドを軽減したいリアルタイムシステム通信でよく使われている。
図4は、実施形態2におけるデータ送信処理を説明するフローチャートである。本フローチャートでは、ソケットAPIによる複数データのデータ送信処理を想定している(例えば、sendmmmsg()によるデータ送信)。
実施形態2では、複数の送信データを一度にソケットAPIで指定するデータ送信処理において、パケット生成処理の完了待ちに割り込み又はポーリングを選択し、パケット送信を行う。
実施形態2では、複数の送信データを一度にソケットAPIで指定するデータ送信処理において、パケット生成処理の完了待ちに割り込み又はポーリングを選択し、パケット送信を行う。
まず、S201において、CPU102により、ROM103に格納されている所定のプログラムが実行されることに応じて、アプリケーション201は、ソケットAPIを呼び出す。
ソケットAPIが呼び出されると、データ転送部115は、S202で、不図示のユーザバッファのデータ転送先であるRAM101内の送信バッファへ送信データを転送しチャンク化を行う。送信データは送信バッファに格納される。ゼロコピーでソケットAPIが呼び出された場合は、データ転送部115は、ユーザバッファの格納場所の情報を送信バッファへ転送する。
ソケットAPIが呼び出されると、データ転送部115は、S202で、不図示のユーザバッファのデータ転送先であるRAM101内の送信バッファへ送信データを転送しチャンク化を行う。送信データは送信バッファに格納される。ゼロコピーでソケットAPIが呼び出された場合は、データ転送部115は、ユーザバッファの格納場所の情報を送信バッファへ転送する。
S203において、ソケットAPIにより一度に複数のデータを送信ソケットに指定したかどうかを判定する。ソケットAPIに一度に1つのデータを指定した場には(S203:No)、処理はS204に進む。
S204において、通信プロトコル処理部205は、パケット生成部117を制御してチェックサムを計算してUDP/IPヘッダを生成し、UDP/IPヘッダを用いて送信データをパケット化し、UDP/IPパケットを生成する。通信プロトコル処理部205は、更に、イーサネットヘッダを生成し、当該イーサネットヘッダを用いて、UDP/IPパケットをイーサネットフレーム化し、S211に進む。
S204において、通信プロトコル処理部205は、パケット生成部117を制御してチェックサムを計算してUDP/IPヘッダを生成し、UDP/IPヘッダを用いて送信データをパケット化し、UDP/IPパケットを生成する。通信プロトコル処理部205は、更に、イーサネットヘッダを生成し、当該イーサネットヘッダを用いて、UDP/IPパケットをイーサネットフレーム化し、S211に進む。
ソケットAPIにより一度に複数のデータを指定した場合(S203:Yes)、処理はS205へ進む。
S205において、フレーム生成部116は、UDP/IPヘッダとイーサネットヘッダを生成するための情報としてヘッダ情報を生成し、S206へ進む。
S206において、パケット生成完了通知選択部402は、パケット生成が所定のパケット数以下か、又はヘッダ生成のみかを判定する。ソケットAPIが呼び出された際に送信データがRAM101内の送信バッファに転送された場合にはパケット生成が行われる。ゼロコピーでソケットAPIが呼び出された際にユーザバッファの格納場所の情報を転送した場合には、ヘッダ生成になる。所定のパケット数には、通信インタフェース制御部209が一度に送信できる最大数(イーサネットコントローラのFIFOのサイズ、又は無線LANモジュールの内部バッファサイズ)が設定される。
S205において、フレーム生成部116は、UDP/IPヘッダとイーサネットヘッダを生成するための情報としてヘッダ情報を生成し、S206へ進む。
S206において、パケット生成完了通知選択部402は、パケット生成が所定のパケット数以下か、又はヘッダ生成のみかを判定する。ソケットAPIが呼び出された際に送信データがRAM101内の送信バッファに転送された場合にはパケット生成が行われる。ゼロコピーでソケットAPIが呼び出された際にユーザバッファの格納場所の情報を転送した場合には、ヘッダ生成になる。所定のパケット数には、通信インタフェース制御部209が一度に送信できる最大数(イーサネットコントローラのFIFOのサイズ、又は無線LANモジュールの内部バッファサイズ)が設定される。
S206において、パケット生成が所定のパケット数を超えた場合(S206:No)、又はヘッダ生成ではない場合(S206:No)、処理はS208に進む。
S208において、パケット生成完了通知選択部401は、処理完了待ちに割り込みを選択し、処理はS209に進む。
S206において、パケット生成が所定のパケット数以下の場合(S206:Yes)、又はヘッダ生成の場合(S206:Yes)、処理はS207に進む。
S207において、パケット生成完了通知選択部401は、処理完了待ちにポーリングを選択し、処理はS209に進む。
S208において、パケット生成完了通知選択部401は、処理完了待ちに割り込みを選択し、処理はS209に進む。
S206において、パケット生成が所定のパケット数以下の場合(S206:Yes)、又はヘッダ生成の場合(S206:Yes)、処理はS207に進む。
S207において、パケット生成完了通知選択部401は、処理完了待ちにポーリングを選択し、処理はS209に進む。
S209は、パケット生成部117に対応するパケット生成処理部300による処理である。S209において、データ転送部402は、送信データがチャンク化されていない場合にはチャンク化とチェックサム計算を行い、チャンク化されている場合にはチェックサム計算を行う。また、S209において、イーサネット/TCP/UDP/IPヘッダ生成部403は、S205で生成されたヘッダ情報を使用し、送信データがMTU単位にチャンク化されて得られる各送信データに対してUDP/IPヘッダとイーサネットヘッダを(自動)生成する。ソケットAPIが呼び出された際に送信データがRAM101内の送信バッファに転送された場合には、パケット生成によりイーサネットフレーム化される。ゼロコピーでソケットAPIが呼び出されている場合には、生成されたUDP/IPヘッダとイーサネットヘッダとユーザバッファの格納場所の情報とを関連付けし、イーサネットフレーム化する。
S210において、プロトコルスタック202は、S209の処理が完了しているかを判定する。つまり、S210において、S209の処理の処理完了待ちを割り込み(S208)又はポーリング(S207)で行う。S209の処理が完了していない場合(S210:No)、S210を繰り返す。S209の処理が完了した場合(S210:Yes)、S211に進む。
S211において、通信プロトコル処理部205は、イーサネットフレームを通信インタフェース制御部209に送信し、S212に進む。
S212において、送信すべき全てのパケットについてパケット生成処理が完了しているかどうかを判定する。パケット生成処理がすべて完了していない場合は(S212:Yes)、S210へ戻り処理を繰り返す。パケット生成処理がすべて完了した場合は(S212:No)、データ送信処理を終了する。
S211において、通信プロトコル処理部205は、イーサネットフレームを通信インタフェース制御部209に送信し、S212に進む。
S212において、送信すべき全てのパケットについてパケット生成処理が完了しているかどうかを判定する。パケット生成処理がすべて完了していない場合は(S212:Yes)、S210へ戻り処理を繰り返す。パケット生成処理がすべて完了した場合は(S212:No)、データ送信処理を終了する。
このように、各送信データとUDP/IPヘッダ生成とイーサネットフレーム化を実施するパケット生成処理部300の処理を処理データサイズに応じて(S206〜S210の処理)、処理完了待ちに割り込みか、ポーリングかを選択することができる。なお、パケット生成処理部300のハードウェアによる処理をソフトウェアで実行した場合においても、本実施形態を適用可能である。また、通信インタフェース210が一つ存在する例を挙げたが、通信インタフェースが複数の場合にも本発明を適用することができる。また、本実施形態では、UDP/IPプロトコルを例にして説明したが、TCPプロトコル等の他のプロトコルを適用することも可能である。なお、S206で用いる所定のパケット数は、無線LANモジュール、無線LANの規格に応じて変更してよい。
S206の「所定のパケット数以下か」は「送信先の通信インタフェースが有線LAN側か」、又は「送信先の通信インタフェースが無線LAN側か」にしてもよい。通信インタフェースによっては割り込み通知によるオーバーヘッドを軽減するため、ポーリングによる処理完了通知を使用する。
S206の「所定のパケット数以下か」は「送信先の通信インタフェースが有線LAN側か」、又は「送信先の通信インタフェースが無線LAN側か」にしてもよい。通信インタフェースによっては割り込み通知によるオーバーヘッドを軽減するため、ポーリングによる処理完了通知を使用する。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
図1および図2に示した構成は一例であり、複数の機能部が1つの機能部に統合されてもよいし、いずれかの機能部が複数の機能部に分けられてもよい。また、図1および図2に示した機能部(例えば、バッファ管理部114、データ転送部115、フレーム生成部116、パケット生成部117)に含まれる一部又は全部の機能がハードウェア化されていてもよい。ハードウェア化は、例えばASIC(Application Specific Integrated Circuit)により実現される。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
102:CPU、105:データ転送部、106:フレーム生成部、107:パケット生成部、109:MACモジュール、113:通信相手装置、202:プロトコルスタック、300:パケット生成処理部、401:パケット生成完了通知選択部、402:データ転送部、404:パケット生成部
Claims (10)
- 送信データを通信相手装置に送信する通信装置であって、
前記送信データのパケット又はヘッダを生成する生成手段と、
前記生成手段の処理内容に基づいて、前記生成手段の処理完了待ちをポーリングで行うか割り込みで行うかを選択する選択手段と、
前記生成手段により生成されたパケット又は前記生成手段により生成されたヘッダに対応するパケットを送信する送信手段と、
を備えることを特徴とする通信装置。 - 前記選択手段は、前記生成手段が処理するデータのサイズに基づいて、前記ポーリング又は前記割り込みを選択することを特徴とする請求項1に記載の通信装置。
- 前記生成手段は、前記送信データのゼロコピーが設定されている場合には、前記ヘッダを生成し、前記送信データのゼロコピーが設定されていない場合には、前記パケットを生成することを特徴とする請求項1又は2に記載の通信装置。
- 前記選択手段は、前記生成手段が前記ヘッダを生成する場合、前記ポーリングを選択することを特徴とする請求項1から3のいずれか1項に記載の通信装置。
- 前記選択手段は、前記生成手段が生成する前記パケットの数が所定数以下の場合、前記ポーリングを選択し、前記生成手段が生成する前記パケットの数が前記所定数を超える場合、前記割り込みを選択することを特徴とする請求項1から3のいずれか1項に記載の通信装置。
- 前記通信装置は中央演算処理装置を備え、前記生成手段は、前記中央演算処理装置とは別のハードウェアを含むことを特徴とする請求項1から5のいずれか1項に記載の通信装置。
- 前記送信データのサイズが所定のサイズを超えない場合、前記生成手段は前記パケットの生成を行わず、前記中央演算処理装置が前記パケットの生成を行い、前記送信手段は、前記中央演算処理装置が生成したパケットを送信することを特徴とする請求項6に記載の通信装置。
- 前記送信データを1つだけ送信ソケットに指定した場合、前記生成手段は前記パケットの生成を行わず、前記中央演算処理装置が前記パケットの生成を行い、前記送信手段は、前記中央演算処理装置が生成したパケットを送信することを特徴とする請求項6に記載の通信装置。
- 送信データを通信相手装置に送信する通信方法であって、
前記送信データのパケット又はヘッダを生成する生成ステップと、
前記生成ステップの処理内容に基づいて、前記生成ステップの処理完了待ちをポーリングで行うか割り込みで行うかを選択する選択ステップと、
前記生成ステップにより生成されたパケット又は前記生成ステップにより生成されたヘッダに対応するパケットを送信する送信ステップと、
を有することを特徴とする通信方法。 - コンピュータを請求項1から8のいずれか1項に記載の通信装置として動作させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019216581A JP2021087172A (ja) | 2019-11-29 | 2019-11-29 | 通信装置、通信方法およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019216581A JP2021087172A (ja) | 2019-11-29 | 2019-11-29 | 通信装置、通信方法およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021087172A true JP2021087172A (ja) | 2021-06-03 |
Family
ID=76085829
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019216581A Pending JP2021087172A (ja) | 2019-11-29 | 2019-11-29 | 通信装置、通信方法およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2021087172A (ja) |
-
2019
- 2019-11-29 JP JP2019216581A patent/JP2021087172A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9641650B2 (en) | TCP proxy server | |
US8306062B1 (en) | Method and apparatus of adaptive large receive offload | |
US8583831B2 (en) | Thin client discovery | |
EP2719132A1 (en) | System and method for reliable virtual bi-directional data stream communications with single socket point-to-multipoint capability | |
US20120163167A1 (en) | Transmission control protocol optimization systems and methods for wireless networks | |
US7675898B2 (en) | Session relay apparatus for relaying data, and a data relaying method | |
WO2020007084A1 (zh) | 重传控制方法、通信接口和电子设备 | |
JP6963411B2 (ja) | 通信装置、通信方法、およびプログラム | |
JP2007142582A (ja) | データ通信装置、データ通信方法、プログラム及び記憶媒体 | |
US8578040B2 (en) | Method, system and article for client application control of network transmission loss tolerance | |
US20160316022A1 (en) | Communication device, communication processing method, and storage medium | |
EP3319297B1 (en) | Network interface device and host processing device | |
WO2017107148A1 (zh) | 一种数据传输方法及网络侧设备 | |
TWI646807B (zh) | Rudp裝置及滑動窗參數的動態調整方法 | |
JP2021087172A (ja) | 通信装置、通信方法およびプログラム | |
JP2004297127A (ja) | 携帯端末及びサーバ | |
CN117813595A (zh) | 用于远程直接存储器访问的设备和方法 | |
JP7142462B2 (ja) | 通信装置、通信装置の制御方法、およびプログラム | |
JP7427464B2 (ja) | 通信装置、通信方法およびプログラム | |
JP2016019156A (ja) | 通信装置およびその制御方法 | |
Bhat et al. | MPTCP combining congestion window adaptation and packet scheduling for multi-homed device | |
JP6279970B2 (ja) | プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム | |
JP2019114947A (ja) | 通信装置、通信装置の制御方法およびプログラム | |
WO2024024280A1 (ja) | 通信処理装置および通信方法 | |
KR102184363B1 (ko) | 네트워크 커넥터의 호스트 및 클라이언트와의 통신 방법, 그리고 동일 방법을 수행하는 네트워크 커넥터 |