The Ethernet header structure is shown in the illustration below:
以太网头部14 bytes
Destination | Source | Len | Data unit + pad | FCS |
(6 bytes) | (6 bytes) | (2) | (46-1500 bytes) | (4 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_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/
本文转自阿凡卢博客园博客,原文链接:http://www.cnblogs.com/luxiaoxun/archive/2012/08/08/2628627.html,如需转载请自行联系原作者