IP首部 = 4位版本+4位首部长度+8位服务类型(TOS)+16位总长度+16位标识+3位标志+13位片偏移+8位生存空间(TTL)+8位协议+16位首部检验和+32位源IP地址+32位目的IP地址。
可如下结构定义:
typedef struct
{
BYTE HLen : 4; //4位长度
BYTE Vers : 4; //4位版本
//TOS 服务类型 Begin *****************************
//**************无 最小费用(该变量只在NNTP中有效)***
BYTE ST_NoUse : 2; //未用位
BYTE ST_Reliability : 1; //最高可靠性
BYTE ST_Throughput : 1; //最大吞吐量
BYTE ST_Delay : 1; //最小时延
BYTE ST_Precendence : 3; //优先权子字段(据说现在已经被忽略)
//TOS 服务类型 End *****************************
WORD TotalLen; //16位总长度(字节数)
WORD ID; //16位标识
// 13位片位移和3位标志在IP分片中才用到
BYTE OffHigh : 5; //13位片偏移 高5位
//3位标志 Begin *********************
BYTE Flag_MoreFrag : 1; //更多分片位
BYTE Flag_DoNotFrag : 1; //不可分片位
BYTE Flag_NoUse : 1;
//3位标志 End *********************
BYTE OffLow : 8; //13位片偏移 低8位
BYTE TimeToLive : 8; //TTL 8位生存时间
BYTE Protocol : 8; //8位协议
WORD HChecksum; //16位首部检验和
BYTE SIP[4]; //32位源IP地址
BYTE DIP[4]; //32位目的IP地址
} IPHEADER;
TCP首部 = 16位源端口号+16位目的端口号+32位序号+32位确认序号+4位首部长度+保留位(6位)+URG+ACK+PSH+RST+SYN+FIN+16位窗口大小+16位检验和+16位紧急指针
可如下结构定义:
typedef struct
{
WORD SPort; //16位源端口号
WORD DPort; //16位目的端口号
DWORD SeqNum; //32位序号
DWORD AckNum; //32位确认序号
BYTE Reserved1 : 4; //保留4位
BYTE HLen : 4; //4位首部长度
BYTE CB_FIN : 1; //发端完成发送任务
BYTE CB_SYN : 1; //同步序号用来发起一个连接
BYTE CB_RST : 1; //重建连接
BYTE CB_PSH : 1; //接收方应该尽快将这个报文段交给应用层
BYTE CB_ACK : 1; //确认序号有效
BYTE CB_URG : 1; //紧急指针有效
BYTE Reserved2 : 2; //保留2位
WORD Window; //16位窗口大小
WORD Checksum; //16位检验和
WORD UrgPtr; //16位紧急指针
} TCPHEADER;