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
|
||||
Total length | |||||||
Fragment offset | |||||||
Protocol | |||||||
IP header structure
|
The TCP header structure is as follows:
TCP头部20 bytes
16
|
32 bits
|
|||||||
Destination port | ||||||||
TCP header structure
|
The UDP header structure is shown as follows:
UDP头部8 bytes
16
|
32 bits
|
Data |
|
UDP header structure
|
一些协议头部的定义:
struct ip { #if BYTE_ORDER == LITTLE_ENDIAN u_char ip_hl:4, /* header length */ ip_v:4; /* version */ #endif #if BYTE_ORDER == BIG_ENDIAN u_char ip_v:4, /* version */ ip_hl:4; /* header length */ #endif u_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_ENDIAN u_char th_x2:4, /* (unused) */ th_off:4; /* data offset */ #endif #if BYTE_ORDER == BIG_ENDIAN u_char th_off:4, /* data offset */ th_x2:4; /* (unused) */ #endif u_char th_flags; u_short th_win; /* window */ u_short th_sum; /* checksum */ u_short th_urp; /* urgent pointer */ };
更多网络协议格式细节参考:http://www.protocols.com/pbook/