5000字“肝”了这篇IP协议
点击此处查看最新的网赚项目教程
IP地址32位全部为0,即“0.0.0.0”,表示本网络上的本主机。这个地址用某个主机启动时需要通信,但暂时不知道自己的IP地址,此时主机为了获得一个有效IP地址,将发送一个数据包给有限广播地址,并用全0地址来标识自己。接收方知道发送方还没有IP地址,就会采用一种特殊的方式来发送回答,此地址不应该作为目的地址使用。该地址本质上是个A类地址。
以上6中特殊的IP地址不能分配给任何主机,下面的专用地址却可以被分配给多个主机,当然,这些主机之间互不关联,他们处于不同的局域网内。
地址类别
地址范围
网络号个数
A类
10.0.0.0~10.255.255.255
B类
172.16.0.0~172.31.255.255
16
C类
192.168.0.0~192.168.255.255
256
1.5、子网掩码
标准IP地址使用网络号和主机码两层地址结构,这样当大量的个人用户和小型局域网用户接入互联网时,即使为其分配一个C类网络也会造成IP地址的大量浪费,况且,随着目前Internet用户数量的剧烈增长,IP地址的分配变得格外紧张,为每个物理网络分配一个网络号的做法变得很不现实。
因此,现在流行一种扩展的分组编址方案来节省网络号的使用,这种方法称为子网编址,子网掩码将网络进一步划分为若干子网,以避免主机过多而拥堵或过少而IP浪费。子网掩码和IP地址做“与”运算,分离出IP地址中的网络地址和主机地址,用于判断该IP地址是在本地网络上,还是在远程网络网上。目前互联网内的主机基本都已支持子网编址。
子网掩码的组成
同IP地址一样,子网掩码是由长度为32位二进制数组成的一个地址,子网掩码32位与IP地址32位相对应,IP地址如果某位是网络地址,则子网掩码为1,否则为0。
注意:
左边连续的1的个数代表网络号的长度,右边连续的0的个数代表主机号的长度。
子网掩码的表示方法
1、点分十进制表示法。
二进制转换十进制,每8位用点号隔开。
例如:子网掩码二进制11111111.11111111.11111111.00000000,表示为255.255.255.0。
2、CIDR斜线记法。
IP地址/n。
例1:192.168.1.100/24,其子网掩码表示为255.255.255.0,二进制表示为11111111.11111111.11111111.00000000。
子网掩码和IP地址的关系
根据IP地址和子网掩码,计算网络地址:
①、将IP地址与子网掩码转换成二进制数。
②、将二进制形式的IP 地址与子网掩码做“与”运算。
③、将得出的结果转化为十进制,便得到网络地址。
举个栗子:
IP地址:192.168.10.215
子网掩码:255.255.255.0
子网划分
注意,这部分有点绕,不用仔细研究,有工具帮助我们计算,我们知道原理,可以熟练使用工具即可。
以C类子网划分为例
将192.168.0.0255.255.255.0 这个网络等分成4个子网。
分析:要想分成4个子网,需要将子网掩码往右移动两位,这样第1位和第2位就变为网络位,就可以分成4个子网。
因为二进制数0和1按两位排列组合,只有这4种,分别为:00,01,10,11,如下图所示。
00是A子网
01是B子网
10是C子网
11是D子网
借用主机2位,所以子网掩码+2位,由原来的255.255.255.0(/24)变为255.255.255.192(/26)。
结论:C类网络等分成4个子网,子网掩码往右移动2位,就能等分成4个子网,即2^2。
子网划分结果
最终结果:
A子网的网络地址:192.168.0.0/26,可用地址(192.168.0.1~192.168.0.62),广播地址:192.168.0.63/26。
B子网的网络地址:192.168.0.64/26,可用地址(192.168.65~192.168.0.126),广播地址:192.168.0.127。
C子网的网络地址:192.168.0.128/26,可用地址(192.168.129~192.168.0.190),广播地址:192.168.0.191。
D子网的网络地址:192.168.0.192/26,可用地址(192.168.193/26~192.168.0.254),广播地址:192.168.0.255。
这部分只是需要好好理解,日常并不需要我们手动计算这些,了解原理即可,有工具可以帮我们计算。
(提示:公众号不支持外链接,请复制链接到浏览器下载)
和上面计算是一样的。
02
IP数据包组成
由上面可知IP协议类型是0800
IP数据包组成结构如下图,
(1)版本:占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,本文不讲解。
(2)首部长度:占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),首部长度包括选项字节,因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。由于以太网MTU是1500,常用IP头20字节,所以IP数据最大1480字节。
(3)区分服务:占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。该字段主要用于描述当前IP数据报急需的服务类型,如最小延时、最大吞吐量、最高可靠性、最小费用等。路由器在转发数据报时,可以根据这个字段的值来为数据报选择最合理的路由路径。
(4)总长度:总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。数据长度46~1500字节,至于最小为什么是46,在上一篇文章《》讲解了,以太网,则要求最少要有46字节。
(5)标识(identification)占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6)标志(flag):占3位,但目前只有2位有意义。
●标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个
●标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移:占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
注意:
标识、标志和片偏移在IP数据分片时使用,在后面IP分片会详细讲解。
(8)生存时间:占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。这个字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64,Tracerouter这个工具就是用这个原理工作的,tranceroute的-m选项要求最大值是255,也就是因为这个TTL在IP协议里面只有8bit。
(9)协议:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
(10)首部检验和:占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
(11)源IP地址:占32位,即IP地址。
(12)目的IP地址:占32位,即IP地址。
在wireshark软件解析IP数据结构如下:
03
IP分片解析
分片指的是需要传送的数据大于最大传输单元(MTU)的时候,就需要分成多个包,然后一个个发送给对方。我们在重温下图。
上图告诉我们以太网IP数据一帧最大承载1500字节。
所以我们需要IP分片,上文说到,IP头信息的标识,标志,片偏移会在IP分片时详细讲解。
标识(Identification):确认这几个分片包是否来源于同一个数据包
标志(Flag):1bit保留,2bit意思是“不能分片”。只有当DF=0时才允许分片。3bit意思是MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个
片偏移(FragmentOffset):数据包分片地址偏移
例子:
对IP协议还不熟悉的话,第一次看到上图,会疑惑第一包的长度是1500,第二包的偏移却是1480?因为IP协议一般情况下会有20个字节的头数据,疑惑的同学可以向上翻,上文有解释。
IP在从上层接到数据以后,要根据IP地址来判断从那个接口发送数据(通过选路),并进行MTU的查询,如果数据大小超过MTU就进行数据分片。数据的分片是对上层和下层透明,而数据也只是到达目的地还会被重新组装,不过不用担心,IP层提供了足够的信息进行数据的再组装。
在IP头里面,16bit识别号唯一记录了一个IP包的ID,具有同一个ID的IP片将会被重新组装;而13位片偏移则记录了某IP片相对整个包的位置;而这两个表示中间的3bit标志则标示着该分片后面是否还有新的分片。这三个标示就组成了IP分片的所有信息,接受方就可以利用这些信息对IP数据进行重新组织(就算是后面的分片比前面的分片先到,这些信息也是足够了)。
对于上面的例子我们可以使用wieshark软件抓包看一下,使用下列命令:
ping -n 1 192.168.0.102 -l 4000
-n 1表示只ping1次
-l 4000表示发送4000个字节
三个数据包分析:
可以看到,但数据提交到网络层的时候,由于数据超过了最大传输单元,就分片了,上述图片验证了DF和MF的功能,并且验证了IP分片的数据包标识(Identification)是一致的。每个数据包最大的字节为MTU- IP头= 1500 – 20 = 1480。
这里把wireshark的抓包文件分享出来,大家可以自行分析下,
链接:提取码:tm9i
(提示:公众号不支持外链接,请复制链接到浏览器下载)
04
IP分片攻击
黑客构造的分片报文,但是不向接收方发送最后一个分片报文,导致接收方要为所有的分片报文分配内存空间,可由于最后一个分片报文永远不会达到,接收方的内存得不到及时的释放(接收方会启动一个分片重组的定时器,在一定时间内如果无法完成重组,将向发送方发送ICMP重组超时差错报文,,只要这种攻击的分片报文发送的足够多、足够快,很容易占满接收方内存,让接收方无内存资源处理正常的业务,从而达到DOS的攻击效果。
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: qs62318888
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网