转发: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。

转发:i p _ f o r w a r d函数的更多相关文章

  1. C语言中文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析

    C语言文件打开模式浅析 在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图: 打开模式  只可以读   只可以写  读写兼备 文本模式 r w a r+ w+ a+ 二进制模式 rb wb ...

  2. python文件操作打开模式 r,w,a,r+,w+,a+ 区别辨析

    主要分成三大类: r 和 r+     "读"功能 r  只读 r+ 读写(先读后写) 辨析:对于r,只有读取功能,利用光标的移动,可以选择要读取的内容. 对于r+,同时具有读和写 ...

  3. python文件读写模式 --- r,w,a,r+,w+,a+,rb,wb

    要了解文件读写模式,需要了解几种模式的区别,以及对应指针 r : 读取文件,若文件不存在则会报错 w: 写入文件,若文件不存在则会先创建再写入,会覆盖原文件 a : 写入文件,若文件不存在则会先创建再 ...

  4. 第九天- 文件操作 r w a 文件复制/修改

    文件操作简介:使用python来读写文件是非常简单的操作.我们使用 open() 函数来打开一个文件,获取到文件句柄.然后通过文件句柄就可以进行各种各样的操作了.根据打开⽅方式的不同能够执行的操作也会 ...

  5. python对文件操作 r w a 文件复制/修改

    文件操作简介: 使用python来读写文件是非常简单的操作.我们使用 open() 函数来打开一个文件,获取到文件句柄.然后 通过文件句柄就可以进行各种各样的操作了.根据打开⽅方式的不同能够执行的操作 ...

  6. fopen特殊模式r+, w+, a+辨析

    fopen模式分两大类,即 TEXT模式:r, w, a, r+, w+, a+ BIN模式:rb, wb, ab, r+b, w+b, a+b 模式 读指针初始位置 写指针初始位置 模式用途 详细说 ...

  7. python3 文件操作练习 r+ w+ a+ 的理解

    突然来一句:“慨然有经略四方之志” 文件操作三部曲:1.先用open打开 2.再写关闭  3.再回到中间写操作     为啥要刚打开就关闭 那是很容易望,所以先写上... 基本格式 f = open( ...

  8. Python文件读写之r+/w+/a+

    读模式 r 打开不存在的文件会报错.不能写:如不指定模式则默认是r 写模式 w 打开不存在的文件会,会新建一个文件:打开存在的文件会先清空后覆盖原有文件:不能读 追加模式 a 打开不存在的文件会,会新 ...

  9. python r r+ w w+ rb 文件打开模式的区别

    # 只读模式with open ( "file.txt" ,'r' ) as f:        for line in f.readlines():                ...

随机推荐

  1. CenOS 7 安装JDK

    1.输入安装命令 yum install java-1.8.0-openjdk-devel.x86_64

  2. css实现可伸缩的搜索框

    效果图: 代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...

  3. nginx之配置proxy_set_header问题梳理

    客户端请求web服务,客户端:ip:192.168.223.1 nginx作为反向代理服务器:192.168.223.136 nginx作为后端web服务器:192.168.223.137 前提条件: ...

  4. 25.Spark下载源码和安装和使用

    安装scala 上传安装包 解压 配置scala相关的环境变量 export SCALA_HOME=/opt/modules/scala-2.11.4 export PATH=$PATH:$SCALA ...

  5. Redis 常用命令学四:有序集合类型命令

    1.增加元素,修改存在元素的分数 127.0.0.1:6379> zadd score 99 a 88 b 66 c (integer) 3 127.0.0.1:6379> ZADD sc ...

  6. java基础--Java虚拟机

    ·JVM (Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java 最具吸引力的特性之一.我们编写的Java ...

  7. Ribbon【入门】

    公共依赖: <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin ...

  8. 【C#】课堂知识点#1

    标准数字格式字符串 https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/standard-numeric-format-string ...

  9. CTS & APIO 2019 游记

    写在前面 算是省选后的第一轮大考. 去年因为某些原因并没有参加 CTSC 以及 APIO,还是有些遗憾,所以希望今年能有所收获. 也希望今年的 CTS 能延续去年的出题风格,这样我还能苟一两个题. 然 ...

  10. sqlite3 下载和安装步骤

    1 下载地址 https://www.sqlite.org/2019/sqlite-tools-win32-x86-3300100.zip 2 添加系统变量 path中添加  sqlite3.exe所 ...