我目前正在试验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;
}
前三个属性是明确的,但Identifier
和SequenceNumber
(=>标题的其余部分?)
我得到的另一个问题是,如果我想使用IcmpPacket
来ping服务器,我真的需要Identifier
,SequenceNumber
和Data
吗? (我的主机说可能最小的IcmpPacket大约是28Bytes,所以如果选择Identifier
和SequenceNumber
,我是否必须使用Data
填充剩余的20个字节?)
P.S。:如果Icmp可能有一个很好地描述结构的网站吗?
答案 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 ...