linux内核网络子系统
来源:互联网 发布:如何看淘宝价格曲线 编辑:程序博客网 时间:2024/06/05 11:05
linux内核协议栈有哪些表?
《linux内核协议栈源代码剖析》中特地强调了Route表与ARP表。arp命令操作arp表,这张表用于网段内的邻居,通过socket下发配置。route命令操作路由表,通过socket下发命令。ifconfig命令配置主机IP、端口、hostname等本机配置,也是通过socket下发命令。
但注意这些是2.6内核以前的网络子系统,2.6内核之后网络子系统做了很大的改进,除了上述的网络模块之外,还增加了如下所说的功能,下述的功能代码如何实现还是要继续研究。
隧道、流量控制等功能如何实现?
例如GRE、VXLAN这样的隧道主要通过内核加载模块来实现相关的功能,而这个加载模块也主要通过操作netdev结构实现功能。
以OVS中的vxlan模块为例,在使用这个功能之前需要先安装vxlan.mod模块(忘了名字了),然后才可以下发vxlan功能。
TC是linux内核自带的流量控制系统,不需要mod加载就可以使用,与RFC中描述一样,可以用于端口与队列。操作TC的工具可以使用新版iptables。
哪里获得这些功能?
2.2以上linux内核提供的网络子系统中,包含了这三大部分功能:路由表与邻居表、可用于防火墙的Policy与iptable、流量整形TC。
与旧版内核通过socket下发配置不同,新版内核通过netlink下发配置到内核,大体上来讲,netlink通过command方式下发配置,包括TC在内的所有新版网络功能都是用过netlink下发到内核。
命令行方面,过去通过arp、ifconfig、route命令分别配置的功能在新版中使用ip命令同一配置了。
策略路由与多表?
策略路由是将policy用于路由,可以实现QoS和防火墙等功能,在配置编译内核时候选择(IP: advanced router)。多表是虚拟路由实现,即多张路由表,根据策略,不同traffic使用不同的虚拟路由,在配置内核时选择(IP: Policy Routing)。
这两个配合使用可以实现简单的源策略路由,通过配置用户定义的路由表,可以实现简单的策略路由、多ISP上连、通过定义weight实现负载均衡,见文档。
linux内核多表?
参考(http://www.bkjia.com/xtzh/833906.html),linux内核多表支持256张,其中0号表表示未指定(unspec),253、254、255表示default、main、local,其余全部留给客户使用。unspec是所有表中route的集合,对于route可以增删查改,同时会影响到route所在的表,不要轻易清空。其余所有表都可以随意配置路由,没有级联或者从属关系,但是约定main是使用route等命令时候不指定表时候添加的目的表,其余的表中添加路由时候都要指定表名。同时由于所有表中路由要总和到unspec中,故路由不要重复。路由有LPM等概念,在同一张表中,如果包匹配到多个路由,使用哪个路由表项可以通过LPM解决。如果在多张表中匹配到,那么如何动作参考alexey关于ip-cref文档。
一般约定,main中是系统添加的路由,local是本机所在子网的路由。字段含义参考(https://gist.github.com/batmancn/d7d47f7c97c9c735b2a8)或者(http://www.study-area.org/tips/adv-route/Adv-Routing-HOWTO-4.html)。
隧道设备?
linux内核默认支持三种隧道设备,IPinIP、GRE、非内核隧道(例如PPTP,在用户层实现封装与解包)。另外也可以自定义其他隧道,例如VxLan,通过加载内核模块实现相关的功能。
如何挖隧道:从两头开始挖;选择一种tunnel;最终在中间节点通过路由实现。
IPSEC?
一种比较正规的IPSEC实现是FreeS/WAN,但是没有合并到linux内核代码中。linux内核代码中的IPSEC是CrypoAPI,2.5以上内核。具体使用方式见文档。
多播路由?
编译内核模块时候需要选择相应的选项以支持多播路由,但是多播路由还是作为linux user mode程序做的,只需要内核支持即可。上层使用的多播路由一般有四中:DVMRP(RIP协议多播版,也就是算法与RIP一样,只是学习的路由是多播路由),MOSPF(OSPF的多播版),PIM-SM、PIM-DM。
4中多播路由都要求内核启用(multicast与multicast routing),如果想使用PIM还需要启用PIMv1或者PIMv2。然后上层ip命令多了IGMP选项。具体配置见文档。
带宽管理?
也就是QoS,可以见前述的文档,主要通过TC命令及其相应的模块实现,无法对接收数据限速,只能对发送数据限速。具体实现时候是在netdev将发送数据push到网卡队列之前增加了一层功能,这些功能通过调整报文进入发送队列顺序、丢弃报文、延迟报文进入队列时间等方式实现带宽管理。
分类队列?
分类队列也就是class+qdisc。
可以对报文进行分类的高级过滤器?
像之前那个文档里面说明的一样,filter可以连接class与qdisc,主要功能是对traffic进行分类然后赋予相应的QoS规则。有几个预先定义好的filter,主要是根据某些字段、或者前面的某些模块对报文的修改(例如防火墙)进行分类。
netfilter与iproute?
有一张图显示了插入点。另外这里除了修改包头之外还可以使用--set-mark机制给数据包带metedata。
一般这两种功能用来实现防火墙、标记策略,让后面路由或者其他模块使用。
IP反向过滤?
规范中规定的IP反向过滤是安全的一种机制,即request报文的response应该从request出去的端口回来,放到这里就是网卡。在芯片中,反向过滤是在L3表中,通过比较response的源IP地址来进行过滤,但是在linux内核中不知道是不是这样做。文档中写了开启与关闭反向过滤功能。
有关ip的内核参数?
在/proc/sys/net/ipv4/文件夹下有ipv4相关设置文件(内核使用文件管理这些配置),具体配置参见文档。
在/proc/sys/net/ipv4/conf文件夹下有网卡的设置。
在/proc/sys/net/ipv4/neigh/文件夹下有邻居策略的设置。
在/proc/sys/net/ipv4/route/文件夹下有路由策略的设置,例如如何让内核刷新路由缓冲。
方便菜谱?
就是模板化的内核配置,用来解决一类问题,一些上层应用会用到这些,例如Apache。在文档中有这些配置方法。
linux bridge?
linux网桥,L2层,不支持iptables、NAT、tc filter。
伪网桥,报文依然能够通过linux内核。
0 0
- linux内核网络子系统
- Linux网络子系统内核分析
- linux 内核管理子系统
- linux内核DCB子系统
- linux内核子系统
- linux内核DCB子系统
- linux内核子系统
- Linux内核子系统
- 【Linux内核】timer子系统
- 内核网络子系统的实现
- Linux子系统系列-网络
- LINUX网络子系统
- Linux网络子系统
- linux 网络子系统
- Linux网络子系统
- linux网络子系统分析
- linux网络子系统
- Linux内核子系统---内存管理子系统、进程管理子系统
- jsp自动登录设计思路(相对来说比较安全)
- ListView异步加载图片方法和滚动优化
- 【MATLAB工程人员的福音】MATLAB R2015b的Coder工具使用实例(一)
- <Java> File文件操作
- macbook 安装win8 双系统
- linux内核网络子系统
- 多例模式【Multition Pattern 】
- 使用PHP生成数据字典
- Android onLongClick事件触发的问题
- django cache的简单使用
- CentOS7.0下安装 mysql5.6
- Memcached的安装和使用
- 寒江独钓前辈的第一个例子的编译运行过程
- sdk tar打包