空中交通管制守护进程

atcd的Python项目详细描述


#ATCD

\它。

要求


`ATCD`网关**必须**看到设备的实际IP。换句话说,如果您使用
natting,NAT后面的所有设备都将使用相同的整形规则进行整形。

`ATCD`取决于以下软件包:

*python 2.7
*pyroute2==0.3.3
*pyotp==1.4.1
*sparts==0.7.1
*atc节俭==0.1.6

` ATCD是直接从[PIP(https://pypi.pypi.org/pypi/pypi/pypi/pip)上直接安装的。


<<

`` bash
/>` pip安装ATCD
` ` ` `
` ` ` `

` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `
` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `

` ` ` ` ` ` ` ` ` ` `/>配置

`ATCD`通过命令行参数,要获取选项的完整列表,请运行:

````
ATCD-h
````


最重要的配置选项是:

*--ATCD WAN:用于连接到Internet的接口。
*--ATCD LAN:用于连接到设备的接口。
*--sqlite file:位置ATCD将保留当前的设备设置。

`ATCD`Debian和RHEL发行版的init文件可以在[Chef Cookbook]中找到(../../Chef/atc/files/default/init.d/)


` atcd"利用了linux的内置[交通控制子系统][tchowto]。与流量控制子系统的通信通过netlink api完成,并由纯python netlink库[pyroute2][pyroute2]提供便利。

基于这个标记,分类器将把数据包放在正确的"bucket"中,然后它将限制带宽,增加延迟,丢弃数据包,损坏它们…根据成形设置。


下图说明IP数据包经过的流:
![空中交通管制图][空中交通管制图]

标记是在数据包穿过"转发"链上的路由器时完成的,例如在为IPS10.0.2.2塑造数据包时,10.0.2.4和10.0.2.5:10.0.0.10.0.4和10.0.2.10和10.0.2.5:


`` bash
`` bash
-a forward-D 10.0.2.2/32-i eth0-j标记——设置xmark 0x2/0xffffffffffff
-a forward-S 10.0.2.2/32-i eth0-j标记——设置xmark 0x3/0xffffffffffffffff
-a forward-D 10.0.0.0.2.2.4/32-i eth0-j标记——设置xmark 0xmark 0xmark 0xmark 0x3/0x.0.2.4/32-第1部分-Jmark——设置xmark 0x3/0xffffff
-a forward-d 10.0.2.5/32-i eth0-j mark——设置xmark 0x4/0xffffffff
-a forward-s 10.0.2.5/32-i eth1-j mark——设置xmark 0x4/0xffffffff
```
eth0是连接到Internet的网络接口。

数据包

流量控制部分更为复杂。下面是3个IPS10.0.2.2设备的上行链路成形情况,10.0.2.4和10.0.2.5:
`` bash
tc filter show dev eth0
filter parent 1:协议IP pref 1 fw
filter parent 1:协议IP pref 1 fw handle 0x2 classid 1:2 police 0x1 rate 100000bit burst 12000b mtu 2kb action drop overhead 0b
ref 1 bind 1

filter parent 1:协议ip pref 1 fw handle 0x3 classid 1:3 policy 0x3 rate 200000bit burst 12000b mtu 2kb action drop overhead 0b
ref 1 bind 1


filter parent 1:protocol ip pref 1 fw handle 0x4 classid 1:4 policy 0x5 rate 200000bit burst 12000b mtu 2kb action drop overhead 0b
ref 1 bind 1

#tc类显示dev eth0
类htb 1:4根叶8005:prio 0速率200000bit ceil 200000bit突发1600b cburst 1600b
类htb 1:2根叶8001:prio 0速率100000bit ceil 10000bit突发1600b cburst 1600b
类htb 1:3根叶8003:prio 0速率200000bit ceil 200000bit突发1600b cburst 1600b
tc qdisc show dev eth0
qdisc htb 1:根refcnt 2 r2q 10默认0个直接数据包u stat 3755 direct qlen 1000
qdisc netem 8001:父级1:2限制1000延迟10.0ms损失1%
qdisc netem 8003:父级1:3限制1000延迟20.0ms损失2%
qdisc netem 8005:父级1:4限制1000延迟20.0ms损失2%
```

当一个包进入时,它通过根qdisc(第4行),实际上是无限的,过滤器被检查,如果一个包被标记为0x2,它将被传递到id为1:2的类中,在那里发生限制。之后,包被传递给它的子qdisc,它使用netem提供包丢失、损坏、重新排序…下面的图表表示了"filter"、"class"和"qdisc"是如何组合在一起的:

````
root 1:
uuuult;--filter matching
/
/
/
/|\
1:2 1:3 1:4<;--带宽限制

8001:8003:8005:<;--请求"ATCD"为给定设备塑造/取消缩放流量时,延迟、数据包丢失、重新排序和损坏,` atcd将设置/取消设置所需的iptables规则和filter、class和qdisc来控制流量。除此之外,它还将运行一些定期的内务处理任务(如过期的形状设置…。

\建议让"atcd"只监听"localhost",并将身份验证卸载到api。

[tchowto]:http://www.tldp.org/howto/traffic control howto/
[pyroute2]:https://github.com/svinota/pyroute2
[atc_diagram]:https://facebook.github.io/augmented-traffic-control/images/atc_diagram.png

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java找不到适合makeText的方法   如何将java数组转换为prolog列表并使用它进行jpl查询?   安卓中显示ArrayList的java子类ArrayAdapter   Java8GroupingBy到包含列表的映射中   java Json字符串,带有要映射的嵌套对象<string,string>   java Hibernate中的包和列表有什么区别?   java Spring REST模板指定Jackson视图   java如何在继承的类中返回字符串?   调试Java ArrayQue删除和轮询方法错误   带有NetBeans 7.4的java JSP自定义标记Struts2   java无法从加载jar文件。蝙蝠锉   无法解析java image_项“未显示在下拉列表中且无法键入”   jdoDetachedState设置为null的java查询实体   scala使用Cypher CREATE命令和属性映射,来自Java   minecraft中的java/me并没有被我编写的插件禁用   java Cucumber框架设置   java以奇怪的方式遍历LinkedList?   java JPA将布尔字段配置为保留为整数   月球着陆器中的java Android垃圾收集