Chinaunix首页 | 论坛 | 博客
  • 博客访问: 51693
  • 博文数量: 22
  • 博客积分: 655
  • 博客等级: 上士
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-31 14:43
文章分类

全部博文(22)

文章存档

2014年(1)

2007年(21)

我的朋友

分类: C/C++

2007-09-17 09:37:21

 
 
 
 数据包的总体结构:
  ----------------------------------------------
  | ip header | tcp header(or x header) | data |
  ----------------------------------------------

  IP header structure:

4 8 16 32bit
Version IHL Type of service Total length
Identification Flags Fragment offset
Time to live Protocol Header checksum
Source address
Destination address
Option + Padding
Data


  • Version - 4位字段,指出当前使用的 IP 版本。
  • IP Header Length (IHL) ― 指数据报协议头长度,具有32位字长。指向数据起点。正确协议头最小值为5。
  • Type-of-Service ― 指出上层协议对处理当前数据报所期望的服务质量,并对数据报按照重要性级别进行分配。这些8位字段用于分配优先级、延迟、吞吐量以及可靠性。
  • Total Length ― 指定整个 IP 数据包的字节长度,包括数据和协议头。其最大值为65,535字节。典型的主机可以接收576字节的数据报。
  • Identification ― 包含一个整数,用于识别当前数据报。该字段由发送端分配帮助接收端集中数据报分片。
  • Flags ― 由3位字段构成,其中低两位(最不重要)控制分片。低位指出数据包是否可进行分片。中间位指出在一系列分片数据包中数据包是否是最后的分片。第三位即最高位不使用。
  • Fragment Offset ― 13位字段,指出与源数据报的起始端相关的分片数据位置,支持目标IP适当重建源数据报。
  • Time-to-Live ― 是一种计数器,在丢弃数据报的每个点值依次减1直至减少为0。这样确保数据包无止境的环路过程。
  • Protocol ― 指出在 IP 处理过程完成之后,有哪种上层协议接收导入数据包。
  • Header Checksum ― 帮助确保 IP 协议头的完整性。由于某些协议头字段的改变,如生存期(Time to Live),这就需要对每个点重新计算和检验。Internet 协议头需要进行处理。
  • Source Address ― 指定发送代码。
  • Destination Address ― 指定接收代码。
  • Options ― 允许 IP 支持各种选项,如安全性。
  • Data ― 包括上层信息。

 TCP HEAD

16 32 bit
Source port Destination port
Sequence number
Acknowledgement number
Offset Reserved U A P R S F Window
Checksum Urgent pointer
Option + Padding
Data

 

  • Source Port – 识别上层源处理器接收 TCP 服务的点。
  • Destination Port – 识别上层目标处理器接收 TCP 服务的点。
  • Sequence Number – 通常指定分配到当前信息中的数据首字节的序号。在连接建立阶段,该字段用于设别传输中的初始序列号。
  • Acknowledgment Number – 包含数据包发送端期望接收的数据下一字节的序列号。一旦连接成功,该值会一直被发送。
  • Data Offset – 4 位。TCP 协议头中的32位字序号表示数据开始位置。
  • Reserved – 6位。预留以备用,必须设置为0。
  • Control Bits (Flags) – 6位。传送各种控制信息。控制位可以是:

U (URG) Urgent pointer field significant.
A (ACK) Acknowledgment field significant.
P (PSH) Push function.
R (RST) Reset the connection.
S (SYN) Synchronize sequence numbers.
F (FIN) No more data from sender.

  • Window – 16位。指定发送端接收窗口的大小,也就是说,数据可用的八位缓存区大小。
  • Checksum – 16 位。指出协议头在传输中是否遭到破坏。
  • Urgent Pointer – 16 位。指向数据包中的第一个重要数据字节。
  • Option + Padding – 指定各种 TCP 选项。可选项有两种可能形式:单个八位可选类型和八位可选类型,八位可选长度和实际可选数据八位位组。
  • Data – 包含上层信息。

 

UDP HEAD

 

  16

32bit

source port  

Destination port 

length  

 checksum  

data

UDP长字段的值是UDP报文头的长度(8字节)与UDP所携带数据长度的总和。确定UDP长字段值的快速方法是将IP长字段的值减去20个字节。因为IP报文头的长度始终是20字节,所以结果就总是取决于UDP报文头及UDP数据的长度。例如,如果IP所带数据为1480字节,则可以知道UDP所带的数据是1452字节(1480-20(IP)-8(UDP报头)=UDP数据)。当然,您可以查看UDP长字段,不过有时进行减法运算更容易。

UDP校验和字段是对整个UDP报文头和UDP所带的数据的校验和。UDP报文头的校验和是可选的,应用程序可以不使用该校验和。取消UDP校验和计算有时可以加快运行缓慢的主机上的报文处理。如果没有使用校验和,则发送方传输的校验和必须是全1。当接收方站点在校验和字段发现都是1时,就不会试图重新计算校验和。

ICMP HEAD


8

  16

32bit

Type

  Code

Checksum

Identifier

Sequence number

Address mask


  • Type ― 错误消息或信息消息。错误消息可能是不可获得目标文件,数据包太大,超时,参数问题等。可能的信息消息有:Echo Request、Echo Reply、Group Membership Query、Group Membership Report、Group Membership Reduction。
  • Code ― 每种消息类型具有多种不同代码。不可获得目标文件正式这样一个例子,即其中可能的消息是:目标文件没有路由,禁止与目标文件的通信,非邻居,不可获得地址,不可获得端口。具体细节请参照相关标准。
  • Checksum ― 计算校验和时,Checksum 字段设置为0。
  • Identifier ― 帮助匹配 Requests/Replies 的标识符,值可能为0。
  • Sequence Number ― 帮助匹配 Requests/Replies 的序列号,值可能为0。
  • Address Mask ― 32位掩码地址。
DNS HEAD

16 21   28 32 bit
ID Q Query A T R V B Rcode
Question count
Answer count
Authority count Additional count

  • ID – 用于连接查询和答复的16bit。
  • Q – 识别查询和答复消息的1位字段。
  • Query – 描述消息类型的4位字段:
    0 标准查询(由姓名到地址);
    1 逆向查询;
    2 服务状态请求
  • A – 命令回答:1位字段。当设置为1时,识别由命令名字服务器作出的答复。
  • T – 切断。1位字段。当设置为1,表明消息已被切断。
  • R – 1位字段。由名字服务器设置为1请求递归服务。
  • V –1位字段。由名字服务器设置表示递归服务的实用性。
  • B –3位字段。备用,必须设置为0。
  • Rcode – 响应代码,由名字服务器设置的4位字段用以识别查询状态。
  • Question count – 16位字段用以定义问题部分的登陆号。
  • Answer count – 16位字段,用以定义回答部分的资源记录号。
  • Authority count – 16位字段,用以定义命令部分名字服务器的资源记录号。
  • Additional count – 16位字段,用以定义附加记录部分的资源记录号。

阅读(985) | 评论(0) | 转发(0) |
0

上一篇:tcpdump

下一篇:arp

给主人留下些什么吧!~~