网络层协议基础(IP协议相关知识一)、IP分片

一、引入

网络层提供两种服务,一种是虚电路服务。这种服务是在通信时通讯双方建立一个逻辑连接,所有的分组都沿着这条逻辑连接按照存储转发的方式传送。这种服务方式提供的是可靠通信,存在于OSI七层模型的网路层中。

另一种服务是无连接服务,也是现在所普遍使用的,在该服务中,我们使用IP协议进行通信。这种服务存在于TCP/IP五层模型中。

 

两种服务的对比:

网络层协议基础(IP协议相关知识一)、IP分片

 

网络层的设计思路:

  • 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
  • 网络在发送分组时不需要先建立连接。每一个分组时独立发送的,与前后分组无关(不对分组进行编号)。
  • 网络层也不提供服务质量承诺。即所传送的分组可能出错、丢失、重复和失序(不按顺序到达目的地)
  • 好处:网络的造价大大降低,运行方式灵活,能够适应多种应用。

 

二、IP协议

1、基本概念

IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据报传输服务。

2、编址方式

2.1分类的IP地址

这是最基本的编址方式,在1981年就通过了相应的标准协议。

依据网络的大小,将IP 地址分成了A/B/C/D/E 5类。

地址范围:

A:0.0.0.0~127.255.255.255

B:128.0.0.0~191.255.255.255

C:192.0.0.0~223.255.255.255

D:224.0.0.0~239.255.255.255

E:240.0.0.0~255.255.255.255

网络层协议基础(IP协议相关知识一)、IP分片

通过上图可以看出,每一类IP地址都是由两部分组成:
        网络号(net-id),它标志主机(或路由器)所连接到的网络;     
        主机号 (host-id),标志主机(路由器)

在上述五类地址中,ABC三类地址供我们日常上网使用,可以在互联网上传播,D类地址是组播地址;E类地址是保留地址,不可以使用。

在可用的ABC三类地址中,还有一些特殊的地址,是不可以随便使用的,具有特殊含义,例如:

    (1)主机位全为1:表示该地址为广播地址
    (2)主机位全为0:表示本网段
    (3)本地回环地址:127.0.0.1  用于测试本地网络是否正常
    (4)私有IP地址,可在组织单位内随意自行使用,但不能在Internet上传播        
        A类:10.0.0.0~10.255.255.255
        B类:172.16.0.0~172.31.255.255
        C类:192.168.0.0~192.168.255.255

 

子网掩码

为了能够区分IP地址中哪些是网络号,哪些是主机号,我们需要第三方来进行标注,这个第三方就是子网掩码。

子网掩码由32位二进制数字组成,为了表示方便,我们也是写成点分十进制的形式。子网掩码用来区分IP地址的网络位和主机位。(类似于一把尺子)

网络层协议基础(IP协议相关知识一)、IP分片

子网掩码的32位二进制数与IP地址的32位二进制数一一对应,IP地址中属于网络号的部分在子网掩码中用1来表示。例如上图中,IP地址为128.32.1.14,红色部分为IP地址的网络位,则子网掩码中对应位全部用1来表示,主机位全部用0来表示,写成点分十进制就是:255.255.0.0。

 

2.2可变长度子网掩码(VLSM)

在原来的二级IP地址的基础上,增加了“子网号字段”,变成“三级”IP地址。实质上是在原分类地址基础上,向主机位借用了X位作为子网的网络号。
    11000000 10101000 00000001 00000000   192.168.1.0/24

    11000000 10101000 00000001 00000000   192.168.1.0/26

注意:IP地址依然只有32位,依然是有类网


VLSM技术是一种划分子网的方法。划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。

为什么进行子网划分?

  •     减少网络流量。无论什么样的流量,我们都希望它少些,网络流量亦如此。如果没有可信赖的路由器,网络流量可能导致整个网络停顿,但有了路由器后,大部分流量都将呆在本地网络内,只有前往其他网络的分组将穿越路由器。路由器增加广播域,广播域越多,每个广播轻松划分子网域就越小,而每个网段的网络流量也越少。
  •     优化网络性能,这是减少网络流量的结果。
  •     简化管理,与庞大的网络相比,在一系列相连的小网络中找出并隔离网络问题更容易。
  •     有助于覆盖大型地理区域,WAN链路比LAN链路的速度慢得多,且更昂贵;单个大跨度的大型网络在前面说的各个方面都可能出现问题,而将多个小网络连接起来可提高系统的效率。

 

划分子网步骤:
    (1)确定需求:确定需要划分的子网数目
    (2)确定每个子网中的主机数
    (3)根据上述需求,确定如下内容:
            一个用于整个网络的子网掩码;
            每个物理网段的唯一子网ID;
            每个子网的主机范围。

 

子网划分注意事项:

(1)划分子网时要充分考虑未来的扩展性要求。一旦子网中的IP地址用完,会迫使设计者重新划分整个网络,这样做费时费力
(2)划分子网编号时,可以根据需要为子网选择一个有意义的数字作为子网号,比如子网号对应公司部门编号
(3)地址分配后要便于路由聚合。这也是子网划分的基本原则
(4)由于IP地址资源的短缺,可以申请一个较小的地址段,将NAT技术与私有地址结合使用

 

子网划分实例:

例:给定一个C类网络地址192.168.0.0,掩码是255.255.255.0 。将他分配给一个拥有6个部门的机构,假设每个部门工作的主机数目不超过15个。

首先,我们将网络地址写成二进制形式:

11000000 10101000 00000000 00000000(划线部分为网络位)

分析题目要求,总共有6个机构,因此我们需要划分出六个子网。需要向主机位借出3位来标识子网号。

每个部门主机数目不超过15个,说明子网中的IP地址数目要大于15,考虑到子网的首尾两个地址不能用以及网络的扩展性,每个子网中需要32个地址。

11000000 10101000 00000000 00000000(红色部分为从主机位中借用的三位子网号)

因此划分出的六个子网为:

A部门:192.168.0.1/27~192.168.0.30/27

B部门:192.168.0.33/27~192.168.62/27

C部门:192.168.0.65/27~192.168.94/27

D部门:192.168.0.97/27~192.168.126/27

E部门:192.168.0.129/27~192.168.158/27

F部门:192.168.0.161~192.168.0.190/27

 

2.3无类别域间路由

1、概念
    CIDR是一种方便的分配连续地址范围的方式。类似于VLSM。他需要类似于子网掩码的掩码帮助识别IP地址,这个码叫作网络前缀,有时也称作CIDR掩码。

    消除一个IP地址中网络和主机号的预定义分隔,使更细粒度的IP地址分配范围成为可能。

    一个N位网络前缀是对一个地址的前N个位的预定义值。对于IPv4,N的值在0~32.他通常被追加到基本IP地址,并通过“/”符号与基本IP地址分开。例如:192.168.0.161/27,表示前27位为网络位。

    CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”

 

2、特点
    CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配IPv4 的地址空间。

    CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
 
    IP 地址从三级编址(使用子网掩码)又回到了两级编址

 

 

3、数据报格式

网络层协议基础(IP协议相关知识一)、IP分片

 

 

  1. :版本   占四位,指IP协议的版本
  2. 首部长度:告知IP首部的长度。可表示最大十进制数是15,单位是(4字节),即最大首部长度是60字节。IP首部长度永远是4字节整数倍,如果不满足,就用填充字节来满足。
  3. 区分服务:占8位,一般不用这8位。
  4. 总长度:指首部+数据部分长度。单位为字节。
  5. 标识:用来指明分片属于哪个报文。在分片时,这个字段会被复制到所有的分片中。
  6. 标志:占3位,但是只有2位有意义。               
             标志字段最低位:MF   MF=1标识后面“还有分片”的数据报;MF=0表示这是最后一个分片。              
             标志字段中间一位:DF   DF=0,表示可分片
  7. 片偏移:指明当前分片在原数据报中的位置。
  8. TTL:生存时间,占8位。是指数据报在网络中的寿命。就是限制数据报所经过路由器的跳数。每经过一个路由器,TTL就减一。当TTL减为0时,就丢弃这个数据报,并且返回一个超时重传的ICMP报文。
  9. 协议:上层协议类型。
  10. 首部检验和:只检验数据报的首部。若首部出现错误,则丢弃这个报文。
  11. 选项:用来支持排错、测量以及安全。一般情况下是没有的。

 

4、IP分片及重组

4.1 IP分片基本概念

       互联网协议使网络互相通信,设计要迎合不同物理性质的网络; 它是独立于链路层使用的基础传输技术。具有不同硬件的网络通常会发生变化,不仅在传输速度,而且在最大传输单元(MTU)。当IP数据报在不同的链路层进行传输时,所发送的数据报收到链路的MTU制约。从一端口所能转发的最大数据包大小就是MTU,因此当数据包从MTU大的链路转发向MTU小的链路时,原本较大的数据报需要进行分片,以满足传输条件。这一过程就叫IP分片.

        当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。

        尽管IP分片过程看起来是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报。因为IP层本身没有超时重传的机制——由更高层来负责超时和重传(T C P有超时和重传机制,但UDP没有。一些UDP应用程序本身也执行超时和重传)。当来自T C P报文段的某一片丢失后,T C P在超时后会重发整个T C P报文段,该报文段对应于一份IP数据报。没有办法只重传数据报中的一个数据报片

4.2 IP分片步骤

  1. 检查DF标志位,查明是否允许分片。如果设置了该位,则数据报将被丢弃,并将一个ICMP错误返回给源端(ICMP目的不可达-PTB code=4)。
  2. 基于MTU值,把数据字段分成两个部分或者多个部分。除了最后的数据部分外,所有新建数据选项的长度必须为8个字节的倍数。
  3. 每个数据部分被放入一个IP数据报。这些数据报的报文头略微修改了原来的报文头。
  4. 除了最后的数据报分片外,所有分片都设置了多个分片标志位。
  5. 每个分片中的片偏移量字段设为这个数据部分在原来数据报中所占的位置,这个位置相对于原来未分片数据报中的开头处。
  6. 如果在原来的数据报中包括了选项,则选项类型字节的高位字节决定了这个信息是被复制到所有分片数据报,还是只复制到第一个数据报。
  7. 设置新数据报的报文头字段及总长度字段。
  8. 重新计算报文头部校验和字段。

此时,这些分片数据报中的每个数据报如一个完整IP数据报一样被转发。IP独立地处理每个数据报分片。数据报分片能够通过不同的路由器到达目的。如果它们通过那些规定了更小的MTU网络,则还能够进一步对它们进行分片。
在目的主机上,数据被重新组合成原来的数据报。发送主机设置的标识符字段与数据报中的源IP地址和目的IP地址一起使用。分片过程不改变这个字段。

 网络层协议基础(IP协议相关知识一)、IP分片网络层协议基础(IP协议相关知识一)、IP分片

 

 4.3 IP分片攻击及防范

4.3.1 IP分片攻击

Tiny fragment 攻击


所谓Tiny fragment攻击是指通过恶意操作,发送极小的分片来绕过包过滤系统或者入侵检测系统的一种攻击手段。 

攻击者通过恶意操作,可将TCP报头(通常为20字节)分布在2个分片中,这样一来,目的端口号可以包含在第二个分片中。 

对于包过滤设备或者入侵检测系统来说,首先通过判断目的端口号来采取允许/禁止措施。但是由于通过恶意分片使目的端口号位于第二个分片中,因此包过滤设备通过判断第一个分片,决定后续的分片是否允许通过。但是这些分片在目标主机上进行重组之后将形成各种攻击。通过这种方法可以迂回一些入侵检测系统及一些安全过滤系统。目前一些智能的包过滤设备直接丢掉报头中未包含端口信息的分片。 

通过大家熟知的nmap工具也可以进行一定的Tiny fragment攻击。通过nmap的-f选项可以将TCP报头分在多个小碎片中。

 

fragment Overlap

是更为精巧的攻击。攻击者为了发动攻击将攻击IP包分为两个分片。第一个分片中包含包过滤设备允许的 http(TCP 80) 等端口。在第二个分片中通过极小的偏移量造成第二个分片覆盖第一个分片的一部分内容。通常攻击者覆盖包含端口内容的部分。

由于在第一个分片中包含防火墙中允许的端口,因此第一个分片将会被通过。而第二个分片中具有允许通过的第一个分片ID,因此也被允许通过。但是当这两个分片到达目标主机进行重组之后,由于第一个分片的端口号被第二个分片的端口号覆盖,因此将会访问第二个分片中指定的端口。也就是绕过防火墙访问了未被授权的端口。

 

DOS攻击:

目标计算机在处理分片报文时,会把先到的分片报文缓存起来,然后一直等待后续分片报文,这个过程会消耗一部分内存以及一些IP数据栈的数据结构。如果攻击者给目标计算机只发送一个分片报文,而不是所有,那目标计算机就会一直等待,直到内部计时器到时。或者攻击者发送大量分片报文,就能消耗目标计算机的资源,导致其不能响应正常的IP报文

 

Ping  of  death(死亡之ping)

ping o death是利用ICMP协议的一种碎片攻击。攻击者发送一个长度超过65535的Echo Request数据包,目标主机在重组分片的时候会造成事先分配的65535字节缓冲区溢出,系统通常会崩溃或挂起。

以前是规定ICMP数据包最大尺寸不能超过64KB,因此利用IP分片可以逃避这一规则。在接收端重组时,超过了64KB,接收方主机就会出现内存溢出错误,导致TCP/IP堆栈崩溃,主机死机。

(现在操作系统已经取消了发送ICMP数据包的大小的限制,解决了这个漏洞,同时win和Linux也对发送的数据包做出了限制,不能超过64KB)

 

jolt2

jolt2.c是在一个死循环中不停的发送一个ICMP/UDP的IP碎片,可以使Windows系统的机器死锁。

Teardrop

Teardrop攻击是一种畸形报文攻击。是基于UDP的病态分片数据包的攻击方法,其工作原理是向被攻击者发送多个分片的IP包(IP分片数据包中包括该分片数据包属于哪个数据包以及在数据包中的位置等信息),某些操作系统收到含有重叠偏移的伪造分片数据包时将会出现系统崩溃、重启等现象。

通过操作第二个分片的偏移量,使分片在重组的过程中缓存溢出,从而使目标系统宕掉或者重新启动。

反攻击方法:添加系统补丁程序,丢弃收到的病态分片数据包并对这种攻击进行审计。尽可能采用最新的操作系统,或者在防火墙上设置分段重组功能,由防火墙先接收到同一原包中的所有拆分数据包,然后完成重组工作,而不是直接转发。因为防火墙上可以设置当出现重叠字段时所采用的规则。

 

4.3.2 IP分片攻击防范

(1)在网络边界上禁止碎片包通过
(2)限制每秒通过碎片包的数目
(3)确保自身重组算法安全无漏洞