`2-RFC:791
互联网协议
DARPA 互联网程序
协议规范
1981.9
防御高级研究计划结构
信息处理技术办公室
1400 Wilson Boulevard
Arlington, Virginia
22209
南吉利福尼亚大学信息科研所
目录
前言 ........................................................ iii
1. 介绍 .................................................... 1
1.1 出发点.................................................... 1
1.2 范围.........................................................
1
1.3 接口 .................................................... 1
1.4 操作 ..................................................... 2
2. 总览 ......................................................... 5
2.1 同其他协议的联系 ................................... 9
2.2 操作模型 ............................................ 5
2.3 功能描述 .......................................... 7
2.4 网关 ...................................................... 9
3. 规范 ................................................... 11
Internet 头部格式 ....................................... 11
3.1
3.2 讨论 .................................................. 23
3.3 接口 ................................................... 31
附录 A: 范例................................... 34
附录 B: 数据传输顺序................................ 39
词汇............................................................ 41
参考.......................................................... 45
[Page i]
前言
本文档详细说明叻国防部(DoD)的标准互联网协议.文档基于 APRA 互联网协议的
前六个早期版本.很多人对规范的概念以及正文作出过贡献.这个版本对寻址
(addressing),错误处理(error handling ),选项编码(option codes),以及互联
网的安全(security)、优先(predence),划分(compartments)、处理限制的
特性作出了修订。
Jon Postel
Editor
September
1981
1.介绍
1.1 出发点(Motivation)
Internet 协议是为了在包交换(packet-switched)计算机通讯网络的互联系统
中使用而设计的。我们称这样的系统为“catener”【1】。Internet 协议提供
从发起者(source)到目的地(destination)的块数据(数据报)的传输,发
起者和目的地都是由固定长度的地址标识的主机(host)。如果需要,Internet
协议也提供长数据报的分片(fragmentation)和重组(reassembly),以通过
“小包”(small packet)网络传输大数据报。
1.2. 范围(Scope)
internet 协议仅限于提供在互联网络系统上从发起者到目的地投递一个
internet 数据报所需的功能。不提供增强端到端(end-to-end)的可靠性,流程
控制(flow control),排序(sequencing),和其它主机到主机协议上常有的
服务。internet 协议可以支持网络提供不同类型和不同质量的服务(The
internet protocol can capitalize
on the services of its supporting networks to provide various types and
qualities of service.)。
1.3. 接口(Interfaces)
在 internet 环境中,本协议被视为主机到主机(host-to-host)的协议。本协
议调用本地网络协议来携带 internet 数据报到下一个网关或者目的主机。
比如,TCP 模块调用 internet 模块携带一个 TCP 分片(该分片包含了 TCP 头部
和用户数据)作为一个 internet 数据报的数据部分。TCP 模块会在 internet 头
部中提供地址(addresses)和其他参数作为调用 Internet 模块的参数。然后
internet 模块会创建一个 internet 数据报并且调用本地网络接口来传输
internet 数据报。
比如,对于 ARPANET,internet 模块会调用一个本地网络模块(local net
module),该模块会给 internet 数据报添加一个 1822 个字节的前导字符,创建
一条传输给 IMP 的 ARPANET 消息。ARPANET 地址将通过本地网络接口从 internet
地址中获取,该地址是 ARPANET 中的某些主机的地址,该主机可能是个到其他网
络的网关。
1.4 操作(operation)
internet 协议执行两个基本功能:寻址(addressing)和分片(fragmentation).
internet 模块使用在 internet 头部中携带的地址来给目的地址传送 internet
数据报.传输路径的选择被称作选路(routing).
internet 模块使用 internet 头部中的域来分片和重组 internet 数据报,这在通
过"小包"网络传输的情况下是必要的.
操作模型是位于每个主机上的 internet 模块负责 internet 通信,位于每个网关
上的 internet 模块负责网络互联.这些模块都具有解析地址,分片和重组数据报
等相同的功能.另外,这些模块(特别是网关上的 internet 模块)具有选路和其他
功能对应的程序.
internet 协议将每个 internet 数据报视为同任何其他 internet 数据报无关的
独立实体.这里不存在连接或者逻辑回路(虚的或其他).
internet 协议使用 4 个主要的机制提供服务:服务类型(Type of Service),生
存时间(Time to Live),操作(Operation)和校验和(Header
Checksum).
服务类型用来指示要求的服务质量.服务类型是一个抽象的整套的参数,这些参
数指定了组成 internet 的网络中提供的服务选择.这个服务指示类型在选路的
时候被网关用来为某一个特定的网络,下一个网络或者下一个网关选择真实的传
输参数.
生存时间数据报生存时间的上限.它由数据报的发送者设定,在网络上每个点,当
数据报被处理的时候,逐渐递减.如果生存时间在 internet 数据报到达目的地址
前达到 0 值,internet 数据报就被销毁.生存时间可以看作一个自我销毁时间限
制.
选项(options)提供了在某些情况下需要或有用的控制功能,但是大多数情况下
是不必要的.选项包括时间戳(timestamp),安全(security)和特殊选路(special
routing)
校验和提供了处理 internet 数据报使用到的信息被正确传输的确认.数据可能
包含错误.如果校验和失败了,internet 数据报就被检测到错误的实体立即丢
弃.
Internet 协议并没有提供可靠传输机制.没有端对端或者逐跳(hop-by-hop)的
确认机制.没有数据的错误控制,只有一个头部校验和.没有重传.没有流控.
检测到的错误可以通过 Internet 控制消息协议(ICMP)来报告,该协议在
internet 协议模块中实现.
2. 总览(OVERVIEW)
2.1. 同其他协议的关系(Relation to Other Protocols)
下图展示了 internet 协议在协议层次中的地位:
+------+ +-----+ +-----+
|Telnet| | FTP | | TFTP| ... | ... |
+------+ +-----+ +-----+
+-----+
+-----+
|
|
+-----+
| TCP |
+-----+
|
|
+-----+
|
+-----+
| UDP | ... | ... |
+-----+
|
+-----+
|
+--------------------------+----+
|
+--------------------------+----+
Internet Protocol & ICMP
|
|
+---------------------------+
|
Local Network Protocol |
+---------------------------+
Protocol Relationships
Figure 1.
Internet 协议接口往上是高级别的主机到主机的协议,向下则是局域网络协议
(local network protocol).在这里,局域网络("local network")可以是在一栋
大楼里面的一个小网络,也可以是像 ARPANET 这样的大网络.
2.2. 操作模型(Model of Operation)
从一个应用程序到其他应用程序的传输数据报操作模型可以通过如下例子展示:
假设传输包括一个中间网关.
发送程序准备好数据后,调用局域网络模块来发送那个数据(该数据作为一个
数据报),在调用接口的时候传递目的地地址和其他参数.
Internet 模块组装数据报头部,并且给他附着一个数据.Internet 模块为这
个 internet 地址确定一个局域网络地址.在这里,它就是一个网关的地址.它发
送这个数据报和局域网络地址给局域网络接口.
局域网络接口创建一个局域网络头部,并为它附着一个数据报,然后通过局域
网络传输.
到达网关主机的数据报被封装(wrapped)在局域网络头部.局域网络接口去掉
(strip off)头部,然后将数据报传送给 internet 模块.internet 模块从
internet 地址确定数据报需要被发送到第二个网络的其他主机上.internet 模
块确定目的主机的局域网地址.调用局域网接口来发送数据报.
这个局域网地址创建一个局域网头部并和数据报组装在一起,然后将组装结
果发送给目的主机.
在这个目的主机上,局域网接口去掉数据报的局域网头部,然后交给 internet
模块.
internet 模块确定数据报所要交付的应用程序.然后将数据作为一个系统调
用的响应传递给应用程序,调用时传递了源地址和其他参数.
Application
Program
\
Internet Module
Internet Module
Application
Program
/
Internet Module
\
LNI-1
\
/
LNI-1
\
Local Network 1
/
/
LNI-2
LNI-2
\
/
Local Network 2
Transmission Path
Figure 2
2.3. 功能描述(Function Description)
Internet 协议的功能和目的是通过一个互联的网络传输数据报.这是通过从一
个 internet 模块到另外一个 internet 模块传递数据报直到目的地址来实
现.Internet 模块位于主机上或者 internet 系统上的网关.数据报通过基于一个
internet 地址的解析从一个 internet 模块选路到另一个 internet 模块. 因
此,internet 协议的一个重要功能就是 internet 寻址.
在从一个 internet 模块到另外一个 internet 模块的信息寻址中,数据报可能需
要在一个最大包大小小于数据报大小的网络上传输.为了客服这个困难,在
internet 协议中提供了分片机制(fragmentation mechanism).
寻址(Addressing)
名字(names),地址(addresses)和路由(routes)是有区别的.名字指示了我们所
要寻找的.地址告诉我们它在哪里.路由告诉我们如何到达哪里.internet 协议
主要处理地址.从域名到地址的映射是高级别的协议(如主机到主机或者应用程
序)的任务.Internet 模块将 Internet 地址映射为局域网络地址.将局域网络地
址映射到路由是底层程序(如局域网络或者网关)的任务.
地址固定为 4 段 8 位的地址(32 位).以网络号码开始,接下来是本地地址(称
为"其他"部分).有 3 种形式或者类型的 internet 地址:A 类地址,第一段的最高
位为 0,其他 7 位为网络地址.剩下的 24 位位本地地址.B 类地址,前两段为网络
地址,其中前两个字节位 10,其他 14 个字节为网络地址,后两段为本地地址.C 类
地址的前三段为网络地址,最后一段为本地地址.在前三段中,前三位为 110,其
他 21 位为网络地址.
在将 internet 地址转化位局域网络地址的时候必须注意:单个物理主机必须
能够被视为几个不同的主机,通过使用不同了 internet 地址。有些主机还可能有
多个物理接口(multi-homing).
也就是说,对一个主机来说,必须可以有多个网络的物理接口,每个接口可以
有多个逻辑 internet 地址.
地址映射的例子可以参考"Address Mappings"[5]
分片(Fragmentation)
当在一个允许大包大小的 internet 数据报的局域网络上产生,且必须在包大小
为较小的局域网络上传输的时候,分片是必须的.
一个数据报可以标为"不可分片".任何 internet 数据报如果这样标记,则在任
何情况下,不能被分片.如果标记为"不可分片"的数据报除非分片不能到达目的
地,则将其丢弃.
在对 internet 协议模块不可视的局域网络上分片,传输和重组称为 intranet
分片,可以被使用.
internet 分片和重组程序需要能够将一个数据报分割成任意数量的块,这些
块可以在之后重组.分片接收者使用 identification 头部来确保不同的分片不
被混在一起.分片偏移(fragment offset)头部告诉接收者分片在原始数据报中
的位置.分片偏移和分片长度(frament length)确定了这个分片所覆盖的原始数
据报的块.more-fragments 标志(通过重置)指示了最后一个分片.这些头部提供
了足够的信息来重组数据报.
identification 头部被用来区分一个数据报的不同分片.internet 数据报的
生成(originating)协议模块设定 identification 头部为一个值,该值必须是对
源地址和目的地址对和协议范围内在数据包的生存期间是唯一的(译者注:该值
对同一 source,destination,protocol 在生存期间是唯一的).对于一个完整的
数据报数据包的生成协议模块(originating protocol module)设定
more-fragments 标志为 0,同时设定分片偏移为 0.
为了对一个长 internet 数据报进行分片,internet 协议模块(如网关),创建
两个新的 internet 数据报,将 internet 头部内容从长数据报拷贝到两个新
internet 头部.长数据报的数据在 8 octet 的整数倍边界被分割成两部分(第二
部分不必是 8 octets 的整数倍,但第一部分必须是).将第一部分 8 octet 块的数
目为 NFB(Number of Fragment Blocks:分片块个数).第一部分数据被放在第一
个新的 internet 数据报,总长度头部设置成第一个数据报的长
度.more-fragments 标志设成 1.数据的第二部分放在第二个新 internet 数据报
里面.总长度头部设置成第二个数据报的长度.more-fragments 标志设置成同长
数据报一样的值.第二个新 internet 数据报的片偏移头部值设置成长数据报的
片偏移头部值加上 NFB 的和.这一过程可以通用化为 n 次分割,前面描述的是二
分.
要重组 internet 数据报的分片,internet 协议模块(比如目的主机)将
identification,目的地地址,源地址和协议四个头部值一样的 internet 数据报
组合在一起.这一结合是通过将每个分片的数据块放在分片的 intenet 头部中的
片偏移标识的位置来实现的.第一个分片的分片偏移值为 0,最后一个分片的
more-fragments 标志为 0.
2.4. 网关(Gateways)
网关实现了 internet 协议,可以在网络间前推数据报.网关也实现了网关到网关
的协议(GateWay to Gateway Protocol:GGP 协议),用于协调选路和其他 internet
控制信息.
在网关中,高层协议需要被实现,且 GGP 功能被加到 IP 模块.
+-------------------------------+
| Internet Protocol & ICMP & GGP|
+-------------------------------+
|
+---------------+
|
+---------------+
Local Net
|
|
+---------------+
|
Local Net
|
+---------------+
Gateway Protocols
Figure 3.
3. 规范(SPECIFICATION)
3.1. Internet 头部格式(Internet Header Format)
internet 头部内容如下:
1
2
3
|Flags|
Total Length
Identification
0
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Destination Address
Fragment Offset
Header Checksum
|
Padding
|
Source Address
|
|
|
Protocol
|
|
|
Options
Example Internet Datagram Header
Figure 4.
注:每个间隔代表一位.
版本(version):4 位
版本头部指示了 internet 头部的格式.本文当描述的是版本 4.
Internet 头部长度(IHL): 4 位
internet 头部长度是用 32 位表示的 internet 头部的长度,它指向数据的开始处.
备注:一个正确头部的最小头部长度值是 5.(译者注:5 表示头部长度值为 5*4=20
0ctets)
服务类型(Type of Service):8 位
服务类型提供了所要求的服务质量的抽象参数的指示.这些参数被用于在一个
特定的网络上传输数据报时指导真实服务参数的选择.有些网络会提供服务优先
级参数(service Precedence),高优先级的交通流比其他交通流重要一些(通常
通过在高负载的时候仅接受高于某一特定优先级的交通流来实现).主要的选择
是 3 方面的权衡:低延迟(low-delay),高可靠性(high-reliability),和高吞吐
(high-throughput)..
Bits 0-2: Precedence(优先级).
Bit
Bits
3: 0 = Normal Delay(正常延迟),
4: 0 = Normal Throughput(正常吞吐), 1 = High Throughput(高
1 = Low Delay(低延迟).
吞吐).
Bits
5: 0 = Normal Relibility(正常可靠性), 1 = High Relibility(高