linux 网络
jerry_chg
努力 奋斗
展开
-
Linux vlan 功能模块分析
Vlan即虚拟局域网,一个vlan能够模拟一个常规的交换网络,实现了将一个物理的交换机划分成多个逻辑的交换网络。而不同的vlan之间如果要进行通信就要通过三层协议来实现。 在linux中vlan的配置使用vconfig,使用vconfig配置一个交换网络,大致的流程如下: # # vconfig add eth0 100# # ifconfig eth0.100 up原创 2014-12-09 23:11:46 · 13186 阅读 · 0 评论 -
register_pernet_subsys相关学习
在阅读路由相关的代码时,读到了这个函数,对于这个函数及相关机制不熟悉,所以就仔细分析了下。 首先从数据结构入手:1、涉及的变量或者数据结构:externstructlist_headnet_namespace_list;网络空间相关的链表,每一个新注册的网络空间,都会添加到该链表中staticLIST_HEAD(pernet_list);s...原创 2014-01-08 22:56:12 · 9546 阅读 · 2 评论 -
Linux 三层、四层接收数据处理函数相关的链表
在底层接收到数据后,通过底层网卡驱动处理完成后,会调用函数netif_receive_skb进行二层mac子层进行处理,对于需要本机处理的三层数据包,是如何调用各三层处理函数的呢?对于ip子层处理完以后,需要发送到本地上层继续处理的数据包,又是如何调用相应四层处理函数的呢? 三层数据接收处理相关的链表及处理流程1、 三层的协议有arp、ipv4、ipv6、ipx等,我比较熟悉且用原创 2014-04-03 23:21:15 · 2859 阅读 · 0 评论 -
Linux IGMP PROXY 学习笔记 之 一 igmp proxy相关的数据结构及igmp proxy的大致实现要点
前面分析了igmp snooping的实现,最近由于工作比较忙,还有就是个人比较懒的缘故一直没有分析igmpproxy的实现,今天开始分析igmpproxy的实现。 我们首先还是从数据结构开始分析之路。 1. ip_mc_liststruct ip_mc_list { structin_device *interface;//三层接口原创 2014-05-25 17:13:01 · 7988 阅读 · 0 评论 -
Linux邻居协议 学习笔记 之五 通用邻居项的状态机机制
邻居项的状态机机制是通用邻居层最重要的内容,主要是处理邻居项中状态的改变,其中包括几个邻居状态的定时器机制,以及邻居项的更新,solicit请求的发送等对于通用邻居项的状态机,主要有如下几个状态:NUD_INCOMPLETE、NUD_REACHABLE、NUD_DELAY、NUD_PROBE、NUD_STALE、NUD_NOARP、NUD_PERMANENT、NUD_PROBE、NUD_F原创 2014-03-26 23:59:00 · 9423 阅读 · 0 评论 -
Linux icmp 学习笔记 之二 icmp数据处理流程
在分析icmp数据拜处理流程之前,我有如下疑问:1、为什么要为每一个cpu创建一个仅用于发送icmp报文的socket呢,不使用socket不也是可以把icmp报文发送出去吗?2、ping的工作原理是什么呢?3、Traceroute的工作原理是什么呢? 一、imcp协议的初始化1)ICMP接收处理函数的初始化我们知道icmp协议是附属于ip层的3层协议,且是将icmp数原创 2014-04-21 00:27:35 · 16751 阅读 · 0 评论 -
Linux 路由 学习笔记 之四 路由删除流程分析
上面几节分析了路由的添加与查找,本节开始分析路由的删除。 分析了这么多linux kernel功能模块,对于功能模块的大致实现流程,我们也比较熟悉了,无非是状态机、数据结构(以及数据之间的关系,通过链表等实现)、垃圾处理等。但是对于ipv4来说,既有路由项相关的数据结构,也有路由缓存相关的数据结构,通过这两个数据结构的名称,我们也可以看出来,路由项应该是没有垃圾回收机制的,不然的话路由缓存原创 2014-08-31 22:08:49 · 2704 阅读 · 0 评论 -
Linux 路由 学习笔记 之三 路由查找流程分析
上一节分析了路由的添加,本节接着分析路由的查找流程,路由查找流程也是被最多使用的接口。当设备三层协议栈接收到数据包、发送数据包等操作时,都要进行路由查找操作。 对于路由的查找,又分为两个查找过程,即不支持策略路由时的路由查找函数,以及支持策略路由时的路由查找流程,显然支持策略路由时的查找流程又相对复杂一些,所以本节主要分析支持策略路由时的路由查找流程。 注:对于路由查找,首先是查找原创 2014-08-28 00:18:48 · 9860 阅读 · 1 评论 -
Linux邻居协议 学习笔记 之一 邻居协议概念及arp帧格式
什么是邻居协议?如果一台主机和你的计算机连接在同一个LAN上(也就是说,你和这台主机通过一个共享介质相连或点对点直接相连),那么它就是你的邻居,而且他们有相同的L3网络配置。定义邻居的另一种方式是,一台主机到其邻居必须有且仅有一个L3跳跃点,并且它的L3路由表必须提供可以直接和其邻居通信的一条路劲。不是邻居的主机间通信必须通过网关或路由器。 neighbour项是在什么时候创建的呢?原创 2014-03-18 21:33:23 · 3185 阅读 · 0 评论 -
Linux 邻居协议 学习笔记 之三 通用邻居项的垃圾回收机制
对于通用邻居层,我认为主要可以分为三个方面:1、邻居项处理函数,包括邻居项创建、更新、删除等2、邻居项的状态机机制,主要是处理邻居项中状态的改变,其中包括几个邻居状态的定时器机制,也包括发送solicit请求等3、邻居项的垃圾回收机制,主要是负责回收一个邻居表里长时间不用的邻居项,已节省邻居缓存空间。这三个方面需要相互协调工作,才能完成通用邻居层的功能,这一节就分析邻居项的垃圾回收机制原创 2014-03-20 21:57:45 · 2867 阅读 · 0 评论 -
Linux邻居协议 学习笔记 之二 通用邻居处理函数对应的数据结构的分析
在linux代码中,对于不同的邻居项,抽象出了一个通用的模型,通用邻居层,主要是用来进行邻居项的创建、添加、删除、查找、更新等操作。 对于通用邻居层,最主要的就是邻居项的状态机的设计,本部分先介绍相应的数据结构,在分析通用邻居处理函数时,会仔细分析邻居状态机。本部分会简要介绍状态机。 首先是邻居状态的定义,在通用邻居项中定义了以下邻居状态: #defineNU原创 2014-03-19 22:14:46 · 2383 阅读 · 0 评论 -
Linux icmp 学习笔记 之一 icmp协议相关的格式
前段时间看了 ICMP协议是网络层中一个非常重要的协议,其全称为Internet Control Message Protocol(因特网控制报文协议),ICMP协议弥补了IP的缺限,它使用IP协议进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息 反馈。 在实现中,路由器会使用该协议来报告问题,而主机则会使用该机制来测试目的站是否可达。该报文的最终目的地不是一个应用程序或原创 2014-04-17 23:45:25 · 6741 阅读 · 0 评论 -
Linux igmp snooping 学习笔记 之一 相应的数据结构与初始化
一、igmpsnooping相关的数据结构组播相关的数据结构主要有三个,下面分别分析: 1、struct net_bridge_mdb_htable /*组播组数据库转发表,该结构体将所有的组播组数据库转发项通过hash数组连接到一起*/struct net_bridge_mdb_htable{ structhlist_head原创 2014-04-27 15:10:52 · 7314 阅读 · 3 评论 -
路由表学习笔记
1、 路由表相关的数据结构struct fib_table {struct hlist_node tb_hlist;u32 tb_id;//路由表id(0-255)unsigned tb_stamp;int tb_default;//()int (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struc原创 2014-01-08 23:01:00 · 2478 阅读 · 0 评论 -
Linux icmp 学习笔记 之三 icmp相关疑问分析
在上一节的分析中,曾留下3个疑问:在分析icmp数据包处理流程之前,我有如下疑问:1、为什么要为每一个cpu创建一个仅用于发送icmp报文的socket呢,不使用socket不也是可以把icmp报文发送出去吗?2、ping的工作原理是什么呢?3、Traceroute的工作原理是什么呢?1、对于第一个问题,通过上一节的分析,应该有如下原因a)加锁访问,保证同一时刻只能发送一个原创 2014-04-21 21:52:56 · 2086 阅读 · 0 评论 -
TCP 的MSS概念、MTU的概念以及两者的关联
一、MSS(MAX Segment size)即最大段大小,这个是tcp协议中规定的option选项中的一个选项,在三次握手的时候,会传递该mss值,进行mss的协商,这是tcp层的概念。该值为tcp层数据部分的最大长度(包括option字段)。 二、MTU(MAX translation Unit)最大传输单元,即所能传输的数据的最大值,这个是三层的概念,即三层数据包的最大长原创 2014-12-06 19:30:49 · 3321 阅读 · 0 评论 -
Tcp、Udp 校验和与ip校验和的概念
1.ip、tcp、udp的校验和计算原理1.1 ip校验和的计算Ip校验是针对ip头部的,即仅校验ip头部,而对于ip数据部分的校验,则交由相应的四次协议来保证, ip 头部中校验和字段为16bit。 计算原理如下:1.把校验和字段设置为02.计算ip头部中所有16bit的字之和3.将2中得到的和按位取反,得到校验和。1.2 tcp校验和的计算原理 对于ip原创 2014-12-03 20:48:25 · 17714 阅读 · 2 评论 -
Linux 路由 学习笔记 之十一 输入、输出路由查找相关的接口函数
对于路由功能模块的学习,也已经很长时间了。关于路由项的创建与查找、策略规则相关的创建与查找、路由缓存的创建与查找,都是分开来分析的,没有说明这些模块是如何配合使用的,以及模块之间的联系。本节就分析一下这几个模块是如何联系在一起的,也作为路由模块学习的小结。 对于协议栈而言,内核中的路由功能模块主要就是提供路由查找功能,而查找功能就集合了策略规则、路由项、路由缓存的查找,而路由功能模块的查找原创 2014-12-02 21:02:43 · 4044 阅读 · 0 评论 -
Linux 路由 学习笔记 之十 路由缓存项的创建
前面分析了路由以及二层、三层相关的文档, 而对于路由缓存的创建,按路由类型的分类可以分为两类:输入路由与输出路由。所谓输入路由,则为网口接收到数据以后,通过查找路由确定是将数据包转发,还是接收数据包;而输出路由,则是本地三层或者三层以上协议层要发送数据时,通过查找路由,确定使用哪一条路由发送出去。而当找到路由以后,我们就会创建相应的路由缓存,这样的话,当有持续的数据转发或者发送或者接收时,原创 2014-11-27 22:16:57 · 3540 阅读 · 0 评论 -
Linux 路由 学习笔记 之九 路由缓存相关的数据结构及初始化
这么久没有更新了,今天开始继续更新,争取把路由缓存分析完。1. 相关的数据结构本节主要是分析路由缓存相关的数据结构。对于路由缓存来说有两个主要的数据结构:struct rtable、struct dst_entry。下面分析一下这两个结构 1.1 struct rtable ipv4路由缓存相关结构体,保护了该路由缓存查找的匹配条件,即struct flowi类型的变原创 2014-10-29 23:10:14 · 6200 阅读 · 0 评论 -
Linux 路由 学习笔记 之七 策略规则的查找
上面分析了策略规则的添加,本文分析一下策略规则的查找。其实策略规则的存在就是为了实现策略路由功能的,而在策略路由的查找一节已经分析了策略规则的查找了,但为了在这一节单独分析策略规则,此处也一并再分析一下。 对于策略规则的功能模块来说,其查找函数是始于通用策略规则模块的fib_rules_lookup。 1 通用规则的查找函数 1.1 fib_rules_lookup 这原创 2014-09-04 23:29:46 · 4535 阅读 · 0 评论 -
Linux 路由 学习笔记 之六 策略规则的添加
上一节分析了策略规则相关的数据结构,本节就分析一下策略规则的添加。对于策略规则的功能模块,由于v4、v6都有用到,所以该模块也和邻居模块一样,抽象出了通用规则的接口函数,然后根据传入的参数来进入协议相关的策略规则的接口函数,即分为通用接口函数与协议相关的接口函数。 1.通用规则的添加及处理流程应用层主要是通过netlink模块实现与内核中策略规则模块通信,从而实现策略规则的添加、删除等原创 2014-09-03 23:36:39 · 2069 阅读 · 0 评论 -
Linux 路由 学习笔记 之五 策略规则相关的数据结构以及ipv4策略规则的初始化
前面分析路由查找时,已经捎带提到了策略规则,本节开始就要全面分析策略规则的内容了。也分析了这么多的内核代码,基本上对一个功能模块的几个主要内容也算是比较熟悉了。对于我们开发而言,一定要重视数据结构,当我们分析新的子功能或者开发新的子功能时,一定要好好的构思数据结构,因为数据结构的好坏,某种程度上就决定了代码的好坏。因此在开始分析策略规则的子模块时,照例需要先分析策略规则相关的数据结构。策略原创 2014-09-02 22:22:42 · 2213 阅读 · 0 评论 -
Linux IGMP PROXY 学习笔记 之二 igmp proxy的处理流程分析
上一节中我们分析了linux kernel中igmp proxy相关的数据结构与实现需求分析,本节我们分析kernel中对组播数据流和组播数据的处理流程。 对于目的ip地址为组播地址的数据,可以分为两类:1、 四层协议类型为igmp的igmp管理数据包2、 四层协议类型为udo的组播数据流而协议栈ip层数据处理完后,在函数ip_rcv_finish里则会进行组播路由原创 2014-06-01 21:52:42 · 12160 阅读 · 5 评论 -
Linux邻居协议 学习笔记 之六 arp协议处理初始化
上面分析完了通用邻居层的架构以及代码处理,下面分析ipv4的邻居协议arp。对于linux邻居协议层,我认为通用邻居层是最重要的实现,arp协议层的处理,主要是涉及三个方面:1、处理arp请求、应答,并创建相应的邻居项 2、发送arp请求,并创建相应的邻居项 3、处理应用层通过ioctl创建或者删除邻居项的请求。它们最终都好调用通用邻居层的函数。 1、arp协议的格式原创 2014-04-02 23:43:35 · 3766 阅读 · 0 评论 -
Linux IGMP 学习笔记 之一 IGMP协议格式
一、IGMP定义及分类IGMP:INTERNET组管理协议,与广播最大的不同是,IGMP允许每一个网络设备决定是否参与到一个特定的多播群组中。 IGMP的ip地址,组播ip地址的范围为224.0.0.0-239.255.255.255。其中224.0.0.1代表子网上的所有计算机,224.0.0.2代表子网上的所有路由器。另外,多播ip地址只可作为目的地址,而且不能生成关于多播原创 2014-04-24 19:38:07 · 13320 阅读 · 0 评论 -
Linux IGMP SNOOPING 学习笔记 之二 igmp数据包处理
上一节分析了igmp snooping初始相关的流程,这一节主要是分析igmp 数据包处理流程。 一、br_multicast_rcv该函数是igmp snooping留给网桥子系统的外部接口函数,当网桥接收了igmp数据包后就会调用该函数进行后续处理。 什么时候会调用到函数br_multicast_rcv?主要有2个地方会调用到这个函数a)网桥数据转发流程当网桥端原创 2014-04-28 00:36:11 · 13830 阅读 · 0 评论 -
Linux IGMP SNOOPING 学习笔记 之三 igmp snooping实现需求分析
本文主要是总结分析,在前面两节中,我们根据linux2.6.32中原创 2014-05-07 20:21:12 · 6444 阅读 · 1 评论 -
Linux 路由 学习笔记 之二 路由添加流程分析
基于linux2.6.21 上一节分析了路由的hash链表存储方式相关的数据结构,本节就分析一下路由的添加。对于路由查找来说,当支持策略路由时,路由的查找就会较复杂一些,因此打算结合策略规则来分析路由相关的知识,因此以后介绍的路由添加、删除、查找,都是基于支持策略路由的。一、应用层添加路由的方式 对于应用层来说,添加路由的方式有两种,分别是命令route与ip route。原创 2014-08-06 00:17:22 · 5173 阅读 · 2 评论 -
Linux邻居协议 学习笔记 之七 arp数据包处理流程
上面一节分析了arp协议的初始化过程。本节主要是arp数据包的处理流程,在arp初始化时,通过调用dev_add_pack将arp协议的接收处理函数添加到了三层协议数据包处理函数相关的hash链表ptype_base中(关于三层协议数据包处理函数相关的hash链表,请参考文档)。当底层接收到属于本机的arp数据包时,就会调用arp_rcv进行后续处理。 下面我们就分析arp_rcv以及与原创 2014-04-07 13:37:08 · 9240 阅读 · 1 评论 -
Linux netfilter 学习笔记 之八 ip层netfilter的连接跟踪模块初始化
在上一节中分析了连接跟踪模块相关的数据结构,本节就开始分析连接跟踪模块相关的初始化,下一节理解连接跟踪模块的hook机制。 在分析连接跟踪模块代码之前,先说明几点:1.连接跟踪模块的helper结构能够实现期望连接的建立以及相关协议的ALG功能。2.连接跟踪为NAT或者状态防火墙的实现提供了依据 连接跟踪模块的初始化过程分别在三个地方进行,一个用于注册连接跟踪模块相关的ho原创 2014-06-29 17:20:07 · 5924 阅读 · 0 评论 -
Linux netfilter 学习笔记 之九 ip层netfilter的连接跟踪模块代码分析
上一节分析了连接跟踪模块相关的初始化代码,本节分析连接中hook函数。在分析之前,我们再次回顾一下数据包在连接跟踪模块中的走向。 发往本地的数据:对于连接跟踪来说,只在hook点NF_IP_PRE_ROUTING、NF_IP_LOCAL_IN两个hook点进入到连接跟踪模块,按优先级顺序,依次调用ipv4_conntrack_defrag->ipv4_conntrack_in->i原创 2014-06-29 21:16:05 · 6658 阅读 · 1 评论 -
Linux netfilter 学习笔记 之十四 netfilter模块会修改数据包关联的路由缓存吗
起因:原创 2014-07-15 20:48:41 · 3965 阅读 · 0 评论 -
Linux napi与netif简要分析
以前分析了linux 软中断,最近看了软中断与网络接收函数的关系,特记下,以免忘记。 一、linux网络接收函数与软中断的关系及初始化。 关于软中断的原理就不依依介绍了,本节主要介绍网络数据处理对软中断的使用(关于软中断的工作原理可参看)。网络数据处理的软中断的注册是在函数net_dev_init进行初始化,主要是通过调用函数open_softirq,将rx、tx的处理函数原创 2014-05-17 16:00:07 · 8222 阅读 · 0 评论 -
Linux 网桥代码分析 六 网桥数据转发函数分析
对于数据包转发函数,主要是分为两大类:数据转发到指定端口、数据扩散到所有端口。 下面就从这两方面进行分析:一 数据转发到指定端口对于数据转发到指定端口的功能,也可以分为两个方面:对入口流量进行的数据转发、对出口流量进行的数据转发 入口流量很好理解:就是桥组中的一个网桥端口接收了数据包,经过网卡驱动后经由函数netif_receive_skb、handle_bridge原创 2014-03-06 22:16:44 · 9666 阅读 · 3 评论 -
linux 网桥代码分析 四 网桥转发数据库的代码分析
四、对网桥转发数据库的操作对于网桥转发数据库,我们一般需要对数据库的初始化、数据库的插入、数据库的查找、数据库的更新、数据库的删除等操作,下面我们就以这几个方向分析fdb相关的代码 1、br_fdb_init 该函数调用kmem_cache_create 来创建一个新缓存(这个函数并没有向缓存分配任何内存)int __init br_fdb_init(void)原创 2014-03-03 21:48:30 · 4009 阅读 · 0 评论 -
Linux 网桥代码分析 五 网桥端口设备接收数据包的处理分析
对于网桥端口设备,底层接收到数据以后,经过网卡驱动的接收函数处理以后,最终会调用函数netif_receive_skb,而netif_receive_skb在对数据包头进行相关处理以及对ptype_all链上注册的相关协议进行调用deliver_skb处理后(包括PF_PACKET类型的rawsocket处理),会调用handle_bridge进入网桥处理,而其会调用br_handle_frame原创 2014-03-04 21:24:11 · 6367 阅读 · 0 评论 -
linux 网桥代码分析 三 网桥及网桥端口的添加与删除
1、网桥的添加及相关的函数 br_add_bridge,其函数实现以下功能:1、调用new_bridge_dev创建并初始化一个网桥设备与网桥2、调用register_netdevice注册网桥设备3、调用br_sysfs_addbr增加sysfs相关的功能,主要是建立kobject与sysfs之间的关系 (分析完网桥的代码以后,我会好好学习一下kobje原创 2014-03-01 23:32:44 · 4858 阅读 · 0 评论 -
linux 网桥代码分析 一 网桥概念与网桥相关的数据结构
1. 网桥概念 中继器:只是简单的把一个端口所接收的数据复制到另一个端口,且是按位复制的。多端口的集线器叫做hub网桥:网桥了解链路层协议,是按帧复制数据,而非按位复制。网桥还具有地址学习的功能,并不是简单的把数据从一个端口转发到其他端口,其会根据学习到的mac地址来决定是否进行转发,如何转发。 2. Linux网桥模型 对于linux而言,网桥是虚拟设备。因此,需要将原创 2014-02-26 23:49:50 · 3264 阅读 · 0 评论 -
linux 网桥代码分析 二 网桥初始化
本节主要分析网桥初始化相关的代码对于网桥初始化所需要做的功能,主要有以下几项1、CAM表的初始化2、注册网桥相关的网络防火墙钩子函数3、向通知链表中注册网桥的回调函数,处理网桥感兴趣的一些事件4、设置网桥的ioctl,以便处理应用层添加网桥、删除网桥的需求5、注册网桥处理回调函数,在接收封包处理函数netif_receive_skb中用来处理网桥设备 而网桥相原创 2014-02-27 22:33:36 · 3836 阅读 · 0 评论