阅读 122

TCP/IP包头结构

TCP包头结构

TCP(Transmission Control Protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层协议

TCP包头结构


端口号取值范围0~6535  因为十六位二进制构成 2^16

第一行  四层协议必须干的活 传输层 把端口号封装到数据里

第二行  序号: 保证数据的顺序  

第三行  确认序号:去要下一个序号同时代表我已经收到了

第四行  首部长度 数据前面的称之为头部

6位标记位 每一个标记位占一位

URG紧急标记位

ACK确认标记位

PSH若置为1这一数据段不在缓存区里等待,直接优先处理

RST断开连接标记位

SYN请求标记位 置一建立连接的过程

FIN结束标记位 置一释放连接的过程

第五行  校验和,目的是保证数据完整性



二层使用的循环冗余算法   CRC算法

四层使用的是反码相加法            强度较强

四层伪头部校验 --- 12个字节的内容,32源IP,32目标IP,8位保留,8位协议,16位总长度





注意:不要将确认序号Ack与标志位中的ACK搞混了。确认方Ack=发起方Seq+1,两端配对

TCP报文各段详细说明:

  • 源端口和目的端口:  各占 2 字节.端口是传输层与应用层的服务接口.传输层的复用和分用功能都要通过端口才能实现

  • 序号:  占 4 字节.TCP 连接中传送的数据流中的每一个字节都编上一个序号.序号字段的值则指的是本报文段所发送的数据的第一个字节的序号

  • 确认号:  占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号

  • 数据偏移/首部长度:  占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远.“数据偏移”的单位是 32 位字(以 4 字节为计算单位)

  • 保留:  占 6 位,保留为今后使用,但目前应置为 0

  • 紧急URG:  当 URG=1 时,表明紧急指针字段有效.它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)

  • 确认ACK:  只有当 ACK=1 时确认号字段才有效.当 ACK=0 时,确认号无效

  • PSH(PuSH):  接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付

  • RST (ReSeT):  当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接

  • 同步 SYN:  同步 SYN = 1 表示这是一个连接请求或连接接受报文

  • 终止 FIN:  用来释放一个连接.FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接

  • 检验和:  占 2 字节.检验和字段检验的范围包括首部和数据这两部分.在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部

  • 紧急指针:  占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)

  • 选项:  长度可变.TCP 最初只规定了一种选项,即最大报文段长度 MSS.MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节.” [MSS(Maximum Segment Size)是 TCP 报文段中的数据字段的最大长度.数据字段加上 TCP 首部才等于整个的 TCP 报文段]

  • 填充:  这是为了使整个首部长度是 4 字节的整数倍

IP包头结构

img

版本号(Version):

长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),0110(IPv6)

IP包头长度(Header Length):

长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),即本区域值= IP头部长度(单位为bit)/(8*4),因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。IP包头最小长度为20字节。

服务类型(Type of Service):


长度8比特。8位 按位被如下定义 PPP DTRC0



PPP:定义包的优先级,取值越大数据越重要



000 普通 (Routine)



001 优先的 (Priority)



010 立即的发送 (Immediate)



011 闪电式的 (Flash)



100 比闪电还闪电式的 (Flash Override)



101 CRI/TIC/ECP(找不到这个词的翻译)



110 网间控制 (Internetwork Control)



111 网络控制 (Network Control)



D 时延: 0:普通 1:延迟尽量小



T 吞吐量: 0:普通 1:流量尽量大



R 可靠性: 0:普通 1:可靠性尽量大



M 传输成本: 0:普通 1:成本尽量小



0 最后一位被保留,恒定为0

IP包总长(Total Length):

长度16比特。 以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节。

标识符(Identifier):

长度16比特。该字段和Flags和Fragment Offest字段联合使用,对较大的上层数据包进行分段(fragment)操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。

标记(Flags):

长度3比特。该字段第一位不使用。第二位是DF(Don't Fragment)位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF(More Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。

片偏移(Fragment Offset):

长度13比特。表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。

生存时间(TTL):

长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。

协议(Protocol):


长度8比特。标识了上层所使用的协议。



以下是比较常用的协议号:



1  ICMP



2  IGMP



6  TCP



17  UDP



88  IGRP



89  OSPF

头部校验(Header Checksum):

长度16位。用来做IP头部的正确性检测,但不包含数据部分。因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值

起源和目标地址(Source and Destination Addresses):

这两个地段都是32比特。标识了这个IP包的起源和目标地址。要注意除非使用NAT,否则整个传输的过程中,这两个地址不会改变。至此,IP包头基本的20字节已介绍完毕,此后部分属于可选项,不是必须的部分。

可选项(Options):


这是一个可变长的字段。该字段属于可选项,主要用于测试,由起源设备根据需要改写。可选项目包含以下内容:



1、松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。



2、严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。



3、路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。



4、时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。

填充(Padding):

因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。

来源https://www.cnblogs.com/zedffeng/p/15423031.html

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐