• i p _ d o o p t i o n s函数


    我们知道 i p i n t r在检测分组的目的地址之前调用 i p _ d o o p t i o n s。
    i p _ d o o p t i o n s被传给一个指针m,该指针指向某个分组, i p _ d o o p t i o n s处理分组中它所
    知道的选项。如果i p _ d o o p t i o n s转发该分组,如在处理 L S R R和S S R R选项时,或由于某个
    差错而丢掉该分组时,它返回 1。如果它不转发分组, i p _ d o o p t i o n s返回0,由i p i n t r继
    续处理该分组。
    i p _ d o o p t i o n s是一个长函数,所以我们分步地显示。第一部分初始化一个 f o r循环,
    处理首部中的各选项。
    当处理每个选项时, c p指向选项的第一个字节。图 9 - 7显示,当可用时,如何从 c p的常
    量位移访问t y p e、l e n g t h和o f f s e t字段。

    R F C把位移(o f f s e t)字段描述作指针(p o i n t e r),指针比位移的描述性略强一些。 o f f s e t的值是
    某个字节在该选项内的序号 (从t y p e开始,序号为1 ),不是从t y p e开始的、且以零开始的计数。
    位移的最小值是4 (I P O P T _ M I N O F F) ,它指向的是多字节选项中数据字段的第一个字节。
    图显示了i p _ d o o p t i o n s函数的整体结构。
    5 5 5 - 5 6 6 i p _ d o o p t i o n s把I C M P差错类型t y p e初始化为I C M P _ P A R A M P R O B,对任何没
    有特定差错类型的差错,这是一个一般值。对于 I C M P _ P A R A M P R O B,c o d e指的是出错字节
    在分组内的位移。这是默认的I C M P差错报文。某些选项将改变这些值。
    i p指向一个2 0字节大小的i p结构,所以i p + 1指向的是跟在I P首部后面的下一个
    i p结构。因为i p _ d o o p t i o n s需要I P首部后面字节的地址,所以就把结果指针转换
    成为指向一个无符号字节 (u _ c h a r)的指针。因此,c p指向标准I P首部以外的第一个
    字节,就是I P选项的第一个字节。


    1. EOL和N O P过程


    5 6 7 - 5 8 2 f o r循环按照每个选项在分组中出现的顺序分别对它们进行处理。 E O L选项以及
    一个无效的选项长度(也即选项长度表明选项数据超过了 I P首部)都将终止该循环。当出现N O P
    选项时,忽略它。s w i t c h语句的d e f a u l t情况隐含要求系统忽略未知的选项。
    下面的内容描述了 s w i t c h语句处理的每个选项。如果 i p _ d o o p t i o n s在处理分组选项
    时没有出错,就把控制交给s w i tc h下面的代码。

    2. 源路由转发

    7 1 9 - 7 2 4 如果分组需要被转发,S S R R或L S R R选项处理代码就把f o r w a r d置位。分组被传
    给i p _ f o r w a r d,并且第2个参数为1,表明分组是按源路由选择的。

    3. 差错处理


    7 2 5 - 7 3 0 如果在s w i t c h语句里出现了错误,i p _ d o o p t i o n s就跳到b a d。从分组长度中
    把I P首部长度减去,因为i c m p _ e r r o r假设首部长度不包含在分组长度里。 i c m p _ e r r o r发
    出适当的差错报文,i p _ d o o p t i o n s返回1,避免i p i n t r处理被丢弃的分组。

  • 相关阅读:
    Linux nginx 安装 启动
    MySQL5.7版本sql_mode=only_full_group_by问题解决办法
    Tomcat配置Gizp 客户端使用okHttp3
    tomcat 验证码显示问题
    JProfiler 教程 使用说明
    mysql update 子查询作为条件
    reids等非关系数据库管理工具treesoft
    常用Linux 命令
    vue中计算属性的get与set方法
    Less和Sass相同与不同
  • 原文地址:https://www.cnblogs.com/momenglin/p/11487424.html
Copyright © 2020-2023  润新知