0

現在、Icmp プロトコルを試していて、新しいクラスを実装したいと考えていIcmpPacketます。ウィキペディアでプロトコルについて読み、MSDN で Icmp による ping に関する記事を見つけました。両方のウェブサイトにいくつかの違いがあるため、少し混乱しています。

ウィキペディアでは、Icmp パケットの構造を次のように定義しています。 1 バイト タイプ 1 バイト コード 2 バイト チェックサム 4 バイト 残りのヘッダー (これが何であれ)

MSDN には、そのようなIcmpPacketクラスの例 (クラスの抜粋) があります。

public class IcmpPacket { 
    public byte Type;
    public byte SubCode;
    public UInt16 CheckSum;
    public UInt16 Identifier;
    public UInt16 SequenceNumber;
    public byte[] Data;
}

最初の 3 つの属性は明確ですが、Identifierand SequenceNumber(=> ヘッダーの残りの部分?) はどうですか?

私が受けたもう 1 つの質問は、 を使用してサーバーに ping を実行したい場合、IcmpPacket本当に必要ですか?と? です。(私のホスティング事業者は、可能な最小の IcmpPacket は約 28 バイトの大きさであると述べたので、とを使用する場合、残りの 20 バイトを で埋める必要がありますか?)IdentifierSequenceNumberDataIdentifierSequenceNumberData

PS: Icmp の構造を詳しく説明している Web サイトはありますか?

4

1 に答える 1

1

識別子とシーケンス番号はどうですか?

IdentifierとSequenceNumberは、エコー要求を対応するエコー応答と照合するための実装にとって意味のある値です。RFC 792は、それらを使用するための提案を提供しています...

  For example, the identifier might be used like a port in TCP or UDP to
  identify a session, and the sequence number might be incremented
  on each echo request sent.  The echoer returns these same values
  in the echo reply.

IcmpPacketを使用してサーバーにpingを実行する場合、識別子、シーケンス番号、およびデータが本当に必要ですか?

識別子、シーケンス番号、およびデータフィールドがフレームに存在する必要があります。

私のホスティング業者は、可能な最小のIcmpPacketは約28バイトの大きさであると言ったので、識別子とシーケンス番号を取得する場合、残りの20バイトをデータで埋める必要がありますか?

彼らが28バイトのIPv4パケットについて話している場合、最小のパケットには、最小の20バイトのIPv4ヘッダー+8バイトのICMPヘッダーが含まれている必要があります。

Icmpの場合の構造をよく説明しているWebサイトはありますか?

あなたはRFC792をオンラインで読むべきです...

于 2012-10-07T10:14:44.207 に答える