TCP/IP/UDP/ICMP协议头结构

1、UDP协议
UDP协议是建立在IP协议基础之上的,用在传输层的协议。UDP和IP协议一样是不可靠的数据报服务。
0                               16                              32
-------------------------------------------------------
|       UDP源端口     |      UDP目的端口   |
-------------------------------------------------------
|   UDP数据报长度 |   UDP数据报校验 |
-------------------------------------------------------
|                              数据                             |
-------------------------------------------------------

UDP的头格式为:
struct udphdr
{
u_int16_t source; /*源地址端口*/
u_int16_t dest;    /*目的地址端口*/
u_int16_t len;     /*UDP长度*/
u_int16_t check;   /*UDP校验和*/
};
头文件:linux/udp.h

2、ICMP协议
ICMP是消息控制协议,也处于网络层。在网络上传递IP数据包时,如果发生了错误,那么就会用ICMP协议来报告错误。
0               8             16                        32
----------------------------------------------------
|    类型    |    代码    |       校验和           |
----------------------------------------------------
|        识别号           |     报文序列号      |
----------------------------------------------------
ICMP的头格式为:
struct icmphdr
{
u_int8_t type;                /* 类型 */
u_int8_t code;                /* 代码*/
u_int16_t checksum;   /*校验和*/
union
{
    struct
    {
      u_int16_t id;
      u_int16_t sequence;
    } echo;                     /* echo datagram */
    u_int32_t   gateway;        /* gateway address */
    struct
    {
      u_int16_t __unused;
      u_int16_t mtu;
    } frag;                     /* path mtu discovery */
} un;
};
头文件:linux /icmp.h

3、IP协议
IP协议是在网络层的协议,它主要完成数据包的发送作用,下面这个表是IPv4的数据包格式:  

TCP/IP/UDP/ICMP协议头结构


IP的头格式为:

struct iphdr {
#if defined(__LITTLE_ENDIAN_BITFIELD) /*小端*/
    __u8 ihl:4,              /*IP头部长度*/
          version:4;              /*IP版本,值为4*/
#elif defined (__BIG_ENDIAN_BITFIELD)/*大端*/
    __u8 version:4,          /*IP版本,值为4*/
                 ihl:4;              /*IP头部长度*/
#else
#error "Please fix <asm/byteorder.h>"
#endif
    __u8    tos;                /*服务类型*/
    __be16 tot_len;            /*总长度*/
    __be16 id;                 /*标识*/
    __be16 frag_off;           /*片偏移*/
    __u8    ttl;                /*生存时间*/
    __u8    protocol;           /*协议类型*/
    __u16   check;              /*头部校验和*/
    __be32 saddr;              /*源IP地址*/
    __be32 daddr;              /*目的IP地址*/
      /*IP选项*/
};
头文件:linux/ip.h

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/25632.html