免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 39324 | 回复: 62

CU线上连载讨论一从内核源码的角度来剖析Linux网络部分 [复制链接]

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2011-08-08 11:22 |显示全部楼层
网络和Linux是当今IT行业比较热的两个话题,很多初学者不知道如何下手来学习Linux下的网络。这里有两个话题来循序渐进的了解Linux的网络部分.第一个话题为如何使用Linux下的现有工具来解决网络中的问题以及从应用层的观点来了解Netfilter流程;第二个话题从内核源码的角度来剖析Linux网络部分。

第一个话题:
CU线上连载讨论一 Linux iptables使用问题和内核Netfilter流程
http://bbs.chinaunix.net/thread-3565585-1-1.html

第二个话题:
Linux内核网络部分的代码,虽然代码量比较大,但是结构非常的清晰。在设计的时候,就考虑到了协议扩展的情况。
网络代码中,非常重要的一部分就是netfilter框架部分,netfilter框架的存在,使得对网络数据包的操作非常方便。
本帖主要围绕netfilter来交流工作和学习中遇到问题,分享阅读代码的心得。

讨论话题:从内核源码的角度来剖析Linux网络部分

活动时间:2011-08-08——2011-08-28

邀请嘉宾:
platinum 白金        CU社区资深版主
Godbach哥德巴赫   CU社区资深版主

活动奖励:linux从入门到精通图书五本,活动结束后,积极提问讨论者(积极回复超过3贴)随机抽取5名幸运网友进行奖励。
111.jpg

Linux是目前增长最迅速的操作系统。《Linux从入门到精通》由浅入深、循序渐进地向读者介绍Linux的基本使用和系统管理。全书内容包括Linux概述、Linux安装、Linux基本配置、桌面环境基本操作、Shell基本命令、文件和目录管理、软件包管理、磁盘管理、用户与用户组管理、进程管理、网络配置、浏览网页、收发邮件、文件传输和共享、远程登录、多媒体应用、图像浏览和处理、打印机配置、办公软件的使用、Linux编程工具、Shell编程、服务器基础知识、Apache服务器、vsftpd服务器、Samba服务器、NFS服务器、任务计划、防火墙和网络安全、病毒和木马防范。
《Linux从入门到精通》附带1张DVD光盘,内容为专门为《Linux从入门到精通》录制12.5小时的教学视频、Ubuntu安装光盘的镜像文件和另外赠送的31.5小时Linux专题学习视频。
《Linux从入门到精通》适合广大Linux初中级用户、开源软件爱好者和大专院校学生阅读,同时也非常适合准备从事Linux下开发的各类人员。

评分

参与人数 2可用积分 +15 收起 理由
snow888 + 5 好主意
Godbach + 10 我很赞同

查看全部评分

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2011-08-08 11:42 |显示全部楼层
回复 1# 瀚海书香
在学习网络部分代码之前,个人感觉把握整体的流程非常重要。
之前曾经写过一个帖子是2.6数据包接收流程(三层),参加http://bbs.chinaunix.net/thread-1960601-1-1.html
这里用函数简单总结一下:
IPv4数据包处理流程:

(1)到达本地的数据包:NAPI驱动-->netif_receive_skb--handle_bridge-->handle_macvlan-->ip_rcv-->NF_HOOK(PREROUTING)-->ip_rcv_finish-->ip_route_input-->ip_local_deliver-->ip_defrag-->NF_HOOK(LOCAL_IN)-->ip_local_deliver_finish-->L4 protocol handle

(2)本地转发的数据包:NAPI驱动-->netif_receive_skb--handle_bridge-->handle_macvlan-->ip_rcv-->NF_HOOK(PREROUTING)-->ip_rcv_finish-->ip_route_input-->ip_forward-->NF_HOOK(FORWARD)-->ip_forward_finish-->dst_output

(3)本地发出的数据包:ip_append_data||ip_push_pending_frams(udp,icmp,rawip),ip_append_page(udp),ip_queue_xmit(tcp,sctp),raw_send_hdrnic(rawip,igmp)-->NF_HOOK(LOCAL_OUT)-->dst_output-->ip_output->ip_finish_output->ip_fragment-->ip_finish_output2

论坛徽章:
0
发表于 2011-08-08 23:17 |显示全部楼层
回复 1# 瀚海书香


    网络原理很清楚
  说到代码 就要 观看了

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
发表于 2011-08-09 09:27 |显示全部楼层
本帖最后由 renxiao2003 于 2011-08-19 22:58 编辑

这本书是本好书,但真的从入门到精通却不是一本书就能说得明明白白的,我看过Linux的源码,但却看不太明白(我C实在太差)。

论坛徽章:
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
发表于 2011-08-09 10:03 |显示全部楼层
回复 1# 瀚海书香

好活动,强烈支持。

论坛徽章:
0
发表于 2011-08-09 11:05 |显示全部楼层
好活动。顶一下

论坛徽章:
0
发表于 2011-08-09 11:31 |显示全部楼层
好书,支持~~~

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2011-08-09 11:32 |显示全部楼层
回复 1# 瀚海书香
netfilter中非常重要的一部分就是conntrack和helper。
这里以ipv4的tftp为例简单说明一下conntrack的help处理流程:

1. 两个重要的hook函数:ipv4_conntrack_in和ipv4_conntrack_help.
    第一个函数的hook点为:NF_IP_PRE_ROUTING;第二个函数的hook点为:NF_IP_POSTROUTING和NF_IP_LOCAL_IN
2.tftp的主链接A的第一个数据包到达的时候流程为:
   (1)进入NF_IP_PRE_ROUTING的hook点:
           ipv4_conntrack_in-->nf_conntrack_in-->resolve_normal_ct-->nf_ct_get_tuple-->nf_conntrack_find_tuple (由于是第一个数据包,所以查找不到对应的conntrack)-->init_conntrack-->nf_ct_find_expection(这里也查找不到exp链接)-->__nf_ct_helper_find(这里会查找到nf_conntrack_tftp注册的helper tftp)-->nf_ct_helper_ext_add(将tftp helper的helper添加到ct中)

    (2)数据包到达NF_IP_POSTROUTING或者NF_IP_LOCAL_IN的hook点
          ipv4_conntrack_help 这个函数的流程比较简单,就是坚持数据包对应的conntrack上是否有helper,如果有则调用helper->help。由于在NF_IP_PRE_ROUTING点,我们把tftp的helper挂接到conntrack中,所以这里会调用tftp->help函数tftp_help。tftp_help函数会添加exp到exp链表中。
  
3.当A的其他数据包到来的时候,在nf_conntrack_find_tuple处就会结束NF_IP_PRE_ROUTING流程。
4.当与这个链接相关的B链接的第一个数据包到来的时候,在nf_ct_find_expection处就会结束NF_IP_PRE_ROUTING流程。同时设置B->master=A
5.当B链接的其他数据包到来的时候,在nf_conntrack_find_tuple处就会结束NF_IP_PRE_ROUTING流程。

论坛徽章:
0
发表于 2011-08-09 11:39 |显示全部楼层
顶啊,支持

论坛徽章:
0
发表于 2011-08-09 15:46 |显示全部楼层
回复 1# 瀚海书香


    学习iptables应该从哪里下手呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP