IP协议
1. IP协议
IP协议的具体结构如下:

IP报文由首部和数据两部分组成。首部又由固定部分和可选字段组成,其中固定部分的长度为20字节。关于首部各字段的定义如下:
版本(4位):指定IP协议的版本。如果版本是IPV4,则为0100;如果版本是IPV6,则为0110。
首部长度(4位):指的是包括可选字段在内的IP首部长度。四位最大表示15,所以IP头部最长为60字节。
区分服务(8位):前三位表示优先权字段(现在已经不用了)。四位的TOS字段:第一位D (delay)最小时延、T (throughput)最大吞吐量、R (reliability)最高可靠性和C (cost)最小费用,只能置一位为1,如果这四位全置0,表示是一般服务。
总长度(16位):包括首部和数据两个部分。能表示的最大长度为 65535字节 (2的16次方-1)。
标识(16位):唯一地标识主机发送的每一个数据报。因为IP包不一定都能按时到达,在重组时需要知道分片所属的IP包,标识符字段就是一个IP包的ID。其初始值由系统随机生成,每发送一个数据报,其值就加一。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片都具有相同的标识符。
标志(3位):第一位保留;中间位DF (Don't Fragment) , 置0表示能分片, 置1表示不能分片;最低位为MF (More Fragment) , 置1表示后面还有分片, 置0表示已经是最后一个分片。
片偏移(13位):用于数据包分片和重组。较长的分组在分片后,某片在原来分组中(仅指数据部分)的相对位置。片偏移以 8字节为单位,第一个分片偏移为 0。所以当Fragment Offset 为0时,表示这个数据报文没有分片,或者第一个分片。
生存时间(8位):数据报到达目的地之前允许经过的路由器跳数。发送端设置,数据报每经过一次路由,该值就被路由器减一。生存时间为0时则被丢弃。
协议(8位):用来区分上层协议,指出此数据报携带的数据是使用何种协议。例如,ICMP是1,TCP是6,UDP是17。
首部校验和(16位): 由发送端填充,接收端对其使用反码求和算法检验头部在数据传输过程中是否损坏。需要注意的是,该字段只对 IP首部查错,而不关心数据部分。这是因为IP包数据一般用来承载上层协议报文,例如 UDP和 TCP,而它们的报文都有自己的校验和字段。
源地址(32位):发送端的IP。
目的地址(32位):接收端的IP。
可选字段:是可变长的可选信息,最多包含40字节。
2. 基于IP协议的攻击
2.1 IP分片攻击
在IP协议的标志字段中,DF用来记录数据包是否可以分片,MF用来记录当前数据包是否是最后一个分片。攻击者利用标志字段构造分片报文,并将其发送给接收方,但是不向接收方发送最后一个分片报文,导致接收方要为所有的分片报文分配内存空间,可由于最后一个分片报文永远不会接收到,接收方的内存得不到及时的释放(接收方会启动一一个分片重组的定时器,在一定时间内如果无法完成重组,将向发送方发送ICMP重组超时差错报文),只要这种攻击的分片报文发送的足够多、足够快,很容易占满接收方内存,让接收方无内存资源处理正常的业务。这是一种DOS攻击。
2.2 死亡之ping
攻击原理是单个包的长度超过了IP协议规范所规定的包长度:0-65535字节 。数据链路层可封装的数据是有限的,我们把链路层可封装的数据上限称为最大传送单元MTU。目前数据链路层使用最多的协议是以太网协议(Ethernet),以太网的最大传送单元是1500字节。当网络层的IP分组超过 1500字节,就要进行分片,作为多个帧来发送,并在目的地重新组装成一个完成的IP包。分片并不包含整个IP包的长度信息,因此IP包一旦被分片,重组后的整个IP包的总长度只有在所在分片都接受完毕之后才能确定。因此,超过规定长度(65535字节)的数据包一旦出现,包中的额外数据就会被写入其他正常区域。这很容易导致系统进入非稳定状态,是一种典型的缓存溢出攻击。在防火墙甲一级对这种攻击进行检测是相当难的,因为每个分片包看起来都很正常。由于使用ping工具很容易完成这种攻击,以至于它也成了这种攻击的首选武器,这也是这种攻击名字的由来。
3.
假设一数据报的总长度为3820字节,其数据部分为3800字节长(使用固定首部),需要分片为长度不超过1420字节的数据报片。试给出分片后每个数据报片相关字段的值(包括MF、DF、片偏移)。

三个分片分别长度为1420、1420、1020,数据部分长度分别为1400、1400、1000 偏移量单位为8个字节一组,则偏移量分别为0、175、350 MF为1、1、0 DF为0、0、0

浙公网安备 33010602011771号