0

次のシナリオをどのように実装できますか?

FreeBSD カーネルが高負荷時に UDP パケットをドロップするようにします。

sysctlnet.inet.udp.recvspace を非常に低い数値に設定して、パケットをドロップできます。しかし、そのようなアプリケーションをどのように実装すればよいでしょうか?

ある種のクライアント/サーバー アプリケーションが必要になると思います。

任意のポインタをいただければ幸いです。

ps これは宿題ではありません。そして、私は正確なコードを探していません。私はちょうどアイデアを探しています。

4

4 に答える 4

3

自動的にそれを行います。カーネルパラメーターをいじるどころか、何もする必要はありません。

UDP について投稿しているほとんどの人は、UDP がパケットをドロップしないようにする方法を探しています!

于 2012-08-28T05:21:42.770 に答える
2

(SOL_SOCKET, SO_RCVBUF)ソケットオプションviaを使用して、ソケットバッファsetsockopt()のサイズを変更します。

于 2012-10-02T20:18:32.867 に答える
0

私がすることは、次のことです。カーネルモジュールが必要なのかプログラムが必要なのかわかりません。

UDP データグラムを受信したときに関数呼び出しがあり、何をするか、ドロップするか、処理するかを選択できるとします。また、プロセス関数は複数のスレッドをトリガーできます。

EVER:
    DATAGRAM := DEQUE()
    IF(HIGHLOAD > LIMIT)
       SEND(HIGH_LOAD_TO(DATAGRAM.SOURCE))
       CONTINUE //Start from the biggining
    HIGLOAD := HIGHLOAD + 1 
    PROCESS(DATAGRAM)


PROCESS(DATAGRAM):
   ...PROCESS DATAGRAM...
   HIGHLOAD := HIGHLOAD - 1

これは好きなように微調整できますが、これはアイデアです。パッケージの処理を開始するとカウントし、プロセスが終了するとデクリメントします。したがって、基本的に、現在処理しているパッケージの数を選択できます。

于 2012-08-28T13:31:30.510 に答える
0

送信アプリを微調整して時折のパケットを「ドロップ」するか、それができない場合は、同じことを行うプロキシを介して UDP メッセージを接続します。

于 2012-08-28T08:01:27.410 に答える