syn包没有回复

21 views
Skip to first unread message

gavin

unread,
Sep 6, 2016, 5:26:11 AM9/6/16
to 《linux环境编程》讨论组
今天遇到了一个很奇怪的问题,在做压力测试,进行性能调优,客户端和服务器在局域网内,都配有两个万兆口,做压力测试的时候,流量有十多个G,这个时候会出现个别链接超时现象,我同时在客户端和服务端抓包,发现客户端发的第一个syn包,到了服务器,但是服务器没有回复,等了3秒之后,客户端重新发了个syn包,这时服务器立马回复,出现的这几个链接超时的,都是同样的情况,服务器关闭了iptables,没有防火墙
下图是链接超时的一个服务器端抓包截图


Feng Gao

unread,
Sep 6, 2016, 6:00:37 AM9/6/16
to gavin, 《linux环境编程》讨论组
内核的连接队列满了吧。

--
您收到此邮件是因为您订阅了Google网上论坛上的“《linux环境编程》讨论组”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到linux_aple+unsubscribe@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/linux_aple/671c242c-29b0-4a36-b5f1-19aaef203b05%40googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

Message has been deleted

Feng Gao

unread,
Sep 7, 2016, 9:58:56 AM9/7/16
to gavin, 《linux环境编程》讨论组
看一下内核源码就清楚了。

tcp_conn_request函数:

        if ((net->ipv4.sysctl_tcp_syncookies == 2 ||
             inet_csk_reqsk_queue_is_full(sk)) && !isn) {
                want_cookie = tcp_syn_flood_action(sk, skb, rsk_ops->slab_name);
                if (!want_cookie)
                        goto drop;
        }

        /* Accept backlog is full. If we have already queued enough
         * of warm entries in syn queue, drop request. It is better than
         * clogging syn queue with openreqs with exponentially increasing
         * timeout.
         */
        if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) {
                NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);
                goto drop;
        }

        req = inet_reqsk_alloc(rsk_ops, sk, !want_cookie);
        if (!req)
                goto drop;

后面的没看,这三种情况都是drop掉syn包。另外需要注意的是inet_csk_reqsk_queue_young没有看出来跟重传有关。


2016-09-07 10:08 GMT+08:00 gavin <gavin...@gmail.com>:
我在网上看到了两种解释
第一种是,半链接队列满了,直接丢弃,如果半链接没满,全链接队列满了,这时候会回复syn+ack,
第二种是,全链接队列满了,如果之前的握手过程都没有重传过,这个syn包server端会直接drop掉,之后client会重传syn (原文在这里:http://blog.chinaunix.net/uid-20662820-id-4154399.html)

这两种解释好像有点偏差,第二种解释相对于第一种来说,在全链接队列满的时候多了一个有没有重传的判断,而第一种解释就直接回复了syn+ack

在 2016年9月6日星期二 UTC+8下午6:00:37,Gao Feng写道:
Reply all
Reply to author
Forward
0 new messages