一、IP头数据结构

  1. typedef struct _IP_HEADER
  2. {
  3. char m_cVersionAndHeaderLen;   
  4. char m_cTypeOfService;      
  5. short m_sTotalLenOfPacket;    
  6. short m_sPacketID;        
  7. short m_sSliceinfo;        
  8. char m_cTTL;           
  9. char m_cTypeOfProtocol;      
  10. short m_sCheckSum;       
  11. unsigned int m_uiSourIp;      
  12. unsigned int m_uiDestIp;      
  13. } __attribute__((packed))IP_HEADER, *PIP_HEADER ;

image.png

字段 分段 长度 含义
m_cVersionAndHeaderLen 前4位 4/8 前4位IP版本号
后4位 4/8 后4位标识头部长度
m_cTypeOfService 8 服务类型TOS,传包优先级
m_sTotalLenOfPacket 16 数据包长度
m_sPacketID 16 用于识别包的编号,一般为包的序列号。如果一个包被IP分片,则所有分片都拥有相同的ID
m_sSliceinfo 前3位 3/16 第一个bit位标识是否允许分片,第二bit位标识该包是否分片
后13位 13/16 表示当前包的内容位整个IP数据包的第几个字节开始的,即偏移量
m_cTTL 8 存活时间
m_cTypeOfProtocol 8 上层协议类型
m_sCheckSum 16 首部校验和
m_uiSourIp 32 32位源IP
m_uiDestIp 32 32位目标IP

二、TOS详解

TOS总计8位,包括3bit的优先级字段,4bit的TOS子字段,以及1bit未使用,必须置为0的字段,
8个优先级的定义如下:

3bit值 含义
111 网络控制
110 网间控制
101 关键
100 极速
011 闪速
010 快速
001 优先
000 普通
  • 优先级6和7一般保留给网络控制数据使用,如路由。
  • 优先级5推荐给语音数据使用。
  • 优先级4由视频会议和视频流使用。
  • 优先级3给语音控制数据使用。
  • 优先级1和2给数据业务使用。
  • 优先级0为默认标记值。

4bit的TOS子字段,包括了

4bit value 含义
0000 普通服务
1000 最小时延(例如FTP的控制报文,以及SMTP命令阶段,UDP查询均是最小时延)
0100 最大吞吐量(例如DNS区域传输)
0010 最大可靠性(IGP,SNMP)
0001 最小花费(NNTP)