IP

IP( 络层)在我看来其实就是复用下层繁多的链路层协议,为上层传输层提供统一的接口,就是说, 络层对下层繁多的协议进行地址管理,每个设备不管它的物理层及其而对应的链路层使用的是什么协议,都对他们统一的使用IP地址进行唯一的标识,进行一跳一跳的传输。而向上,对传输层的协议进行分用(识别IP首部的协议字段),向上分用多个协论(TCP,UDP,ICMP,IGMP),保证不同的协议能被分到不同的协议软件中进行处理。传输层在此基础上就很简单的,他不用再考虑下面一跳一跳传输的细节,只需要考虑从源IP发送到目的IP就可以了,为此传输层的TCP协议进行了拥塞控制,超时重传和失序重排以保证端对端的可靠性。而 络层自身呢,就是下面的两个任务了:
1、路由选路:

路由表:

如图,现在我们用的都是ABC类地址,D类主要是用于多播,这个和IGMP和UDP相关,这里不多做阐述。而E类地址,我们平时是见不到的。

有上图可知,A类地址是从0.0.0.0到127.255.255.255

只要是 络 相同就认为是同一个 段。
还有几个特殊的IP地址:

以下是IP包头,它和以上功能的实现密切相关:

IP

版本 :长度4比特。用于标识目前使用的IP协议的版本 。一般有0100(IPV4)和0110(IPV6)。

目前我们使用的IP地址多为IPV4,IPV6主要是为了解决IPV4版本的IP资源枯竭问题而提出来的。

IP包头长度:长度4比特,这个字段的出现是因为IP包头的不定长(因为有可选项),如果没有可选项(如UDP),就不需要这个字段。其表示的单位是4字节,就是说当其数值为1111时,表示的是15×4=60字节。那么当字节数不足时,比如首部目前53字节,明显不是4的整数倍,此时我们在包头后面填充3个0字节则可(56是4的倍数)。

服务类型:占8个比特,根据数值不同对包的传送做不同优化,但大部分时候忽略。

总长度:首部和数据之和的长度,单位是字节。最大是2^16-1=65535字节。这是典型的数据 通信(UDP也是),往往是无连接的,所以需要边界,而像TCP或者管道这一类流式通信,就不需要这个字段,因为它们是流(有连接的),不需要边界。

标识:占16位,IP软件维持一个计数器,产生一个数据包就把计数值加1,并赋值给该字段。对于该字段而言,主要是为了在IP分片之后还能重新组成原来数据 。

那么什么时候会发生分片呢/p>

在链路层中有一个MTU(最大传输单元),这个MTU主要是为了限制每次传输的数据包的大小,以保证发送的速度,从而减小延时。并且由于IP总是提供尽力的传输却不保证数据包一定到达目的地,MTU减小TCP的MSS(最大传输 文段)可以减少有运输层发现丢包后重传的包的大小。

所以,当前IP的数据 大于MTU,此时如果没有设置DF位的话,那么就会使得IP数据包分片,分片完了以后,标识的作用就体现出来了,只有标识相同的数据 才会被合并成一个数据 。

此时又有了新的问题,那么你怎么知道我是第几个包/p>

很简单,首先,标志中有有一个MF位,如果MF为0的话表示这是最后一个分片,为1表示后面还有其他分片。DF是不可分片位,如果MTU小于当前数据包而有设置了这个位,那么会给源地址发送一个ICMP不可分片差错 文。

那么如何拼起来呢

利用片偏移,13位,很奇怪,13位而已,而IP数据包长度却足足有16位。所以,片偏移是以8字节为单位的,一个IP 文分片以后,除了最后一个 文,其他的 文都是八字节的整数倍。

生存时间:这是数据 在 络中的寿命,防止数据 不停的在 络中兜圈子。为什么说IP是尽可能的传输呢个就是它的原因之一,如果TTL(生存时间)变成0的话,路由默认动作是丢弃这个数据 。IP数据 是靠路由进行一跳一跳的传输的,这个值每过一个路由器就减少1,一般初始设为255,也就是说,最多经过255次路由。

协议:利用IP进行传输的运输层协议有:TCP,UDP,为了在IP软件进行分用的时候方便,所以设置这个字段。当然,还有ICMP,IGMP和OSPF也是使用IP协议。

首部检验和:占16位,只校验数据 的首部,不含数据部分。每次经过路由器都要检查一次,避免首部出错。

源地址:发送方的IP。

目的地址:接收方的IP。

可变部分主要是用来排错、测量、安全的,其选项较多,但最后要用0填充字段填充到为4字节的整数倍,就是说,每个选项至少占用4字节。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年3月1日
下一篇 2019年3月1日

相关推荐