IP数据报的结构及定义

 

 

1 版本域:表示数据报相对应的IP协议是多少,目前是4(代表IPv4,但IPv6也许要替代IPv4了)

2 首部长度:4位,IP协议包头的长度,指明IPv4协议包头长度的字节数包含多少个32位。由于IPv4的包头可能包含可变数量的可选项,所以这个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4包头的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5 (5x4 = 20字节)。就是说,它表示的是包头的总字节数是4字节的倍数。

3 服务类型:定义IP协议包的处理方法,它包含如下子字段

过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)
延迟字段:1位,取值:0(正常)、1(期特低的延迟)
流量字段:1位,取值:0(正常)、1(期特高的流量)
可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
成本字段:1位,取值:0(正常)、1(期特最小成本)
未使用:1位

4 总长度域:IP包的总长,以字节为单位

5 标识域:是源机赋予数据报的标识符,以便目的机进行分片的重组工作;

6 标志:是一个3位的控制字段,包含:

                                                    保留位(2):1位

                                                不分段位(1):1位,取值:0(允许数据报分段)、1(数据报不能分段)

                                                更多段位(0):1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)

7 段偏移量:当数据分组时,它和更多段位(MF, More fragments)进行连接,帮助目的主机将分段的包组合。偏移量是以8个字节为单位的;

8 TTL:表示数据包在网络上生存多久,每通过一个路由器该值减一,为0时将被路由器丢弃。

9 协议:8位,这个字段定义了IP数据报的数据部分使用的协议类型。常用的协议及其十进制数值包括ICMP(1)、TCP(6)、UDP(17)。

10 校验和:16位,是IPv4数据报包头的校验和。

11 源IP地址:为发送方的IP地址  4字节,0x0a0x080x7a0xfe  对应IP地址  10.8.122.254  

12 目的地址:接收方IP地址

13 选项域:可有可无

 

 // IP header
typedef struct _tagX_iphdr
{
 unsigned char h_len:4;          // IP报头长度  4位     5<<2 =20
 unsigned char version:4;        // 版本     4位        4
 unsigned char tos;             // 服务类型  8位        0
 unsigned short total_len;      // 总长度               16位   0042

 unsigned short ident;          // 标识                 16位   410e
 unsigned short frag_and_flags; // 报片标志偏移             4+12位 0000
 
 unsigned char ttl;    // 生存时间              8位    80
 unsigned char proto;           // 协议(TCP, UDP etc)       8位    01
 unsigned short checksum;       // 报头校验和           16位        d4d1
      
 unsigned int sourceIP;       //信源IP地址           32位        0a 00 08 7a
 unsigned int destIP;         //信宿IP地址           32位        0a 00 08 7a
}XIpHeader;

//TCP header
 typedef struct _tcphdr
{
 byte source_port[2]; //发送端端口号,16位
 byte dest_port[2];  //接收端端口号,16位
 byte sequence_no[4]; //32位,标示消息端的数据位于全体数据块的某一字节的数字
 byte ack_no[4];   //32位,确认号,标示接收端对于发送端接收到数据块数值
 byte offset_reser_con[2];//数据偏移4位,预留6位,控制位6为
 byte window[2];   //窗口16位
 byte checksum[2];  //校验码,16位
 byte urgen_pointer[2]; //16位,紧急数据指针
 byte options[3];  //选祥和填充,32位
}TCP_HEADER;

 

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值