Internet协议(Internet
1. 介绍
1.1. 产生原因
IP协议是用于将多个包交换网络连接起来的,它在源地址和目的地址之前传送一种称之为数据报的东西,它还提供对数据大小的重新组装功
1.2. 范围
IP的责任就是把数据从源传送到目的地。它不负责保证传送可靠性,流控制,包顺序和其它对于主机到主机协议来说很普通的服务。
1.3. 接口
这个协议由主机到主机协议调用,而此协议负责调用本地网络协议将数据报传送以下一个网关或目的主机。例如TCP可以调用IP协议,在
1.4. 操作
IP实现两个基本功能:寻址和分段。IP可以根据数据报报头中包括的目的地址将数据报传送到目的地址,在此过程中IP负责选择传送的
IP使用四个关键技术提供服务:服务类型,生存时间,选项和报头校验码。服务类型指希望得到的服务质量。服务类型是一个参数集,这此
IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不
2. 总览
2.1. 与其它协议的联系
下图显示了IP协议在协议体系中的位置。
IP上下有两个接口,一个是与主机与主机协议的接口,另一个是与本地网络的接口,本地网络可以是小型网络也可以大型网络,说不定的。
2.2. 操作模式
下面的例子可以看到操作的模型是什么。我们假设传输要经过中间网关。传送进程调用本地IP模块传送数据,同时传送目的地址和其它参数
加上本地网络头的数据报到达网关后,本地网络接口去掉这个头,将结果传送给(网关上的)IP模块。这个IP模块决定决定目的主要的本
2.3. 功能描述
IP的功能就是把数据报在互联的网络上传送,通过将数据报在一个个IP模块间传送直到目的模块来达到目的。网络中每个主机和网关上都
寻址
名字,地址和路由是有区别的,名字是我们要找的,地址指出这个名字在什么地方,路由解决如何到那里的问题。IP主要处理地址的问题。
地址是32位长,由网络号和本地地址两部分构成。地址有三类:A类的最高位为0,后7位表示网络号,其它的24位表示本地地址;B类
在将网络地址和本地网络地址进行映射时必须注意,有些主机可能使用几个不同的IP地址(我们可以把本地网络地址理解为MAC地址)。
分段
对于不同的网络,其中传送的包大小可能不一样,因此把大包分小的功能是必须的。数据报也可以被标记为“不可分段”,如果一个数据报被
本地网分段和重组把重组的各段加上标记,接收方使用这些标记使不同的段区别开来。段偏移量域告诉接收方应该把这一段放在什么地方,多
我们假设IP模块把一个大数据报分为两个小的,IP模块首先取得数据报头,再分隔数据为两份,将数据报头加在两份数据上。分隔数据时
对段的重组要求以下四个域有相同的值:标记,源地址,目标地址和协议。将不同的数据报根据自己带的偏移量重新组合为新段,第一个段的
2.4. 网关
网关在不同网络间传送数据报,网关也实现网关到网关协议(GGP),它用于传送路由和其它控制信息。网关中的高层协议根本不用实
3. 说明
3.1. Internet包头格式
包头格式如下:
版本:4位
此域标明包头的格式。我们现在说明的是IP版本4。
IHL:4位
Internet包头长度是以32位为单位标记的包头长度,它指向数据的开始位置,这个域的最小合法值为5。
服务类型: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
如果使用了延时(D),吞吐量(T)和可靠性(R)选项可以增加服务质量。这因各个网络不同而不同,没有通用性。除了非常特殊的情况
总长度:16位
总长度指的是数据报的长度,由字节计,包括数据和报头。允许数据报的大小为64K。这么大的数据报对大多数主机和网络来说是不适用
标识:16位
标记是发送用于帮助重组分段的包的。
标记:3位
0: 保留,必须为0
1: (DF) 0 = 可分段,1 = 不可分段
Bit 2: (MF) 0 = 最后一段,1 = 还有多段
段偏移:13位
此域指示这个段在应该在数据报中什么位置,它以64位为单位计算,首段的偏移为零。
生存期:8位
此域说明数据报在互联网系统生存的最大时间。如果此域的值为零,抛弃此数据报。在处理报头的同时也处理此域。时间以秒计,但每个处理
协议:8位
此域指示用于数据报数据部分的下一层协议。
头校验码:16位
校验码只在头部,因此头域会在处理时改变,因此头会经常改变。这种校验方法比较容易计算,实验证明它也是适用的,但它可能在未来被
源地址和目的地址:32位,具体情况请看下文。
选项:长度不定
在数据报中可以有选项也可以没有,但IP模块中必须有处理选项的功能。有些情况下,安全选项是必须的。它的长度不定,可以没有也可以
1: 单独一个选项类型字节
2:
选项长度是选项类型,长度本身和数据的长度。选项类型可被看作有3个域:
1位 复制标记
2位 选项类
5位 选项号
复制标记指这个选项要在分段是要存在于所有段中。
0 = 不复制
1 = 复制
选项类有:
0 = 控制
1 = 保留
2 = 调度和测量
3 = 保留
下面是具体选项:
特定选项定义
选项表结束
+--------+
|00000000|
+--------+
Type=0
此选项指示选项表的结束,它不一定和报头结束点一致,它用于指示选项表的结束而不是每个选项的结束,只有当选项表结束位置和报头结束
无操作
+--------+
|00000001|
+--------+
Type=1
此选项可被用于选项间,它可以被复制,引入或在分段时删除。
安全
此选项提供主机一种发送安全,compartmentation,处理限制和TCC参数的方法。此选项的格式如下:
类型=130 长度=11
安全(S域):16位
安全共分16级,8级保留。
00000000 00000000 - 未分类的
11110001 00110101 - 机密
01111000 10011010 - EFTO
10111100 01001101 - MMMM
01011110 00100110 - PROG
10101111 00010011 - 限制的
11010111 10001000 - 秘密
01101011 11000101 - 绝对机密
00110101 11100010 - 保留
10011010 11110001 - 保留
01001101 01111000 - 保留
00100100 10111101 - 保留
00010011 01011110 - 保留
10001001 10101111 - 保留
11000100 11010110 - 保留
11100010 01101011 - 保留
Compartments(C域):16位
全0代表传送的信息是非compartment的。
处理限制(H域):16位
控制值和版本标记是由字母和数字组成的,具体说明请参阅其它资料。
传输控制码(TCC域):24位
提供控制流量的方法。TCC的值为三字母词,在HQ DCA Code
松源地址和记录路由
+--------+--------+--------+---------//--------+
|10000011| length | pointer| route data
+--------+--------+--------+---------//--------+
Type=131
松源地址和记录路由(LSRR)可以由源地址提供路由信息,并记录路由信息。这个选项以选项类型码开始。第二位是选项长度,第三位是
如果目的地址已经达到,而指针未大于长度,源路由中的下一地址代替目的地址域中的地址,同时记录的路由地址代替则使用过的源地址,将
紧源地址和记录路由
+--------+--------+--------+---------//--------+
|10001001| length | pointer| route data
+--------+--------+--------+---------//--------+
Type=137
紧源地址和记录路由(SSRR)选项可以由源地址提供路由信息,并记录路由信息。这个选项以选项类型码开始。第二位是选项长度,第三
如果目的地址已经达到,而指针未大于长度,源路由中的下一地址代替目的地址域中的地址,同时记录的路由地址代替则使用过的源地址,将
记录路由
+--------+--------+--------+---------//--------+
|00000111| length | pointer| route data
+--------+--------+--------+---------//--------+
Type=7
此选项提供了记录数据报路由的方法。这个选项以选项类型码开始。第二位是选项长度,第三位是一个指针,指向路由数据中下一个要被处理
当IP模块处理数据报时,它检查是否有记录路由选项,如果有,它将自己的IP地址放入记录路由地址空间,指针值加4。如果地址空间已
流标记
10001000
00000010
流ID
类型=136 长度=4
此选项提供一种在不支持流的网络中传送16位SATNET流标记的方法。分段时必须复制。
Internet时间戳
类型=68
选项长度是在选项内的类型,长度,指针和溢出/标记字节的大小。指针是从选项开始到时间戳结束的字节数加一。最小值为5。当指针大于
0 -- 仅有时间戳,保存于连续的32位字中;
1 -- 每个时间戳前都有注册单元的IP地址;
3 -- IP地址域是预先指定的,如果IP模块的地址和下一个指定的IP地址一致,则注册自己的时间戳。
时间戳是从UT午夜时间开始以毫秒计算的,如果时间不以毫秒计算,或不能提供以UT午夜为基准,那用什么时间倒都可以,只要时间戳的
如果剩余的空间不能使完全的时间戳加入,或溢出计数溢出,源数据报出错并被抛弃。ICMP参数信息消息会发送到源主机。此选项在分段
填充:变长
报头域填充用于保证报头是32位的倍数。填充值为0。
3.2. 讨论
协议的实现必须健壮,每个实现都要保证与其它人的实现兼容。通常一个实现在发送时应该遵守比较保守的策略,在接收时大可不必保守。也
基本的Interent服务是面向数据报的,在网关处可以提供以数据报的分段和在目的主机的重组服务。当然,在一个网络内或在因遵守
寻址
为了可以对网络大小进行灵活的控制,IP地址提供了几类地址,一类是可以容纳比较多主机的网络,一种容纳的主机数就比较少,我们大家
如果网络域为零意味着本网络,这种方式仅在于特定的ICMP消息中使用;扩展的地址模型未定义。
由本地网络指定的本地地址必须考虑到单个的主机可以作为不同的网络主机使用。也就是说,必须在网络主机地址和网络/主机接口之间进行
分段和重组
Internet标记域(ID)和源地址,目的地址和协议域一起用于确认数据报分段和重组。如果数据报不是最后一段,则设置多段标记
每个IP模块必须能够不分段地传送68字节的数据报。这因为IP包头会达到60字节,而最小数据段长为8,68=60+8;而它也必
会被分段影响的域包括:
(1) 选项域
(2) 多段标记
(3) 段偏移
(4) Internet包头长度域
(5) 总长度域
(6) 包头校验码
如果设置了不分段标记(DF),则不可进行分段,即使数据报会因此而被抛弃。如果接收主机不能进行重组时则需要设置此位。我们在进行
能够在下一个网络传送的最大数据报称为最大传输单元(MTU)。如果数据报的长度小于等于MTU,进行下一步;否则分为两段,第一段
FO - 段偏移
IHL - Internet包头长度
DF - 不分段标记
MF - 多段标记
TL - 总长度
OFO - 原段偏移
OIHL - 原Internet包头长度
OMF - 原多段标记
OTL - 原总长度
NFB - 段数
MTU - 最大传输单元
过程:
IF TL <= MTU THEN 将此数据报提交给下一处理阶段
ELSE IF DF = 1 THEN 抛弃数据报
ELSE 产生第一段:
(1) 复制源internet包头;
(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) 有选择地复制internet头;
(8) 附加剩余数据;
(9) 校正包头:IHL <- (((OIHL*4)-(未复制的选项长度))+3)/4;
TL <- OTL - NFB*8 - (OIHL-IHL)*4);
FO <- OFO + NFB;MF <- OMF;重新计算校验码;
|