IP、TCP、UDP数据包头部抓包及IP分片传输详解 | 您所在的位置:网站首页 › tcp确认序号的含义 › IP、TCP、UDP数据包头部抓包及IP分片传输详解 |
英文头部说明: 32bit
8 8 8 8
Version
Header Length
Type of service
Totle length
Identifier Flag(3bit) Framgent offest Time to live protocol Header checksum Sourse address Destation address Option pading
中文对照表: 32bit
8 8 8 8
版本号
报头长度 服务类型
报文总长度 标识 标志(3字节) 段偏移 生存时间 协议 校验和 源IP地址 目的IP地址 选项 填充字段
抓包说明: 版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),IPv6的值(0110) IP包头长度(Header Length):长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。IP包头最小长度为20字节,由于变长的可选部分最大长度可能会变成24字节。 服务类型(Type of Service):长度8比特。这个子段可以拆分成两个部分:Precedence和TOS。TOS目前不太使用。而Precedence则用于QOS应用。(TOS字段的详细描述RFC 1340 1349) IP包总长(Total Length):长度16比特。IP包最大长度65535字节。 标识符(Identifier):长度16比特。该字段和Flags和Fragment Offest字段联合使用,对大的上层数据包进行分段(fragment)操作。 标记(Flags):长度3比特。该字段第一位不使用。第二位是DF位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法 在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分 段的IP包的包头中将MF位设为1。 分段序号(Fragment Offset):长度13比特。该字段对包含分段的上层数据包的IP包赋予序号。由于IP包在网络上传送的时候不一定能按顺序到达,这个字段保证了目标路 由器在接受到IP包之后能够还原分段的上层数据包。到某个包含分段的上层数据包的IP包在传送是丢失,则整个一系列包含分段的上层数据包的IP包都会被要 求重传。 生存时间(TTL):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会 将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于故障而导致IP包在网络中不停被转发。 协议(Protocol):长度8比特。标识了上层所使用的协议。 头部校验(Header Checksum):长度16位,由于IP包头是变长的,所以提供一个头部校验来保证IP包头中信息的正确性。 起源和目标地址(Source and Destination Addresses):这两个地段都是32比特。标识了这个IP包的起源和目标地址。 可选项(Options):这是一个可变长的字段。该字段由起源设备根据需要改写。可选项目包含以下内容: 松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。 严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。 路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。 时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。 抓包分析IP数据包结构:
UDP数据包结构: 32bit 源端口 目的端口 用户数据报的总长度 校验和 数据......
UDP的头部比较简单,不详加说明了。 TCP数据包结构: 32bit 源端口号 目的端口号 序号 确认号 首部长度 保留(6位) urg ack psh rst syn fin 窗口大小 校验和 紧急指针 选项 数据...... 各字段说明: 端口号: 常说FTP占21端口、HTTP占80端口、TELNET占23端口等,这里指的端口就是TCP或UDP的端口,端口就像通道两端的门一样,当两机 进行通讯时门必须是打开的。源端口和目的端口各占16位,2的16次方等于65536,这就是每台电脑与其它电脑联系所能开的“门”。一般作为服务一方每 项服务的端口号是固定的。客户端连接的时候开一个大于1024的端口。常用netstat 查看端口的开放情况,防止木马。 32位序号: 也称为顺序号(Sequence Number),简写为SEQ,当一方要与另一方联系时就发送一个初始序号给对方,意思是:“让我们建立联系吧?”,服务方收到后要发个独立的序号给发送方,意思是“消息收到,数据流将以这个数开始。”由此可看出,TCP连接完全是双向的,即双方的数据流可同时传输。在传输过程中双方数据是独立的,因此每个TCP连接必须有两个顺序号分别对应不同方向的数据流。 32位确认序号: 也称为应答号(Acknowledgment Number),简写为ACK。在握手阶段,确认序号将发送方的序号加1作为回答,在数据传输阶段,确认序号将发送方的序号加发送的数据大小作为回答,表示确实收到这些数据。 4位首部长度: 这个字段占4位,它的单位时32位(4个字节)。本例值为7,TCP的头长度为28字节,等于正常的长度2 0字节加上可选项8个字节。,TCP的头长度最长可为60字节(二进制1111换算为十进制为15,15*4字节=60字节)。 6个标志位: URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据 ACK 置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。 PSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。 RST 置1时重建连接。如果接收到RST位时候,通常发生了某些错误。 SYN 置1时用来发起一个连接。 FIN 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了。 16位窗口大小: TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16字节字段,因而窗口大小最大为65535字节。 16位检验和: 检验和覆盖了整个的TCP报文段: TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。 16位紧急指针: 只有当U R G标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 选项: 最常见的可选字段是最长报文大小,又称为MSS (Maximum Segment Size)。每个连接方通常都在握手的第一步中指明这个选项。它指明本端所能接收的最大长度的报文段。1460是以太网默认的大小。
这里面需要特别说明一点的是,当数据包过大,IP分片传输的时候,抓包工具wireshark,假设发的是UDP包。此此时会有一个UDP协议的包,对应多个IP协议的包,UDP字段里面的length是数据包的总长度加上UDP的头部,IP字段里面的长度totle length 是本分片Ip的数据长度加上IP的头部长度。为分片的长度需要加上UDP的头部长度。另外分片后的IP协议包不会显示UDP字段了。 总体IP的结构是帧头部+IP头部+UDP头部(tcp头部)+数据+校验和(tcp的才会有这个字段)。 这里是以tcp,UDP协议举例。当然还会有其他的协议,比如ICMP,Arp ......
|
CopyRight 2018-2019 实验室设备网 版权所有 |