1、IPv4首部格式
通过wireshark抓QQ的数据报,IPV4的数据报格式和上面的一致,现在进行分析(相对重要的会红色标记)
(1)版本(version):由4比特构成,表示标识IP首部的版本号,如上是版本号为4
(2)首部长度(IHL):由4比特构成,表明IP首部的大小,当没有可选项时,首部长度为20字节
(3)区分服务(TOS):由8比特构成,用来表明服务质量,其中包括DSCP和ECN。DSCP(差分服务代码点)用来进行质量控制;ECN(显式拥塞通告)用来报告网络拥堵情况
(4)总长度(Total Length):表示IP首部与数据部分合起来的总字节数,长度为16比特,72字节
(5)标识(ID):由16比特构成,用于分片重组
(6)标志(Flags):由3比特构成,表示被分片的相关信息
(7)片偏移(FO):由13比特构成,用来标识被分片的每一个分段相对于原始数据的位置
(8)生存时间(TTL):由8比特构成,最大值225,实现防止环路。可作为以秒为单位记录当前包在网络上的生存期限,也可用于表示中转多少个路由器,没经过一个路由器,TTL减少1,直到0则丢弃该包
(9)协议(Protocol):由8比特构成,表示IP包传输层的上层协议编号
(10)首部校验和(Header Checksum):由16比特(2个字节)构成,只校验数据报的首部,不校验数据部分,主要用来确保IP数据报不被破坏
(11)源地址(Source Address):由32比特(4个字节)构成,表示发送端IP地址
(12)目标地址(Destination Address):由32比特(4个字节)构成,表示接收端IP
(13)可选项(Options):长度可变,通常只在进行试验或诊断时使用。包含以下信息:安全级别,原路径,路径记录,时间戳
(14)填充(Padding):在有可选项的情况下,通过向字段填充0,将首部长度调整为32比特整数倍
(15)数据(Data):存入数据
二、IPv6首部格式)
(1)版本(version):由4比特构成。值为6
(2)通信量表(Traffic Class):由8比特构成,相当于IPv4的TOS字段
(3)流标号(Flow Label):由20比特构成,准备用于服务质量
(4)有效载荷长度(Payload Length):指包的数据部分
(5)下一个首部(Next Header):由8比特构成。相当于IPv4的协议字段,通常表示IP上一层协议是TCP或UDP
(6)跳数限制(Hop Limit):由8比特构成,与IPv4中的TTL意思相同。数据每经过一次路由器就减1,减到0则丢弃数据
(7)源地址(Source Address):由128比特(8个16位字节)构成。表示发送端IP地址
(8)目标地址(Destination Address):由128比特(8个16位字节)构成。表示接收端IP地址
三、UDP首部格式
(1)源端口号(Source Port):表示发送端端口号,字段长16位。可选项
(2)目标端口号(Destination Port):表示接收端端口,字段长度16位
(3)包长度(Length):该字段保存了UDP受不得长度跟数据的长度之和,单位为字节(8位字节)
(4)校验和(Checksum):校验和是为了提供可靠的UDP首部和数据而设计。通过在最后一位增加一个“0”将全长增加16倍。此时将UDP首部的校验和字段设置为“0”,然后以16比特为单位进行1的补码和,并将得到的1的补码和写入校验和字段。接受主机判断包括校验和字段在内的所有数据之和结果为“16位全部为1”时,才会被认为所受到的数据是正确的。
四、TCP首部格式
(1)源端口号(Source Port):表示发送端端口号,字段长16位
(2)目标端口号(Destination Port):表示接收端端口号,字段长度16位
(3)序列号(Sequence Number ):字段长32位,指发送数据的位置,每发送一次数据,就累加一次该数据字节数的大小。序列号在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机,然后再将没转发过去的字节数累加到初始值上表示数据的位置。
(4)确认应答号(Acknowledgement Number):确认应答号字段长度32位。指下一次应该收到的数据的序列号。
(5)数据偏移(Data Offset):表示TCP首部的长度。该字段长4位,单位为4字节(即32位);不包括选项字段的话TCP首部的长度为20字节长
(6)保留(Resserved):该字段主要是为了以后扩展时使用,长度为4位,一般设置为0。
(7)控制位(Control Flag):字段长为8位,每一位从左至右分别为CWR\ECE\URG\AVK\PSH\RST\SYN\FIN
(8)窗口大小(Windows Size):该字段长为16位。用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小(8位字节)
(9)校验和(Checksum):TCP校验和与UDP相似,区别在于TCP的校验和无法关闭
(10)紧急指针(Urgent Pointer):该字段长为16位,只有在URG控制位为1时有效。该字段的数值表示本报文段中紧急数据的指针
(11)选项(Options):用于提高TCP的传输性能,长度最大为40字节,尽量调整为32位的数据量