title: Icmp protocol questions
body: <p>I'm currently experimenting with the Icmp protocol and I would like to implement a new class <code>IcmpPacket</code>.
  I read about the protocol on Wikipedia and I also found an article about pinging with Icmp on MSDN.
  I'm a bit confused because of some differences between both websites.</p>
  
  <p>Wikipedia defines the structure of a Icmp packet as the following:
  1 Byte Type
  1 Byte Code
  2 Byte Checksum
  4 Byte Rest of header (whatever this is)</p>
  
  <p>On MSDN there is an example given for such an <code>IcmpPacket</code> class (extract of the class)</p>
  
  <pre><code>public class IcmpPacket { 
      public byte Type;
      public byte SubCode;
      public UInt16 CheckSum;
      public UInt16 Identifier;
      public UInt16 SequenceNumber;
      public byte[] Data;
  }
  </code></pre>
  
  <p>the first three attributes are clear but what about <code>Identifier</code> and <code>SequenceNumber</code> (=> Rest of header?)</p>
  
  <p>Another question I got is if I would like to use an <code>IcmpPacket</code> to ping a server, do I really need <code>Identifier</code>, <code>SequenceNumber</code> and <code>Data</code>? (My hoster said that the smallest IcmpPacket possible is about 28Bytes large, so if taking <code>Identifier</code> and <code>SequenceNumber</code>, do I have to fill the remaining 20 Bytes with <code>Data</code>?)</p>
  
  <p>P.S.: Is there maybe a website out which well describes the structure if Icmp?</p>