editor版本RFC791中文-IP协议
RFC 791 - 互联网协议
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
3.1  Internet头部格式 ....................................... 11
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)和其他参数作为调用Int
ernet模块的参数。然后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                                          Application
Program                                                  Program
\                                                  /     
Internet Module      Internet Module      Internet Module   
\                /      \                /         
LNI-1          LNI-1      LNI-2        LNI-2         
\          /            \          /             
Local Network 1          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头部中的片偏移标识的位置