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 |
| |
| |
| |
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 */};
更多网络协议格式细节参考: