一、IP头数据结构
typedef struct _IP_HEADER{char m_cVersionAndHeaderLen;char m_cTypeOfService;short m_sTotalLenOfPacket;short m_sPacketID;short m_sSliceinfo;char m_cTTL;char m_cTypeOfProtocol;short m_sCheckSum;unsigned int m_uiSourIp;unsigned int m_uiDestIp;} __attribute__((packed))IP_HEADER, *PIP_HEADER ;

| 字段 | 分段 | 长度 | 含义 |
|---|---|---|---|
| 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) |
