JP2010041498A - パケット作成装置及びパケット作成方法 - Google Patents
パケット作成装置及びパケット作成方法 Download PDFInfo
- Publication number
- JP2010041498A JP2010041498A JP2008203267A JP2008203267A JP2010041498A JP 2010041498 A JP2010041498 A JP 2010041498A JP 2008203267 A JP2008203267 A JP 2008203267A JP 2008203267 A JP2008203267 A JP 2008203267A JP 2010041498 A JP2010041498 A JP 2010041498A
- Authority
- JP
- Japan
- Prior art keywords
- header
- packet
- checksum
- udp
- transmission
- 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
- Detection And Prevention Of Errors In Transmission (AREA)
Abstract
【課題】パケット処理時に用いられるチェックサム演算に整合性を持たせたまま、チェックサム算出の為にかかる遅延をなくす。
【解決手段】ヘッダのチェックサムフィールドに予め定められた値を入れ、ヘッダに続くペイロードの末尾にチェックサムデータを付与するパケット作成手段を有することによってパケット処理時に用いられるチェックサム演算に整合性を持たせたまま、チェックサム算出の為にかかる遅延をなくすことができる。
【選択図】図2
【解決手段】ヘッダのチェックサムフィールドに予め定められた値を入れ、ヘッダに続くペイロードの末尾にチェックサムデータを付与するパケット作成手段を有することによってパケット処理時に用いられるチェックサム演算に整合性を持たせたまま、チェックサム算出の為にかかる遅延をなくすことができる。
【選択図】図2
Description
本発明は、パケット作成装置及びパケット作成方法に関する。
インターネットで用いられる最も一般的なネットワークプロトコルであるTCP/IPやUDP/IPにおけるプロトコルの実装はIETFのRFCで事実上の標準(非特許文献1)が定められている。
TCPやUDP等のトランスポートプロトコルではヘッダ部(ヘッダ)とペイロード部(ペイロード)とを利用したチェックサムをヘッダに付加することでトランスポートレイヤにおける誤り検出を行っている。
TCPやUDP等のトランスポートプロトコルではヘッダ部(ヘッダ)とペイロード部(ペイロード)とを利用したチェックサムをヘッダに付加することでトランスポートレイヤにおける誤り検出を行っている。
IP層ではIPヘッダのみのチェックサム、MAC層ではMACフレーム全体にわたりCRC−32を算出してフレーム末尾に付加することで各レイヤでの誤り検出を行っている。
UDPは、RFC768(非特許文献1)で定義されている。
UDPの構造は、送信側のアプリケーションが示す16bitのポート番号、受信側の16bitのポート番号に続き、UDPのデータ長、UDPチェックサム、そしてペイロードからなるUDPデータグラムでUDPパケットが構成されている。
UDPは、RFC768(非特許文献1)で定義されている。
UDPの構造は、送信側のアプリケーションが示す16bitのポート番号、受信側の16bitのポート番号に続き、UDPのデータ長、UDPチェックサム、そしてペイロードからなるUDPデータグラムでUDPパケットが構成されている。
UDPの送信時において、UDPヘッダはチェックサムを除いて既知である。
SourcePort、DestinationPort、UDP Data LengthがUDPヘッダ作成部に渡され、UDPヘッダ作成部はUDPチェックサムを算出するためにUDP擬似ヘッダを作成する。
チェックサムを計算する領域は、UDPではUDPの領域に加えて、source、destinationのIPアドレス、プロトコル番号、データ長からなる擬似ヘッダを含める。
RFC1071では効率的なチェックサムの算出方法について述べられており、その方法を以下に示す。
1.隣接しているオクテットから16bitの整数を構成し、これらの1の補数和を算出する。
2.チェックサムを生成するために、チェックサムフィールドはクリアされ、16bitの1の補数和が計算され、この合計の1の補数がチェックサムフィールドに挿入される。
3.チェックサムの検証には、チェックサムフィールドを含めて1の補数和が計算される。結果、全てのbitが"1"であればチェックは成功である。
SourcePort、DestinationPort、UDP Data LengthがUDPヘッダ作成部に渡され、UDPヘッダ作成部はUDPチェックサムを算出するためにUDP擬似ヘッダを作成する。
チェックサムを計算する領域は、UDPではUDPの領域に加えて、source、destinationのIPアドレス、プロトコル番号、データ長からなる擬似ヘッダを含める。
RFC1071では効率的なチェックサムの算出方法について述べられており、その方法を以下に示す。
1.隣接しているオクテットから16bitの整数を構成し、これらの1の補数和を算出する。
2.チェックサムを生成するために、チェックサムフィールドはクリアされ、16bitの1の補数和が計算され、この合計の1の補数がチェックサムフィールドに挿入される。
3.チェックサムの検証には、チェックサムフィールドを含めて1の補数和が計算される。結果、全てのbitが"1"であればチェックは成功である。
チェックサムでは常に1の補数和の1の補数が用いられている。
そのため受信側、即ち検証側では擬似ヘッダを作成し、チェックサムフィールドを含めた全てのフィールドに対して1の補数和を計算し、全てのビットが立った状態になるかどうかを検出すればよい。
実際のアプリケーションにおいてUDPプロトコルは基本的にコネクションレスの通信であるのでUDPパケットの送信時においては相手先ポート番号と相手先IPアドレストとを指定する場合が多く、この場合擬似ヘッダ作成のための情報は既に与えられている。
そのため受信側、即ち検証側では擬似ヘッダを作成し、チェックサムフィールドを含めた全てのフィールドに対して1の補数和を計算し、全てのビットが立った状態になるかどうかを検出すればよい。
実際のアプリケーションにおいてUDPプロトコルは基本的にコネクションレスの通信であるのでUDPパケットの送信時においては相手先ポート番号と相手先IPアドレストとを指定する場合が多く、この場合擬似ヘッダ作成のための情報は既に与えられている。
UDPでコネクション型の通信を行う場合、コネクションを開設したときにデータベースに登録した送信Port番号−送信IPアドレス−受信Port番号−受信IPアドレスの組を登録する。
UDPパケット送信時に送信Port番号−受信Port番号が知らされるので、この情報を用いてデータベースからIPアドレスの情報を検索して読み出し、同時に渡されたUDPパケット長と共に擬似ヘッダを作成する。
UDPパケット送信時に送信Port番号−受信Port番号が知らされるので、この情報を用いてデータベースからIPアドレスの情報を検索して読み出し、同時に渡されたUDPパケット長と共に擬似ヘッダを作成する。
ここで図7の上段にみられる擬似ヘッダの構造から中段に示すように一部フィールドの順番を入れ替えてIPヘッダの構造と互換性をとれる構造にしておく。図7は、従来のUDPパケットフォーマット、IPパケットフォーマット、チェックサム算出範囲を示した図である。
即ち、{SourceIP、DestIP、0、Protocol、UDP length}の順番を{0、Protocol、UDP length、SourceIP、Dest IP}の順に並べ替え、更に8Octed分の"0"スペースを空けておく。
このように擬似ヘッダを作成する際に同時にIPヘッダの一部分とすることで後の処理を簡略化することができる。
即ち、{SourceIP、DestIP、0、Protocol、UDP length}の順番を{0、Protocol、UDP length、SourceIP、Dest IP}の順に並べ替え、更に8Octed分の"0"スペースを空けておく。
このように擬似ヘッダを作成する際に同時にIPヘッダの一部分とすることで後の処理を簡略化することができる。
当然のことながらチェックサムの演算の妨げにならないように擬似ヘッダに関係のないフィールドは"0"で埋めておく。
チェックサム演算が終了するとIPヘッダ処理部に渡される。
擬似ヘッダ作成に使用したIPアドレスのフィールドはそのまま使用できるためIPヘッダ作成時にはその処理は省略することができる。
この構造は受信時のチェックサム検証にも利用することができる。
IP処理が終わりUDP処理フローに渡されたUDPパケットは同時にIPヘッダが渡される。
チェックサム演算が終了するとIPヘッダ処理部に渡される。
擬似ヘッダ作成に使用したIPアドレスのフィールドはそのまま使用できるためIPヘッダ作成時にはその処理は省略することができる。
この構造は受信時のチェックサム検証にも利用することができる。
IP処理が終わりUDP処理フローに渡されたUDPパケットは同時にIPヘッダが渡される。
IPヘッダのVerフィールドからTTLフィールドまでを削除してIPチェックサムフィールドをUDP lengthに変換するだけでそのまま擬似ヘッダとして利用できる。
UDPチェックサム検証においては擬似ヘッダを含めたペイロード末尾までのチェックサム演算の結果が"FFFF"となれば正当なUDPパケットとして処理される。"FFFF"以外の演算結果になった場合はその受信パケットはそのまま捨てられる。
なお、図8は、従来のUDP擬似ヘッダを用いてIPヘッダを作成する一例を示す図である。また、図9は、従来のUDPパケットが送信されるまでの処理の一例を示す図である。
UDPチェックサム検証においては擬似ヘッダを含めたペイロード末尾までのチェックサム演算の結果が"FFFF"となれば正当なUDPパケットとして処理される。"FFFF"以外の演算結果になった場合はその受信パケットはそのまま捨てられる。
なお、図8は、従来のUDP擬似ヘッダを用いてIPヘッダを作成する一例を示す図である。また、図9は、従来のUDPパケットが送信されるまでの処理の一例を示す図である。
TCPはRFC793(非特許文献2)で定義されており、IP層を含めてそのフォーマットを図10に示す。図10は、従来のTCPパケットフォーマット、IPパケットフォーマット、チェックサム算出範囲を示した図である。
UDPのヘッダ構造と比較するとフィールド数は増加しているが先頭32bitからなる送信ポート番号、受信ポート番号の並びは同一となっている。
更にTCP/IPパケットの送受信においてもUDPの処理と同様にTCP擬似ヘッダが作成され、その構造はUDP擬似ヘッダと同じであるため、チェックサムシーケンスはUDPチェックサム処理と同じ処理が実行される。
UDPのヘッダ構造と比較するとフィールド数は増加しているが先頭32bitからなる送信ポート番号、受信ポート番号の並びは同一となっている。
更にTCP/IPパケットの送受信においてもUDPの処理と同様にTCP擬似ヘッダが作成され、その構造はUDP擬似ヘッダと同じであるため、チェックサムシーケンスはUDPチェックサム処理と同じ処理が実行される。
[onlne]、1980年8月28日、[平成20年7月28日検索]、インターネット<URL:http://www.ietf.org/rfc/rfc0768.txt>
[onlne]、1981年9月、[平成20年7月28日検索]、インターネット<URL:http://www.ietf.org/rfc/rfc0793.txt>
しかしながら、従来のチェックサム算出方法では、IP層の一部の処理まで行いながらも、チェックサムの算出のためには64Byte〜1500Byteからなるペイロードについても全てチェックサム算出の対象としている。
このため、全てのパケットデータを受信しきらなければ後段の処理に移行できないという問題点があった。
このため、全てのパケットデータを受信しきらなければ後段の処理に移行できないという問題点があった。
本発明はこのような問題点に鑑みなされたもので、パケット処理時に用いられるチェックサム演算に整合性を持たせたまま、チェックサム算出の為にかかる遅延をなくすことを目的とする。
そこで、本発明のパケット作成装置は、ヘッダのチェックサムフィールドに予め定められた値を入れ、ヘッダに続くペイロードの末尾にチェックサムデータを付与するパケット作成手段を有することを特徴とする。
係る構成とすることで、パケット処理時に用いられるチェックサム演算に整合性を持たせたまま、チェックサム算出の為にかかる遅延をなくすことができる。
また、本発明は、パケット作成方法、プログラム及び記憶媒体としてもよい。
本発明によれば、パケット処理時に用いられるチェックサム演算に整合性を持たせたまま、チェックサム算出の為にかかる遅延をなくすことができる。
以下、本発明の実施形態について図面に基づいて説明する。
<実施形態1>
図1は、パケット作成装置のハードウェア構成の一例を示す図である。CPU(中央演算装置)1000は、実施形態で説明する情報処理(情報処理方法)をプログラムに従って実行する。プログラム メモリ1010には、CPU1000により実行されるプログラムが記憶されている。RAM1020は、CPU1000によるプログラムの実行時に、各種情報を一時的に記憶するためのメモリである。ハードディスク1030は、画像ファイル等を保存するための記憶媒体(記録媒体)である。なお、プログラムは、ハードディスク1030に記憶されていてもよい。バス1100は、これら各部とCPU1000とを接続している制御バス・データバスである。なお、パケット作成装置は、これ以外にもキーボードやポインティング デバイス等の入力機器や、表示デバイス等を備えていてもよい。
CPU1000が、プログラムに基づき処理を実行することによって、例えば後述する機能構成の全て又は一部、及び後述するフローチャート等が実現される。
図1は、パケット作成装置のハードウェア構成の一例を示す図である。CPU(中央演算装置)1000は、実施形態で説明する情報処理(情報処理方法)をプログラムに従って実行する。プログラム メモリ1010には、CPU1000により実行されるプログラムが記憶されている。RAM1020は、CPU1000によるプログラムの実行時に、各種情報を一時的に記憶するためのメモリである。ハードディスク1030は、画像ファイル等を保存するための記憶媒体(記録媒体)である。なお、プログラムは、ハードディスク1030に記憶されていてもよい。バス1100は、これら各部とCPU1000とを接続している制御バス・データバスである。なお、パケット作成装置は、これ以外にもキーボードやポインティング デバイス等の入力機器や、表示デバイス等を備えていてもよい。
CPU1000が、プログラムに基づき処理を実行することによって、例えば後述する機能構成の全て又は一部、及び後述するフローチャート等が実現される。
<第一の実施の形態>
図2は、パケット作成装置の送信部の構成例を示した図である。
図2において、101は、バイトストリーム又はデータグラムの送受信を行っているアプリケーション(Application)である。102は、アプリケーションメモリ(Application Memory)である。
103はアプリケーション101の指示を受けて送信IPパケットの制御を行う送信制御部(Tx Controller)である。
104は、送信制御部103の指示を受けて送出するパケットのペイロード長を算出する送出長算出部(Transmission Length)である。105は、各種DMAの制御を行うDMA制御部(DMAC)である。106は、送受信メモリ(Tx/Rx Memory)である。107は、1の補数和を計算する補数算出部(complement sum)である。
図2は、パケット作成装置の送信部の構成例を示した図である。
図2において、101は、バイトストリーム又はデータグラムの送受信を行っているアプリケーション(Application)である。102は、アプリケーションメモリ(Application Memory)である。
103はアプリケーション101の指示を受けて送信IPパケットの制御を行う送信制御部(Tx Controller)である。
104は、送信制御部103の指示を受けて送出するパケットのペイロード長を算出する送出長算出部(Transmission Length)である。105は、各種DMAの制御を行うDMA制御部(DMAC)である。106は、送受信メモリ(Tx/Rx Memory)である。107は、1の補数和を計算する補数算出部(complement sum)である。
108は、ヘッダとペイロードとを合成してIPパケットとしてのフォーマットを作成するIP送信部(IP Send)である。
109は、補数算出部107で算出した1の補数和からTCP(UDP)チェックサムの調整を行うチェックサムデータをIPパケットの最後に付加する送出パケット合成部(Cksumdata Supplement)である。
110は、MAC層の制御を行うMAC部(MAC)である。111は、物理層への変復調を行うPHY部(PHY)である。112は、IP受信部(IP Receive)である。113は、IPヘッダ送出部(IP Header Send)である。
114は、TCPの特にAckフラグが立っているパケットを解析するTCP受信部(TCP(Ack)Receive)である。115は、TCP(UDP)ヘッダ送出部(TCP(UDP)Header Send)である。TCP(UDP)ヘッダ送出部115は、TCP/IPヘッダ、UDP/IPヘッダを送出する。
109は、補数算出部107で算出した1の補数和からTCP(UDP)チェックサムの調整を行うチェックサムデータをIPパケットの最後に付加する送出パケット合成部(Cksumdata Supplement)である。
110は、MAC層の制御を行うMAC部(MAC)である。111は、物理層への変復調を行うPHY部(PHY)である。112は、IP受信部(IP Receive)である。113は、IPヘッダ送出部(IP Header Send)である。
114は、TCPの特にAckフラグが立っているパケットを解析するTCP受信部(TCP(Ack)Receive)である。115は、TCP(UDP)ヘッダ送出部(TCP(UDP)Header Send)である。TCP(UDP)ヘッダ送出部115は、TCP/IPヘッダ、UDP/IPヘッダを送出する。
図3は、図2のパケット作成装置の送信部に対応する受信部の構成例を示した図である。
図3において、203は、受信制御部(Rx Controller)である。204は、受信したパケット長を通知する受信長検出部(Receive Length)である。207は、チェックサム検証部(Cksumdata Verify and Remove)である。208は、IP受信部(IP Receive Defagment)である。212は、IP送信部(IP Send)である。213は、IP制御部(IP Controller)である。
214は、TCPヘッダ特に受信通知を出力するためにAckフラグが立ったTCPパケットを送出する部(TCP(Ack)Send)である。215は、TCPヘッダを解析してメモリ上に再合成するための制御を行うTCPヘッダ解析部(TCP(UDP) Receive)である。
図3において、203は、受信制御部(Rx Controller)である。204は、受信したパケット長を通知する受信長検出部(Receive Length)である。207は、チェックサム検証部(Cksumdata Verify and Remove)である。208は、IP受信部(IP Receive Defagment)である。212は、IP送信部(IP Send)である。213は、IP制御部(IP Controller)である。
214は、TCPヘッダ特に受信通知を出力するためにAckフラグが立ったTCPパケットを送出する部(TCP(Ack)Send)である。215は、TCPヘッダを解析してメモリ上に再合成するための制御を行うTCPヘッダ解析部(TCP(UDP) Receive)である。
次に、パケット作成装置におけるデータの送受信動作を順に追って説明する。
まず、アプリケーション101は、ネットワークに送出するデータがあることを送信制御部103に送信要求信号(Tx_Request)をアクティブして通知すると共に、ソケットタイプ、送信データ長、アドレス情報を指定する。
ここでいうソケットタイプとはSOCK_STREAM、SOCK_DGRAM、SOCK_RAWの3種類がある。
SOCK_STREAMは、TCPを用いてデータを送ることを示し、SOCK_DGRAMは、UDP、SOCK_RAWはIPパケットの状態で送信要求されたデータを処理する。
送信データ長は、アプリケーションメモリに格納された送信要求するデータの長さである。アドレス情報とは、送信先のPort番号やIPアドレス情報等を示す。
まず、アプリケーション101は、ネットワークに送出するデータがあることを送信制御部103に送信要求信号(Tx_Request)をアクティブして通知すると共に、ソケットタイプ、送信データ長、アドレス情報を指定する。
ここでいうソケットタイプとはSOCK_STREAM、SOCK_DGRAM、SOCK_RAWの3種類がある。
SOCK_STREAMは、TCPを用いてデータを送ることを示し、SOCK_DGRAMは、UDP、SOCK_RAWはIPパケットの状態で送信要求されたデータを処理する。
送信データ長は、アプリケーションメモリに格納された送信要求するデータの長さである。アドレス情報とは、送信先のPort番号やIPアドレス情報等を示す。
本実施形態の説明においては1200ByteのデータがUDPパケットで送信先のPort情報、IPアドレス情報等を指定して要求されたものとして説明を続行する。
UDPパケットの送信要求を受け付けた送信制御部103は、送球されたデータ長とMTU(Maximun Transfer Unit)とを比較する。
送信制御部103は、最終的に生成されたパケットがMACに送信できるパケット長以下になるかを判断する。
一般的に10BASE−Tや100BASE−Tの場合には1500ByteがMTUとして使用されることが多いのでMTUからUDPヘッダ長、IPヘッダ長、MACヘッダ長を減算した値がUDPのペイロードとして許される長さとなる。これ以上のペイロード長になる場合、送信制御部103は、ペイロードを分割して送信する。
ここではペイロード長に1200Byteが指定されているので送信制御部103は、まず、DMAC105にアプリケーションメモリ102から送信メモリ106への転送を依頼する。
UDPパケットの送信要求を受け付けた送信制御部103は、送球されたデータ長とMTU(Maximun Transfer Unit)とを比較する。
送信制御部103は、最終的に生成されたパケットがMACに送信できるパケット長以下になるかを判断する。
一般的に10BASE−Tや100BASE−Tの場合には1500ByteがMTUとして使用されることが多いのでMTUからUDPヘッダ長、IPヘッダ長、MACヘッダ長を減算した値がUDPのペイロードとして許される長さとなる。これ以上のペイロード長になる場合、送信制御部103は、ペイロードを分割して送信する。
ここではペイロード長に1200Byteが指定されているので送信制御部103は、まず、DMAC105にアプリケーションメモリ102から送信メモリ106への転送を依頼する。
送信メモリ106への転送している間、送信制御部103は、TCP(UDP)ヘッダ送出部115へ、ヘッダ作成指示を出力する。UDPのフォーマットは既に図7で示したとおりである。
この状態ではUDPヘッダ中のチェックサムを算出することができないが、送信制御部103は、チェックサムフィールドには0x0000以外の値を入れた状態にしておく。そして、送信制御部103は、その他のフィールドである送信元Port番号、受信先Port番号、UDPデータ長を決定する。
UDPデータ長は後にデータを4Byte追加するため、送信制御部103は、送信要求があったデータ長に"4"だけ加算する。
この状態ではUDPヘッダ中のチェックサムを算出することができないが、送信制御部103は、チェックサムフィールドには0x0000以外の値を入れた状態にしておく。そして、送信制御部103は、その他のフィールドである送信元Port番号、受信先Port番号、UDPデータ長を決定する。
UDPデータ長は後にデータを4Byte追加するため、送信制御部103は、送信要求があったデータ長に"4"だけ加算する。
TCP(UDP)ヘッダ送出部115は、UDPヘッダの作成と同時にUDP擬似ヘッダを作成する。TCP(UDP)ヘッダ送出部115によって、送信元、送信先のIPアドレス情報、再度UDPデータ長、Protocol(UDPを指定する場合は0x11)の情報が各フィールドに代入される。
UDPヘッダ、UDP擬似ヘッダが作成されると擬似ヘッダ情報がIP送出部108に送信される。
IP送出部108によって、残りのVer、ヘッダ長、TOS、IPパケット長、ID、Frag、フラグメント情報等が各々に代入される。なお、IPパケット長はUDPデータ長からIPヘッダ長を加算した値となる。
UDPヘッダ、UDP擬似ヘッダが作成されると擬似ヘッダ情報がIP送出部108に送信される。
IP送出部108によって、残りのVer、ヘッダ長、TOS、IPパケット長、ID、Frag、フラグメント情報等が各々に代入される。なお、IPパケット長はUDPデータ長からIPヘッダ長を加算した値となる。
このようにして各レイヤのヘッダが完成すると送信制御部103は、1パケット分のペイロードを送出するために送出長算出部104がDMAC105へヘッダを出力するよう制御する。実際にペイロードを出力するに先立ち、完成された各ヘッダが出力される。
IPヘッダ送出部113は、送信制御部103からの要求により、IP送出部108にIPヘッダを送信し、TCP(UDP)ヘッダ送出部115では擬似ヘッダ付のUDPヘッダが補数算出部107へ出力される。
このとき送出されるヘッダに付加されているチェックサムは先に述べたように0x0000以外の任意の数値(予め定められた数値)であるのでチェックサム値に正当性はない。IPヘッダは補数算出部107を経由してIP送出部108に送られる。
補数算出部107を経由する際にはチェックサムフィールドを除いた全てのフィールドに対しての1の補数和が算出されている。
IPヘッダ送出部113は、送信制御部103からの要求により、IP送出部108にIPヘッダを送信し、TCP(UDP)ヘッダ送出部115では擬似ヘッダ付のUDPヘッダが補数算出部107へ出力される。
このとき送出されるヘッダに付加されているチェックサムは先に述べたように0x0000以外の任意の数値(予め定められた数値)であるのでチェックサム値に正当性はない。IPヘッダは補数算出部107を経由してIP送出部108に送られる。
補数算出部107を経由する際にはチェックサムフィールドを除いた全てのフィールドに対しての1の補数和が算出されている。
続いて、DMAC105から送出パケットのペイロード部が送信メモリ106からIPヘッダと同様に補数算出部107経由でIP送出部108に送信される。
補数算出部107では先に送信したUDPヘッダ+UDP擬似ヘッダのチェックサムに続いてペイロード部の1の補数和の計算が継続されている。
IP送出部108にはIPヘッダ、UDPヘッダ、ペイロードが到着した順序で送出パケット合成部109に出力されている。
しかし、このパケットのヘッダフォーマットは先の述べたようにUDPパケット長、IP総パケット長が4Octed少なく、UDPチェックサムの値の任意の値を当てはめているだけなのでこの値に正当性がない状態で出力されている。
補数算出部107では先に送信したUDPヘッダ+UDP擬似ヘッダのチェックサムに続いてペイロード部の1の補数和の計算が継続されている。
IP送出部108にはIPヘッダ、UDPヘッダ、ペイロードが到着した順序で送出パケット合成部109に出力されている。
しかし、このパケットのヘッダフォーマットは先の述べたようにUDPパケット長、IP総パケット長が4Octed少なく、UDPチェックサムの値の任意の値を当てはめているだけなのでこの値に正当性がない状態で出力されている。
ここで、ペイロード部の送信が終了すると、補数算出部107は、UDP擬似ヘッダ+UDPヘッダ+ペイロード全ての16bit整数における1の補数和の算出が終了し、その値が送出パケット合成部109に送られる。
送出パケット合成部109においては受け取った1の補数和の1の補数をcksumdataとしてパケット最後のデータ(ペイロード部の末尾)に付加して送出する。
このようにして送出パケット合成部109が最後にcksumdataを付加することでUDPチェックサムの整合を取ることができる。
送出パケット合成部109においては受け取った1の補数和の1の補数をcksumdataとしてパケット最後のデータ(ペイロード部の末尾)に付加して送出する。
このようにして送出パケット合成部109が最後にcksumdataを付加することでUDPチェックサムの整合を取ることができる。
また、TCPパケットを送出する場合においてもTCP擬似ヘッダの構成はUDP擬似ヘッダの構成と変わらないので同様に構成・動作しても同じ効果を得ることができる。
このようにして送出されたTCP(UDP)/IPパケットはL2スイッチやL3ルータ等を介して相手側端末に到着することができる。
上述したように、図3は相手側端末の受信部の一例を示している。受信部に到着したIPパケットはIP受信部208においてIPヘッダの解析が行われる。
このIP受信部208ではIPヘッダ中のIP AddressフィールドとProtocolフィールドとを除いた各フィールドについては解析終了後に"0"で満たし、後段のチェックサム検証部207に送られる。
このようにして送出されたTCP(UDP)/IPパケットはL2スイッチやL3ルータ等を介して相手側端末に到着することができる。
上述したように、図3は相手側端末の受信部の一例を示している。受信部に到着したIPパケットはIP受信部208においてIPヘッダの解析が行われる。
このIP受信部208ではIPヘッダ中のIP AddressフィールドとProtocolフィールドとを除いた各フィールドについては解析終了後に"0"で満たし、後段のチェックサム検証部207に送られる。
チェックサム検証部207では受信データをDMAC105経由で受信メモリに書き込むと同時にチェックサム、つまり1の補数和の算出を行っている。
受信側では送信時と同様に擬似ヘッダを先頭に付けて1の補数和を取らなければいけない。
前段のIP受信部208ではSource IP AddressフィールドとDest IP AddressフィールドとProtocolフィールドとが残された状態で送られてきている。
よって、TCPパケット長、UDPパケット長に関する1の補数和を追加すればよい。
受信側では送信時と同様に擬似ヘッダを先頭に付けて1の補数和を取らなければいけない。
前段のIP受信部208ではSource IP AddressフィールドとDest IP AddressフィールドとProtocolフィールドとが残された状態で送られてきている。
よって、TCPパケット長、UDPパケット長に関する1の補数和を追加すればよい。
UDPパケット長はUDPヘッダフィールドの内容からUDPパケット長を複写し、TCPパケット長はIP総パケット長からIPヘッダ長を減じた長さをTCPパケット長とする。
このようにして全ての1の補数和を算出した結果、16bitの総和が0xFFFFとなれば正しい検証結果としてエラー無し、と判断される。
もし、これ以外の結果となった場合、パケットは破棄される。
エラーがなかった場合、DMAC105から送られる受信済みパケットデータが受信制御部203に報告されたデータ長に達したら受信完了、としてアプリケーションにパケット受信のRx Ackを送信する。
最終的にはアプリケーション若しくは受信制御部203がDMAC105を起動して受信メモリからアプリケーションメモリ102に送信される。
このようにして全ての1の補数和を算出した結果、16bitの総和が0xFFFFとなれば正しい検証結果としてエラー無し、と判断される。
もし、これ以外の結果となった場合、パケットは破棄される。
エラーがなかった場合、DMAC105から送られる受信済みパケットデータが受信制御部203に報告されたデータ長に達したら受信完了、としてアプリケーションにパケット受信のRx Ackを送信する。
最終的にはアプリケーション若しくは受信制御部203がDMAC105を起動して受信メモリからアプリケーションメモリ102に送信される。
ここで、図4は、UDPパケットが処理される場合のデータ処理の一例を示す図である。
また、図5は、UDPパケットフォーマット、IPパケットフォーマット及びチェックサム算出範囲の一例を示した図である。
また、図5は、UDPパケットフォーマット、IPパケットフォーマット及びチェックサム算出範囲の一例を示した図である。
<第二の実施の形態>
図6は、パケット作成装置の送信部の処理の一例を示したフローチャートである。なお、以下では説明の簡略化のため、CPU1000が処理を実行するものとして説明を行う。
図6において、ステップS401から開始される処理は、送信要求を初期化し、ソケットタイプを判断した後、プロトコル毎の送信パケット長を選るまでの処理である。
一方、ステップS430から開始される処理は、TCP/UCPプロトコルにおいてヘッダ送出→ペイロード送出→チェックサム送出までの処理である。
まず、ステップS401において、CPU1000は、送信要求フロー全体の初期化を行った後、ステップS402において、CPU1000は、上位層の送信要求が到来するまで待機する。
図6は、パケット作成装置の送信部の処理の一例を示したフローチャートである。なお、以下では説明の簡略化のため、CPU1000が処理を実行するものとして説明を行う。
図6において、ステップS401から開始される処理は、送信要求を初期化し、ソケットタイプを判断した後、プロトコル毎の送信パケット長を選るまでの処理である。
一方、ステップS430から開始される処理は、TCP/UCPプロトコルにおいてヘッダ送出→ペイロード送出→チェックサム送出までの処理である。
まず、ステップS401において、CPU1000は、送信要求フロー全体の初期化を行った後、ステップS402において、CPU1000は、上位層の送信要求が到来するまで待機する。
送信要求が到来した場合、ステップS403において、CPU1000は、インターフェース部における最大パケット長MTU(Maximum Transfer Unit)を取得した後、ステップS404において、ソケットタイプを判断する。
ここにおけるソケットタイプとはデータの送信保証がある。
連続したデータストリームであるTCP/IPを用いて送信するか、一回限りのデータグラムの送信で終了するUDP/IPを用いて送信するか、若しくはIPパケットのままで送信するか、CPU1000は、上位層の要求どおりに選択する。
ここで、TCP/IPを選択した場合、CPU1000は、まずMSS(Maximum Segment Size)を取得する。
ここにおけるソケットタイプとはデータの送信保証がある。
連続したデータストリームであるTCP/IPを用いて送信するか、一回限りのデータグラムの送信で終了するUDP/IPを用いて送信するか、若しくはIPパケットのままで送信するか、CPU1000は、上位層の要求どおりに選択する。
ここで、TCP/IPを選択した場合、CPU1000は、まずMSS(Maximum Segment Size)を取得する。
通常、MSSはLANインターフェースの場合はMTU−40の長さとなる。このMSS値を取得したことでこの処理におけるTCP/IPの最大送信サイズはMSSの値を用いて決定される。
次に、ステップS406において、CPU1000は、送信済みデータ長を初期化した後、送信処理にはいる。
まず、最初にステップS407において、CPU1000は、未送信データ長がMSS−2を超えているかどうかを判断する。
MSSから2を減じているのは後に説明するチェックサム値を最後に付与するためである。
未送信データ長がMSS−2以下である場合、CPU1000は、パケット長をMSS−2にし、未送信データ長からMSS−2減算し、ステップS409のTCPチェックサム作成処理に移行する。TCPチェックサム作成処理が終了した場合、CPU1000は、残りのデータを送出するためにステップS407に戻る。
次に、ステップS406において、CPU1000は、送信済みデータ長を初期化した後、送信処理にはいる。
まず、最初にステップS407において、CPU1000は、未送信データ長がMSS−2を超えているかどうかを判断する。
MSSから2を減じているのは後に説明するチェックサム値を最後に付与するためである。
未送信データ長がMSS−2以下である場合、CPU1000は、パケット長をMSS−2にし、未送信データ長からMSS−2減算し、ステップS409のTCPチェックサム作成処理に移行する。TCPチェックサム作成処理が終了した場合、CPU1000は、残りのデータを送出するためにステップS407に戻る。
一方、未送信データ長がMSS−2に満たない場合、CPU1000は、パケット長に残データ長をいれ、未送信データ長を0としてTCPチェックサム作成処理に移行する。
一方、UDP/IPの場合、ステップS413において、CPU1000は、未送信データ長が(MTU−IPヘッダ長−UDPヘッダ長−2)に満たなければステップS416、以上であればステップS414に移行する。
ステップS414に移行した場合、CPU1000は、パケット長をMTU−IPヘッダ長−UDPヘッダ長−2に設定し、未送信データ長からパケット長を減じた後、UDPチェックサム作成処理に移行する。
UDPチェックサム作成処理が終了した後、CPU1000は、再びステップS413に戻る。
また、未送信データ長の判断によりステップS416に移行した場合、CPU1000は、パケット長に残データ長に2を加算、未送信データ長を0としてUDPチェックサム作成処理に移行する。
一方、UDP/IPの場合、ステップS413において、CPU1000は、未送信データ長が(MTU−IPヘッダ長−UDPヘッダ長−2)に満たなければステップS416、以上であればステップS414に移行する。
ステップS414に移行した場合、CPU1000は、パケット長をMTU−IPヘッダ長−UDPヘッダ長−2に設定し、未送信データ長からパケット長を減じた後、UDPチェックサム作成処理に移行する。
UDPチェックサム作成処理が終了した後、CPU1000は、再びステップS413に戻る。
また、未送信データ長の判断によりステップS416に移行した場合、CPU1000は、パケット長に残データ長に2を加算、未送信データ長を0としてUDPチェックサム作成処理に移行する。
次に上位層の指示によりIPRawで送信する場合、CPU1000は、ペイロードのチェックサムを行う必要がないため、本実施形態の説明においては省略する。
次にTCP/UDPチェックサムの作成処理について説明する。
ステップS430から開始されるチェックサム作成処理は先の説明においてステップS409、ステップS411におけるTCPチェックサムの作成及びステップS415、ステップS417におけるUDPチェックサム作成処理を兼ねている。
まず、ステップS431において、CPU1000は、TCP又はUDPのヘッダを作成する。本来であればこのヘッダ作成には多くの処理が必要であるが、チェックサムの作成には多く関与されないために詳細は省略する。
次にTCP/UDPチェックサムの作成処理について説明する。
ステップS430から開始されるチェックサム作成処理は先の説明においてステップS409、ステップS411におけるTCPチェックサムの作成及びステップS415、ステップS417におけるUDPチェックサム作成処理を兼ねている。
まず、ステップS431において、CPU1000は、TCP又はUDPのヘッダを作成する。本来であればこのヘッダ作成には多くの処理が必要であるが、チェックサムの作成には多く関与されないために詳細は省略する。
このヘッダ作成においては0x0000とした場合、検証側でチェックサムを行わないことを意味するため、CPU1000は、TCPチェックサム、UDPチェックサムの値を0x0000以外の予め定められた値、例えば0x0001としておく。
次にステップS432において、CPU1000は、擬似ヘッダの作成を行う。
上述した図8において説明したように擬似ヘッダとIPヘッダとには多くの相間関係があり、また、ステップS433のチェックサムの算出には関係が無いように順序を入れ替えておくことで後のIPヘッダ作成が簡略することができる。
CPU1000は、TCP又はUDPヘッダに擬似ヘッダを付加したものに対してチェックサムを算出しておき、次のステップS434において、IPヘッダを作成する。
次にステップS432において、CPU1000は、擬似ヘッダの作成を行う。
上述した図8において説明したように擬似ヘッダとIPヘッダとには多くの相間関係があり、また、ステップS433のチェックサムの算出には関係が無いように順序を入れ替えておくことで後のIPヘッダ作成が簡略することができる。
CPU1000は、TCP又はUDPヘッダに擬似ヘッダを付加したものに対してチェックサムを算出しておき、次のステップS434において、IPヘッダを作成する。
ここでステップS435において、TCP/IP、UDP/IPのヘッダ部については送出が可能な状態となり、CPU1000は、ヘッダ部を送信する。
送出するペイロードがある場合、CPU1000は、ステップS437〜ステップS439の処理によりチェックサムを算出しつつペイロードを送出する。ステップS440において、CPU1000は、未送信データが無くなった後にヘッダ部とペイロード部とのトータルのチェックサムを送出してパケットの送出を完了する。
送出するペイロードがある場合、CPU1000は、ステップS437〜ステップS439の処理によりチェックサムを算出しつつペイロードを送出する。ステップS440において、CPU1000は、未送信データが無くなった後にヘッダ部とペイロード部とのトータルのチェックサムを送出してパケットの送出を完了する。
<その他の実施形態>
また、本発明の目的は、以下のようにすることによって達成される。即ち、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体(又は記録媒体)を、システム或いは装置に供給する。そして、そのシステム或いは装置の中央演算処理手段(CPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行する。この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することになり、そのプログラムコードを記録した記憶媒体は本発明を構成することになる。
また、本発明の目的は、以下のようにすることによって達成される。即ち、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体(又は記録媒体)を、システム或いは装置に供給する。そして、そのシステム或いは装置の中央演算処理手段(CPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行する。この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することになり、そのプログラムコードを記録した記憶媒体は本発明を構成することになる。
また、システム或いは装置の前記中央演算処理手段が読み出したプログラムコードを実行することにより、そのプログラムコードの指示に基づき、システム或いは装置上で稼働しているオペレーティングシステム(OS)等が実際の処理の一部又は全部を行う。その処理によって上述した実施形態の機能が実現される場合も含まれる。
更に、記憶媒体から読み出されたプログラムコードが、前記システム或いは装置に挿入された機能拡張カードや、接続された機能拡張ユニットに備わるメモリに書込まれたとする。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPU等が実際の処理の一部又は全部を行い、その処理によって上述した実施形態の機能が実現される場合も含まれる。
本発明を前記記憶媒体に適用する場合、その記憶媒体(コンピュータ読み取り可能な記憶媒体)には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
以上、上述した各実施形態によれば、パケット処理時に用いられるチェックサム演算に整合性を持たせたまま、チェックサム算出の為にかかる遅延をなくすことができる。また、上述した各実施形態によれば、ペイロードを退避させておくためのメモリに関して不要になるためコストダウンが可能となる。
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
1000 CPU
1010 プログラム メモリ
1020 RAM
1030 ハードディスク
1010 プログラム メモリ
1020 RAM
1030 ハードディスク
Claims (6)
- ヘッダのチェックサムフィールドに予め定められた値を入れ、ヘッダに続くペイロードの末尾にチェックサムデータを付与するパケット作成手段を有することを特徴とするパケット作成装置。
- 前記パケット作成手段は、TCP/IP又はUDP/IPのパケットを作成することを特徴とする請求項1に記載のパケット作成装置。
- 前記ペイロードの前記チェックサムデータに基づくチェックサムの算出の前に、前記ヘッダを送信する送信手段を更に有することを特徴とする請求項1又は2に記載のパケット作成装置。
- パケット作成装置におけるパケット作成方法であって、
ヘッダのチェックサムフィールドに予め定められた値を入れ、ヘッダに続くペイロードの末尾にチェックサムデータを付与するパケット作成ステップを有することを特徴とするパケット作成方法。 - コンピュータを、
ヘッダのチェックサムフィールドに予め定められた値を入れ、ヘッダに続くペイロードの末尾にチェックサムデータを付与するパケット作成手段として機能させることを特徴とするプログラム。 - 請求項5に記載のプログラムを記憶したコンピュータにより読み取り可能な記憶媒体。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2008203267A JP2010041498A (ja) | 2008-08-06 | 2008-08-06 | パケット作成装置及びパケット作成方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2008203267A JP2010041498A (ja) | 2008-08-06 | 2008-08-06 | パケット作成装置及びパケット作成方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2010041498A true JP2010041498A (ja) | 2010-02-18 |
Family
ID=42013549
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2008203267A Pending JP2010041498A (ja) | 2008-08-06 | 2008-08-06 | パケット作成装置及びパケット作成方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2010041498A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2011023808A (ja) * | 2009-07-13 | 2011-02-03 | Anritsu Corp | ネットワーク試験装置 |
| JP2015207223A (ja) * | 2014-04-22 | 2015-11-19 | キヤノン株式会社 | 情報処理装置、情報処理方法 |
-
2008
- 2008-08-06 JP JP2008203267A patent/JP2010041498A/ja active Pending
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2011023808A (ja) * | 2009-07-13 | 2011-02-03 | Anritsu Corp | ネットワーク試験装置 |
| JP2015207223A (ja) * | 2014-04-22 | 2015-11-19 | キヤノン株式会社 | 情報処理装置、情報処理方法 |
| US9898230B2 (en) | 2014-04-22 | 2018-02-20 | Canon Kabushiki Kaisha | Information processing apparatus, system, and information processing method |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US7596144B2 (en) | System-on-a-chip (SoC) device with integrated support for ethernet, TCP, iSCSI, RDMA, and network application acceleration | |
| US10873613B2 (en) | TCP processing for devices | |
| EP3220606B1 (en) | Reducing network latency | |
| EP3361389B1 (en) | Tcp processing for devices | |
| CN104854836B (zh) | 增加数据流传输的方法和系统 | |
| RU2540815C2 (ru) | Прерывание, по меньшей мере частичное, передачи кадра | |
| TW200539637A (en) | Message context based tcp transmission | |
| CN103647759B (zh) | 一种mss的协商方法及装置 | |
| JP6148459B2 (ja) | データを送信ノードから宛先ノードに移送する方法 | |
| JP2014509483A (ja) | ワイヤレスネットワークにおけるトランスミッション・コントロール・プロトコルの性能を改善する機構 | |
| EP3319297B1 (en) | Network interface device and host processing device | |
| EP3057256B1 (en) | Method for processing stream media message, wifi chip and mobile terminal | |
| JP2018196053A (ja) | 通信装置、通信方法、およびプログラム | |
| JP2010041498A (ja) | パケット作成装置及びパケット作成方法 | |
| CN103281369A (zh) | 报文处理方法及广域网加速控制器woc | |
| JP4649315B2 (ja) | 通信装置及び通信方法 | |
| KR101533056B1 (ko) | 안정성 향상을 위한 사용자 데이터그램 프로토콜 네트워킹 방법 | |
| CN118714107A (zh) | 通信方法、装置、电子设备及存储介质 | |
| JP6822032B2 (ja) | 処理決定装置、処理決定方法、及び、処理決定プログラム | |
| WO2014067065A1 (zh) | 实现隧道处理的方法、装置和系统 | |
| JP7142462B2 (ja) | 通信装置、通信装置の制御方法、およびプログラム | |
| CN115118392B (zh) | D-sack的确定方法、处理器与通信系统 | |
| JP6279970B2 (ja) | プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム | |
| JP2012049883A (ja) | 通信装置およびパケット処理方法 | |
| CN106161269A (zh) | 一种数据包传输方法、控制器及交换机 |