免费注册 查看新帖 |

Chinaunix

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

TCP packet的接收过程简单描述 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-22 14:33 |只看该作者 |倒序浏览
TCP packet的接收过程简单描述

1)当有包进入网卡,引起中断,其调用TREE如下:

stack c03cc000 trace: tcp_v4_rcv | ip_local_deliver_finish | nf_hook_slow | ip_local_deliver | ip_rcv | netif_receive_skb | process_backlog | net_rx_action | do_softirq | do_IRQ | common_interrupt | cpu_idle

tcp_v4_rcv 被中断程序(间接)调用.


2)应用程序中调用sy_socketcall来接收包,调用TREE如下:
stack ca3dc000 trace: tcp_recvmsg | inet_recvmsg | sock_recvmsg | sys_recvfrom | sys_recv | sys_socketcall | sysenter_past_esp

tcp_recvmsg被用户程序(间接)调用.

包存储区sk_buff为两者(两路)共同存取.


这大概可以回答那个问tcp_rcv和tcp_recvmsg之间如何连接的贴子. 其实无直接连接.

论坛徽章:
0
2 [报告]
发表于 2005-12-22 16:27 |只看该作者
谢谢思一克版主,呵呵,tcp_v4_rcv 被中断程序(间接)调用,然后把数据加入tcp的接收队里中,等待软中断触发tcp_recvmsg处理。而tcp_recvmsg是由用户调用的。是吧?

[ 本帖最后由 flyingpiggy_zhu 于 2005-12-22 16:35 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2005-12-22 16:32 |只看该作者
是的。看我给的那个调用树。后面的调用前面的

论坛徽章:
0
4 [报告]
发表于 2005-12-22 16:45 |只看该作者
嗯,你说得很详细,我对从上到下和从下到上的分析了解比较大概,数据到达物理网络后被网卡驱动程序处理,通过netif_rx()放入系统接收队列,给软中断置上标志位,返回。而这个软中断在设备初始化时或者使用时定位net_rx_action(),在net_rx_action()中,根据ip_packet_type判断应该选择IP层的接收处理函数ip_rcv()函数。………… 谢谢啦,这下我该完成总结了,可能要看af_packet编成在内核中的实现机制了。应该比这个要简单呵

论坛徽章:
0
5 [报告]
发表于 2005-12-22 16:49 |只看该作者
写完了总结给我发一份可以吗

论坛徽章:
0
6 [报告]
发表于 2005-12-22 17:13 |只看该作者
啊?哈哈,好啊,还请多多指正,明天可能能完稿
等完稿后发给邮箱cindy_f_ye@yahoo.com.cn好吧?

[ 本帖最后由 flyingpiggy_zhu 于 2005-12-22 17:25 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2005-12-24 14:49 |只看该作者
请思一克核对邮箱,我发了三次都被退回来了……呵呵

“This message is generated by COREMAIL email system.
I'm sorry to have to inform you that the message returned


你发送到cindy_f_ye@yahoo.com.cn的邮件由于以下原因被退回 : cindy_f_ye@yahoo.com.cn 邮件在队列中处理时间过”

[ 本帖最后由 flyingpiggy_zhu 于 2005-12-24 14:50 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2005-12-24 18:28 |只看该作者
原帖由 flyingpiggy_zhu 于 2005-12-22 16:27 发表
谢谢思一克版主,呵呵,tcp_v4_rcv 被中断程序(间接)调用,然后把数据加入tcp的接收队里中,等待软中断触发tcp_recvmsg处理。而tcp_recvmsg是由用户调用的。是吧?



No, tcp_v4_rcv(...) is called in softirq context.

论坛徽章:
0
9 [报告]
发表于 2005-12-25 17:22 |只看该作者
to daemon,

看调用TREE, tcp_v4_rcv 是被do_softirq 调用的, 没有错的

论坛徽章:
0
10 [报告]
发表于 2005-12-25 21:26 |只看该作者
to: 思一克
Yes, it's implicit called by interrupt handler, but the call trace is not in interrupt context after do_softirq(...).

I think you get the call trace when the driver is in Poll mode(NAPI is active). In that circumstance,  the interrupt is not come from the netwrok device.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP