TCP/IP协议栈--IP选项处理

IP输入函数(ipintr)将在验证分组格式(检验和,长度等)之后,确定分组是否到达目的地之前,对选项进行处理。这表明分组所

遇到的每个路由器以及最终的目的主机都对要分组的选项进行处理。

IP分组内可以包含某些在分组被转发或被接收之前处理的可选字段。IP实现可以用任意顺序处理选项。标准IP首部之后最多可跟

40字节的选项。

1.选项格式

IP选项字段可能包含0个或多个单独选项。选项有两种类型,单字节和多字节。如图所示:

所有选项都以1字节类型type字段开始。在多字节选项中,类型字段后面紧接着一个长度len字段,其他字段时数据data。许多选项

数据字段的第一个字节时1字节的位域offset字段,指向数据字段内的某个字节。长度字节的计算覆盖了类型、长度和数据字段。类型

被继续分成三个子字段:1bit备份copied标志,2bit类class字段和5bit数字number字段。下图列出了目前定义的IP选项。前两个选项

时单字节选项;其他的是多字节选项。

第1列显示了Net/3的选项常量,第2列和第3列是该类型的十进制和二进制值,第4列是选项的长度。Net/3列显示的是在Net3中

由ip_dooptions实现的选项。IP必须自动忽略所有它不识别的选项。其中安全和流ID没有在Net/3中实现,流ID选项时过时的,

安全选项主要时美国军方使用。

当Net/3对一个有选项的分组进行分片时,它将检查copied标志位。该标志位之处是否把所有选项都备份到每个分片的IP首部。

class字段把相关的选项按下图进行分组,除时戳选项具有class为2外,所有选项都是class为0.

2.ip_dooptions函数

ipintr在检测分组的目的地址之前调用ip_dooptions.该函数处理分组中它所直到的所有选项。

ip_dooptions顺序读取每个选项并进行处理:如果遇到EOL选项则终止该循环,如果遇到NOP选项,则忽略它,如果需要未知

选项则忽略。

分组选项被处理后,如果分组需要被转发,分组被传给ip_forward。

如果处理选项时出现了错误,函数就会进入错误处理,发出适当的ICMP错误报文。

下面几节会具体说明选项的处理。

3.记录路由选项

记录路由选项使得分组在穿过互联网时所经过的路由被记录在分组内部,项的大小是源主机在构造时确定的,必须足够保存

所有预期的地址。我们记得在IP分组的首部,选项最多只能有40个字节。记录路由选项可以有3个字节的开销。后面紧跟地址的

列表(每个地址4个字节),如果该选项是唯一选项,则最多可以有9个(3+4*9=39)地址出现。一旦分配给该选项的空间被填满,

就按通常的情况对分组进行转发,中间的系统就不再记录地址。

下图说明了一个记录路由选项的格式。

如果IP目的地址时某个系统地址(分组已到达目的地),则把接收接口的地址记录在选项中;否则把ip_rtaddr函数提供的外出

接口的地址记录下来。如果ip_rtaddr无法找到目的地路由,则发送一个ICMP主机不可达差错报文。

ip_rtaddr函数

该函数查询路由缓存,必要时查询完整的路由表,来找到到给定IP地址的路由。函数返回一个指向in_ifaddr结构的指针,该指针

与该路由的外出接口有关。该函数中,rtalloc函数搜索路由表,寻找到目的地的路由。

4.源站和记录路由选项

通常在中间路由器所选择的路径上转发分组。源站和记录路由选项允许源站明确制定一条到目的地的路由,覆盖掉中间路由器

的路由选择决定。而且在分组到达目的地的过程中,把该路由记录下来。

严格路由包含了源站和目的站之间的每个中间路由器的地址。宽松路由只指定某些中间路由器地址,在宽松路由中,路由器可以

自由选择两个系统之间的任何路径;而在严格路由中,则不允许路由器这么做。

如下图,A,B和C是路由器,而HS和HD是源和目的主机。因为每个接口都有自己的IP地址,所以我们看到路由器A有三个地址:

A1,A2,A3。同样,B和C也有多个地址。

IP首部的源和目的地址以及在选项中列出的位移和地址表,指定了路由以及分组目前在该路由中所处的位置。下图显示了当

分组按照这个宽松路由从HS经过A,B,C到HD,信息时如何改变的,每行代表当分组被第1列显示的系统发送时的状态,最后

一行显示分组被HD接收。

每个系统都把接口的地址放到选项去。通过这种方法, 分组所采用的路由都被记录在选项中。被记录的路由将被目的系统倒

转过来放到应答分组上,让他们沿着原始的路由的逆方向发送。

除了UDP,Net/3在应答时总是把收到的源路由逆转过来。

选项处理主要包含以下几个部分:

1.源路由的结束

如果IP首部的目的地址是某个本地地址,并且offset所指向的超过了源路由的末尾,源路由中没有地址了,则分组已经到达

了目的地,调用save_rte将源路由保存在如下图所示的ip_srcrt结构中,因为在最终目的地,运输协议必须能够使用分组中

被记录下来的路由,运输协议必须把该路由倒过来并附在所有应答的分组上。

2.为下一跳更新分组

如果IP首部目的地址是一个本地地址,并且offset指向选项内的一个地址,则该系统是源路由中指定的一个中间系统,分组

还没有到达目的地。在严格路由中,下一个系统必须位于某个直接相连的网络上,而在宽松路由中,如果没有找到下一个系统

的接口或路由,则发送一个ICMP源路由失败差错报文。

如果找到一个接口或一条路由,则更新IP目的地址设置为offset指向的IP地址。在源路由选项内,用外出接口的地址代替中间

系统的地址,把offset增加,指向路由的下一个地址。

3.多播目的地

如果新的目的地址不是多播地址,在处理完所有选项后,应该把分组转发不是返回给ipintr。

源路由中的多播地址允许两个多播路由器通过不支持多播的中间路由器进行通信。

5.时间戳选项

当分组穿过一个互联网时,时间戳选项使各个系统把它当前的时间表示记录在分组的选项内。时间是以从UTC的午夜开始计算

的毫秒计,被记录在一个32bit的字段里。

如果系统没有准确的UTC或没有每秒更新至少15次,就不把它作为标准时间,非标准时间必须把时间戳字段的高位置位。

有三种时间戳选项,Net/3通过下图所示的ip_timestamp结构访问。

ip_flg指定的三种时间戳选项如下:

初始主机必须构造一个具有足够大的数据区存放可能的时间戳和地址的地址的时间戳选项,对于ipt_flg为3的时间戳选项,

初始主机在构造该选项时,填写要记录时间戳的系统的地址。下图显示了三种时间戳选项的结构。

因为IP选项只有40个字节,所以时间戳选项限制只能有9个时戳,或4个地址和时间时戳对。

时间: 2024-10-14 05:01:25

TCP/IP协议栈--IP选项处理的相关文章

TCP/IP协议栈--IP首部选项字段的分析

IP输入函数(ipintr)将在验证分组格式(检验和,长度等)之后.确定分组是否到达目的地之前,对选项进行处理. 这表明分组所 遇到的每一个路由器以及终于的目的主机都对要分组的选项进行处理. IP分组内能够包括某些在分组被转发或被接收之前处理的可选字段.IP实现能够用随意顺序处理选项.标准IP首部之后最多可跟 40字节的选项. 1.选项格式 IP选项字段可能包括0个或多个单独选项.选项有两种类型,单字节和多字节.如图所看到的: 全部选项都以1字节类型type字段開始. 在多字节选项中,类型字段后

TCP/IP协议栈

TCP/IP协议栈全称是传输控制协议/因特网互联协议,其实是OSI模型的进化版,所以就先解释一下什么是OSI模型,OSI的全称是开放系统互连参考模型,就是为了实现开放系统互连所建立的通信功能分层模型,其目的就是为异种计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考.这里的开放系统指的是遵循OSI模型和相关协议能够实现互连的具有各种应用目的的计算机系统.OSI模型一共有七层,TCP模型一共只有四层,分别为应用层,传输层,Internet层,网络访问层.它定义了

【转】TCP/IP协议栈及OSI参考模型详解

OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设备间的兼容性和标准接口: 促进标准化工作: 结构上可以分隔: 易于实现和维护. 20世纪60年代以来,计算机网络得到了飞速增长.各大厂商为了在数据通信网络领域占据主导地    位,纷纷推出了各自的网络架构体系和标准,如IBM公司的SNA,Novell IPX/SPX协议,Apple公司的AppleT

TCP/IP协议栈及OSI参考模型详解

OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设备间的兼容性和标准接口: 促进标准化工作: 结构上可以分隔: 易于实现和维护. 20世纪60年代以来,计算机网络得到了飞速增长.各大厂商为了在数据通信网络领域占据主导地    位,纷纷推出了各自的网络架构体系和标准,如IBM公司的SNA,Novell IPX/SPX协议,Apple公司的AppleT

linux OSI七层模型、TCP/IP协议栈及每层结构大揭秘

学习Linux,就算是像小编我这样的小萌新,也知道OSI模型.什么?!你不知道!!! 好吧,这篇秘籍拿走,不谢~~~ 一.两个协议 (1)OSI 协议模型(7层)国际协议    PDU:协议数据单元对等层次之间传递的数据单位 OSI协议(7层) 国际协议 PDU 单位 功能 实例 7   应用层 application message 为应用程序进程(例:mail.终端防伪)提供网络服务:提供用户访问界面 提供用户身份验证 HTTP Telnet 6   表示层 presention messa

用qemu与gdb调试linux kernel tcp/ip协议栈

description 用gdb debug linux kernel容易吗?其实要走到这步真的不容易啊,其实也难道是不难,就是要知道的东西太多了.用gdb debug linux kernel 可以有2中方式:UML和qemu方式,这里主要说qemu,从源码编译安装qemu很费劲. 准备环境 linux OS: Debian7.5-i386(当时最新的Wheezy,装在VMware10上,我用的在线安装,安装后以text方式跑起来,我的笔记本配置资源有限!) root fs:Debian-Wh

【jc1-1】TCP/IP协议栈及OSI参考模型详解

OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设备间的兼容性和标准接口: 促进标准化工作: 结构上可以分隔: 易于实现和维护. 20世纪60年代以来,计算机网络得到了飞速增长.各大厂商为了在数据通信网络领域占据主导地    位,纷纷推出了各自的网络架构体系和标准,如IBM公司的SNA,Novell IPX/SPX协议,Apple公司的AppleT

TCP/IP协议栈与数据包封装+TCP与UDP区别

ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图. TCP/IP参考模型的层次结构 TCP/IP协议栈是美国国防部高级研究计划局计算机网(Advanced Research Projects Agency Network,ARPANET)和其后继因特网使用的参考模型.ARPANET是由美国国防部(U.S.Department of Defense,Do

OSI模型和TCP/IP协议栈

OSI(Open System Interconnect )开放系统互连参考模型是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架.这里所说的开放系统,实质上指的是遵循OSI参考模型和相关协议能够实现互连的具有各种应用目的的计算机系统.它从低到高分别是:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.而TCP/IP协议栈和OSI模型有着对应关系,那么先看一下OSI参考模型.OSI参考模型如下图所