Icmp协议问题

时间:2012-10-04 15:23:10

标签: c# networking

我目前正在试验Icmp协议,我想实现一个新的类IcmpPacket。 我在维基百科上阅读了有关协议的内容,我还发现了一篇关于在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(=>标题的其余部分?)

我得到的另一个问题是,如果我想使用IcmpPacket来ping服务器,我真的需要IdentifierSequenceNumberData吗? (我的主机说可能最小的IcmpPacket大约是28Bytes,所以如果选择IdentifierSequenceNumber,我是否必须使用Data填充剩余的20个字节?)

P.S。:如果Icmp可能有一个很好地描述结构的网站吗?

1 个答案:

答案 0 :(得分:1)

  

标识符和序列号怎么样?

Identifier和SequenceNumber是对您的实现有意义的值,用于将echo请求与相应的echo回复进行匹配。 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个字节?

如果他们在讨论28字节的IPv4数据包,那么最小的数据包必须包含最小的20字节IPv4标头+ 8字节的ICMP标头。

  

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

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