Linux下TCP参数配置

来源:互联网 发布:数据库关系模型示例 编辑:程序博客网 时间:2024/03/29 08:23
最近有位朋友告诉我这样一个问题,在一些特殊的情况下,Linux服务器有时候会丢弃windows下TCP连接的syn包,其表现就是同一个局域网下的一些机器可以连通服务器,另一些可以。在查阅各种资料后发现一段Linux内核代码:
if (tmp_opt.saw_tstamp &&
            tcp_death_row.sysctl_tw_recycle &&
            (dst = inet_csk_route_req(sk, req)) != NULL &&
            (peer = rt_get_peer((struct rtable *)dst)) != NULL &&
            peer->v4daddr == saddr) {
            if (get_seconds() < peer->tcp_ts_stamp + TCP_PAWS_MSL &&
                (s32)(peer->tcp_ts - req->ts_recent) >
                            TCP_PAWS_WINDOW) {
                NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_PAWSPASSIVEREJECTED);
                goto drop_and_release;
            }
        }
这段代码的含义是如果tcp_tw_recycle和tcp_timestamps同时为1时,对同一源IP发送的两个不同请求,取其时间戳大的一个,另一个被系统drop_and_release了。
解决方法就是关闭tcp_tw_recycle和tcp_timestamps的其中一个就ok了。
关于Linux下TCP参数配置问题,传送门:http://www.2cto.com/os/201204/127779.html
关于 tcp_tw_recycle和tcp_timestamps导致connect失败问题,传送门:http://blog.sina.com.cn/s/blog_781b0c850100znjd.html,http://www.libertyvps.com/thread-262-1-1.html
关于TIME_WAIT网络故障,传送门: http://dngood.blog.51cto.com/446195/988968
关于TCP连接三次握手细节,传送门:http://blog.chinaunix.net/uid-20665047-id-3137792.html ;
0 0