RFC791(IP协议)——概述

Posted 不去天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RFC791(IP协议)——概述相关的知识,希望对你有一定的参考价值。

2.概述

2.1 和其他协议的关系

下图说明了IP协议再整个协议分层中所处的位置:

IP协议一侧对接的是高层的主机对主机类型的协议,另一侧对接的是本地网络协议。这里的“本地网络协议”可以是建筑内的小型网络,也可以是像阿帕网的大型网络。

2.2 操作模型

应用程序间传输数据报的操作模型可以用如下的场景来描述(假设数据传输中间会经过一个网关):

发报应用程序准备好数据,调用本地IP模块把数据以数据报的形式发出,同时传递给IP模块目的地址和其他需要的调用参数。

IP模块准备好IP包头,并把数据和IP包头拼接起来。IP模块决定IP地址的本地网络地址,在这里它是网关的地址。IP模块发送数据报和本地网络地址给本地网络接口。

本地网络接口创建一个本地网络包头,并拼接IP模块发送的数据报,然后通过本地网络发送出去。

数据报到达本地网络头中指定的网关主机,网关主机的本地网络接口剥掉本地网络包头,并发数据传递给IP模块。IP模块通过数据报中的IP地址发现需要转发到第二个网络的主机。IP模块决定可以到达目的主机的本地网络地址,然后调用本地网络接口发送数据到第二个网络。

本地网络接口创建一个本地网络包头,并拼接数据报,然后发送到目的主机。

在目的主机,数据报被本地网络接口去掉本地网络包头,然后传递给IP模块。

IP模块决定数据报是要发送给主机上的哪个应用程序。IP模块响应系统调用,以调用结果的方式把数据、源地址、其他参数传递给应用程序。

2.3功能说明

IP协议的功能或者用途是通过一组互相连接的网络进行数据传输。传输的过程IP协议把数据报从一个网络传输到另一个网络,直到目的地为止。IP模块存在于网络中的主机和网关里。IP模块通过解析网络地址把数据报从各自的网络传输到另一个IP模块。因此,IP协议的一个重要机制就是网络地址。

在数据报从一个IP模块路由到另一个IP模块的过程中,数据报可能会经过一个最大包大小小于数据报大小的网络。为了解决这种问题,IP协议提供了分片的机制。

寻址

首先说明名字(主机名或者域名)、地址、路由之间的区别:名字指出我们寻找的是什么,地址指出它在哪里,路由指出怎么到达那里。IP协议主要处理其中的地址问题,高层协议(比如,主机间协议或者应用层协议)处理名字到地址的映射。网络模块完成网络地址到局域网地址的映射。低层协议(比如,局域网或者网关)处理局域网地址到路由的映射。

地址是4个8字节数字组成的固定长度(32位)字符串。地址由前部分的网络号和后部分的本地地址组成。网络地址分成三类:A类地址最高比特位为0,后续7个比特位代表网络号,剩下的24比特位是本地地址;B类地址最高两个比特位是10,后续14个比特位是网络号,最后16个比特位是本地地址;C类地址最高三个比特位是110,后续21个比特位是网络号,最后8个比特位是本地地址。网络地址分类法已经不再使用,现在使用CIDR的方式区分是否在同一个网段

映射网络地址到本地地址必须特别注意:一个物理主机必须能够扮演多个主机,使用多个网络地址;有些主机有多个独立的物理接口(比如,网卡)。

也就是说,一个主机可能有多个连接到网络的接口,每个接口有多个逻辑网络地址。

分片

网络包分片是必须的,因为它可能在一个允许大包的局域网生成,并且需要通过一个限制网络包必须是小包的局域网,然后才能到达目的地。

网络包可以标记成不允许分片。一旦被标记成不允许分片,不论在任何网络环境下,网络包都不会被分片。如果被标记的网络包不分片,就不能分发到目的网络,那么,网络包会被丢弃。

分片包括:分片、传输、重组,这个过程有IP模块完成。

分片和重组过程能够把网络包切分成任意数量的分片,并且能够重组分片,还原成原始的数据包。分片的接收端依据编号字段保证不同的数据报分片不会发生错乱。分片的偏移量字段指明分片在原始报文中的位置。分片的偏移量和长度决定了分片覆盖了原始报文的哪一部分字符。更多分片字段指明当前是否为最后一个分片。这些分片提供了足够的信息进行数据包的重组。

编号字段用来区分当前包的分片属于当前包,而不是其他的包。产生数据包的IP模块设置编号字段为一个唯一值,保证这个值在数据包的生存期间,在当前原地址-目标地址及协议类型下不会重复。对于不需要分片的完整数据包,设置更多分片和偏移量字段值为0。

分片一个长数据包,IP模块创建两个新的数据包,并且拷贝元数据包的包头到两个新数据包的包头。长数据包的包数据以8字节为边界切分成两部分(第二部分可能不是8字节的整倍数,但是第一部分必须是)。把第一部分的数据块叫做NFB。第一部分数据放到第一个数据包里,总数据包长度放到第一个数据包的长度字段里。第一个数据包的更多分片字段赋值为1.第二部分数据放到第二个数据包里,数据的长度赋值给第二个数据包的长度字段。第二个数据包的更多分片字段赋值为原数据包的更多分片字段值。第二个数据包的偏移量字段赋值为原数据包的偏移量加NFB的长度。

以上是2分的分片方式,也可以采用N分的分片方式。

重组网络分片,IP模块组装所有编号、原地址、目的地址、协议类型四组值相同的数据包。重组过程依据数据包的偏移量值把分片数据组合到一起。第一个分片的偏移量为0,最后一个分片的更多分片字段为0。

2.4 网关

网络包通过一系列的网关继续在网络上传输。网关还实现了其他网关间协议(GGP),处理路由信息、网络控制信息。
网关实际上包含任何跨网络的中间设备,一般是指路由器,也可以是有多张网卡的主机可以不实现高层网络协议,只把GGP并入IP模块。

以上是关于RFC791(IP协议)——概述的主要内容,如果未能解决你的问题,请参考以下文章

RFC791(IP协议)

RFC791(IP协议)

RFC791(IP协议)——序

RFC791(IP协议)——序

RFC791(IP协议)——翻译后记

RFC791(IP协议)——翻译后记