我目前正在试验Icmp协议,我想实现一个新类IcmpPacket
。 我阅读了维基百科上的协议,并且我还发现了一篇关于在MSDN上使用Icmp进行ping操作的文章。 由于两个网站之间存在一些差异,我有点困惑。Icmp协议问题
维基百科定义的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;
}
第一三个属性是清楚但对于Identifier
和SequenceNumber
(=>头的休息?)
我得到的另一个问题是如果我想使用IcmpPacket
来ping服务器,我真的需要Identifier
,SequenceNumber
和Data
? (我的主机供应商说,最小的IcmpPacket可能是大约28Bytes大,所以如果服用Identifier
和SequenceNumber
,做我有Data
以填补剩余的20个字节?)
PS:也许有一个网站哪个好介绍结构如果Icmp?
的结构,撞了上去[IETF(http://datatracker.ietf.org/doc/search/?name=icmp&rfcs=on&activeDrafts=on&search_submit= ),你会在那里找到所有的规格。 – Landern
你会发现两者都是正确的,因为C#类不代表在网络上生成和发送的最终数据包。正如@Moses所建议的,如果您想了解包格式,您应该阅读IETF RFC文档。此外,在ping设备时,使用Microsoft Network Monitor或Wireshark捕获一些网络数据包也很有帮助。 –