1

(Linux を使用)

TCPを使用してパケットを作成しますraw sockets-高性能ネットワークでは、チェックサムの計算がボトルネックであることがわかりました。NIC はチェックサム オフロードをサポートethtoolし、それが有効になっているとも言っているので、チェックサム オフロードを使用できることを望みました。

しかし、生のソケットを使用すると、チェックサムが計算されないようです。raw ソケットを使用して tcp チェックサム オフロードを有効にする方法はありますか?

編集:

実際、私のマシン/NIC (Thinkpad x201) の動作はあまり論理的ではないようです: 通常の tcp ソケットでパケットを送信すると、ループバック インターフェイスとマシン間のすべてのチェックサムが間違っています。おかしなことに、他のマシンは静かにパケットを配信しますが?

Edit2: OK では、間違ったマシンのパケットを確認しました。オフロードは機能しています。しかし、tcp_checksumフィールド 0 を離れると、入力されず、単に 0 のままになります。

4

1 に答える 1

0

ここでも同じ問題があります。生のソケットで TCP または UDP パケットを送信しましたが、チェックサムオフロードがオンになっている NIC を利用できません。raw ソケットでチェックサムオフロードを有効にする setsockopt() または ioctl() タイプの関数があればいいのにと思います。

なぜwiresharkがパケットにチェックサムエラーがあると表示するのに宛先ホストがすべてのパケットを受け入れるのかという質問については、その理由は、パケットがOSからNICに到達する前にwiresharkがパケットをキャプチャするためです(Windowsの場合はwinpcapなどを介して)。パケットには、OS またはアプリケーションによって正しく入力されたチェックサム フィールドがありません。これが、NIC のチェックサム オフロード機能の目的です。

問題は、NIC が raw ソケットでチェックサム オフロードを実行できるようにする方法です。

于 2011-08-13T15:27:34.893 に答える