• 转发:i p _ f o r w a r d函数


    转发:i p _ f o r w a r d函数
    到达非最终目的地系统的分组需要被转发。只有当 i p f o r w a r d i n g非零或当分组
    中包含源路由时,i p i n t r才调用实现转发算法的 i p _ f o r w a r d函数。当分组中包含
    源路由时,i p _ d o o p t i o n s调用i p _ f o r w a r d,并且第2个参数s r c r t设为1。
    i p _ f o r w a r d通过图中显示的r o u t e结构与路由表接口。

    4 6 - 4 9 r o u t e结构有两个成员: r o _ r t,指向r t e n t r y结构的指针;r o _ d s t,一个
    s o c k a d d r结构,指定与r o _ r t所指的路由项相关的目的地。目的地是在内核的路由表中用
    来查找路由信息的关键字
    我们分两部分讨论i p _ f o r w a r d。第一部分确定允许系统转发分组,修改I P首部,并为分
    组选择路由。第二部分处理I C M P重定向报文,并把分组交给i p _ o u t p u t进行发送。如下图所示。
    1. 分组适合转发吗
    8 6 7 - 8 7 1 i p _ f r o w a r d的第1个参数是指向一个m b u f链的指针,该m b u f中包含了要被转发
    的分组。如果第2个参数s r c r t为非零,则分组由于源路由选项(见9 . 6节)正在被转发。
    8 7 9 - 8 8 4 i f语句识别并丢弃以下分组。
    • 链路层广播
    任何支持广播的网络接口驱动器必须为收到的广播分组把 M _ B C A S T标志置位。如果分组
    寻址是到以太网广播地址,则e t h e r _ i n p u t就把M _ B C A S T置位。不转发链路层的广
    播分组。

    RFC 11 2 2不允许以链路层广播的方式发送一个寻址到单播 I P地址的分组,并在
    这里将该分组丢掉。
    • 环回分组
    对寻址到环回网络的分组, i n _ c a n f o r w a r d返回0。这些分组将被i p i n t r提交给i p _
    f o r w a r d,因为没有正确配置反馈接口。
    • 网络0和E类地址
    对这些分组,i n _ c a n f o r w a r d返回0。 这些目的地址是无效的,而且因为没有主机接收
    这些分组,所以它们不应该继续在网络中流动。
    • D类地址
    寻址到D类地址的分组应该由多播函数 i p _ m f o r w a r d而不是由 i p _ f o r w a r d处理。
    i n _ c a n f o r w a r d拒绝D类(多播)地址。
    RFC 791 规定处理分组的所有系统都必须把生存时间 ( T T L )字段至少减去1,即使T T L是
    以秒计算的。由于这个要求, T T L通常被认为是对 I P分组在被丢掉之前能经过的跳的个数的
    界限。从技术角度说,如果路由器持有分组超过 1秒,就必须把i p _ t t l减去多于1。

  • 相关阅读:
    URAL 2014 Zhenya moves from parents 线段树
    git 安装及命令
    在eclipse中执行sql
    在eclipse中配置server和database
    java的regex问题笔记
    在开发中写一些tool来提升自己的效率
    在Eclipse中给JRE-Library添加本地Javadoc
    利用eclipse中的各种功能帮助你理解代码
    Eclipse中直接操作本地文件系统
    form action中如何填写相对目录
  • 原文地址:https://www.cnblogs.com/momenglin/p/11441580.html
Copyright © 2020-2023  润新知