当前位置: 代码迷 >> 综合 >> Ethernet IP TCP UDP 协议头部格式
  详细解决方案

Ethernet IP TCP UDP 协议头部格式

热度:33   发布时间:2023-12-12 02:59:01.0

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_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 */
};