我们这篇文章来介绍一下IP协议。
IP协议也就是我们所说的网络层协议,它的主要目的就是将一个IP地址的数据发送到另外一个IP地址所代表的设备,这两个IP地址有可能是隶属于同一个网段,也有可能隶属于不同的网段。
我们来看一个比较简单的情况。当把一组数据发往IP地址为127.127.127.127的设备,这时候有两种情况。一种是我的设备也处于这个网段,这种情况比较简单,通过路由器、交换机甚至是一条网线直连就可以将数据发送到目的地。另一种情况是两个IP地址处于不同的网段,那就需要一个路由器乃至多个路由器的帮助才可以将数据发送到目的地。

我们首先来说一下IP的特性。IP最根本的特性就是要求更高的效率、更快的传输速度,因此它也会带来两个同样的问题——不可靠、无连接。在IP一味地追求效率的传输特性中,它也会带来几个其他的问题,第一,包可能会丢失,IP层无法确保你的包是否发送到了目的地;第二,IP包可能会重发,也就是有可能把相同的包发送两次;第三,IP包有可能以任意的顺序接收到,发送时候的顺序是ABC,但接收方收到的顺序有可能是CAB,也就是有可能并不是我们所期望的那种结果。

IP层的另一个特性是它可以将包分片或重组。我们都知道一个以太网最常用的长度是1524个字节,去掉头包和尾包就只剩下1500个字节,当IP层想发送超过1500个字节的数据时就会进行分片,分成A包和B包,接收方可以把A包和B包重组,得到完整的数据传给应用层。

下面介绍一下IP头包,IP头包可以认为是20字节的一个结构,头包中从左到右是由低位到高位的,最高位是32个bits。

Version代表的是IP版本号,现在应用最多仍然是IPv4,但由于IPv4带来的地址不够用的情况,现在也推出了IPv6,但我们今天要说的主要还是IPv4的问题。

如果没有选项的话,头包的长度应该是5*32个bits。

TOS占8个bits,它针对不同应用有可能有不同的位代表不同的特点,比如在网络视频这种对效率、传输速率要求比较高的应用中,它可能对最小时延会有比较高的选项,有时候我们考虑更多的是网络流量、网络安全性等可能会有其他的选项,这就是TOS提供的服务,这种情况下针对完全不同的服务是完全不同定义的。

整个IP包一共有16位,所以IP包的长度最长为216也就是65535个bytes,但是真正的IP包很少会发出65535个bytes这么大的数据。

Time to Live的初始化值一般是255,然后每经过一个路由器就会减1,当TTL=0的时候将包直接丢掉去避免无限的路由。

Protocol代表着下级由哪一个协议来进行处理,典型的就是TCP、UDP或者是ICMP等。

在IP层,对数据包进行校验的时候只校验头包,并不校验数据,当发现包出错的时候直接将包丢弃。

比较重要的选项有时间戳选项,另外是记录路由和源路由的一种方式。如果大家向把时间戳和记录路由显示出来,可以用ping的-r选项。

下面来说一下IP路由的问题。假设有一个设备,这个设备有两个甚至三个网卡,当从一个网卡接收到数据之后发现数据的目的地并不是自己,那它就会将数据通过另一个网卡进行转发,这个设备起到的作用就是路由器。当然事实上的路由器是一个非常复杂的功能,因为它的转发协议和转发算法非常复杂。
最后我们说一下IP包的分片和重组。最大传输单元针对不同的介质实际上是不一样的。光纤网络的MTU一般是4352个bytes,但对于以太网来讲是1500个bytes,因为以太网中它的帧长度是1524个bytes,但是要去掉头和尾所以就只有1500个bytes。在IP层实际上可以接收更大的IP包,也就是最大长度65535个bytes,发送方可以把每一个包分成不同的片,接收方也可以把包进行重组。同时IP的头包专门可以管理相关信息,确认这些不同的片是不是隶属于同一个包。

来电堂听课,找你要的设计秘笈!
感兴趣的朋友可以关注“AI电堂”公众号

也可以直接登陆电堂网站观看课程
电堂科技c.51diantang.com