ネットワークバッファはいくつ用意すれば良いですか?

弊社TCP/IPプロトコルスタック「μNet3」に関するご質問
返信する
アバター
eForce技術担当
記事: 193
登録日時: 2014年4月24日(木) 14:18

ネットワークバッファはいくつ用意すれば良いですか?

投稿記事 by eForce技術担当 » 2014年7月14日(月) 15:03

アプリケーションの動作に依りますが基本的には送信で1つ、受信で1つのネットワークバッファを
消費し、APIが終了すると解放されます。
ただし以下のようなケースでは1つ以上のネットワークバッファが必要になるためその考慮が必要です。

複数のソケットで同時にAPIを呼び出す場合やパケットを受信する場合
複数のソケットで順次APIを呼び出す場合は、解放されたネットワークバッファを使い回しますが、タスクを分けて同時に呼び出す場合は、
それぞれのソケットに対するネットワークバッファの割り当てを考慮する必要があります。

ARPを伴うパケットを送信する場合
初めてパケットを送信する宛先(IP)に対しては、MACアドレスを解決するためのプロトコル(ARP)が送信パケットに先行して動作します。(※)
そのため1回の送信に対して2つのネットワークバッファを使用します。
※IPv6やPPPの場合はその限りではありません。

TCPのバッファを大きくする場合
TCPの送受信はフロー制御を伴うためソケットAPIとは非同期に動作することがあります。

とくにTCPソケットの受信バッファサイズを大きく設定した場合、μNet3内で複数のパケット(ネットワークバッファ)を保持することがあります。

受信バッファサイズとネットワークバッファの関係
uNet3のTCPソケットは、受信バッファ(=ウィンドウ)は専用領域を用意するのではなく受信パケットのチェーンで構成されます。
従ってTCPソケットの受信バッファサイズを大きくした場合には、相応にパケットを受信できるよう、ネットワークバッファの
数を増やす必要があります。
たとえばTCPソケットのウィンドウサイズ=8K、1つの受信パケットのサイズ=MSS(1460byte)と仮定すると、最大でおおよそ
6つのネットワークバッファが必要になります。


ネットワークアプリケーションとネットワークバッファの関係
弊社提供のネットワークアプリケーションのいくつかはAPI実行時にネットワークバッファ
を利用します。ネットワークバッファを使用するネットワークアプリは以下となります。

DHCPクライアント 2 ※通常版/拡張版ともに
DNSクライアント 2
HTTPサーバ 2タスク起動中は常に保持, 1タスク辺り
PINGクライアント 1

ネットワークアプリを並列的に使うことが想定される場合は適宜増やすようにしてください。
(例:DHCPクライアント処理中にDNSクライアント処理も行う場合には4(2+2)必要となります)

返信する