• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

IP是什么?我们如何认识它?它被黑客掌握能控制什么?跟我了解!


Recommended Posts

IP的认识

无论如何,经过这些影视剧和各路媒体的熏陶,最普通的民众也知道以下这些常识==>

  1. IP就是一张身份证,存在于电脑、手机、监控摄像头、汽车等任何需要联网的设备上面;
  2. IP是可以被追踪到和定位的,无论是网上发帖造谣生事或通过黑客技术攻击别人,所做的事情都会基于IP和其他ID信息被服务器记录下来,然后“阿sir”就可以追踪并抓到你

IP协议原理

IP协议(Internet Protocol,互联网协议),是TCP/IP协议栈中最核心的协议之一,通过IP地址,保证了联网设备的唯一性,实现了网络通信的面向无连接和不可靠的传输功能。

https://z3.ax1x.com/2021/07/12/WFBnYQ.png

如上图所示,当多台接入互联网的电脑访问同一台服务器时,服务器如何区分不同电脑的请求,并准确的将资源返回?

众所周知,只要给每个设备加上”身份证”,并且在通信的时候,将”身份证”嵌入到数据包里面,则整个往返过程可以准确无误

https://z3.ax1x.com/2021/07/12/WFBs0K.png https://z3.ax1x.com/2021/07/12/WFBckD.png

以PC1访问服务器为例,PC1的地址是12.1.8.66,Server的地址是8.8.4.4,整个通信过程是这样的:

  1. PC1在请求数据包里面封装源目IP地址,并将带有IP地址的数据包发送到互联网;
  2. 互联网有大量的网络通信设备(例如路由器),路由器根据数据包的IP地址查找路由表(地图),然后以接力棒的方式逐跳转发直到目标服务器;
  3. 服务器收到请求数据后,将源目IP地址翻转,并封装回应数据包发送到互联网。

上述这个IP通信过程,跟我们日常快递收寄件的流程是几乎类似的:

  1. 寄快递的时候,需要先写快递单,快递单要求写入寄件方和收件方的姓名和联系信息(电话号码、地址),写完之后,再将快递单贴在包裹上面
  2. 物流公司(或快递员)根据包裹的寄件地址,通过物流平台(飞机、长途货车、卡车)将包裹在省市中传输,直到收件方的城市。
  3. 收快递的时候,快递员根据包裹收件地址,找到对应的街道或小区,然后通过电话联系并交付到我们手里。

在这里,快递单相当于IP地址、快递包裹相当于数据包,物流公司/快递员相当于路由器/交换机

[title-plane title=”小结”]

经过上面这个案例,我们需要更明确这些知识点:

  1. IP协议提供了IP地址,并将源目IP地址夹带在通信数据包里面,为路由器指明通信方向;
  2. IP协议只能指明数据包的源目通信方即”这是谁的送给谁的”,但不能保证数据包一定能到达对方,数据是否会被丢弃以及丢弃之后如何处理。所以,上面才有这句:”IP协议提供面向无连接不可靠传输功能“。那么,如果出现丢包且需要重传时,谁来解决呢?这就需要TCP/IP协议栈另外一个”半壁江山”来实现,大家肯定猜到了:TCP协议能解决以上这些IP协议不能实现的功能。

当然,IP协议不仅仅只有”快递单”功能,它还能防止数据包环路、为数据打上重要或不重要等标签实现流量控制、能验证数据包是否损坏、能实现数据包分片和组装功能;而要深入学习这些功能,必须掌握IP头部的封装格式。

[/title-plane]

IP协议结构

  • 在TCP/IP协议中,使用IP协议传输数据的包被称为IP数据包,毎个数据包都包含IP协议规定的内容。
  • IP协议规定的这些内容被称为IP数据报文( IP Datagram)或者IP数据报。
  • IP数据报文由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有I数据报必须具有的。
  • 在首部的固定部分的后面是一些可选字段,其长度是可变的。

https://z3.ax1x.com/2021/07/12/WFyk9g.png

字段的说明:

  1. 版本:占4位,表示IP协议的版本,通信双方使用的IP协议版本必须一致,目前广泛使用的IP协议版本号为4,即IPV4。
  2. 首部长度:占4位,指出数据报首部长度
  3. 区分服务:占8位,在区分服务时这个字段才会起作用,实际上没有用过
  4. 总长度:占16位首部和数据之和,单位为字节。总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节,但是受数据链路层协议的影响总长度不能超过最大传送单位MTU为1500字节
  5. 标识:占16位,用来标识数据报每产生—个数据报,其值就加1。当数据报的长度超过网络的MTU,必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。具有相同的标识字段值的分片报文会被重组成原来的数据报
  6. 标志:占3位,目前只有后两位有意义。表示该IP数据报是否允许分片和是否是最后的一片。最低一位记为MF,如果MF=1,表示后面还有分段;如果MF=0表示这已经是某个数据报的最后一个分段。中间一位记为DF,当DF=1时,表示不允许分段,DF=0表示允许分段
  7. 片偏移:占13位,标记该分片在原报文中的相对位置。以8个字节为偏移单位,除了最后一个分片,其他分片的偏移值都是8字节的整数倍。
  8. 生存时间(TTL):占8位,表示数据报在网络中的寿命。每经过一个路由器,则TTL减1,当TTL值为0时,就丢弃这个数据报。设置TTL是为了防止数据报在网络中无限制地循环转发
  9. 协议:占8位,标识此IP数据报在传输层所采用的协议类型。区分IP协议的上层协议。ICMP为1、TCP为6、UDP为17。
  10. 首部校验和:占16位,检验IP数据报的报头部分,保证首部数据的完整性。数据报毎经过一个路由器,路由器都要重新计算一下报头检验和,不检验数据部分可减少计算的工作量。
  11. 源地址:占32位,表示数据报的源IP地址。数据报发送者的IP地址。
  12. 目的地址:占32位,表示数据报的目的IP地址。数据报接收者的IP地址,用于校验发送是否正确
  13. 选项:可变长的可选信息,最多包含40字节。支持各种选项,提供扩展余地,用来支持排错、测量以及安全措施。

IP数据报头部解读

https://z3.ax1x.com/2021/07/12/WFggbR.png

【IP协议字段解读】

Version(版本号):标识IP协议的版本,目前V4版本地址已经枯竭,V6慢慢成为主流。

Header Length(头部长度):默认为20字节,最大为60字节。

Differentiated Services Field (服务区分符):用于为不同的IP数据包定义不同的服务质量,一般应用在QoS技术中。

Total Length (总长度):标识IP头部加上上层数据的数据包大小,IP包总长度最大为65535个字节。

Identification (标识符):用来实现IP分片的重组,标识分片属于哪个进程,不同进程通过不同ID区分。

Flags(标志符):用来确认是否还有IP分片或是否能执行分片。

Fragment offset (分片偏移量):用于标识IP分片的位置,实现IP分片的重组。

Time to live (生存时间):标识IP数据包还能生存多久,根据操作系统不同,TTL默认值不同,每经过一个三层设备如路由器的处理,则TTL减去1,当TTL=0时,则此数据包被丢弃。

Protocol (协议号):标识IP协议上层应用。当上层协议为ICMP时,协议号为1,TCP协议号为6,UDP的协议号为17。

Header checksum (头部校验):用于检验IP数据包是否完整或被修改,若校验失败则丢弃数据包。

Source(源IP地址):标识发送者IP地址,占用32bit。

Destination (目的IP地址):标识接收者IP地址,占用32bit。

[title-plane title=”小结”]

我们可以看到IP头部默认有12个字段,为了方便记忆,可以总结为7个核心知识点:

a.Source和Destination即IP源目地址字段,是IP协议最核心的字段;

b.Id+Flags+FO三个字段可以实现IP数据分片和重组;

c.Total Length和Header Length标记IP头部和上层数据的边界;

d.TTL生存时间字段可以实现通信防环;

e.DSCP服务区分符可以实现流量控制;

f.Checksum字段可以数据包完整性校验;

g.Protocol字段标记上层应用;

[/title-plane]

字段详细讲解

【length长度字段解读】

https://z3.ax1x.com/2021/07/12/WFRF6e.png

长度字段在大部分协议里面都会出现,例如IP、TCP、UDP协议,功能都是为了”划分界限”:哪里是头部,哪里是数据。

如上图所示,通过Header Length我们知道IP协议的头部是20字节(默认是20字节,最长可以是60个字节),Total Length这里标明是100个字节,所以剩下的数据部分则是80字节。

划清了头部和数据的界限之后,又有什么用呢?

当收到数据包之后,无论是电脑/手机还是其他联网设备,网卡模块会对数据包进行拆分、修改IP头部信息、重新进行数据封装等操作,如果没有”这条线”,那就可能会”越界”,一旦”越界”,则数据包内容可能损坏

https://z3.ax1x.com/2021/07/12/WFRTHA.png

当没有长度字段或长度字段标识错误时,网卡在进行拆分的时候,错误的把数据部分划分到头部里面,这样的话,右边的数据部分就不完整,接收方最终收到的就是一个损坏的数据包。

好比大家用浏览器下载一个word文档,如果这个文档本来有80字节大小,现在word只能打开后面的60字节,那肯定是无法打开的。

【片偏移字段解读】

[start-plane type=”1″]例:一数据报的总长度为3820字节,其数据部分为3800字节长(使用固定首部),需要分片为长度不超过1420字节的数据报片。[/start-plane]

固定首部长度为20字节,因此每数据报片的数据部分长度不能超过1400字节。于是分为3个数据报片,其数据部分的长分别为1400,1400和1000字节。原始数据报首部被复制为各数据报片的首部,但必须修有关字段的值。图414给出分片后得出的结果(请注意片偏移的数值)。

https://z3.ax1x.com/2021/07/12/WF4kCt.png[title-plane title=”分析”]

首先明确 偏移量以8个字节为偏移单位。

字节0~1399是第一个1400字节,该片首字节是字节00/8=0,故偏移量为0;

字节1400~2799是第二个1400字节,该片首字节是字节1400,1400/8=175,故偏移量为175;

字节2800~3799是最后的1000字节,该片首字节是字节2800,2800/8=350,故偏移量为350;

[/title-plane]

 

【TTL生存时间字段解读】

https://z3.ax1x.com/2021/07/12/WFWnb9.png https://z3.ax1x.com/2021/07/12/WFWGvD.png

TTL(Time to live)即生存时间,用于标识IP数据包“还能存活多久”,这个生存值在发送方发送数据时便设置好了。不同电脑/操作系统的初始TTL是不同的,例如上图,便是我的Mac电脑发出的,默认值是64,其他一些系统是128或255。由于TTL值占用8个bit位,所以最大值是255(二进制11111111)。

IP数据包每经过一个路由器或三层设备,TTL便会被减去1,而当TTL=0的时候,则代表此数据包”死亡”,此时路由器便会向源发送者返回一个”TTL Exceed”的ICMP报错包

上图中,如果我的电脑到目标服务器超过了64跳,则这个数据包会中途被丢弃,无法到达目标地。

【Checksum字段解读】

https://z3.ax1x.com/2021/07/12/WFf4wd.png

 

checksum校验字段跟长度字段类似,存在于很多协议里面,用于实现数据完整性校验。

不同协议采用的方法有差异,例如IP协议的checksum值只校验IP头部,不包括数据部分,而TCP和UDP的校验则包括数据部分。

上图中,PC1发送IP数据包(含checksum1)给PC2,PC2拆开IP头部,然后进行校验计算(checksum2),若校验没问题则接收并处理,若检验有问题则丢弃。注意,这里采用的是校验算法,不是简单的相同对比。

【Protocol字段解读】

https://z3.ax1x.com/2021/07/12/WFhnt1.png

 

无论是IT协议的Protocol字段,还是Ethernet以太网协议里面的Type字段,又或者是TCP/UDP协议里面的Port字段,这些字段的功能都是用于标识上层协议或应用。例如,ICMP协议号为1,TCP协议号为6,UDP的协议号为17

对于很多初学者来而,虽然知道了哪些协议号对应哪些上层应用,毕竟只要背熟了就好,但是我们还需要更深入的思考?例如,在IP协议里面加入协议号标识传输层协议,意义何在?’

https://z3.ax1x.com/2021/07/12/WFhufx.png

 

通过上面这张图我们可以看到,若PC1 PING PC2,则此时会采用ICMP协议,而ICMP协议对应的协议号是1。当PC2收到这个数据包时,拆开IP头部,则会看到协议号,根据协议号调用对应的上层协议或应用来进行上层数据处理。

以这里例子来看,若PC2采用TCP或UDP来解开ICMP数据包,则无法正常解析,好比用word程序要打开一部mp4电影,肯定会有故障。而如果这里PC2根据协议号为1,调用ICMP协议来处理ICMP数据包,则可以正常解读并返回回应包。

所以,协议号(Protocol)、端口号(Port)、类型值(Type)这些的功能都是:标记上层协议/应用,告诉接收方,有正确的协议/应用来打开这个数据,功能相当于电脑文件的后缀名,告诉电脑用哪些应用程序来打开对应的文件。

参考博文:

https://zhuanlan.zhihu.com/p/29287795

Link to comment
Share on other sites