Quick Overview of Protocol Header Structures


IP -- see RFC 791

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type of service
If using "classic" TOS, use and interpret the TOS field as "PreDTRCx", where:

	Pre = Precedence = 000 through 111 (with DOD interpretations if desired)
	D   = Delay (1 = minimize delay)
	T   = Throughput (1 = maximize throughput)
	R   = Reliability (1 = maximize reliability)
	C   = Cost (1 = minimize cost)
	x   = reserved, set to "0"
If using Differentiated Services (DiffServ), use and interpret as "000000xy", where:
	x:  "1" = "ECN capable"
	y:  "1" = "congestion experienced"

Flags
Three bits, use and interpret as "0DM", where:

	0 = Use a "0" here!
	D = Don't Fragment
	M = More Fragments


ICMP -- see RFC 792

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             unused                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Internet Header + 64 bits of Original Data Datagram      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type
Three bits, use and interpret as "0DM", where:

	 0 = Echo reply
	 3 = Destination unreachable
	     Code
	      0	Net unreachable
	      1	Host unreachable
	      2	Protocol unreachable
	      3	Port unreachable
	      4	Fragmentation needed but DF set
	      5	Source route failed
	      6	Destination network unknown
	      7	Destination host unknown
	      8	Source host isolated
	      9	Network administratively prohibited
	     10	Host administratively prohibited
	     11	Network unreachable for requested TOS
	     12	Host unreachable for requested TOS
	     13	Communication administratively prohibited
	 4 = Source quench
	 5 = Redirect
	     Code
	      0	Redirect datagram for the network
	      1	Redirect datagram for the host
	      2	Redirect datagram for the TOS and network
	      3	Redirect datagram for the TOS and host
	 8 = Echo request
	 9 = Router advertisement
	10 = Router selection
	11 = Time exceeded
	     Code
	      0	Time to live exceeded in transit
	      1	Fragment reassembly time exceeded
	12 = Parameter problem
	     Code
	      0	Pointer indicates the error
	      1	Missing a required option
	      2	Bad length
	13 = Timestamp
	14 = Timestamp reply
	15 = Information request
	16 = Information reply
	17 = Address mask request
	18 = Address mask reply
	30 = Traceroute (probably just Microsoft hosts, traceroute
	     should be done via UDP)


TCP -- see RFC 793

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Data |           |U|A|P|R|S|F|                               |
| Offset| Reserved  |R|C|S|S|Y|I|            Window             |
|       |           |G|K|H|T|N|N|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


UDP -- see RFC 768

 0      7 8     15 16    23 24    31
+--------+--------+--------+--------+
|     Source      |   Destination   |
|      Port       |      Port       |
+--------+--------+--------+--------+
|                 |                 |
|     Length      |    Checksum     |
+--------+--------+--------+--------+