免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6195 | 回复: 27
打印 上一主题 下一主题

关于ip_append_data函数的问题 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-29 10:48 |只看该作者 |倒序浏览
大家好,在阅读《understanding linux network internals 》一书中第21章时,遇到如下描述:

If the L4 layer wants fast response time, it might call ip_push_pending_frames after each call to ip_append_data. But the two functions are provided so that the L4 layer can buffer as much data as possible (up to the size of the PMTU) and then send it at once to be efficient.

现在我有点不解的问题是,该文中所说的“ If the L4 layer wants fast response time” 是什么意思?换句话讲,L4层什么时候认为需要快速响应,什么时候又不需要呢?决定权在哪里?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2010-11-29 10:51 |只看该作者
我记得 socket 有个选项是 NODELAY,应该是告诉传输层尽快发送数据,就是不需要等待数据达到 PMTU 的时候,才发送

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
3 [报告]
发表于 2010-11-29 11:03 |只看该作者
回复 2# Godbach


    谢谢斑竹!

   斑竹说的是TCP_NODELAY 这个选项吗?查了下资料,该选项的用法如下:

   If set, this option disables TCP's Nagle algorithm (Section 19.4 of TCPv1 and pp. 858–859 of TCPv2). By default, this algorithm is enabled

    显然,对于ip_build_and_send_pkt和ip_send_reply这两个函数而言,正好符合这个要求,因为这两个函数是TCP用于发送SYN ACKs、RST分段的,因此这两个函数都不会和应用层数据有关。那么是否能这样理解,如果L4数据是来自应用层的数据,那么是不会有所谓L4调用ip_append_data函数缓存该应用层待发送数据的现象?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2010-11-29 11:06 |只看该作者
ip_append_data 实际上主要的任务就是处理应用层的数据,并将其缓存,但是不负责数据的发送。数据的发送由 ip_push_pending_frames 负责

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2010-11-29 11:10 |只看该作者
ip_append_data 这个函数 LZ 理解的怎么样了。可以交流一下,我最近也在看这些东西

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
6 [报告]
发表于 2010-11-29 11:14 |只看该作者
回复 4# Godbach


    谢谢!

   我感觉我的表述没有清楚,我想表达的意思好像不是我的本意,晕了,我再整理下思路后,再来请教。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
7 [报告]
发表于 2010-11-29 11:28 |只看该作者
If the L4 layer wants fast response time, it might call ip_push_pending_frames after each call to ip_append_data


其实建议接着在后面看一些内核你就明白了。
传输层发送数据,涉及到高效率和高响应率。ip_push_pending_frames 这个函数被调用之前,可能有到多次调用 ip_append_data。

如果你想要高响应率,那么就调用一次  ip_append_data 之后,尽快执行 ip_push_pending_frames 。
如果你想高效率,一次尽可能多的发数据,那就可以多次调用 ip_append_data,知道缓冲的数据达到 PMTU,才调用 ip_push_pending_frames。这样一次发送的数据量比较大。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
8 [报告]
发表于 2010-11-29 11:31 |只看该作者
本帖最后由 jiufei19 于 2010-11-29 11:33 编辑

回复 7# Godbach


谢谢斑竹的热情!

ip_append_data和ip_push_pending_frames这两个函数我已经全部阅读完了,基本上其内部的原理有一个大概的了解。我今天的疑问是发生在回头阅读原书的这几段话时,突然发现自己没有很好理解ip_append_data函数的应用场景了,尤其是对其缓存发送数据的应用场景的全面了解上。

我整理好思路后,再和斑竹交流!


-----------------------------
如果你想要高响应率,那么就调用一次  ip_append_data 之后,尽快执行 ip_push_pending_frames 。
如果你想高效率,一次尽可能多的发数据,那就可以多次调用 ip_append_data,知道缓冲的数据达到 PMTU,才调用 ip_push_pending_frames。这样一次发送的数据量比较大。
----------------------------
这段话的意思我是理解的,我现在的疑问不是指这段话所描述的本身原理,而是------我现在还不知道咋个清晰描述我的问题,呵呵!

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2010-11-29 11:32 |只看该作者
好的,整理好了发上来一起交流一下。我这块也有不少疑问。疑义相与析啊。:wink:

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
10 [报告]
发表于 2010-11-29 11:41 |只看该作者
回复 9# Godbach


  斑竹,因为好像问题有点复杂,我先将问题分解下,逐个进行表述,看看能否理清问题思路。

1、首先我想知道的是,ip_append_data被L4层协议调用时,假定L4层协议是UDP协议,那么是否有什么机制进行这里所谓的缓存数据的发送?如果有这个机制是什么?应用层能控制吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP