Internet协议旨在用于数据包交换计算机通信网络的互连系统中。这样的系统被称为“catenet”。 互联网协议提供了从源向目的地传输称为数据包的数据块的功能,其中源和目的地是由固定长度地址标识的主机。互联网协议还提供了长数据包的分段和重组(如果需要),以便通过“小数据包”网络进行传输。
互联网协议的范围受到特定限制,以提供必要的功能,以通过互连的网络系统将比特包(互联网数据包)从源传递到目的地。没有任何机制可以增强端到端数据的可靠性,流控制,排序或主机到主机协议中常见的其他服务。互联网协议可以利用其支持网络的服务来提供各种类型和质量的服务。
Internet环境中的主机到主机协议调用此协议。该协议要求使用本地网络协议将Internet数据包传送到下一个网关或目标主机。
例如,TCP模块将调用Internet模块,以将TCP段(包括TCP标头和用户数据)作为Internet数据包的数据部分。 TCP模块会将Internet标头中的地址和其他参数提供给Internet模块,作为调用的参数。然后,互联网模块将创建一个互联网数据包,并在本地网络接口上调用以传输互联网数据包。
例如,在ARPANET情况下,Internet模块将调用本地网络模块,该模块会将1822前导添加到Internet数据包中,从而创建ARPANET消息以传输到IMP。 ARPANET地址将通过本地网络接口从Internet地址派生而来,并且将是ARPANET中某些主机的地址,该主机可能是通向其他网络的网关。
互联网协议实现了两个基本功能:寻址和分段。
Internet模块使用Internet标头中携带的地址向其目的地传输Internet数据包。选择传输路径称为路由。
Internet模块在需要通过“小数据包”网络传输时使用Internet标头中的字段来分段和重组Internet数据包。
操作模型是Internet模块驻留在每个从事Internet通信的主机和每个互连网络的网关中。这些模块共享用于解释地址字段以及分段和组装Internet数据包的通用规则。此外,这些模块(尤其是在网关中)具有用于制定路由决策和其他功能的过程。
Internet协议将每个Internet数据包视为与任何其他Internet数据包无关的独立实体。没有连接或逻辑电路(虚拟或其他)。
Internet协议在提供服务时使用四个关键机制:服务类型,生存时间,选项和标头校验和。
服务类型用于指示所需服务的质量。服务类型是一组抽象或通用的参数,这些参数表征了组成Internet的网络中提供的服务选择。网关将使用这种类型的服务指示来选择特定网络,用于下一跳的网络或路由互联网数据包时的下一个网关的实际传输参数。
生存时间是Internet数据包生命周期上限的指示。它由数据包的发送方设置,并在处理数据的路径上的点处进行缩减。如果生存时间在Internet数据包到达其目的地之前达到零,则将破坏Internet数据包。生存时间可以视为自我毁灭的时限。
这些选件提供了某些情况下所需或有用的控制功能,但对于最常见的通讯来说则是不必要的。这些选项包括时间戳,安全性和特殊路由的规定。
标头校验和提供了验证,用于处理Internet数据包的信息已正确传输。数据可能包含错误。如果报头校验和失败,则检测到错误的实体会立即丢弃Internet数据包。
Internet协议不提供可靠的通信工具。端到端或逐跳都没有确认。没有数据错误控制,只有标头校验和。没有重传。没有流量控制。
可以通过Internet协议模块中实现的Internet控制消息协议(ICMP)报告检测到的错误。
下图说明了Internet协议在协议层次结构中的位置:
图1、协议关系
Internet协议一方面与较高级别的主机到主机协议接口,另一方面与本地网络协议接口。在这种情况下,“本地网络”可以是建筑物中的小型网络,也可以是诸如ARPANET之类的大型网络。
以下情形说明了将数据包从一个应用程序传输到另一个应用程序的操作模型:
我们假设这种传输将涉及一个中间网关。发送应用程序准备其数据,并在其本地Internet模块上进行调用,以将该数据作为数据包发送,并传递目标地址和其他参数作为调用的参数。
Internet模块准备一个数据包头并将数据附加到它。 Internet模块为此Internet地址确定一个本地网络地址,在这种情况下,它是网关的地址。它将此数据包和本地网络地址发送到本地网络接口。本地网络接口创建一个本地网络头,并向其附加数据包,然后通过本地网络发送结果。
数据包到达报文在本地网络头中的网关主机,本地网络接口剥离该头,然后将数据包上交到Internet模块。因特网模块从因特网地址确定数据包将被转发到第二网络中的另一主机。 Internet模块确定目标主机的本地网络地址。它在该网络的本地网络接口上调用以发送数据包。
该本地网络接口创建一个本地网络头并将数据包附加到将结果发送到目标主机的数据包。
在此目标主机上,数据包被本地网络接口从本地网络头中剥离,并传递到Internet模块。
Internet模块确定该数据包用于该主机中的应用程序。它响应系统调用将数据传递到应用程序,并将源地址和其他参数作为调用的结果传递。
图2、转发路径
Internet协议的功能或目的是通过一组互连的网络移动数据包。这是通过将数据包从一个Internet模块传递到另一个Internet模块直到到达目的地来完成的。 Internet模块位于Internet系统中的主机和网关中。数据包基于互联网地址的解释,通过各个网络从一个互联网模块路由到另一个互联网模块。因此,互联网协议的一种重要机制是互联网地址。
在将消息从一个Internet模块路由到另一个Internet模块时,数据包可能需要遍历最大数据包大小小于数据包大小的网络。为了克服这个困难,在互联网协议中提供了分段机制。
名称,地址和路由之间有区别。名称表示我们要寻找的东西。地址指示其位置。一条路线指示如何到达那里。互联网协议主要处理地址。较高级别(即主机到主机或应用程序)协议的任务是进行从名称到地址的映射。 Internet模块将Internet地址映射到本地网络地址。下级(即本地网络或网关)过程的任务是进行从本地网络地址到路由的映射。
地址是固定长度的四个八位位组(32位)。地址以网络号开头,后跟本地地址(称为“空闲”字段)。 Internet地址有三种格式或类别:在a类中,高阶位为0,后7位为网络,后24位为本地地址;在b类中,高阶两位为0,后14位为网络,后16位为本地地址;在c类中,高阶三位为110,后21位为网络,后8位为本地地址。
在将Internet地址映射到本地网络地址时必须小心;一个单一的物理主机必须能够像使用多个不同的Internet地址一样充当多个不同的主机。某些主机还将具有多个物理接口(多宿主)。即,必须规定主机具有到网络的多个物理接口,每个物理接口具有多个逻辑互联网地址。
地址映射的示例可以在“地址映射”中找到。
当Internet数据包起源于允许大数据包大小的本地网络并且必须穿越将数据包限制为较小大小的本地网络到达目的地时,必须进行分段。
互联网数据包可以标记为“不要分段”。如此标记的任何Internet数据包在任何情况下都不得进行Internet分段。如果标记为“不分段”的互联网数据包无法在不分段的情况下传递到其目的地,则应将其丢弃。
Internet协议模块不可见的跨本地网络的分段,传输和重组称为Intranet分段,可以使用。
Internet分段和重组过程需要能够将数据包分解为几乎任意数量的分段,然后可以将其重新组装。分段的接收者使用标识字段来确保不混合不同数据包的分段。分段偏移字段告诉接收者分段在原始数据包中的位置。分段的偏移量和长度确定了此分段覆盖的原始数据包的部分。more-fragments标志指示(通过重置)最后一个分段。这些字段提供了足够的信息来重组数据包。
标识字段用于区分一个数据包的分段和另一个数据包的分段。 Internet数据包的始发协议模块将标识字段设置为对于该源-目的地对和协议必须唯一的值,以确保该数据包在Internet系统中处于活动状态。完整数据包的始发协议模块将more-fragments标志设置为零,并将分段偏移设置为零。
为了分段一个较长的Internet数据包,Internet协议模块(例如,在网关中)将创建两个新的Internet数据包,并将Internet报头字段的内容从该长数据包复制到两个新的Internet报头中。长数据包的数据在8个八位位组(64位)边界上分为两部分(第二部分可能不是8个八位位组的整数倍,但第一部分必须是)。在第一部分NFB中调用8个八位位组块的数量(对于分块数量)。数据的第一部分放置在第一个新的Internet数据包中,并且总长度字段设置为第一个数据包的长度。 more-fragments标志设置为1。数据的第二部分放置在第二个新的Internet数据包中,并且总长度字段设置为第二个数据包的长度。 more-fragments标志带有与长数据包相同的值。第二个新的Internet数据包的分段偏移字段设置为长数据包加NFB中该字段的值。
可以将此过程推广到n向拆分,而不是所描述的双向拆分。
为了组装Internet数据包的分段,Internet协议模块(例如,在目标主机处)将Internet数据包的四个字段(标识,源,目的地和协议)的值都相同。通过将每个分段的数据部分放置在该分段的Internet标头中的分段偏移量指示的相对位置来完成组合。第一个分段的分段偏移量将为零,而最后一个分段的more-fragments标志将重置为零。
网关实施Internet协议以在网络之间转发数据包。 网关还实现网关到网关协议(GGP),以协调路由和其他Internet控制信息。
在网关中,无需实施更高级别的协议,并且GGP功能已添加到IP模块。
图3、网关协议
Internet包头内容的摘要如下:
图4、Internet报文头实例
注意,每个刻度线代表一个位的位置。
version:4位
“版本”字段指示Internet标头的格式。本文档介绍版本4。
IHL:4位
Internet标头长度是Internet标头的长度(以32位字为单位),因此指向数据的开头。请注意,正确标头的最小值为5。
ToS服务类型:8位
服务类型提供了所需服务质量的抽象参数的指示。当通过特定网络传输数据包时,这些参数将用于指导实际服务参数的选择。几个网络提供服务优先级,从而以某种方式将高优先级流量比其他流量更重要(通常是在高负载时仅接受高于特定优先级的流量)。主要选择是在低延迟,高可靠性和高吞吐量之间进行权衡。
第0-2位:优先级。
第3位:0 =正常延迟,1 =低延迟。
第4位:0 =正常吞吐量,1 =高吞吐量。
第5位:0 =正常可靠性,1 =高可靠性。
第6-7位:保留以备将来使用。
组合含义
111 – Network Control
110 – Internetwork Control
101 – CRITIC/ECP
100 – Flash Override
011 – Flash
010 – Immediate
001 – Priority
000 – Routine
使用“延迟”,“吞吐量”和“可靠性”指示可能会增加服务成本(从某种意义上来说)。在许多网络中,其中一个参数的较好性能与另一个参数的较差性能结合在一起。除非常特殊的情况外,应在这三个指示中最多设置两个。
服务类型用于指定数据包在通过Internet系统传输期间的处理方式。 “服务映射”中给出了互联网类型的服务到在诸如AUTODIN II,ARPANET,SATNET和PRNET之类的网络上提供的实际服务的示例映射。
网络控制优先级指定仅在网络内使用。该名称的实际使用和控制取决于每个网络。 Internetwork控件名称仅供网关控件创建者使用。
如果这些优先级标记的实际使用与特定网络有关,则该网络有责任控制对这些优先级标记的访问和使用。
总长度:16位
总长度是数据包的长度,以八位字节为单位,包括Internet标头和数据。该字段允许数据包的长度最多为65535个八位位组。对于大多数主机和网络来说,如此长的数据包是不切实际的。所有主机必须准备好接受最多576个八位字节的数据包(无论它们是完整到达还是以分段到达)。建议主机仅在确定目的地已准备好接受较大数据包的情况下,才发送大于576个八位位组的数据包。
选择数字576以允许除了所需的报头信息之外还发送合理大小的数据块。例如,此大小允许将512个八位位组加上64个标头八位位组的数据块放入数据包中。 Internet标头的最大值为60个八位位组,而典型的Internet标头为20个八位位组,这为较高级别协议的标头留有余量。
识别:16位
发送方分配的标识值,以帮助组装数据包的分段。
标志:3位
各种控制标志。
第0位:保留,必须为零
第1位:(DF)0 =可以分段,1 =不分段。
第2位:(MF)0 =最后一个分段,1 =更多分段。
分段偏移量:13位
该字段指示该分段在数据包中的位置。
分段偏移以8个八位位组(64位)为单位进行测量。第一个分段的偏移量为零。
生存时间:8位
该字段指示允许数据包保留在Internet系统中的最长时间。如果此字段包含零值,则必须销毁数据包。该字段在Internet标头处理中被修改。时间以秒为单位进行度量,但是由于每个处理数据包的模块都必须将TTL至少减少一个,即使它在不到一秒的时间内处理数据包,因此TTL必须仅被视为设备上的上限。数据包可能存在的时间。目的是使无法传递的数据包被丢弃,并限制最大数据包的生存期。
协议:8位
该字段指示在互联网数据包的数据部分中使用的下一级协议。在“分配的编号”中指定了各种协议的值。
标头校验和:16位
仅在标头上的校验和。由于某些标头字段发生变化(例如,生存时间),因此在处理互联网标头的每个点都会重新计算并验证该字段。
校验和算法为:
校验和字段是标头中所有16位字的一个人的补码之和的16位一个人的补码。为了计算校验和,校验和字段的值为零。
这是一种简单的计算校验和的方法,实验证据表明它是足够的,但它是临时的,可以根据进一步的经验用CRC程序代替。
源地址:32位
源地址。请参阅第3.2节。
目的地址:32位
目的地址。请参阅第3.2节。
这些选项可能会出现在数据包中,也可能不会出现在数据包中。它们必须由所有IP模块(主机和网关)实现。可选的是它们在任何特定数据包中的传输,而不是它们的实现。
在某些环境中,所有数据包中可能都需要安全选项。
选项字段的长度是可变的。可能有零个或多个选项。选项的格式有两种情况:
情况1:选项类型的一个八位位组。
情况2:选项类型的八位位组,选项长度的八位位组和实际的选项数据八位位组。
选项长度八位字节计算选项类型八位字节,选项长度八位字节以及选项数据八位字节。
选项类型的八位位组被视为具有3个字段:
第1位:复制标志,
第2-3位:选项类别,
第4-8位:选项号。
复制的标志指示此选项在分段时被复制到所有分段中。
0 =未复制
1 =复制
选项类别为:
0 =控制
1 =保留供将来使用
2 =调试和测量
3 =保留供将来使用
定义了以下Internet选项:
类 | 编号 | 长度 | 说明 |
0 | 0 | 无 | 选项列表结束。该选项仅占用1个字节。它没有长度八位位组 |
0 | 1 | 无 | 无操作。该选项仅占用1个字节。它没有长度八位位组 |
0 | 2 | 11 | 安全。用于携带与DOD要求兼容的安全性,隔离区,用户组(TCC)和处理限制代码 |
0 | 3 | 可变 | 松散的源路由。用于根据源提供的信息来路由Internet数据包 |
0 | 9 | 可变 | 严格的源路由。用于根据源提供的信息来路由Internet数据包 |
0 | 7 | 可变 | 记录路线。用于跟踪Internet数据包所采用的路由 |
0 | 8 | 4 | 流ID。用于携带流标识符 |
2 | 4 | 可变 | 互联网时间戳 |
选项列表末尾
此选项指示选项列表的末尾。 根据Internet标头的长度,这可能与Internet标头的末尾不一致。 该选项在所有选项的末尾使用,而不是在每个选项的末尾使用,并且仅在选项的末尾与Internet标头的末尾不一致的情况下才需要使用。
可能由于分段或任何其他原因而被复制,引入或删除。
无操作
此选项可在选项之间使用,例如,在32位边界上对齐后续选项的开头。
可能由于分段或任何其他原因而被复制,引入或删除。
此选项为主机提供了一种发送安全性,隔离,处理限制和TCC(封闭用户组)参数的方式。 此选项的格式如下:
安全性(S字段):16位
指定16个安全级别之一(其中8个保留供将来使用)。
00000000 00000000-未分类
11110001 00110101-机密
01111000 10011010-EFTO
10111100 01001101-MMMM
01011110 00100110-程序
10101111 00010011-受限
11010111 10001000-秘密
01101011 11000101-最高机密
00110101 11100010-(保留以备将来使用)
10011010 11110001-(保留以备将来使用)
01001101 01111000-(保留供将来使用)
00100100 10111101-(保留供将来使用)
00010011 01011110-(保留供将来使用)
10001001 10101111-(保留供将来使用)
11000100 11010110-(保留供将来使用)
11100010 01101011-(保留供将来使用)
分隔(C区域):16位
当没有分隔传送的信息时,将使用全零值。 隔离专区字段的其他值可以从国防情报局获得。
处理限制(H字段):16位
控制标记和释放标记的值是字母数字二边形,并且在防御中定义
情报局手册DIAM 65-19,“标准安全标记”。
传输控制代码(TCC字段):24位
提供一种隔离流量并在订户之间定义受控兴趣社区的方法。 TCC值是三边形,可从HQ DCA代码530获得。
必须在分段上复制。 此选项在数据包中最多出现一次。
松散的源和记录路径
松散的源和记录路由(LSRR)选项为Internet数据包的源提供了一种途径,以提供网关在将数据包转发到目的地时要使用的路由信息,并记录路由信息。
选件以选件类型代码开头。第二个八位位组是选项长度,它包括选项类型代码和路由数据的长度八位位组,指针八位位组和长度为3个八位位组。第三个八位位组是指向路由数据的指针,该数据指示八位位组,该八位位组开始下一个要处理的源地址。指针是相对于此选项的,并且指针的最小合法值为4。
路线数据由一系列Internet地址组成。
每个互联网地址为32位或4个八位位组。如果指针大于长度,则源路由为空(且记录的路由已满),并且路由将基于目标地址字段。
如果已到达目标地址字段中的地址并且指针的长度不超过长度,则源路由中的下一个地址将替换目标地址字段中的地址,并且记录的路由地址将替换刚刚使用的源地址,并且指针增加了四个。
记录的路由地址是该数据包转发到的环境中已知的Internet模块自身的Internet地址。
用记录的路由替换源路由的此过程(尽管与用作源路由的顺序相反)意味着该选项(和整个IP报头)保持不变的长度,因为数据包通过互联网进行。
此选项是一个松散的源路由,因为允许网关或主机IP使用任意数量的其他中间网关的任何路由来到达该路由中的下一个地址。
必须在分段上复制。在数据包中最多出现一次。
严格的源和记录路径
严格的源和记录路由(SSRR)选项为Internet数据包的源提供了一种途径,以提供网关将数据包转发到目的地时要使用的路由信息,并记录路由信息。
选件以选件类型代码开头。第二个八位位组是选项长度,它包括选项类型代码和路由数据的长度八位位组,指针八位位组和长度为3个八位位组。第三个八位位组是指向路由数据的指针,该数据指示八位位组,该八位位组开始下一个要处理的源地址。指针是相对于此选项的,并且指针的最小合法值为4。
路线数据由一系列Internet地址组成。
每个互联网地址为32位或4个八位位组。如果指针大于长度,则源路由为空(且记录的路由已满),并且路由将基于目标地址字段。
如果已到达目标地址字段中的地址并且指针的长度不超过长度,则源路由中的下一个地址将替换目标地址字段中的地址,并且记录的路由地址将替换刚刚使用的源地址,并且指针增加了四个。
记录的路由地址是该数据包转发到的环境中已知的Internet模块自身的Internet地址。
用记录的路由替换源路由的此过程(尽管与用作源路由的顺序相反)意味着该选项(和整个IP报头)保持不变的长度,因为数据包通过互联网进行。
此选项是严格的源路由,因为网关或主机IP必须仅通过下一个地址中指示的直接连接的网络将数据包直接发送到源路由中的下一个地址,以到达路由中指定的下一个网关或主机。
必须在分段上复制。在数据包中最多出现一次。
记录路线
记录路由选项提供了一种记录Internet数据包的路由的方法。
选件以选件类型代码开头。第二个八位位组是选项长度,它包括选项类型代码和路由数据的长度八位位组,指针八位位组和长度为3个八位位组。第三个八位位组是指向路由数据的指针,指示八位位组,该八位位组从下一个区域开始存储路由地址。指针是相对于此选项的,并且指针的最小合法值为4。
一条记录的路线由一系列Internet地址组成。
每个互联网地址为32位或4个八位位组。如果指针大于长度,则记录的路线数据区域已满。
始发主机必须使用足够大的路由数据区域来组成此选项,以容纳所有预期的地址。该选项的大小不会因添加地址而改变。路线数据区域的初始内容必须为零。
当Internet模块路由数据包时,它会检查是否存在“记录路由”选项。如果是这样,它将在该数据包转发到的环境中插入它自己已知的互联网地址,该环境从指针所指示的八位字节开始转发到记录的路由中,并将指针增加四。
如果路由数据区已满(指针超过长度),则转发数据包,而无需将地址插入记录的路由中。如果有一些空间但没有足够的空间可插入完整地址,则原始数据包被认为是错误的,并被丢弃。无论哪种情况,都可以将ICMP参数问题消息发送到源主机。
分段时不复制,仅在第一个分段中进行。
在数据包中最多出现一次。
流标识符
此选项为不支持流概念的网络携带16位SATNET流标识符提供了一种方法。
必须在分段上复制。在数据包中最多出现一次。
互联网时间戳
选项长度是选项中的八位字节数,该字节计数类型,长度,指针和溢出/标志八位字节(最大长度为40)。
指针是从此选项的开始到时间戳记的末尾的八位字节数加1(即,它指向从下一个时间戳记开始的八位字节数)。最小合法值为5。当指针大于长度时,时间戳记区域已满。
溢出(oflw)[4位]是由于空间不足而无法注册时间戳的IP模块的数量。
标志(flg)[4位]的值是
0-仅时间戳,以连续的32位字存储,
1-每个时间戳前面都有注册实体的互联网地址,
3-互联网地址字段是预先指定的。 IP模块仅在其自己的地址与下一个指定的Internet地址匹配时才注册其时间戳。
时间戳是自午夜UT起以毫秒为单位的右对齐32位时间戳。如果该时间以毫秒为单位不可用或相对于午夜UT无法提供,则可以插入任何时间作为时间戳,前提是时间戳字段的高阶位设置为1以指示使用非标准值。
原始主机必须使用足够大的时间戳数据区域组成此选项,以容纳所有预期的时间戳信息。由于添加了时间戳,该选项的大小不会更改。时间戳数据区域的初始内容必须为零或Internet地址/零对。
如果时间戳数据区域已满(指针超过长度),则在不插入时间戳的情况下转发数据包,但溢出计数将增加1。
如果有足够的空间但没有足够的空间插入完整的时间戳,或者溢出计数本身溢出,则认为原始数据包有误,将其丢弃。
无论哪种情况,都可以将ICMP参数问题消息发送到源主机。
分段时不会复制timestamp选项。它携带在第一个分段中。在数据包中最多出现一次。
填充:可变
Internet标头填充用于确保Internet标头以32位边界结束。填充为零。
协议的实现必须健壮。每个实现都必须期望与不同个人创建的其他实现互操作。尽管本规范的目标是明确说明协议,但可能会有不同的解释。通常,实现在发送行为上必须是保守的,而在接收行为上则必须是自由的。也就是说,必须谨慎发送格式正确的数据包,但必须接受它可以解释的任何数据包(例如,不反对含义仍然清晰的技术错误)。
基本的Internet服务面向数据包,并在网关处提供数据包的分段,并在目标主机中的目标Internet协议模块上进行重组。当然,也允许在网络内或通过网络网关之间的私有协议对数据包进行分段和重组,因为这对于Internet协议和更高级别的协议是透明的。这种透明的分段和重组类型称为“网络相关”(或Intranet)分段,此处不再赘述。
Internet地址区分主机级别的源和目的地,并提供协议字段。假定每种协议都将提供主机内所需的任何多路复用。
为了在为网络分配地址方面提供灵活性,并允许使用大量的中小型网络,对地址字段的解释进行编码,以指定具有大量主机的少量网络,具有主机数量的中等数量的网络。数量适中的主机,以及数量众多且主机数量少的网络。此外,还有用于扩展寻址模式的转义码。
地址格式:
网络字段中的零值表示该网络。这仅在某些ICMP消息中使用。扩展寻址模式是不确定的。这两个功能都保留供将来使用。
为网络地址分配的实际值在“分配的编号”中给出。
由本地网络分配的本地地址必须允许单个物理主机充当多个不同的Internet主机。也就是说,Internet主机地址和网络/主机接口之间必须存在一个映射,以允许多个Internet地址对应一个接口。还必须允许主机具有多个物理接口,并将来自多个物理接口的数据包当作已全部寻址到单个主机一样对待。
Internet地址与ARPANET,SATNET,PRNET和其他网络的地址之间的地址映射在“地址映射”中进行了描述。
Internet标识字段(ID)与源地址和目标地址以及协议字段一起使用,以标识要重组的数据包分段。
如果数据包不是最后一个分段,则将设置“更多分段”标志位(MF)。分段偏移字段标识相对于原始未分段化数据包的开头的分段位置。分段以8个八位位组为单位进行计数。设计分段策略是为了使未分段的数据包具有全部零的分段信息(MF = 0,分段偏移= 0)。如果Internet数据包是分段的,则其数据部分必须在8个八位位组边界上断开。
此格式允许2的13次方 = 8192个8个八位字节的分段,总共65536个八位字节。请注意,这与数据包总长度字段一致(当然,标头是在总长度中计算的,而不是在分段中计算的)。
发生分段时,某些选项将被复制,而其他选项仅保留在第一个分段中。
每个Internet模块必须能够转发68个八位位组的数据包,而不能进一步分段。这是因为Internet标头最多可以包含60个八位位组,而最小分段为8个八位位组。
每个互联网目的地都必须能够以单个或分段形式接收576个八位字节的数据包,以进行重组。
可能受到分段影响的字段包括:
(1)选项字段
(2)更多分段标志
(3)分段偏移
(4)网络头长度字段
(5)总长度字段
(6)头校验和
如果设置了“不分段标志”(DF)位,则此数据包的Internet分段是不允许的,尽管它可能会被丢弃。在接收主机没有足够的资源来重新组合Internet分段的情况下,这可以用来禁止分段。
使用“不要分段”功能的一个示例是下行加载小型主机。小型主机可以具有一个引导程序,该程序接受一个数据包,将其存储在内存中,然后执行它。
实例最容易描述分段和重组过程。以下过程是示例实现。
以下示例程序中的通用符号:“ = <”表示“小于或等于”,“#”表示“不等于”,“=”表示“等于”,“<-”表示“设置为”。同样,“x到y”包括x并排除y;例如,“4到7”将包括4、5和6(但不包括7)。
可以通过下一个网络传输的最大大小的数据包称为最大传输单元(MTU)。
如果总长度小于或等于最大传输单位,则将该数据包提交到数据包处理的下一步;否则,将其提交给数据包处理。否则,将数据包切成两个分段,第一个分段为最大大小,第二个分段为数据包的其余部分。第一个分段被提交到数据包处理的下一步,而第二个分段如果仍然太大,则被提交给该程序。
示意:
计算方法:
如果TL = <MTU,则将此数据包提交到数据包处理,否则:如果DF = 1,则丢弃数据包,否则执行第一个分段:
(1)复制原始报文头;
(2)OIHL设置为IHL;OTL设置为TL; OFO设置为FO; OMF设置为MF;
(3)NFB等于(MTU-IHL * 4)/ 8;
(4)附加第一个NFB * 8数据八位位组;
(5)休整报头:MF设置为1; TL等于(IHL * 4)+(NFB * 8);重新计算校验和;
(6)将此分段提交到数据包处理的下一步;
产生第二个分段:
(7)有选择地复制报文头(某些选项未复制,请参阅选项定义);
(八)追加剩余数据;
(9)更正报文头:
IHL等于((((OIHL * 4)-(未复制的选项长度))+ 3)/ 4;
TL等于OTL-NFB * 8-(OIHL-IHL)* 4);
FO等于OFO + NFB;
MF等于OMF;重新计算校验和;
(10)将该分段提交给分段测试;
完毕。
在上述过程中,每个分段(最后一个分段除外)都被设置为最大允许大小。替代方法可能会产生小于最大大小的数据包。例如,可以实施一种分段过程,该过程将大型数据包重复分成两半,直到所得的分段小于最大传输单元大小为止。
对于每个数据包,将缓冲区标识符计算为源,目标,协议和标识字段的串联。如果这是一个完整的数据包(即分段偏移量和更多分段字段均为零),则释放与此缓冲区标识符关联的所有重组资源,并将数据包转发到数据包处理的下一步。
如果没有其他带有此缓冲区标识符的分段,那么将分配重组资源。重组资源包括一个数据缓冲区,一个标头缓冲区,一个分段块位表,一个总数据长度字段和一个计时器。来自分段的数据根据其分段偏移量和长度放置在数据缓冲区中,并且在分段块位表中设置与接收到的分段块相对应的位。
如果这是第一个分段(即分段偏移为零),则将此标头放置在标头缓冲区中。如果这是最后一个分段(更多分段字段为零),则计算总数据长度。如果此分段完成了数据包(通过检查分段块表中设置的位进行了测试),则数据包将被发送到数据包处理的下一步;否则,将计时器设置为当前计时器值和该分段中的生存时间字段中的最大值。重组例行程序放弃了控制权。
如果计时器用尽,则释放该缓冲区标识符的所有重组资源。计时器的初始设置是重新组装等待时间的下限。这是因为如果到达的分段中的生存时间大于当前计时器值,则等待时间将增加,但如果小于当前定时器值,则等待时间将不会减少。此计时器值可以达到的最大值是最长生存时间(约4.25分钟)。当前建议的初始计时器设置为15秒。随着该协议经验的积累,这可能会改变。请注意,此参数值的选择与可用的缓冲区容量和传输介质的数据速率有关。也就是说,数据速率乘以计时器值等于缓冲区大小(例如10Kb / s X 15s = 150Kb)。
示意:
计算方法:
如果两个或多个分段包含相同或部分重叠的相同数据,则此过程将使用数据缓冲区中最近到达的副本和传递的数据包。
为数据包选择标识符的选择是基于提供唯一标识特定数据包的分段的方法的需要。如果分段具有相同的源,目的地,协议和标识符,则协议模块组装分段将判断这些分段属于同一数据包。因此,在数据包(或其任何分段)可以在Internet上存在的时间内,发送方必须为此源,目的地对和协议选择唯一的标识符。
这样看来,发送协议模块需要保留一个标识符表,在互联网的最后一个最大数据包生存期中,它与之通信的每个目的地都有一个条目。
但是,由于“标识符”字段允许65536个不同的值,因此某些主机可能能够简单地使用独立于目的地的唯一标识符。
对于某些更高级别的协议,选择标识符是合适的。例如,TCP协议模块可以重传相同的TCP段,并且如果重传带有与原始传输相同的标识符,则正确接收的可能性将提高,因为任何一个数据包的分段都可以用于构造正确的TCP段。
服务类型(TOS)用于选择Internet服务质量。服务类型是根据抽象参数优先级,延迟,吞吐量和可靠性指定的。这些抽象参数将映射到数据包遍历的特定网络的实际服务参数中。
优先顺序。此数据包重要性的独立度量。
延迟。对于具有此指示的数据包,及时交付很重要。
吞吐量。高数据速率对于具有此指示的数据包很重要。
可靠性。对于具有此指示的数据包,确保交付的更高级别的工作很重要。
例如,ARPANET具有优先级位,并且可以在“标准”消息(类型0)和“不受控制”消息(类型3)之间进行选择(单包消息和多包消息之间的选择也可以视为服务参数)。不受控制的消息往往传递的可靠性较差,并且延迟较少。假设要通过ARPANET发送Internet数据包。令互联网服务类型为:
优先顺序:5
延迟:0
吞吐量:1
可靠性:1
在此示例中,这些参数到ARPANET可用参数的映射将是由于Internet优先级处于其范围的上半部而将ARPANET优先级位设置为on,以选择标准消息,因为指示了吞吐量和可靠性要求,并且延迟不是。有关服务映射的更多详细信息,请参见“服务映射”。
发送者将生存时间设置为允许数据包进入Internet系统的最长时间。如果数据包在Internet系统中的生存时间长于生存时间,则必须销毁该数据包。
在处理Internet标头时,必须减少此字段,以反映处理数据包所花费的时间。即使没有关于实际花费时间的本地信息,该字段也必须递减1。时间以秒为单位进行度量(即值1表示一秒钟)。因此,最长生存时间为255秒或4.25分钟。由于即使处理数据包的时间少于一秒,每个处理数据包的模块也必须将TTL至少减少一个,因此TTL必须仅被视为存在数据包的时间的上限。目的是使无法传递的数据包被丢弃,并限制最大数据包的生存期。
一些更高级别的可靠连接协议基于以下假设:旧的重复数据包在经过一定时间后将不会到达。 TTL是此类协议确保满足其假设的一种方式。
选项
这些选项在每个数据包中都是可选的,但在实现中是必需的。也就是说,选项的存在与否是发送者的选择,但是每个Internet模块必须能够解析每个选项。选项字段中可能存在多个选项。
选项可能不会在32位边界上结束。 Internet标头必须用零的八位字节填充。其中的第一个将被解释为选项的结束选项,其余的将被解释为Internet标头填充。
每个Internet模块必须能够对每个选项进行操作。如果要传递分类,限制或隔离的流量,则需要“安全选项”。
如果更改了Internet标头,则会重新计算Internet标头校验和。例如,减少了生存时间,增加了Internet选项或对其进行了更改或由于分段而造成的。 Internet级别的此校验和旨在保护Internet标头字段免受传输错误的影响。
在某些应用中,一些数据位错误是可以接受的,而重传延迟是不可接受的。如果Internet协议强制数据正确性,则无法支持此类应用程序。
Internet协议错误可能会通过ICMP消息报告。
IP用户界面的功能描述充其量只是虚构的,因为每个操作系统都具有不同的功能。因此,我们必须警告读者,不同的IP实现可能具有不同的用户界面。但是,所有IP必须提供一定的最小服务集,以确保所有IP实现都可以支持相同的协议层次结构。本节指定所有IP实现所需的功能接口。
Internet协议一方面与本地网络接口,另一方面与更高级别的协议或应用程序接口。在下文中,由于较高级别的协议或应用程序(甚至是网关程序)正在使用Internet模块,因此将其称为“用户”。由于Internet协议是数据包协议,因此在数据包传输之间保持最少的内存或状态,并且用户在Internet协议模块上的每个调用都会提供IP执行请求的服务所需的所有信息。
以下两个示例调用满足了用户与Internet协议模块通信的要求(“ =>”表示返回):
请注意,优先级已包含在TOS中,并且安全性/隔离专区是作为选项传递的。
当用户发送数据包时,它将执行提供所有参数的SEND调用。 Internet协议模块在收到此呼叫后,会检查参数并准备并发送消息。如果参数正确,并且数据包被本地网络接受,则调用成功返回。如果自变量错误,或者本地网络不接受数据包,则调用将失败。如果未成功返回,则必须就问题的原因做出合理的报告,但是此类报告的详细信息取决于各个实现。
当数据包从本地网络到达Internet协议模块时,要么有来自正在寻址的用户的未决RECV呼叫,要么没有。在第一种情况下,通过将信息从数据包传递给用户来满足挂起的呼叫。在第二种情况下,被通知的用户将收到未决的数据包。如果所寻址的用户不存在,则会将ICMP错误消息返回给发送方,并丢弃数据。
在实现的特定操作系统环境中,可以适当地通过伪中断或类似的机制来通知用户。
然后,未决数据包可以立即满足用户的RECV呼叫,或者直到数据包到达之前,呼叫可能仍未决。
如果发送主机有多个地址(多个物理连接或逻辑地址),则源地址将包含在发送呼叫中。Internet模块必须检查以确保源地址是该主机的合法地址之一。
一种实现还可以允许或要求对互联网模块的调用以表示对一类数据包的兴趣或保留其独占使用(例如,在协议字段中具有一定值的所有数据包)。
本节从功能上描述了USER / IP接口。所使用的表示法与高级语言中的大多数函数调用过程相似,但是这种用法并不意味着排除陷阱类型的服务调用(例如SVC,UUO,EMT)或任何其他形式的进程间通信。
这是承载互联网数据包的最小数据的示例:
图5、网络报文示例
注意,每个刻度线代表一个位的位置。
这是Internet协议版本4中的Internet数据包; Internet标头由五个32位字组成,数据包的总长度为21个八位位组。该数据包是完整的数据包(不是分段)。
在此示例中,我们首先显示一个中等大小的Internet数据包(452个数据八位字节),然后显示两个Internet分段,如果允许的最大大小的传输是280个八位字节,则可能由于该数据包的分段而导致。
图6、网络报文示例
现在,第一个分段是由于在256个数据八位字节之后拆分数据包而产生的。
图7、报文分段示例
还有第二个分段。
图8、报文分段示例
在这里,我们显示一个包含选项的数据包的示例:
图9、网络报文示例
本文档中描述的报头和数据的传输顺序解析为八位位组级别。 每当图表显示一组八位字节时,这些八位字节的传输顺序就是用英语阅读它们的正常顺序。 例如,在下图中,八位位组按照编号顺序进行传输。
图10、字节传输顺序
每当八位位组代表数字量时,图中最左边的位就是高阶或最高有效位。 即,标记为0的位是最高有效位。 例如,下图表示值170(十进制)。
图11、bit位示意图
同样,每当一个多字节的字段代表一个数字量时,整个字段的最左位就是最高有效位。传输多字节的数量时,最重要的字节首先传输。
1822
BBN报告1822,“主机和IMP的互连规范”。主机和ARPANET之间的接口规范。
ARPANET leader
主机IMP接口上关于ARPANET消息的控制信息。
ARPANET message
主机和ARPANET中的IMP之间的传输单位。最大大小约为1012个八位位组(8096位)。
ARPANET packet
IMPs之间的ARPANET内部使用的一种传输单位。最大大小约为126个八位位组(1008位)。
Destination,目的地
目的地址,Internet标头字段。
DF
flags字段中携带的Don’t Fragment位。
Flags
带有各种控制标志的Internet标头字段。
Fragment Offset
此Internet头字段指示分段在Internet数据包中的位置。
GGP
Gateway to Gateway Protocol,网关到网关协议,网关之间主要用于控制路由和其他网关功能的协议。
header
消息,段,数据包,数据包或数据块开头的控制信息。
ICMP
ICMP是在Internet模块中实现的Internet控制消息协议(Internet Control Message Protocol),从网关到主机以及在主机之间使用ICMP报告错误并提出路由建议。
Identification
Internet标头字段,其中包含由发送方分配的标识值,以帮助组装数据包的分段。
IHL
Internet头字段Internet包头长度(Internet Header Length)是Internet包头的长度,以32位字为单位。
IMP
Interface Message Processor,接口消息处理器,ARPANET的数据包交换机。
Internet Address
由网络字段和本地地址字段组成的四个八位字节(32位)的源或目标地址。
internet datagram
一对Internet模块(包括Internet标头)之间交换的数据单位。
internet fragment
具有Internet标头的Internet数据包的一部分数据。
Local Address
网络内主机的地址。 Internet本地地址到网络中主机地址的实际映射非常普遍,允许多对一映射。
MF
Internet标头标志字段中携带了“More-Fragments Flag,更多分段标志”。
module
协议或其他过程的一种实现,通常以软件形式实现。
more-fragments flag
一个标志,指示此Internet数据包是否包含Internet数据包的末尾,并在Internet标头的Flags字段中携带。
NFB
Internet分段的数据部分中的分段块数(Number of Fragment Blocks)。也就是说,以8个八位位组为单位测量的一部分数据的长度。
octet
一个八位字节。
Options
Internet标头的“选项”字段可能包含几个选项,每个选项的长度可能是几个八位位组。
Padding
Internet标头的Padding字段用于确保数据以32位字边界开始。填充为零。
Protocol
在本文档中,下一个更高级别的协议标识符是Internet标头字段。
Rest
Internet地址的本地地址部分。
Source
源地址,Internet标头字段。
TCP
Transmission Control Protocol,传输控制协议:一种主机到主机协议,用于在Internet环境中进行可靠的通信。
TCP Segment
TCP模块之间交换的数据单位(包括TCP标头)。
TFTP
Trivial File Transfer Protocol,普通文件传输协议:一种基于UDP的简单文件传输协议。
Time to Live
Internet标头字段,指示此Internet数据包可以存在多长时间的上限。
TOS
Type of Service,服务种类。
Total Length
Internet标头字段“总长度”是数据包的长度,以八位字节为单位,包括Internet标头和数据。
TTL
Time to Live,生存时间。
Type of Service
Internet标头字段,指示此Internet数据包的服务类型(或质量)。
UDP
User Datagram Protocol用户数据包协议:用于面向事务的应用程序的用户级别协议。
User
互联网协议的用户。 这可以是更高级别的协议模块,应用程序或网关程序。
Version
“版本”字段指示Internet标头的格式。