1、IP包格式安全
IP数据包是一种可变长分组,它由首部和数据负载两部分组成。首部长度通常为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。数据负载部分的长度通常可变,整个IP数据包的最大长度为65535B。网络
一、版本号(Version)操作系统
长度为4位(bit),IP v4的值为0100,IP v6的值为0110。指针
二、首部长度blog
指的是IP包头长度,用4位(bit)表示,十进制值就是[0,15],一个IP包前20个字节是必有的,后40个字节根据状况可能有可能没有。若是IP包头是20个字节,则该位应是20/4=5。进程
三、服务类型(Type of Service TOS)路由
长度为8位(bit),其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。同步
TOS只表示用户的请求,不具备强制性,实际应用中不多用,路由器一般忽略TOS字段。it
四、总长度(Total Length)io
指IP包总长度,用16位(bit)表示,即IP包最大长度能够达216=65535字节。在以太网中容许的最大包长为1500B,当超过网络容许的最大长度时需将过长的数据包分片。
五、标识符(Identifier)
长度为16位,用于数据包在分段重组时标识其序列号。将数据分段后,打包成IP包,IP包因走的路由上不一样,会产生不一样的到达目地的时间,到达目地的后再根据标识符进行从新组装还原。该字段要与标志、段偏移一块儿使用的才能达到分段组装的目标。
六、标志(Flags)
长度为3位,三位从左到右分别是MF、DF、未用。MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)。DF=1表示路由器不能对该数据包分段,DF=0表示数据包能够被分段。
七、偏移量(Fragment Offset)
也称段偏移,用于标识该数据段在上层初始数据报文中的偏移量。若是某个包含分段的上层报文的IP数据包在传送时丢失,则整个一系列包含分段的上层数据包的IP包都会要求重传。
八、生存时间(TTL)
长度为8位,初始值由操做系统设置,每通过一个路由器转发后其值就减1,减至0后丢弃该包。这种机制能够避免数据包找不到目地时不断被转发,堵塞网络。
九、协议(Protocol)
长度为8位,标识上层所使用的协议。
十、首部校验和(Header Checksum)
长度为16位,首部检验和只对IP数据包首部进行校验,不包含数据部分。数据包每通过一个中间节点都要从新计算首部校验和,对首都进行检验。
十一、源IP地址(Source IP)
长度为32位,表示数据发送的主机IP。
十二、目的IP地址(Destination IP)
长度为32位,表示数据要接收的主机IP。
1三、选项字段(Options)
长度为0-40字节(Byte),主要有:安全和处理限制(Security)、记录路径(Record Route)、时间戳(Timestamps)、宽松源站选路(Loose Source Routing)、严格的源站选路(Strict Source Routing)等。
2、TCP报文
TCP报文由首部和数据两部分组成。首部通常由20-60字节(Byte)构成,长度可变。其中前20B格式固定,后40B为可选。
由于,TCP报文还得传给下层网络层,封装成IP包,而一个IP包最大长度为65535,同时IP包首部也包含最少20B,因此一个IP包或TCP包能够包含的数据部分最大长度为65535-20-20=65495B。
TCP报文中数据部分是可选的,即TCP报文能够不包含数据(同理IP包也能够不包含数据)。不含数据的TCP报文一般是一些确认和控制信息类的报文,如TCP创建链接时的三次握手和TCP终止时的四次挥手等。
一、源端口号(Source Port)
长度为16位,指明发送数据的进程。
二、目的端口号(Destination Port)
长度为16位,指明目的主机接收数据的进程。
三、序号(Sequence Number)
也称为序列号,长度为32位,序号用来标识从TCP发送端向接入端发送的数据字节流进行编号,能够理解成对字节流的计数。
四、确认号(Acknowledgement Number)
长度为32位,确认号包含发送确认的一端所指望收到的下一个序号。确认号只有在ACK标志为1时才有效。
五、首部长度
长度为4位,用于表示TCP报文首部的长度。用4位(bit)表示,十进制值就是[0,15],一个TCP报文前20个字节是必有的,后40个字节根据状况可能有可能没有。若是TCP报文首部是20个字节,则该位应是20/4=5。
六、保留位(Reserved)
长度为6位,必须是0,它是为未来定义新用途保留的。
七、标志(Code Bits)
长度为6位,在TCP报文中不论是握手仍是挥手仍是传数据等,这6位标志都很重要。6位从左到右依次为:
URG:紧急标志位,说明紧急指针有效;
ACK:确认标志位,多数状况下空,说明确认序号有效;
PSH:推标志位,置位时表示接收方应当即请求将报文交给应用层;
RST:复位标志,用于重建一个已经混乱的链接;
SYN:同步标志,该标志仅在三次握手创建TCP链接时有效
FIN:结束标志,带该标志位的数据包用于结束一个TCP会话。
八、窗口大小(Window Size)
长度为16位,TCP流量控制由链接的每一端经过声明的窗口大小来提供。
九、检验和(Checksum)
长度为16位,该字段覆盖整个TCP报文端,是个强制性的字段,是由发送端计算和存储,到接收端后,由接收端进行验证。
十、紧急指针(Urgent Pointer)
长度为16位,指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。
十一、选项(Options)
长度为0-40B(字节),必须以4B为单位变化,必要时能够填充0。一般包含:最长报文大小(MaximumSegment Size,MSS)、窗口扩大选项、时间戳选项、选择性确认(Selective ACKnowlegement,SACK)等。
十二、数据
3、UDP数据段
UDP数据段格式比较简单,以下:
UDP数据报由首部和数据两部分组成,其中首部只有8B(字节)。
一、源端口号(Source Port)
长度为16位,指明发送数据的进程。
二、目的端口号(Destination Port)
长度为16位,指明目的主机接收数据的进程。
三、长度
长度为16位,该字段值为报头和数据两部分的总字节数。
四、检验和(Checksum)
长度为16位,UDP检验和做用于UDP报头和UDP数据的全部位。由发送端计算和存储,由接收端校验。
五、数据