i p _ i n s e r t o p t i o n s函数
i p _ o u t p u t函数接收一个分组和选项。当 i p _ f o r w a r d调用该函数
时,选项已经是分组的一部分,所以 i p _ f o r w a r d总是把一个空选项指针传给 i p _ o u t p u t。
但是,运输层协议可能会把由 i p _ i n s e r t o p t i o n s中的i p _ o u t p u t调用合并到
分组中的选项传递给i p _ f o r w a r d。i p _ i n s e r t o p t i o n s希望选项在i p o p t i o n结构中被格式化,如图所示。

9 2 - 9 5 该结构只有两个成员:i p o p t _ d s t,如果选项表中有源路由,则其中有第一跳目的
地,i p o p t _ l i s t,是一个最多4 0 (M A X _ I P O P T L E N)字节的选项矩阵,其格式我们在本章中
已做了描述。如果选项表中没有源路由,则 i p o p t _ d s t全为0。
注意, i p _ s r c r t结构和由 i p _ s r c r o u t e返回的 m b u f都符合由
i p o p t i o n结构所指定的格式。如图把结构i p _ s r c r t和i p o p t i o n作了比较。

函数i p _ i n s e r t o p t i o n s如图所示。


3 5 2 - 3 6 4 i p _ i n s e r t o p t i o n s有三个参数:m,外出的分组;o p t,在结构中格式化的选
项;p h l e n,一个指向整数的指针,在这里返回新首部的长度 (在插入选项之后)。如果插入
选项分组长度超过最大分组长度 65 535( I P _ M A X P A C K E T)字节,则自动将选项丢弃。
i p _ d o o p t i o n s认为i p _ i n s e r t o p t i o n s永远都不会失败,所以无法报告差错。幸好,很
少有应用程序会试图发送最大长度的数据报,更别说选项了。

3 6 5 - 3 6 6 如果i p o p t _ d s t . s _ a d d r指定了一个非零地址,则选项中包括了源路由,并且
分组首部的i p _ d s t被源路由中的第一跳目的地代替。
如图显示了在第3 6 7 ~ 3 7 8行代码执行之前,一个T C P报文段的m b u f结构。

如果被插入的选项占据了多于 1 6的字节数,则第 3 6 7行的测试为真,并调用 M G E T H D R分
配另一个m b u f。上图显示了选项被复制到新的m b u f后,该缓存的结构。
3 6 7 - 3 7 8 如果分组首部被存放在一簇,或者第一个缓存中没有多余选项的空间,则
i p _ i n s e r t o p t i o n s分配一个新的分组首部 m b u f,初始化它的长度,从旧的缓存中把该 I P
首部截取下来,并把该首部从旧缓存中移动到新缓存中。
i p _ i n s e r t o p t i o n s函数的更多相关文章
- 笔记+R︱Logistics建模简述(logit值、sigmoid函数)
本笔记源于CDA-DSC课程,由常国珍老师主讲.该训练营第一期为风控主题,培训内容十分紧凑,非常好,推荐:CDA数据科学家训练营 ---------------------------------- ...
- 读书笔记_Effective_C++_条款四十六:需要类型转换时请为模板定义非成员函数
这个条款可以看成是条款24的续集,我们先简单回顾一下条款24,它说了为什么类似于operator *这样的重载运算符要定义成非成员函数(是为了保证混合乘法2*SomeRational或者SomeRat ...
- 读书笔记_Effective_C++_条款二十五: 考虑写出一个不抛出异常的swap函数
在之前的理论上调用对象的operator=是这样做的 void swap(A& x) { std::swap(a, x.a); } A& operator=(const A& ...
- r语言之生成规则序列,规则序列函数及用法
在生成序列时,“:”的优先级最高 (1)从1到20的整数序列: > 1:20 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 (2) ...
- R语言:利用caret包中的dummyVars函数进行虚拟变量处理
dummyVars函数:dummyVars creates a full set of dummy variables (i.e. less than full rank parameterizati ...
- R语言使用过程中出现的问题--attach()函数的使用
使用attach(file)时,一定要配合使用detach(file),否则再此运行程序时极易出现问题,The following objects are masked ... 此外工作空间中不能有与 ...
- R语言学习笔记(七): 排序函数:sort(), rank(), order()
sort() sort()函数直接对函数进行排序,并返回排序结果. > a <- c(12,4,6,5) > sort(a) [1] 4 5 6 12 rank() rank()函数 ...
- R语言:实现SQL的join功能的函数
library(dplyr) ribao <- full_join(ribao,result,by = '渠道',copy = T) ribao <- full_join(ribao,se ...
- R语言 which() 、 which.min() 、 which.max() 函数
函数 which() 可以用来找到满足条件的下标,如 x <- c(3, 4, 3, 5, 7, 5, 9) which(x > 5) 5 7 seq(along=x)[x > 5] ...
随机推荐
- 【leetcode算法-简单】26. 删除排序数组中的重复项
[题目描述] 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完 ...
- 设计模式的好书 -- ongoing
1 设计模式--可复用面向对象软件的基础 Erich Gamma. Richard Helm -- 已经下载了/baiduNetDisk Design Patterns --- Element ...
- 25.Spark下载源码和安装和使用
安装scala 上传安装包 解压 配置scala相关的环境变量 export SCALA_HOME=/opt/modules/scala-2.11.4 export PATH=$PATH:$SCALA ...
- 通过js操作,将div设置为contenteditable的内容设为全选状态
因为div设置为contenteitable可编辑的文本内容用 select()选择全部内容不生效,所以只能用下列方法: 先 creatTextRange或者 createRange <div ...
- [MA] 有关 Likelihood
当提到 Linear Regression 或是 Logistic regression 等关键词时,都会涉及一个概念,叫做 Likelihood Function 以及 Maximum Likeli ...
- go 结构的方法总结
方法可以与命名类型或命名类型的指针关联. 刚刚看到的两个 Abs 方法.一个是在 *Vertex 指针类型上,而另一个在 MyFloat 值类型上. 有两个原因需要使用指针接收者.首先避免在每个方法调 ...
- 导出excel的功能效果实现
<el-button @click="exportExcel" > <i style="display: inline-block;"> ...
- maftools | 从头开始绘制发表级oncoplot(瀑布图)
本文首发于微信公众号 **“ 生信补给站 ”** ,期待您的关注!!! 原文链接:https://mp.weixin.qq.com/s/G-0PtaoO6bYuhx_D_Rlrlw 对于组学数据的分析 ...
- hdu 2544 Dijstra模板题
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- (五)Redis之List
一.List常用命令 两端添加 两端弹出 1.2. 两端添加和两端弹出 package myRedis01; import java.util.HashMap; import java.util.Li ...