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.