麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 服務器 > 管理維護 > 正文

tcp_tw_recycle和tcp_timestamps導致connect失敗問題

2024-09-10 14:19:08
字體:
供稿:網(wǎng)友
    近來線上陸續(xù)出現(xiàn)了一些connect失敗的問題,經(jīng)過分析試驗,最終確認和proc參數(shù)tcp_tw_recycle/tcp_timestamps相關;
1. 現(xiàn)象
    第一個現(xiàn)象:模塊A通過NAT網(wǎng)關訪問服務S成功,而模塊B通過NAT網(wǎng)關訪問服務S經(jīng)常性出現(xiàn)connect失敗,抓包發(fā)現(xiàn):服務S端已經(jīng)收到了syn包,但沒有回復synack;另外,模塊A關閉了tcp timestamp,而模塊B開啟了tcp timestamp;
    第二個現(xiàn)象:不同主機上的模塊C(開啟timestamp),通過NAT網(wǎng)關(1個出口ip)訪問同一服務S,主機C1 connect成功,而主機C2 connect失敗;

2. 分析
    根據(jù)現(xiàn)象上述問題明顯和tcp timestmap有關;查看linux 2.6.32內(nèi)核源碼,發(fā)現(xiàn)tcp_tw_recycle/tcp_timestamps都開啟的條件下,60s內(nèi)同一源ip主機的socket connect請求中的timestamp必須是遞增的。
    源碼函數(shù):tcp_v4_conn_request(),該函數(shù)是tcp層三次握手syn包的處理函數(shù)(服務端);
    源碼片段
       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;
            }
        }
        tmp_opt.saw_tstamp:該socket支持tcp_timestamp
        sysctl_tw_recycle:本機系統(tǒng)開啟tcp_tw_recycle選項
        TCP_PAWS_MSL:60s,該條件判斷表示該源ip的上次tcp通訊發(fā)生在60s內(nèi)
        TCP_PAWS_WINDOW:1,該條件判斷表示該源ip的上次tcp通訊的timestamp 大于本次tcp

    分析:主機client1和client2通過NAT網(wǎng)關(1個ip地址)訪問serverN,由于timestamp時間為系統(tǒng)啟動到當前的時間,因此,client1和client2的timestamp不相同;根據(jù)上述syn包處理源碼,在tcp_tw_recycle和tcp_timestamps同時開啟的條件下,timestamp大的主機訪問serverN成功,而timestmap小的主機訪問失敗;

    參數(shù):/proc/sys/net/ipv4/tcp_timestamps - 控制timestamp選項開啟/關閉
          /proc/sys/net/ipv4/tcp_tw_recycle - 減少timewait socket釋放的超時時間

3. 解決方法
    echo 0 > /proc/sys/net/ipv4/tcp_tw_recycle;
    tcp_tw_recycle默認是關閉的,有不少服務器,為了提高性能,開啟了該選項;
    為了解決上述問題,個人建議關閉tcp_tw_recycle選項,而不是timestamp;因為 在tcp timestamp關閉的條件下,開啟tcp_tw_recycle是不起作用的;而tcp timestamp可以獨立開啟并起作用。
    源碼函數(shù):  tcp_time_wait()
    源碼片段:
        if (tcp_death_row.sysctl_tw_recycle && tp->rx_opt.ts_recent_stamp)
            recycle_ok = icsk->icsk_af_ops->remember_stamp(sk);
        ......
       
        if (timeo < rto)
            timeo = rto;

        if (recycle_ok) {
            tw->tw_timeout = rto;
        } else {
            tw->tw_timeout = TCP_TIMEWAIT_LEN;
            if (state == TCP_TIME_WAIT)
                timeo = TCP_TIMEWAIT_LEN;
        }

        inet_twsk_schedule(tw, &tcp_death_row, timeo,
                   TCP_TIMEWAIT_LEN);

    timestamp和tw_recycle同時開啟的條件下,timewait狀態(tài)socket釋放的超時時間和rto相關;否則,超時時間為TCP_TIMEWAIT_LEN,即60s;

    內(nèi)核說明文檔 對該參數(shù)的介紹如下
    tcp_tw_recycle - BOOLEAN
    Enable fast recycling TIME-WAIT sockets. Default value is 0.
    It should not be changed without advice/request of technical
    experts.
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人在线观看小视频 | 午夜精品久久久久久久96蜜桃 | 亚洲日本欧美 | 亚洲射情 | av观看国产 | 美国av片在线观看 | 国产精品久久久久久久久久10秀 | 精品国产一区二区在线观看 | 污污黄| 欧美 日本 在线 | 精品一区二区久久久久 | 亚洲网站免费观看 | 国产成人羞羞视频在线 | 狠狠干五月天 | 麻豆传传媒久久久爱 | 91精品视频在线看 | 免费黄网站在线播放 | 轻点插视频 | 国产精品久久在线观看 | 网站激情 | 日韩黄在线观看 | 成人午夜天堂 | 亚洲欧美日韩久久精品第一区 | 成人三级在线播放 | 国产精品午夜未成人免费观看 | 国产在线观看免费视频软件 | 日本a级免费 | 亚洲人成网站免费播放 | 欧美日韩中文字幕在线视频 | 免费视频www在线观看 | av免费在线观看不卡 | 黄色视屏免费看 | 日韩精品一区二区三区中文 | 色中色综合网 | h色视频在线观看 | 老a影视网站在线观看免费 国产精品久久久久久久久久尿 | 日韩黄色片免费看 | 依依成人综合 | 欧美自拍| 九九热视频这里只有精品 | 亚洲欧美日韩精品久久 |