Ethernet IP TCP UDP 协议头部格式

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/

原文地址:https://www.cnblogs.com/luxiaoxun/p/2628627.html