SYN パケットを作成し、生のソケットで送信する単純な C++ コードがあります。これには 54 バイトを割り当てます (イーサネット 14 バイト)。
送信側の Wireshark では 54 バイトが表示されますが、受信側の Wireshark では 60 バイトが表示されます。パケットの最後にトレーラとして 6 バイトが追加されます。
scapy でパケットを送信した場合も同じことが起こります。(送信側 54、受信側 60)
アドバイスをお願いできますか?
SYN パケットを作成し、生のソケットで送信する単純な C++ コードがあります。これには 54 バイトを割り当てます (イーサネット 14 バイト)。
送信側の Wireshark では 54 バイトが表示されますが、受信側の Wireshark では 60 バイトが表示されます。パケットの最後にトレーラとして 6 バイトが追加されます。
scapy でパケットを送信した場合も同じことが起こります。(送信側 54、受信側 60)
アドバイスをお願いできますか?
イーサネットは64バイトより短いフレームを送信できません。60バイトはペイロードで、4バイトはチェックサム(FCS)です。FCSはハードウェアによって取り除かれ、ソフトウェアによって認識されることはありません。そのため、アプリケーションには60バイトしか表示されません。
したがって、追加された余分なバイトはハードウェアによって追加され、それについてできることは何もありません。ただし、トレーラーはすべてゼロである必要があります。
Wiresharkのwikiには、これに関する優れた情報があります:http ://wiki.wireshark.org/Ethernet
@Gille が述べたように、イーサネットの制限により、追加のデータはパディングされます。しかし、IP には「長さ」フィールドがあり、パケットのどのくらいが実際のペイロードで、どれくらいがパディングであるかがわかります。あなたのコード (およびそこにある適切なコード) はパディングを処理できる必要があり、それが「長さ」フィールドの目的です。
IPv4 を使用していると仮定して、これを見てください: http://en.wikipedia.org/wiki/IPv4#Packet_structure。「全長」フィールドについて話しています。