1.基本概念 不同的数据链层协议,帧的格式也不同,但大致都会有目标MAC地址、源MAC地址、长度/类型、数据(有效载荷:Payload)这几个字段。对最常见的以太网而言,采用的是数据链层协议是基于IEEE802.2/802.3,但与标准IEEE802.2/802.3略有区别。以太网帧中的数据(有效)字段的长度范围是46-1500个字节。这个1500就是以太网的MTU。不同链层协议,MTU值也不同,对以太网,MTU是1500字节,而对令牌环(TokenRing)网,MTU是4482字节。当链层的上层协议,比如IP协议所要传输的IP数据包(包括IPHeader)大小超过这个长度范围时,IP数据包就必须分成多片传输,这个过程就是分片(Fragmentating),其中分割出来的每一个片断就是一个Fragment。 2.IP包中于分片有关的字段 注意;我们接着往下提到的IP包中的字段都是IPv4中的,IPv6的包中没有关于分片的字段,因为IPv6中采用了不同的关于MTU的机制,这个回头在IPv6中提到。 IP数据包在封装时,在IP头的第8-9个字节(16bit)中,存放关于分片的信息.其中前3个bit表示分片的状态,后13个bit表示当前片断在分片之前的整块待封装的数据包中的偏移量(因为IP数据包的最大可能长度为16bit,而这13bit无法表示16bit的范围,故实际使用时,偏移量的计算是用这13bit的值乘8(3bit),以实现表示16bit的范围)。 IP头第8-9字节从左往右的第2bit表示当前IP数据包是(1)否(0)不分片,缺省值为0,就是不不分片,即允许分片.因为默认允许分片,所以我们平常使用Ping命令时,加参数-l65500(指定IP包大小)Ping一台机器也不会有问题。 IP头第8-9字节从左往右的第3bit表示当前数据包里的数据是否为某块数据的最后一个分片,若为0,则说明当前数据包内的数据没有分片或者是最后一个分片,若为1,则表示后面还有属于同一块数据的分片。 最后可以做个测试; 之前一直说以太网MTU是1500,那么我们在主机上运行这样一个命令: 这个是能ping通的。 ICMP比较特殊,一般情况下: 各分片具有分片数据长度,其中20字节IP包头不包含在该数据长度中。即,传输1500字节的数据时,实际数据长度为1480(1500-20)字节。 说正题了;fragment是指通过恶意操作,发送极小的分片来绕过包过滤系统或者入侵检测系统的一种手段。者通过恶意操作,可将TCP报头(通常为20字节)分布在2个分片中,这样一来,目的端口号可以包含在第二个分片中。 对于包过滤设备或者入侵检测系统来说,首先通过判断目的端口号来采取允许/措施。但是由于通过恶意分片使目的端口号位于第二个分片中,因此包过滤设备通过判断第一个分片,决定后续的分片是否允许通过。但是这些分片在目标主机上进行重组之后将形成各种。通过这种方法可以迂回一些入侵检测系统及一些安全过滤系统。 我们利用扩展ACL即可对IPFragment进行控制,命令如下: 加不加这个fragment是有很大区别的,下面这段借鉴了雪山飞鹄的学习笔记; (1)当一个ACL只含有三层信息时(不含端口号),对所有的包都进行控制。 (2)当不使用frament选项时,一个包含三层和四层信息的acl条目将对所有的数据包进行以下控制: 如果是分片数据包的后续分片(noninitialfragment),则只检查ACL条目中的三层部分(协议号、源、目的)。如果三层匹配而且是permit控制,则允许该分片通过;如果三层匹配而且是deny控制,则继续检查下一个ACL条目(和正常的ACL控制顺序不同)。 这里还是不好理解,说一下我的看法; ping 192.168.0.1早期的IOS中,ACL中deny只匹配丢份的未分片和初始(第一个)分片,而对后续分片不。其实这个现在的IOS中已经会都掉了。 而加上fragment的话,这句ACL就只会对后续分片进行控制了。 早期的IOS中我们一般会写两句ACL,一句不带Fragment,一句带。 片进行控制!我们可以在这样一种情况下使用;如果不分片的话我就让你通过,但是你分片了我就不让你过!从而防止fragment。 大致是这样吧,把带有四层信息的ACL和带Fragment的ACL结合在一起用效果会更好的! |
不良信息举报Q:2000617|Archiver|ROS软路由论坛 ROSABC.com 网络方案网络工程交流
GMT+8, 2025-11-8 23:20 , Processed in 0.030712 second(s), 15 queries .
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.