The Ethernet header structure is shown in the illustration below:
以太网头部14 bytes
|
|
|
|
|
|
|
|
|
|
Ethernet header structure
|
The IP header structure is as follows:IP头部20 bytes
4
8
16
32 bits
Ver.
IHL
Type of service
Total length
Identification
Flags
Fragment offset
Time to live
Protocol
Header checksum
Source address
Destination address
Option + Padding
Data
IP header structure
The TCP header structure is as follows:
TCP头部20 bytes
16
32 bits
Source port
Destination port
Sequence number
Acknowledgement number
Offset
Resrvd
U
A
P
R
S
F
Window
Checksum
Urgent pointer
Option + Padding
Data
TCP header structure
The UDP header structure is shown as follows:
UDP头部8 bytes
16
32 bits
Source port
Destination port
Length
Checksum
Data
UDP header structure
一些协议头部的定义:
struct ip
{
#if BYTE_ORDER == LITTLE_ENDIANu_char ip_hl:4, /* header length */ip_v:4; /* version */
#endif
#if BYTE_ORDER == BIG_ENDIANu_char ip_v:4, /* version */ip_hl:4; /* header length */
#endifu_char ip_tos; /* type of service */short ip_len; /* total length */u_short ip_id; /* identification */short ip_off; /* fragment offset field */u_char ip_ttl; /* time to live */u_char ip_p; /* protocol */u_short ip_sum; /* checksum */struct in_addr ip_src,ip_dst; /* source and dest address */
};struct udphdr
{u_short uh_sport; /* source port */u_short uh_dport; /* destination port */short uh_ulen; /* udp length */u_short uh_sum; /* udp checksum */
};struct tcphdr
{u_short th_sport; /* source port */u_short th_dport; /* destination port */tcp_seq th_seq; /* sequence number */tcp_seq th_ack; /* acknowledgement number */
#if BYTE_ORDER == LITTLE_ENDIANu_char th_x2:4, /* (unused) */th_off:4; /* data offset */
#endif
#if BYTE_ORDER == BIG_ENDIANu_char th_off:4, /* data offset */th_x2:4; /* (unused) */
#endifu_char th_flags;u_short th_win; /* window */u_short th_sum; /* checksum */u_short th_urp; /* urgent pointer */
};