TCP/IP之IP协议简略介绍

        本篇文章主要针对入门新手,尽量能用简略的语言复述,避免用过于官方话术,因为对于萌新来说,那些太官方的话语不容易看懂,所有本人尽力用口语化叙述,只要理解了其中的内涵意思,再看官方话术就比较容易的多。主要讲述IP协议的主要功能。本文章仅仅是IPv4的内容,IPv6有不同之处。

       IP协议是TCP/IP协议族中的核心协议,所有TCP、UDP、ICMP等数据都通过IP数据报传输。IP是一种不可靠、无连接的协议。   

       不可靠的含义是不保证IP数据报一定能成功达到目的地,例如:一台路由器的缓冲区满了,IP只能丢弃后面到达的数据。任何可靠的协议都是由上层(如TCP)提供。    

        无连接就是不建立客户端和服务端的链接状态信息,不像打电话一样,需要双方接听才可以。因为是无连接,所以这意味着IP数据报可能不按顺序交付,例如:发送端先发A数据报,后发B数据报,由于数据报不一定走了相同的路线,有可能A绕了远路阻碍重重,而B几乎畅通无阻,这就会导致B先到达接收端,A后到。这也是无连接的一个弊端。

1、咱先来看看IP的头部:

(1)、version(版本):有两个版本一个是IPv4,一个是IPv6,现在主流的还是IPv4,IPv6的出现最主要的原因是怕IPv4地址供给会不足。

(2)、head length(首部长度):表明IP首部的大小,这个是没有可选项,也就是必须是5,首部长度一定是20字节。

(3)、TOS(服务类型):最小时延、最大吞吐量、最高可靠性和最小费用等功能。

(4)、total length(总长度):表示首部与数据部分结合起来的总字节数。因为该字段长位16位,所以IP数据包的最大长度为     2的16次方 = 65535(字节)。

(5)、identification (ID、标识):用于分片重组,为了避免将一个数据报分片和其他数据报分片混淆。通常,每发送一个IP数据包,它的值也逐渐递增。注意:即使ID相同,目的地址、源地址或协议不同的话,也会被认为是不同分片。

(6)、flags(标志):表示包被分片的信息。例如:可以表示该分片是否为最后一个分片。

(7)、offset(片偏移):用来标识被分片的每一个分段相对于原始数据的位置。

(8)、TTL(生存时间):相当于生命周期,每经过一个路由器或其他设备,TTL将减一,减为零则丢弃该包,最大值为255。

(9)、protocol(协议):表示IP首部的下一个首部隶属于哪个协议,包含了一个数字,就是说IP协议载荷的协议是什么。最常见的值为17(UDP)和6(TCP)。

(10)、header checksum(首部校验和):起校验作用,它能检验发送的数据包和接收的数据包是否一致。

2、IP分片:

(1)、如果数据报的大小超过下一跳(路由的下一个点)MTU(最大传输单元),任何主机或路由器可将该数据报分片,不仅是中间设备会分片,源端主机也会进行分片(如TCP)。

(2)、在分片时,除了最后一片分片,其他分片中的数据部分(除IP首部外的其余部分)必须是8字节的整数倍。只有第一片有传输层头部,其余分片都没有。

(3)、重新组装是由目的端的IP层来完成的,其目的是使分片和重新组装过程对传输层是透明的(传输层是不知道有这回事的)。已经分片过的数据报有可能会再次进行分片。

注意:尽量避免出现分片,因为即使丢失了一片分片也要重传整个数据报,不仅耗时间,还耗性能。如果数据报分片的是中间路由器,而不是起始端系统,那么起始端系统就无法知道数据报是如何被分片的。就这个原因,尽量避免分片。

       

(4)、如下图flags分为三部分,CU位当前没使用。DF位(Don't fragment)表示不分片,设置为1时,如果IP数据报的大小大于中间设备的MTU值,那么该设备不将其IP数据报分片,而是丢弃IP数据报,并发送一个ICMP差错报文。MF位(More fragments)更多的分片,含义是除了最后一个分片外,其余的分片都必须置为1,这样可以告诉接收端是否后面还有分片。

(5)、分片除了最后一片,其余的分片减去IP头部字节,其他数据必须是8的倍数,最小值不得小于46字节,最大值不得大于1500字节,如果不足46字节必须补足46字节。如下图是一个分片过程。

3、IP转发:

(1)、如果目的地是直接相连的主机(如点到点链接)或共享网络(如以太网),IP数据报直接发送到目的地,不需要路由器等设备。否则,主机将数据报发送到一台路由器(称为默认路由器),由该路由器将数据报交付到目的地。

(2)、IP层包括一些位于内存的信息,通常称为路由表或转发表,每次转发一个数据报时需要从中查找信息。当一个网络接口接收到一个数据报时,IP模块首先检查目的地址是否为自己的IP地址(或与自己的某个网络接口相关的IP地址),或是它可以接收其流量的一些其他地址,例如IP广播或组播地址。如果是的话便可以直接交付,否则(1)如果配置是一台路由器,则转发该数据报;(2)数据报被默默地丢弃。

(3)、转发表:

目的地:是一个32位字段,可以设置为零,也可以设置为IP地址,用于与一个掩码操作结果相匹配。

掩码:是一个32位字段,用作数据报目的IP地址按位与操作的掩码,其中的目的IP地址是要则转发表中查找的地址。

下一跳:它是下一个IP实体(路由器或主机)的32位字段,数据报将被转发到该地址。

接口:接口包含一个由IP层使用的标识符,以确定将数据报发送到下一跳的网络接口。

当一台主机或路由器中的IP层需要向下一跳的路由器或者主机发送一个数据报时,需要先检查数据报中的目的IP地址。如果转发表中没有相对应的,则这个数据报无法交付,丢弃该数据报,并向生成该数据报的应用程序返回一个ICMP'主机不可达'错误包。否则便转发给接近目的地的路由器。

4、与IP相关的攻击:

前些年已经有针对IP协议的攻击,主要是基于选项操作,或利用专用代码中的错误(例如分片重组)。

1、由于一个或多个IP头部字段无效(例如错误的头部长度或版本号),这样的攻击可以使一台路由器崩溃或性能下降。

2、如果没有身份认证或者加密,IP欺骗是有可能发生的。比如对源IP地址的伪造。在某些情况下,远程攻击者的计算机可能看起来像本地网络中的一台主机在请求服务。

由于计算机和路由器的不断升级,几乎很多类似的攻击已经没效果了,仅供参考、了解。

总结:本章主要介绍了IP协议、IP分片和IP转发。IP协议的头部信息,相对于其他协议,IP协议头部信息算是比较多,其功能也是复杂多样。IP分片主要是针对过大的数据,经过中间设备或在发送端将其切割成一小块数据报。IP转发介绍的是数据报在路由器或主机转发到下一跳实体(路由器或主机),中间需要核对转发表。              IP协议内容虽然不是很多,但却是十分重要,也是核心协议,需要多多研读。

如果有什么讲解得不好的地方,或者想问的问题都可以在下方评论区评论哟!

发布了31 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/q759451733/article/details/84189116