0

我目前正在试验 Icmp 协议,我想实现一个新的类IcmpPacket。我在 Wikipedia 上阅读了该协议,还在 MSDN 上找到了一篇关于使用 Icmp 进行 ping 的文章。由于两个网站之间存在一些差异,我有点困惑。

Wikipedia 将 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;
}

前三个属性很清楚,但是IdentifierSequenceNumber(=> 标题的其余部分?)

我得到的另一个问题是,如果我想使用ping 服务器,IcmpPacket我真的需要Identifier,吗?(我的主人说最小的 IcmpPacket 可能是 28Bytes 大,所以如果取and ,我是否必须用 填充剩余的 20 Bytes ?)SequenceNumberDataIdentifierSequenceNumberData

PS:是否有一个网站可以很好地描述 Icmp 的结构?

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 服务器,我真的需要 Identifier、SequenceNumber 和 Data 吗?

标识符、序列号和数据字段必须存在于框架中...

我的主人说最小的 IcmpPacket 可能是 28Bytes 大,所以如果使用 Identifier 和 SequenceNumber,我是否必须用数据填充剩余的 20 Bytes?

如果他们谈论的是一个 28 字节的 IPv4 数据包,那么最小的数据包必须包括最小的 20 字节 IPv4 报头 + 8 字节的 ICMP 报头。

是否有一个网站可以很好地描述 Icmp 的结构?

您应该在线阅读RFC 792 ...

于 2012-10-07T10:14:44.207 回答