一、IP协议
(资料图)
1. 简介
相比之前讲的ARP协议,IP协议无论对于普通用户还是对于工程师而言,大家都要熟悉得多。
无论如何,经过这些影视剧和各路媒体的熏陶,最普通的民众也知道以下这些常识=>
①IP就是一张身份证,存在于电脑、手机、监控摄像头、汽车等任何需要联网的设备上面;
②IP是可以被追踪到和定位的,无论是网上发帖造谣生事或通过黑客技术攻击别人,所做的事情都会基于IP和其他ID信息被服务器记录下来,然后"阿sir"就可以追踪并抓到你。
当然,作为工程师,我们不仅仅要懂常识,更需要掌握这些专业的内容=>
IP协议的原理是什么?
IP协议和IP地址到底是什么关系?
IP协议有什么字段?
2.原理
IP协议(Internet Protocol,互联网协议),是TCP/IP协议栈中最核心的协议之一,通过IP地址,保证了联网设备的唯一性,实现了网络通信的面向无连接和不可靠的传输功能。
当多台接入互联网的电脑访问同一台服务器时,服务器如何区分不同电脑的请求,并准确的将资源返回?
众所周知,只要给每个设备加上"身份证",并且在通信的时候,将"身份证"嵌入到数据包里面,则整个往返过程可以准确无误。
以PC1访问服务器为例,PC1的地址是12.1.8.66,Server的地址是8.8.4.4,整个通信过程是这样的:
①PC1在请求数据包里面封装源目IP地址,并将带有IP地址的数据包发送到互联网;
②互联网有大量的网络通信设备(例如路由器),路由器根据数据包的IP地址查找路由表(地图),然后以接力棒的方式逐跳转发直到目标服务器;
③服务器收到请求数据后,将源目IP地址翻转,并封装回应数据包发送到互联网。
上述这个IP通信过程,跟我们日常快递收寄件的流程是几乎类似的:
①寄快递的时候,需要先写快递单,快递单要求写入寄件方和收件方的姓名和联系信息(电话号码、地址),写完之后,再将快递单贴在包裹上面。
②物流公司(或快递员)根据包裹的寄件地址,通过物流平台(飞机、长途货车、卡车)将包裹在省市中传输,直到收件方的城市。
③收快递的时候,快递员根据包裹收件地址,找到对应的街道或小区,然后通过电话联系并交付到我们手里。
在这里,快递单相当于IP地址、快递包裹相当于数据包,物流公司/快递员相当于路由器/交换机。
小结:经过上面这个案例,我们需要更明确这些知识点:
①IP协议提供了IP地址,并将源目IP地址夹带在通信数据包里面,为路由器指明通信方向;
②IP协议只能指明数据包的源目通信方即"这是谁的送给谁的",但不能保证数据包一定能到达对方,数据是否会被丢弃以及丢弃之后如何处理。所以,上面才有这句:"IP协议提供面向无连接不可靠传输功能"。那么,如果出现丢包且需要重传时,谁来解决呢?这就需要TCP/IP协议栈另外一个"半壁江山"来实现,大家肯定猜到了:TCP协议能解决以上这些IP协议不能实现的功能。
当然,IP协议不仅仅只有"快递单"功能,它还能防止数据包环路、为数据打上重要或不重要等标签实现流量控制、能验证数据包是否损坏、能实现数据包分片和组装功能;而要深入学习这些功能,必须掌握IP头部的封装格式。
3.IP协议头部
解析:
字段解释
4位版本号(version)指定IP协议的版本, 对于IPv4来说,就是4
4位头部长度(header length)IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节
8位服务类型(Type Of Service)3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置0). 4位TOS(最小延时, 最大吞吐量, 最高可靠性, 最小成本),只能选其一. ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要
16位总长度(total lengthIP数据报整体占多少个字节
16位标识(id)唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id是相同的
3位标志字段第一位保留,第二位置为1表示禁止分片, 这时候如果报文长度超MTU, IP模块就会丢弃报文. 第三位表示”更多分片”, 如果分片了的话, 最后一个分片置为1, 其他是0
13位分片偏移(framegament offset)是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置
8位生存时间(Time To Live, TTL)数据报到达目的地的最大报文跳数
8位协议表示上层协议的类型
16位头部校验和使用CRC进行校验, 来鉴别头部是否损坏
32位源地址和32位目标地址表示发送端和接收端
选项字段不定长, 最多40字节
4.IP地址划分类
所有IP 地址可以分为五类,如下:
分类地址范围
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到247.255.255.255
但是随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了,而A类却浪费了大量地址。
针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing)
4.1子网划分
我们都知道,IP地址是以网络号和主机号标识网络上的主机的,只有在同一网络号下的主机才可以“直接”互通,不同网络号的主机要通过网关互通。
为了使同一个网络下有多个子网,就产生了子网掩码。
了解一下这个新概念:
4.2子网掩码
区分网络号和主机号是一个32位的正整数. 通常用一串 “0” 来结尾将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号网络号和主机号的划分与这个IP地址是A类、B类还是C类无关
那么如何确定子网掩码呢?
将一个网络划分为多个子网,网络号就要占用原来的主机位。
例如:
C类地址,21位标识网络号,8位标识主机号,要将其划分为4个子网,则需占用2位原来的主机标识位。
此时,网络号由之前的21位变为23位,子网掩码为:255.255.255.224
4.3特殊的IP地址
将IP地址中的主机地址全部设为0, 就是网络号, 代表这个局域网将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
那么IP地址的数量没有限制吗?
我们知道,IP(IPV4)地址是一个四字节32位的正整数,那么一共只有2的32次方个IP地址,大概是43亿左右,而 TCP/IP协议规定, 每个主机都需要有一个IP地址,
那也就是说网络中最多只可以接入43亿主机吗?
实际上,由于一些特殊的IP地址的存在,数量就不足43亿了。另外,IP地址并非是按照主机台数配置的,而是每个网卡都需要配置一个或多个IP地址。
上文讲的子网划分,在一定程度上缓解了IP地址不够用的问题,提高了利用率,减少了浪费,但IP地址的绝对上限并没有增加,仍然不够用,会有三种方式来解决IP地址不够用的问题:
动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中得到的IP地址不一定是相同的NAT技术IPv6: IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及。
注意:IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议
4.4私有IP地址和公网IP地址
4.4.1私有IP地址
如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,对与组建局域网的私有IP地址有如下规则:
(1)10.,前8位是网络号,共16,777,216个地址
(2)172.16. 到 172.31.,前12位是网络号,共1,048,576个地址
(3)192.168.,前16位是网络号,共65,536个地址
4.4.2.公网IP
如1中,包含在范围中的, 都成为私有IP, 其余的就称为全局IP(或公网IP)。
可以知道:
(1)一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
(2)路由器LAN口连接的主机,都从属于当前这个路由器的子网中.
(3)不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1)
(4)子网内的主机IP地址不能重复,但是子网之间的IP地址可以重复,所以,不同子网中的两个主机不可以进行访问。
(5)子网中的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换,替换成WAN口IP,逐级替换,最终数据包中的IP地址成为一个公网IP,这种技术被称为NAT(Network Address Translation,网络地址转换)。
5.IP路由
IP协议的一个核心任务是数据报的路由,即决定发送数据报到目标机器的路径。
发送数据包时所使用的地址是网络层的地址,即 IP 地址。然而仅仅有 IP 地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫做静态路由控制,而后者叫做动态路由控制。IP 协议始终认为路由表是正确的。然后,IP 本身并没有定义制作路由控制表的协议。即 IP 没有制作路由控制表的机制。该表示由一个叫做“路由协议”的协议制作而成。
5.1 IP 地址与路由控制
IP 地址的网络地址部分用于进行路由控制。路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。
路由控制表与 IP 包发送
6. IP 分包与组包
每种数据链路的***传输单元(MTU)都不尽相同,因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。任何一台主机都有必要对 IP 分片进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。
6.1 路径 MTU 发现
分片机制也有它的不足。如路由器的处理负荷加重之类。因此,只要允许,是不希望由路由器进行 IP 数据包的分片处理的。为了应对分片机制的不足,“路径 MTU 发现” 技术应运而生。路径 MTU 指的是,从发送端主机到接收端主机之间不需要分片是*** MTU 的大小。即路径中存在的所有数据链路中最小的 MTU 。进行路径 MTU 发现,就可以避免在中途的路由器上进行分片处理,也可以在 TCP 中发送更大的包。
7.深入剖析IPv4和IPv6
深入剖析IP协议,大部分时间就是深入剖析IP头部协议,随着现在的IPv6马上的普及,我们今天就来详细分析一下IPv4和IPv6的头部。
7.1 IPv4
版本号:占四位,就是IP协议的版本,通信双方的IP协议必须要达到一致,IPv4的版本就是4.首部长度:占四位,因为长度为四比特,所以首部长度的最大值为1111,15,又因为首部长度代表的单位长度为32个字(也就是4个字节),所以首部长度的最小值就是0101,当然,也确实如此,大部分的ip头部中首部字节都是0101.也就是5*4=20个字节,如果是最大值15的话,ip首部的最大值就是60个字节,所以记好了,ipv4首部长度的最大值就是60,当然当中我们又能发现,IPv4的首段长度一定是4字节的整数倍,要是不是怎么办呢?别急,后面的填充字段会自动填充补齐到4字节的整数倍的。区分服务:这个没有什么用处,也没有什么好讲的了,只要自动这玩意占八位,一个字节就可以了。总长度:占16位,这个的意思就是ip数据报中首部和数据的总和的长度,因为占16位,所以很好理解,总长度的最大值就是2的16次方减一,65535,这玩意也对应着还有一个很简单的概念,最大传输单元mtu,意味着一个IP数据报的最大长度就只能装下65535个字节,要是传输的长度超过这个怎么办,很简单,分片。
对于最大传输单元,我们可以调用netstat -in来进行查看:
对于分片我们放在片偏移里面进行详细分析。
.标识:占16位,标识这玩意很好理解,IP在存储器中维持一个计数器,每产生一个 数据报,计数器就加1,并将此值赋给标识字段。但这个标识并不是平常的序号,因为IP是 无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分 片时,这个标识字段的值就被复制到所有的数据报片的标识字段中,等到重组的时候,相同标识符的值的数据报就会被重新组装成一个数据报。标志:占三位,一般有用的是前两位,
最低位叫做MF,MF=1表示后面还有若干个数据报,MF=0表示这已经是最后一个数据报了。
中间位叫做DF,DF表示不能进行分片,DF=0才可以进行分片操作。
片偏移:占13位,片偏移就是,在原来的数据报分片以后,该片在原分组中的相对位置,片偏移中的基本单位是8字节,所以,也就是说,只要是分片,每个分片的长度都是8字节的整数倍,最后一个分片不够八字节的一样是填充。生存时间ttl:占8位,(time to live),表明数据报在网络中的寿命,这个值被设定成跳数,顾名思义,就是这个数据报可以经过多少个路由器的数量,每经过一个路由器,该值就减一,减到为零的时候就被抛弃,显而易见,这个跳数的最大值就是2的8次方减一,255.协议:就是用来指明数据报携带了哪种协议,占8位。首部效验和:占16位,这个字段用来效验数据报首段,下面给出简单的计算方法:
首先在发送端的时候,将效验和全部置为0,然后把数据报首段数据全部进行反码相加,得到的值为效验和,放入首段效验和里面,然后接收端将数据报首段数据和效验和一起全部反码相加,最后若是得到零,则保留,若是不为零,则说明数据报在传输的过程中发生了改变,则丢弃该数据报。
IP源地址:占32位,将IP地址看作是32位数值则需要将网络字节顺序转化位主机字节顺序。转化的方法是:将每4个字节首尾互换,将2、3字节互换。目的地址:也占32位,转换方法和来源IP地址一样。
到了可变部分IPv4的头部基本上就已经讲完了,增加头部的可变选项实际上就是增加了数据报的功能,可变选项在实际上是很少用到的。
在IP协议中,IP协议是面向非连接的,所谓的非连接就是在数据的传递过程中,不需要检测网络是否连通,所以是不可靠的数据报协议。IP协议主要用于在主机之间的寻址和选择数据包路由。
7.2 IPv6
与IPv4相比,IPv6的头部做了如下修改:
1.取消了首部长度,因为IPv6的首部长度是固定40个字节。2.取消了服务类型,因为流标号和优先级结合起来实现了服务类型的功能。3.取消了总长度字段,改用为有效载荷长度,有效载荷就是后面的扩展首部加上数据报中的数据。4.取消了标识,标志和片偏移,因为这些功能都包含在了扩展首部里面。5.取消了协议字段,改用为下一个首部,功能不变,这样更容易理解。6.取消了生存时间ttl,改用为跳数限制,功能不变,这样更容易理解,更形象了。7.取消了首部效验和,这样加快了路由器对数据报的处理速度,在数据链路层中,当我们发现有差错的帧就会抛弃,在运输层中,在udp中,当发现有差错就会抛弃,在tcp中,当发现有差错就会重传,直到传送到目的进程为止。因此在网路层的检测就可以精简掉。8,取消了选项字段,功能归并在了扩展首部上。
8.IP地址攻击
8.1 获取IP地址
工具查询法:
1. 这种方法是通过专业的IP地址查询工具,来快速搜查到对方计算机的IP地址。例如,借助一款名为WhereIsIP的搜查工具,你可以轻松根据对方好友的Web网站地址,搜查得到对方好友的IP地址,甚至还能搜查到对方好友所在的物理位置。在用WhereIsIP程序搜查对方IP地址时,首先启动该程序打开搜查界面,然后单击该界面的“Web site”按钮,在其后的窗口中输入对方好友的Web地址,再单击“next”按钮,这样该程序就能自动与Internet中的Domain Name Whois数据库联系,然后从该数据库中搜查到与该Web网站地址对应的IP地址了。当然,除了可以知道IP地址外,你还能知道对方好友所在的具体物理位置。http://www.pc0359.cn/article/jiaocheng/67719.html
2.maitube 生成链接发送对方。等待对方点击打开之后,百度搜索这个ip地址,可以获取位置
3.获取QQ/微信好友的IP地址 https://www.secpulse.com/archives/126081.html
8.2 IP地址攻击
8.2.1 ping 命令攻击
Ping -t -l 65550 ip( -t: 一直ping -l: 数据包大小) 死亡之ping, 发送大于64K的文件并一直ping就成为了死亡之ping
8.2.2 OOB攻击
这是利用NETBIOS中一个OOB (Out of Band)的漏洞而来进行的,它的原理是通过TCP/IP协议传递一个数据包到计算机某个开放的端口上(一般是137、138和139),当计算机收到这个数据包之后就会瞬间死机或者蓝屏现象,不重新启动计算机就无法继续使用TCP/IP协议来访问网络。
8.2.3 DoS攻击
这是针对Windows 9X所使用的ICMP协议进行的DOS(Denial of Service,拒绝服务)攻击,一般来说,这种攻击是利用对方计算机上所安装协议的漏洞来连续发送大量的数据包,造成对方计算机的死机。
8.2.4 WinNuke攻击
目前的WinNuke系列工具已经从最初的简单选择IP攻击某个端口发展到可以攻击一个IP区间范围的计算机,并且可以进行连续攻击,还能够验证攻击的效果,还可以对检测和选择端口,所以使用它可以造成某一个IP地址区间的计算机全部蓝屏死机。
8.2.5 SSPing
这是一个IP攻击工具,它的工作原理是向对方的计算机连续发出大型的ICMP数据包,被攻击的机器此时会试图将这些文件包合并处理,从而造成系统死机。
8.2.6 TearDrop攻击
这种攻击方式利用那些在TCP/IP堆栈实现中信任IP碎片中的包的标题头所包含的信息来实现自己的攻击,由于IP分段中含有指示该分段所包含的是原包哪一段的信息,所以一些操作系统下的TCP/IP协议在收到含有重叠偏移的伪造分段时将崩溃。TeadDrop最大的特点是除了能够对Windows 9X/NT进行攻击之外,连Linux也不能幸免。
8.3防范IP攻击
黑客想要进行攻击,必须经过两个端口,IP地址与端口。端口就是计算机与外界通信交流的出口。而IP地址则相当于网络主机的一个虚拟地址,黑客如果想要攻击某个网络主机,首先要确定该目标的域名或者IP地址,然后通过端口来攻击该主机。
对于大多数人来说,IP地址只是一个数字身份,他们最不关心其安全性。但实际上,用户的IP地址与其他信息一样容易被盗。若IP地址被攻击,不仅能够使黑客访问用户设备或帐户,甚至可能会造成更大的损害。
无论IP地址攻击背后的网络犯罪分子的意图是什么,这对用户来说总归是有害的和麻烦的。采取一些预防措施并保护自己免受IP地址攻击总是更好。
1. 更改隐私设置
用户设备上安装的大多数应用是黑客进行IP地址攻击的主要渠道,特别是一些即时消息应用程序允许黑客查看用户的连接详细信息。专家建议用户将所有应用的隐私设置保持为“私密”,并避免接收来自未知ID的呼叫。这将创建一个安全屏障,黑客将无法轻松访问用户的IP地址。
2. 选择动态IP地址
大多数游戏玩家和网站所有者选择静态IP地址而非动态IP地址。但实际上动态IP地址一直在不断变化,对黑客来说是一个不太容易攻击的目标。静态IP地址在一段时间内保持不变,这就让黑客有足够的时间对其进行解码。因此,最好选择动态IP地址以减少黑客攻击的可能性。
3. 使用虚拟专用网络(VPN)
虚拟专用网络(VPN)是与网络世界连接的最安全方式。它能够帮助伪装用户的原始身份和位置,并允许从远程服务器访问网络。这样黑客就无法访问用户的原始IP地址,VPN还为用户的所有在线活动提供加密隧道。无论使用私人连接访问互联网还是使用公共Wi-Fi,VPN都可确保用户完全在线安全。唯一的缺点是许多免费的VPN服务并不像我们想象的那样安全。
4. 保护和路由器
除了保护好用户设备的安全性,网络连接所用的路由器同样如此。因此,安全起见,必须在路由器上安装防火墙和防病毒软件,并保持最新状态。安全软件不仅可以保护IP地址免遭盗窃,还可以警告设备上的任何网络钓鱼和间谍活动。通过这种方式,用户可以随时了解任何可疑活动。
5. 使用强密码
大多数人都不会更改他们的互联网连接设备的默认密码,但实际上,默认密码是最容易被解码的。专家建议不定期更改设备密码。创建高强度且唯一的密码也是必不可少的,尽量不要选择家庭成员的姓名和纪念日期等作为密码。强密码包括字符、数字、大写和小写字母的组合,破解起来难度很高。