Chinaunix首页 | 论坛 | 博客
  • 博客访问: 896724
  • 博文数量: 148
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 3920
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-30 18:17
文章分类

全部博文(148)

文章存档

2008年(148)

我的朋友

分类:

2008-06-23 08:52:27

IP报头:20B

TCP报头:20B

UDP报头:8B

IP
Source Port (16) | Destination Port (16)
Sequence Number (32)
Acknowledgment Number (32)
Data Offset(4) | Reserved (6)|UGR|ACK|PSH|RST|SYN|FIN|Window(16)
Checksum (16) | Urgent Pointer (16)
Options (0 or more 32 bit words + padding)
DATA
TCP
Source Port (16) | Destination Port (16)
Sequence Number (32)
Acknowledgment Number (32)
Data Offset(4) | Reserved (6)|UGR|ACK|PSH|RST|SYN|FIN|Window(16)
Checksum (16) | Urgent Pointer (16)
Options (0 or more 32 bit words + padding)
DATA

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;

阅读(918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~