2

この質問が示唆しているように、チェックサムはイーサネットハードウェアによって計算および検証されているようです。したがって、ここここにあるように、AF_PACKETソケットを使用してフレームを送信するときにソフトウェアによって生成される必要はほとんどないようです。また、Wiresharkでさえ表示されないため、ソケットからも単純な手段でも受信できないと思います。

それで、誰かがこれを確認できますか?最後の2つのリンクに示されているように、本当に自分でチェックサムを送信する必要がありますか?チェックサムはイーサネットアダプタによって自動的に作成およびチェックされますか?

4

2 に答える 2

3

いいえ、CRCを含める必要はありません。

Linuxでを使用してパケットソケットを使用するsocket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL) )場合、送信時にレイヤー2ヘッダーを指定する必要があります。struct ether_headerこれはinによって定義されnetinet/if_ether.h、宛先ホスト、送信元ホスト、およびタイプが含まれます。フレームチェックシーケンスは含まれていません。また、プリアンブル、フレーム区切り文字の開始、またはトレーラーも含まれていません。これらはハードウェアによって追加されます。

于 2015-05-28T17:08:26.750 に答える
2

Linuxでは、socket(AF_PACKET、SOCK_RAW、htobe16(ETH_P_ALL))と同様のケースについて言及すると、イーサネットチェックサムを計算する必要はありません。NICハードウェア/ドライバーが自動的に計算します。つまり、rawソケットに送信する前に、チェックサムを除くデータリンク層フレーム全体を提供する必要があります。

于 2013-11-13T10:18:20.800 に答える