免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zhou_rock
打印 上一主题 下一主题

[网络管理] IP_conntrack_max 问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-04-08 20:42 |只看该作者
嗯,如果带宽足够,可以不予理会。

论坛徽章:
0
22 [报告]
发表于 2009-04-08 20:46 |只看该作者
原帖由 zhou_rock 于 2009-4-8 20:05 发表
楼上说的没错儿,以前遇到过table full的情况,把/proc/sys/net/ipv4/netfilter/ip_conntrack_max 改大后就好了.但是只更改/proc/sys/net/ipv4/netfilter/ip_conntrack_max,而不更改hashsize的大小,他们的比值就会 ...

如果是纯 routing,不需要 conntrack 的话,性能可以提升很多
但是,如果没有 nat 业务却加载了 conntrack,则适得其反,既起不到任何帮助,又会影响性能,得不偿失

论坛徽章:
0
23 [报告]
发表于 2009-04-08 20:48 |只看该作者
原帖由 platinum 于 2009-4-8 20:46 发表

如果是纯 routing,不需要 conntrack 的话,性能可以提升很多
但是,如果没有 nat 业务却加载了 conntrack,则适得其反,既起不到任何帮助,又会影响性能,得不偿失


白金大哥,你这些都是从哪里学到的啊?
买的书?什么书?
指点指点。
最近感觉没深度了。有点迷茫。

[ 本帖最后由 marsaber 于 2009-4-8 20:51 编辑 ]

论坛徽章:
0
24 [报告]
发表于 2009-04-08 20:58 |只看该作者

回复 #22 platinum 的帖子

嗯,该路由器没有nat,所以默认也没有启用跟踪模块
谢谢白金大哥的指点,听君一席话,胜读十年书,呵呵,以后要多多学习.

另外,ip_conntrack_tcp_timeout_established这个参数还是不是很明白?

论坛徽章:
0
25 [报告]
发表于 2009-04-08 21:00 |只看该作者
http://cha.homeip.net/blog/archives/2005/06/_linux_nat_ip_c.html

原本 Linux NAT 用得好好的, 沒想到幾天前卻出現了無法上網的情況, 而系統記錄也出現了這樣的訊息:

ip_conntrack: table full, dropping packet.

後來才知道, Linux NAT 的 ip_conntrack 模組會記錄 tcp 通訊協定的 established connection 記錄, 而且預設 timeout 時間長達五天 (432,000 秒), 因此只要 LAN 中有人使用 P2P 軟體 (如: eDonkey、BT...) 就容易發生這種問題.

解決方法 (1): 加大 ip_conntrack_max 值

查出原本的 ip_conntrack_max 值:
指令: cat /proc/sys/net/ipv4/ip_conntrack_max

寫入理想的數值 (每一個 ip_conntrack buffer 會佔用 292 Bytes)
指令: echo "數值" > /proc/sys/net/ipv4/ip_conntrack_max
例如: echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max
這個效果是暫時的, 如果要每次開機都使用新的數值, 需將上述指令寫入 /etc/rc.d/rc.local
或是在 /etc/sysctl.conf 加入: net.ipv4.ip_conntrack_max = 數值
或使用指令: sysctl -w net.ipv4.ip_conntrack_max=數值

解決方法 (2): 降低 ip_conntrack timeout 時間

重設 ip_conntrack_tcp_timeout_established (原值: 432000, 單位: 秒)
指令: echo "數值" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
例如: echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

開機自動設置的作法同方法(1).

其他相關指令:

查看目前 ip_conntrack buffer 使用狀況
指令: grep conn /proc/slabinfo

結果實例: ip_conntrack 3024 4090 384 409 409 1 (各值說明如下)

ip_conntrack the cache name
3024 the number of currently active objects
4090 the total number of available objects
384 the size of each object in bytes
409 the number of pages with at least one active object
409 the total number of allocated pages
1 the number of pages per slab are given

man slabinfo 可查詢詳細說明.

查出目前 ip_conntrack 記錄最多的前五名 IP
指令: cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 5

結果實例:

2816 192.168.1.100
14 163.30.85.129
6 220.132.142.175
6 127.0.0.1
4 218.187.5.223

由此可知, 192.168.1.100 佔用了絕大多數的 buffer, 推斷這個 IP 的 User 可能使用了 P2P 軟體.



參考資料:

Ray 的知識基地: Kernel Log 出現:「ip_conntrack: table full, dropping packet.」訊息
Ray 的知識基地: ip_conntrack timeout 時間過長問題
Netfilter conntrack performance tweaking, v0.6
相關網頁:

Jamyy's Weblog: Building Linux NAT with MRTG network monitoring
Jamyy's Weblog: iptables / route command notes

论坛徽章:
0
26 [报告]
发表于 2009-04-08 21:09 |只看该作者
原帖由 marsaber 于 2009-4-8 20:48 发表


白金大哥,你这些都是从哪里学到的啊?
买的书?什么书?
指点指点。
最近感觉没深度了。有点迷茫。

呵呵,书本上的东西大多都是过时了的
我一般是 google 来学习
遇到具体细节就直接看内核源代码了,这样最直接最方便,可以知道具体的工作原理是什么

论坛徽章:
0
27 [报告]
发表于 2009-04-08 21:14 |只看该作者
原帖由 platinum 于 2009-4-8 21:09 发表
遇到具体细节就直接看内核源代码了,这样最直接最方便,可以知道具体的工作原理是什么


谢谢。
非常感谢!
最近在看C,兴许对学习源代码有用。
(几年前学的,几年没用忘的差不多了)

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
28 [报告]
发表于 2009-04-08 21:15 |只看该作者
单纯做路由?
那就不需要conntrack了

论坛徽章:
0
29 [报告]
发表于 2009-04-08 21:20 |只看该作者
原帖由 zhou_rock 于 2009-4-8 20:58 发表
嗯,该路由器没有nat,所以默认也没有启用跟踪模块
谢谢白金大哥的指点,听君一席话,胜读十年书,呵呵,以后要多多学习.

另外,ip_conntrack_tcp_timeout_established这个参数还是不是很明白?

ip(nf)_conntrack_tcp_timeout_established 主要是用来控制 conntrack 对 TCP 协议的状态跟踪 timeout 时间的
当 TCP 建立后,conntrack 的状态会标记为 ESTABLISHED,此时 conntrack 表中会有双向信息
TCP 虽然已经建立,但如果没有数据传输,TCP 仍然会保持会话
TCP 协议中有个 “保活定时器”,默认每隔一段时间发送一次探测信息,告诉对面的 socket “我还活着”
标准 TCP 协议中保活定时器是 2 小时,也就是如果没有数据传输,最多 2 小时会自主发送一次探测信息
作为 NAT 设备,也会有相应的记录
在连接建立好后,如果数据包有传输,就会刷新 ip_conntrack_tcp_timeout_established 的值,否则递减,减到 0 时就会认为断开
如果 ip_conntrack_tcp_timeout_established 小于保活定时器的值,那么有可能出现正常的 TCP 连接被异常断开的情况
此现象可以通过 ssh 到 linux 上后什么都不做,时间超过 ip_conntrack_tcp_timeout_established 值后再输入字符来重现断开现象
目前 linux 内核中的保活定时器默认值也是 2 小时(7200 秒),通过 sysctl 可以设置 net.ipv4.tcp_keepalive_time 的值

论坛徽章:
0
30 [报告]
发表于 2009-04-08 21:22 |只看该作者
原帖由 marsaber 于 2009-4-8 21:14 发表


谢谢。
非常感谢!
最近在看C,兴许对学习源代码有用。
(几年前学的,几年没用忘的差不多了)

如果想学网络更深层次的东西,可以看 《TCP/IP 详解》卷一,如果做开发的话应该把卷二也看了
同时还要掌握 wireshark 的使用,这个可以帮助你来理解网络数据包的结构
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP