首页资源分类电子电路模拟及混合电路 > ( RFC791中文文档

( RFC791中文文档

已有 445117个资源

下载专区

电子电路热门资源

本周本月全部

文档信息举报收藏

标    签:RFC791

分    享:

文档简介

RFC791中文文档

文档预览

`2-RFC:791 互联网协议 DARPA 互联网程序 协议规范 1981.9 防御高级研究计划结构 信息处理技术办公室 1400 Wilson Boulevard Arlington, Virginia 22209 南吉利福尼亚大学信息科研所 目录 前言 ........................................................ iii 1. 介绍 .................................................... 1 1.1 1.2 1 1.3 1.4 出发点.................................................... 1 范围......................................................... 接口 .................................................... 1 操作 ..................................................... 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 1981 September 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 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 头部中的 片偏移标识的位置来实现的.第一个分片的分片偏移值为 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 头部内容如下: 0 1 2 3 01234567890123456789012345678901 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 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 3: 0 = Normal Delay(正常延迟), 1 = Low Delay(低延迟). Bits 4: 0 = Normal Throughput(正常吞吐), 1 = High Throughput(高 吞吐). Bits 5: 0 = Normal Relibility(正常可靠性), 1 = High Relibility(高 可靠性). Bit 6-7: Reserved for Future Use(保留). 01234567 +-----+-----+-----+-----+-----+-----+-----+-----+ | |||||| | PRECEDENCE | D | T | R | 0 | 0 | | |||||| +-----+-----+-----+-----+-----+-----+-----+-----+ Precedence(优先级) 111 - Network Control(网络控制) 110 - Internetwork Control(互联网络控制) 101 - CRITIC/ECP(至关重要) 100 - Flash Override(Flash 覆盖) 011 - Flash 010 - Immediate(立即) 001 - Priority(主要) 000 - Routine(常规) 延迟(Delay),吞吐量(Troughout)和 Reliability(可靠性)的指示可能会增加服 务的代价.在很多网络中,某一个参数带来的高性能很可能带来其他参数的低性 能.只有在一些非正常的情况下,这三个指示中两个必须设定. 服务类型被用于在通过 internet 系统传输的时候指定数据报的处理.在 Service Mappings[8]中给出了 internet 服务类型到真正的服务类型的映射的例 子,如 AUTODIN II,ARPANET,SATNET 和 PRNET. 网络内控制优先权的指派仅在一个网络内使用.该指派的使用和控制是胜任于网 络内的.网络间控制优先级的指派仅用于网关控制创作者.如果这些优先权指派 的真实使用是同某一个特定网络相关的,它就负责那些优先级指派的权限控制和 使用. 总长度(Total Length):16 位 总长度是数据报的总长度,以字节(octets)为单位计量,包含 internet 头部和 数据.这个头部允许一个数据报的长度最长到 65535 个字节.如此长的数据报对 大部分主机和网络来说是不现实的. 所有主机必须能够接收长达 576 个字节的数 据报(不管他们是以整个数据报到达还是以分片到达).推荐主机在确认目的地址 能够接收大数据报的情况下才发送大于 576 字节的数据报. 选择 576 这个数字是为了允许传送一个合理大小的数据块,除了要求的头部信息 之外.比如,这个大小允许 512 个字节的数据块加上 64 个字节的头部填充于一个 数据报.最大的 internet 头部是 60 个字节,通常 internet 头部是 20 个字节,允 许高层协议流出一个头部富余量. 标识(Identification):16 位 该标识由发送者设定值,有助于重组数据报的分片. 标记(Flags): 3 位 不同的控制标记: Bit 0: 保留,必须位 0 Bit 1: (DF) 0 = 可以分片(May Fragment), 1 =不可分片( Don't Fragment). Bit 2: (MF) 0 = 最后一个分片(Last Fragment), 1 = 还有分片(More Fragments). 012 +---+---+---+ | |D|M| |0|F|F| +---+---+---+ 分片偏移(Fragment Offset): 13 位 该头部指示了这个分片在所属数据报中的位置.分片偏移以 8 字节(64 位)作为计 量单位.第一个分片的偏移为 0. 生存时间(Time to Live):8 位 该头部指示了数据报允许在 internet 系统中生存的最大时间.如果该头部的 值为 0, 数据报必须被销毁.该头部在 internet 头部处理的时候被改变,该时间以秒单位 度量,但由于处理数据报的每个模块必须减少 TTL 至少 1 秒,即便该模块处理数据 报的时间少于 1 秒,TTL 必须被视为数据报可以存在的时间的上限.这样做的目的 是丢弃无法投递的数据报,限制数据报的生存时间 协议(Protocol):8 位 该头部指示了在 internet 数据报的数据部分中使用的下一个层次的协议. 不同协议的值在”Assigned Numbers”[9]中指定. 头部校验和(Header Checksum):16 位 校验和仅用于头部.当某些头部(比如生存时间)改变的时候,检验和在每个 internet 头部被处理的时候被重新计算和确认. 校验和的算法如下: 检验和头部是头部中所有 16 位字的和,为了计算校验和,校验和头部的值是 0.这是计算校验和和实验性证据的简单方法,这指示了它是一个充分的,但它是 暂时的,可能被一个 CRC 程序替代,取决于未来的的实验. 源地址(Source Address):32 位,参见 3.2 目的地址(Destination Address):32 位,参见 3.2 选项(Options):可变 选项可以出现也可以不出现在数据报中.所有的 IP 模块(主机和网关)必须实现 这个东东.可选的是在任一个特殊数据报中它们的传输,而不是它们的实现. 在某些环境下,安全选项(security option)可能在所有的数据报中需要. Options 头部在长度上是可变的.可以有 0 到多个的选项.option 的格式有两种情 况: 情况 1:一个单独的 8 位字节的选项类型(option-type) 情况 2:一个选项类型(option-type)八位字节,一个选项长度(option-length) 八位字节和其他真实的选项数据八位字节. 选项长度八位字节计入 了选项 类型八位字节.选项长度八位字节以及选项数据 八位字节. 选项类型八位字节有 3 部分: 1 bit: 拷贝标志(copied flag) 2 bits:选项类别(option class) 5 bits:选项数目(option number) 拷贝标志位指明该选项是否被拷贝到所有分片中. 0 = 未被拷贝 1 = 拷贝 选项类别是: 0 = 控制(control) 1 = 保留 2 = 调试和测量(debugging and measurement) 3 = 保留 定义了如下 internet 选项: CLASS NUMBER LENGTH DESCRIPTION ----- ------ ------ ----------0 0 - 选项列表的结束.该选项仅占用 1 个八位字节,没\ 有长度字节 0 1 - 没有操作. 该选项仅占用 1 个八位字节,没\ 有长度字节 2 安全(Security). 用于携带安全(security),分隔 (Compartmentation),用户组(User Group,TCC), 和同 DOD 要求兼容的处理限制码。 3 var. 宽松的源站(Loose Source Routing). 用来 基于源(source)提供的信息为 internet 数据报 选路。 9 var. 严格源选路(Strict Source Routing). 用来基 于源(source)提供的信息为 internet 数据报选路 7 var. 记录路径(Record Route).用来 trace 一个 internet 数据报经过的路径 0 8 4 流 ID(Stream ID).用来携带流标识 2 4 var. Interne 时间戳 特殊选项定义(Specific Option Definitions) 选项列表的结束 +--------+ |00000000| +--------+ Type=0 该选项指示了选项列表的结束。这有可能同根据 internet 头部长度的 internet 头部的结束不一致。这用于所有选项的结束,而不是每一个选项的结束,并且仅 在选项的结束同 internet 头部结束不一致的情况下需要使用。 可以在分片或者其它原因时被拷贝,引入,或者删除 无操作(No Operation) +--------+ |00000001| +--------+ Type=1 这个选项可以在选项间使用,比如,可用以在 32 位边界对齐后续选项 的开始部分。 可以在分片或者其它原因时被拷贝,引入或 者删除 安全(Security) 该选项为主机提供了发送安全(security), 分隔(Compartmentation), 处理 限制,和 TCC(关闭的用户组)参数。 该选项的格式如下: +--------+--------+---//---+---//---+---//---+---//---+ |10000010|00001011|SSS SSS|CCC CCC|HHH HHH| TCC | +--------+--------+---//---+---//---+---//---+---//---+ Type=130 Length=11 安全(S 域): 16 位 指定了安全的 16 个级别(其中的八个留作将来用) 00000000 00000000 - Unclassified 11110001 00110101 - Confidential 01111000 10011010 - EFTO 10111100 01001101 - MMMM 01011110 00100110 - PROG 10101111 00010011 - Restricted 11010111 10001000 - Secret 01101011 11000101 - Top Secret 00110101 11100010 - (Reserved for future use) 10011010 11110001 - (Reserved for future use) 01001101 01111000 - (Reserved for future use) 00100100 10111101 - (Reserved for future use) 00010011 01011110 - (Reserved for future use) 10001001 10101111 - (Reserved for future use) 11000100 11010110 - (Reserved for future use) 11100010 01101011 - (Reserved for future use) 分隔 Compartments (C 域): 16 位 当传输信息不被分隔的时候,使用全 0 值。其它值可以通过 Defense Intelligence Agency 获取。 处理限制 Handling Restrictions (H 域): 16 位 控制和释放记号包括文字和数字,在 defense intelligence agency 的手册 DIAM 65-19 ,”安全传输记 号(standard security markings)”中定义。 传输控制码 Transmission Control Code (TCC 域): 24 位 提供一种方法用来分隔信息交通流和在订户中定义利益控制实体 (Provides a means to segregate traffic and define controlled communities of interest among subscribers).TCC 值是三字母词, 可以从 HQ DCA Code 530 获取。 在分片时必须被拷贝。该选项在数据报中几乎都出现一次。 宽松源站和记录路径(Loose Source and Record Route) +--------+--------+--------+---------//--------+ |10000011| length | pointer| route data | +--------+--------+--------+---------//--------+ Type=131 松散源和记录路径(LSRR)选项提供了一种方法让 internet 数据报的 源提供给网关在前推数据报到目的地时使用 的路径信息,并且用来记 录路径信息。 该选项以选项类型码开始。第二个八位字节是包括选项类型码的选项长 度。然后是 length 八位字节,pointer 八位字节和 length-3 八位字节 的路径信息。第三个八位字节是指向路径信息的指针,该路径信息指示 由要被处理的下一个源地址开始。指针相对于这个选项,最小的合法 值是 4。 路径数据由一系列 internet 地址组成。每个 internet 地址是 4 字节 32 位。如果指针大于长度,源路径是空(且记录路径满),则路径基 于目的地址域。 如果目的地址已经到达,且指针不大于长度,源路径中的下一个地址将 代替目的地址中的地址域,记录的路径地址代替刚才使用的源地址,指 针减 4。 记录路径地址(The recorded route address)是 internet 模块自己 的地址 ,该地址是数据报前推的地址。 以记录路径代替源路径的过程意味着选项(以及作为整体的 IP 头部) 长度在数据报在 internet 上传送的时候保持不变 这个选项是一个松散源路径,因为网关或者宿主 IP 都 允许使用其它 中继网关的任何路径到达路径中的下一个地址。 在分片的时候必须被拷贝。在一个数据报中基本上出现一次。 严格源站和记录路径(Strict Source and Record Route) +--------+--------+--------+---------//--------+ |10001001| length | pointer| route data | +--------+--------+--------+---------//--------+ Type=137 严格的源和记录路径(SSRR)选项提供了一种让 internet 数据报的源 提供了让网关在前推数据报到目的地时使用的路径的信息,以及记录路 径信息的方法 该选项以选项类型码开始。第二个八位字节是包括选项类型码的选项长 度。然后是 length 八位字节,pointer 八位字节和 length-3 八位字节 的路径信息。第三个八位字节是指向路径信息的指针,该路径信息指示 由要被处理的下一个源地址开始。指针相对于这个选 项,最小的合法 值是 4。 路径数据由一系列 internet 地址组成。每个 internet 地址是 4 字节 32 位。如果指针大于长度,源路径是空(且记录路径满),则路径基 于目的地址域。 如果目的地址已经到达,且指针不大于长度,源路径中的下一个地址将 代替目的地址中的地址域,记录的路径地址代替刚才使用的源地址,指 针减 4。 记录路径地址(The recorded route address)是 internet 模块自己 的地址 ,该地址是数据报前推的地址。. 以记录路径代替源路径的过程意味着选项(以及作为整体的 IP 头部) 长度在数据报在 internet 上传送的时候保持不变 该选项十一个严格的源路径,因为网关或者宿主 IP 必 须直接通过下一个地址中指示的互联的网络发送数据 报给源路径里面的下一个地址,以到达在路径中指定 的下一个网关或者主机。 在分片的时候必须被拷贝。在一个数据报中基本上出现一次。 记录路径(Record Route) +--------+--------+--------+---------//--------+ |00000111| length | pointer| route data | +--------+--------+--------+---------//--------+ Type=7 记录路径选项提供了一种记录一个 internet 数据报的路径的方法 该选项以选项类型码开始。第二个八位字节是包括选项类型码的选项 长 度。然后是 length 八位字节,pointer 八位字节和 length-3 八位字节 的路径信息。第三个八位字节是指向路径数据的指针,指示了开始下一 个保存路径地址的区域的八位字节。指针是针对于该选项的,最小合法 值是 4。 一个记录路径由一系列的 internet 地址组成。每个 internet 地址是 32 位 4 字节。如果指针大于长度,记录路径区域满,发起宿主必须将该选项和 一个足够大的路径区域结婚起来以容纳所有的预期地址。选项的大小并不因为增 加地址而改变。路径数据区域的初使内容必须是 0。 当 internet 模块为一个数据报选路的时候,它检查看 记录路径选项是否存在。如果存在,它将自己的 internet 地址插入到记录路径中,该记录路径以指针 指示的八位字节开始,然后将指针加 4。 如果路径数据已经满了(指针超过了长度),数据报将前推,且不再将 地址插入到记录路径。如果还有空间,但空组不足于容纳要插入的整个地址,源 数据报被认为是错误的,且将被丢弃。在上述两种情况下,一个 ICMP 参数问题 信息可以被发送到源宿主。 在分片时不拷贝,仅保留在第一个分片中。几乎在每个数据报中出现 一次。 流标识(Stream Identifier) +--------+--------+--------+--------+ |10001000|00000010| Stream ID | +--------+--------+--------+--------+ Type=136 Length=4 该选项提供了一种在不支持流概念的网络上携带 16 位 SATNET 流标识 的方式 必须在分片时被拷贝,在一个数据报中基本出现一次。 Internet 时间戳(Internet Timestamp) +--------+--------+--------+--------+ |01000100| length | pointer|oflw|flg| +--------+--------+--------+--------+ | internet address | +--------+--------+--------+--------+ | timestamp | +--------+--------+--------+--------+ | . | . . Type = 68 选项长度是计入类型,长度,指针和 overflow/flag 字节(最大长度 40)的八位字节数目。 指针是从该选项开始到时间戳结束加 1 的八位字节数 目(比如,它指向下一个时间戳的空间的开始字节)。 最小合法值是 5。当指针大于长度的时候,时间戳区 域满。 Overflow(oflw)[4 位]是由于缺乏空间不能登记时 间戳的 IP 模块的数目 Flag(flg)[4 字节]值是: 0 – 仅是时间戳,以连续的 32 位字存储 1 – 每个时间戳先于登记实体的 internet 地址 3 – internet 地址预先设定。一个 IP 模块仅当他 的地址同下一个指定的 internet 地址匹配的 时候才登记时间戳 时间戳是右对齐的(right-justified), 32 位从 UT 子夜开始的 32 位毫秒 如果时间不能以毫秒提供或者不能参照 UT 子夜提供, 那么任何时间可以插入到时间戳中,将时间戳的高位 字节设为 1,来指示一个非标准值的使用。 发起宿主必须将该选项同一个足够大的时间戳数据区 域结合起来,以容纳预期的所有时间戳。选项大小不 因为增加时间戳改变。时间戳数据区域的初使内容必 须设置为 0 或者 internet 地址/0 对。 如果时间戳数据区域满了(指针超过了长度),数据 报就前推,而不再插入时间戳,但 overflow 数目加 1。 如果还有空间但是不足于插入一个完整的时间戳,或 者 overflow 数目自己溢出了,则原始数据报将被视为 错误的而被丢弃。在上述两种情况下,一个 ICMP 参数 问题消息可以被发送到源宿主。 时间戳选项在分片时不被拷贝。它在第一个分片时携 带。在每个数据报中基本出现一次。 填充(Padding): 可变 internet 头部填充用来确保 internet 头部在 32 位边界结束。填充字节是 0。 3.2. 讨论(Discussion) 协议的实现必须是健壮的。每个协议的实现必须预期同其它实现交互操作。虽 然本规范的目的是为了明确协议可能存在不同的解释。一般情况下,一个实现的 发送行为必须是保守的,接收行为则是宽大(兼容)的。也就是说,一个实现必 须小心发送正确格式的数据报,但是必须接收任何它可以解析的数据报(比如, 不反对意义仍然清晰的技术错误) 基本的 internet 服务是数据报驱动的,并且在网关提供了数据报的分片,以及 在目的主机的 internet 模块上的重组。当然,在网络内部进行分片和重组,或 者通过私底下约定在一个网络的网关之间进行分片和重组,是允许的,因为对 internet 协议和其它高层协议来说,这是透明的。这种透明类型的分片和重组 称为“网络透明(network-dependent)”(或者 intranet 分片),不在此讨论。 Internet 地址在 host 级别区分了源地址和目的地址,且提供了协议域。假定在 一个主机每个协议提供多路是必须的。 寻址(Addressing) 为了提供网络分配地址的自由性,以及允许大量的规模从小到中的网络,地址的 解释如此编码以在少量的网络上提供大量的主机,数量中等的网络上提供数量中 等的主机,大量的网络上提供数量较少的主机。另外,还有转义码用于扩展的编 码模式 地址格式(Address Formats): High Order Bits --------------- 0 host) a Format Class ------------------------------- ----- 7 位网络,24 位主机(7 bits of net, 24 bits of host) host) mode) 10 b 110 c 111 14 位网络,16 位主机(14 bits of net, 16 bits of 21 位网络,8 位主机(21 bits of net, 8 bits of 扩展地址模式转义(escape to extended addressing 在 network 域上的 0 值意味着这个网络。这仅在某些 ICMP 消息中使用。 扩展的地址模式还未定义。这些特性保留给以后用。 为网络地址分配的真实值在”Assigned Numbers”[9]中给出。 由局域网分配的局域网地址,必须允许一个单独的物理主机充当几个不同的 internet 主机。也就是说,在 internet 主机地址和网络/主机接口之间必须有 一个映射,允许多个 internet 地址对应一个接口。同时,必须允许一个主机有 多个物理地址,且每个从这些地址出来的数据报,必须被视为从一个单独的主机 出来的。 Internet 地址和 ARPANET,SATNET,PRNET 和其它网络之间的地址映射 在”Address Mappings”[5]中进行描述。 分片和重组 internet 标识头部(ID)同源地址,目的地址和协议头部一起在重组的时 候来标识数据分片。 如果数据报不是最后一个分片,设置 More 分片标志位(MF)。分片偏移头部 指示了分片位置,相对于初始的未分片的数据报的开始。分片以 8 位字节计数。 未分片的数据报具有全 0 的分片信息(MF=0,分片偏移=0)。如果一个 internet 数据报被分片,它的数据部分必须在 8 位字节边界分隔。 这种格式允许一个 65536 的八位字节数据报有 2**13=8192 个 8 位字节分片。 注意这是同数据报总长度头部一致的(当然,头部是以总长度而不是分片来计算 的) 当分片发生的时候,有些选项被拷贝,但是其它的仍然仅在第一个分片中保留。 每个 internet 模块必须能够在不进行分片的情况下前推一个 68 个八位字节的数 据报。这是因为一个 internet 头部可能要达到 60 个八位字节,而最小的分片是 8 个 8 位字节。 每个 internet 目的地必须能够接受一个 576 个八位字节的数据报,不论这个数 据报是在一个分片里面,还是在多个分片里面需要重组。 可能被分片影响到的头部包括: (1) 选项头部(options) (2) more 分片标志 (3) 分片偏移 (4) internet 头部长度 (5) 总长度头部 (6) 头部校验和 如果设置了禁止分片标志(DF)位,数据报的分片是不允许的,虽然它可能 被丢弃。这可以用在当接受主机没有足够资源进行重组数据报的情况下禁止分 片。 一个禁止分片特性的例子是向一个小主机下线装载(down line load)。一 个小主机可以有一个 boot 捆绑程序,允许一个数据报存储在里面,然后执行它 (One example of use of the Don't Fragment feature is to down line load a small host. A small host could have a boot strap program that accepts a datagram stores it in memory and then executes it.) 分片和重组可能更容易通过例子描述。下面的程序是例子实现。 在下面的伪程序中的通用符号:”=<”表示小于等于,”#”表示不等 于,”=”表示等于,”<-“表示设置成,另外,“x to y”表示包含 x 排除 y。 比如 4 to 7 包括 4,5,和 6(不包括 7) 分片程序的一个例子: 可以在下一个网络中被传输的最大数据报大小被称为最大传输单元(MTU) 如果总长度小于或者等于最大传输单元,则在处理数据报的时候直接将数据报 呈给下一个节点。否则将数据报分隔成两个分片,第一个分片设置成最大的分片 大小,第二个分片则是数据报的剩余部分。第一个分片在数据报处理中被呈送给 下一个节点,而第二个分片如果仍然比 MTU 大则被呈送给分片程序。 符号(Notation): FO - 分片偏移(Fragment Offset) IHL - Internet 头部长度(Internet Header Length) DF - 禁止分片标志(Don't Fragment flag) MF - More 分片标志(More Fragments flag) TL - 总长度(Total Length) OFO - 老分片偏移(Old Fragment Offset) OIHL - 老 Internet 头部长度(Old Internet Header Length) OMF - 老 More 分片标志(Old More Fragments flag) OTL - 老总长度(Old Total Length) NFB - 分片块数量(Number of Fragment Blocks) MTU - 最大传输单元(Maximum Transmission Unit) 程序(Procedure): 如果 TL<=MTU,则将该数据报上呈给下一个数据报处理环节 否则如果 DF=1,则丢弃数据报 否则 处理第一个分片: (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; 重新计算校验和 (10) 提交该数据分片给数据报处理流程中的下一个节点.完成 在上述程序中,每个分片(除最后一个)被设置成最大允许大小。另外一个可选 的方案是产生小于最大允许大小 的分片。比如,分片程序可以重复地将大数据报分成两半直到最后的分片小于最 大传输大小。 一个重组程序例子 对每个数据报来说,buffer 标识是通过源地址,目 的地址,协议和分片标识头部结合计算得到的。 如果这是一个完整的数据报(也就是分片偏移和 more 标志 头部都是 0),则任何同这个 buffer 标识关联的 重组资源被释放,数据报被前推给下一个节点。 如果这个 buffer 标识现在没有其它分片,则重组资源被 分配。重组资源包括一个数据缓冲,一个头部 缓冲,一个分片块位表,一个总数据长度头部,和一个定时器。 分片的数据根据分片偏移和长度被放在数据缓 冲中,且在分片块位表中根据接收到的分片块设定位。 如果是第一个分片(分片偏移为 0),头部被放在头部 缓冲中。如果是最后一个分片(more 标志位 是 0),总的数据长度被计算。如果分片完成了数据报(通过 检查设置在分片块表中的位来测试),则数据报 被送到数据报的下一个处理步骤中。否则,定时器设置成当前 定时器值和分片生存时间(TTL)两者的大值, 然后重组程序放弃控制。 如果定时器时间到了,该缓冲标识的所有的重组资源将 被释放。定时器的初始化设置是比重组等待时 间小的界限。这是因为如果到达分片的生存时间如果大于当前 定时器值,等待时间将被增加,但是如果到达 分片的生存时间小于当前定时器值,则不会被减少。该定时器 可以达到的最大值是生存时间的最大值(大约 4.25 分钟左右)。当前推荐的初始化定时器设置是 15 秒。可 以根据协议积聚的经验修改该值。注意该参数值的 选择是同可用的缓冲容量以及传输媒介的数据传输率相关的。 也就是说,数据传输率乘以定时器值等于缓冲 大小(e.g.,10kb/s*15s=150kb). 符号(Notation): FO - 分片偏移(Fragment Offset) IHL - Internet 头部长度(Internet Header Length) MF - More 分片标志(More Fragments flag) TTL - 生存时间(Time To Live) NFB - 分片块数目(Number of Fragment Blocks) TL - 总长度(Total Length) TDL - 总数据长度(Total Data Length) BUFID - Buffer 标识(Buffer Identifier) RCVBT - 分片接收位表(Fragment Received Bit Table) TLB - 定时器下限(Timer Lower Bound) 程序(Procedure): (1) BUFID <- source|destination|protocol|identification; (2) IF FO = 0 AND MF = 0 (3) THEN IF buffer with BUFID is allocated (4) THEN flush all reassembly for this BUFID; (5) Submit datagram to next step; DONE. (6) ELSE IF no buffer with BUFID is allocated (7) THEN allocate reassembly resources with BUFID; TIMER <- TLB; TDL <- 0; (8) put data from fragment into data buffer with BUFID from octet FO*8 to octet (TL-(IHL*4))+FO*8; (9) set RCVBT bits from FO to FO+((TL-(IHL*4)+7)/8); (10) IF MF = 0 THEN TDL <- TL-(IHL*4)+(FO*8) (11) IF FO = 0 THEN put header in header buffer (12) IF TDL # 0 (13) AND all RCVBT bits from 0 to (TDL+7)/8 are set (14) THEN TL <- TDL+(IHL*4) (15) Submit datagram to next step; (16) free all reassembly resources for this BUFID; DONE. (17) TIMER <- MAX(TIMER,TTL); (18) give up until next fragment or timer expires; (19) timer expires: flush all reassembly with this BUFID; DONE. 在这个例子中,两个或多于两个的分片包含了同样的数据。 不管是同一个或者是局部的交迭,本程序使用在数据缓冲 中最近到达的拷贝以及最近投递的数据报。 标识(Identification) 数据报标识的选择是基于提供一种唯一标识特殊数据报的 分片的方式的需要。重组分片的协议模块在当分片具有相 投的源地址,目的地址,协议和标识的时候,断定他们属 于同一个数据报。因此,发送者必须选择一个在数据报(或 者数据报的任一分片在 internet 生存期间对该源地址,目 的地址对和协议来说是唯一的标识。 发送协议模块需要维护一个标识表,对于同它进行通信的 目的地址在最后一个的最大包生命周期内维护一个条目。 但是,既然标识允许 65536 个不同的值,有些主机可用简 单地使用独立于目的地址的唯一标识。 由高层协议来选择标识是合理的。比如,TCP 协议模块可 能重传一个相同的 TCP 分片,如果重传携带了同第一次传 送时一样的标识,正确接收的可能性会加强,因为他们中 的任何一个数据报都可用用来构造一个正确的 TCP 分片。 服务类型(Type of Service) 服务类型(TOS)用于 internet 服务质量选择。服务类型 通过一套参数(优先级,延迟,吞吐和可靠性)来指定。 这套参数被映射成数据报传输中的特定网络的真实服务参 数。 优先级(Precedence). 数据报重要性的独立衡量。 延迟(Delay). 立即投递对该指示的数据报是重要的。 吞吐(Throughput). 高数据率对具有该指示的数据报是重要的。 可靠性(Reliability). 高层确保投递可靠的努力对有该 指示的数据报是重要的 比如,ARPANET 有个优先级位,可以选择标准(“standard”) 信息(type 0)和未受控制(“uncontrolled”)的信息 (type 3)。单一包或者多包也可以视为一个服务参数。未 受控制的信息倾向于以较低的可靠性投递,但是可以获得 比较低的延迟。假设一个 internet 数据报要在 ARPANET 上 传送,设置 internet 服务类型为: 优先级(Precedence): 5 延迟(Delay): 0 吞吐(Throughput): 1 可靠性(Reliability): 1 在这个例子中,这些参数向 ARPANET 上可用参数的映射就 是设置 ARPANET 优先级位(priority bit)为打开,因为 Internet 优先级(precedence)处于它的优先级区域的上 半部。选择标准(standard)消息,因为有吞吐和可靠性 要求指示,二没有延迟指示。更详细的信息在”Service Mappings”[8]的服务映射中给出。 生存时间(Time to Live) 生存时间由发送者设置成允许数据报在 internet 系统上 允许存活的最大时间。如果数据报在 internet 系统上长于 生存时间,则数据报必须被销毁。 在 internet 头部被处理的每个点,该头部必须减小,以反 应花在处理数据报上的时间。即使无法获得实际花费时间 的本地信息,该头部也必须减 1。时间以秒单位衡量(比 如,值 1 标识 1 秒)。因此,最大生存时间是 255 秒或者 4.25 分钟。由于处理数据报的每个模块至少对 TTL 减 1, 即使他在小于 1 秒内处理完数据报,因此 TTL 只能被当作 数据报可以存在的时间上限。 选项(Options) 有些高层可靠性连接协议是基于老的数据报副本在一定时 间间隔之后不会再到达的假设。TTL 给了这些协议假设满 足的保证。 选项对每个数据报是可选的,但是对实现是要求的。也就 是说,选项的出现与否是发送者的选择,但是每个 internet 模块必须能够解析每个选项。在选项头部可以有多个选项。 选项可以不结束于 32 位边界。Internet 头部必须以 0 字 节填充。这些字节的开始将被解析成选项结束标志,其它 的结识乘 internet 头部填充。 每个 internet 模块必须能够作用于每个选项。如果分类 的、限制的、分隔的通信流要传送,安全选项是需要的。 校验和(Checksum) 如果 internet 头部改变,internet 头部校验和要重新计 算。比如,生存时间的减少,internet 选项的增加或者变 化,或者由于分片。在 internet 级别的这个校验和用来防 止 internet 头部的传输错误。 有些应用程序允许一部分数据位错误,但是不允许重传延 迟。如果 internet 协议强迫数据的正确性,则这些程序不 能支持。 错误(Errors) internet 协议错误可以通过 ICMP 信息报告。 3.3. 接口(Interfaces) IP 的用户接口的功能性描述最好是功能性的,因为每个操作系统有不同的库 (facility)。因此,我们要警告读者,不同的 IP 实现可能有不同的用户接口。 但是,所有的 IPs 实现必须提供一套最小的服务以确保所有的 ip 实现能够职称同样的协议层次结构。这一章指定了所有的 ip 实现要求的功能接口。 Internet 协议接口一边是局域网络,另一边是较高层的协议 或者一个应用程序。下面,高层协议或者应用程序将称为用户, 因为它正在使用 internet 模块。 因为 internet 协议是一个 数据报协议,在数据报传输中,维护了最小内存或者状态,每 个调用 internet 协议模块的用户提供 IPs 所需的全部信息以 执行所需服务。 一个上层接口的例子 下面两个例子调用满足了 internet 模块通信的用户要求(”=>”标识返回): SEND (src, dst, prot, TOS, TTL, BufPTR, len, Id, DF, opt => result) where: src = source address(源地址) dst = destination address(目的地址) prot = protocol(协议) TOS = type of service(服务类型) TTL = time to live(生存实际那) BufPTR = buffer pointer(缓冲指针) len = length of buffer(缓冲长度) Id = Identifier(标识) DF = Don't Fragment(禁止分片) opt = option data(选项数据) result = response(响应) OK = datagram sent ok(数据报发送 OK) Error = error in arguments or local network error ( 参 数 或 者 局 域 网 络 错 误 ) 注意优先级包括在 TOS 里面,安全(security)/间隔(compartment)在选项 (option)中传递 RECV (BufPTR, prot, => result, src, dst, TOS, len, opt) where: BufPTR = buffer pointer(缓冲指针) prot = protocol(协议) result = response(响应) OK = datagram received ok(数据报接收 OK) Error = error in arguments(参数错误) len = length of buffer(缓冲长度) src = source address(源地址) dst = destination address(目的地址) TOS = type of service(服务类型) opt = option data(选项数据) 当用户发送一个数据报的时候,它提供所有的参数,执行 SEND 调用。Internet 模块在收到该调用以后,检查参数,并准备和发送消息。如果参数没有问题,且 数据报被局域网接受,调用成功返回。如果参数不合法,或者数据报不被局域网 络接受,调用返回失败。失败返回的时候,必须生成问题原因的合理报告,但是 这种报告的细节由各自的实现决定。 当一个数据报从局域网络到达 internet 协议模块的时候,队列中可能有从用户 指定地址来的一个 RECV 调用,或者没有,在第一种情况中,在队列中的的调用 通过传递从数据报到用户的信息而被满足。在第二种情况下,指定地址的用户被 通知有悬而未决的数据报。如果指定的用户地址不存在,一个 ICMP 错误信息返 回给发送者,数据被丢弃。 用户的通知可能通过一个伪中断或者其它相同的机制,一个适合于实现的特殊操 作系统环境的机制。 用户的接收调用可以被一个悬而未决的数据报立即满足,或者调用被悬置,直到 数据报到达。 在发送主机有多个地址(多个物理连接或者逻辑地址)的情况下,源地址包含在 发送调用中。Internet 模块必须检查确保源地址是该主机的合法地址之一。 协议可以允许或者要求一个到 internet 的调用来指示某一类型数据报的兴趣 或者保留排他性的使用。 这一节从功能的角度出发阐述了用户/IP(USER/IP)接口。使用的名词同在高层语 言的函数调用中的大多数程序一样,但这种用法并被意味着排除 trap 类型服务 调用(比如,SVCs,UUOs,EMTs)或者其它任何形式的进程间通信。 附录 A:例子 Example 1: 下面是 internet 数据报携带的最小数据的例子: 0 1 2 3 01234567890123456789012345678901 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Ver= 4 |IHL= 5 |Type of Service| Total Length = 21 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification = 111 |Flg=0| Fragment Offset = 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time = 123 | Protocol = 1 | header checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | source address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | destination address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+ Example Internet Datagram Figure 5. 注:每个小间隔表示一个位。 这是 internet 协议版本 4 的一个数据报。Internet 头部包含 5 个 32 位字,数 据报的总长度是 21 个八位字节。这个数据报是一个完整的数据报(不是分片) 例子 2: 在这个例子中,我们首先看到一个中等大小的 internet 数据报(452 数据字节), 然后是两个 internet 分片,可能是当该数据报在最大允许传输代谢哦啊是 280 字节的网络上传输时该数据报的分片。 0 1 2 3 01234567890123456789012345678901 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Ver= 4 |IHL= 5 |Type of Service| Total Length = 472 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification = 111 |Flg=0| Fragment Offset = 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time = 123 | Protocol = 6 | header checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | source address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | destination address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | \ \ \ \ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Example Internet Datagram Figure 6. Now the first fragment that results from splitting the datagram after 256 data octets. 0 1 2 3 01234567890123456789012345678901 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Ver= 4 |IHL= 5 |Type of Service| Total Length = 276 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification = 111 |Flg=1| Fragment Offset = 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time = 119 | Protocol = 6 | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | source address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | destination address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | \ \ \ \ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Example Internet Fragment Figure 7. [Page 36] September 1981 Protocol Internet And the second fragment. 0 1 2 3 01234567890123456789012345678901 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Ver= 4 |IHL= 5 |Type of Service| Total Length = 216 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification = 111 |Flg=0| Fragment Offset = 32 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time = 119 | Protocol = 6 | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | source address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | destination address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | \ \ \ \ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Example Internet Fragment Figure 8. [Page 37] 1981 Internet Protocol September Example 3: Here, we show an example of a datagram containing options: 0 1 2 3 01234567890123456789012345678901 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Ver= 4 |IHL= 8 |Type of Service| Total Length = 576 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification = 111 |Flg=0| Fragment Offset = 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time = 123 | Protocol = 6 | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | source address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | destination address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Opt. Code = x | Opt. Len.= 3 | option value | Opt. Code = x | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Opt. Len. = 4 | option value | Opt. Code = 1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Opt. Code = y | Opt. Len. = 3 | option value | Opt. Code = 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | \ \ \ \ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Example Internet Datagram Figure 9.

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。