IPVS支援協議的超時時間

2021-09-26 05:32:59 字數 3218 閱讀 6733

以下ipvsadm命令用於顯示和設定ipvs連線的超時時間,單位為秒(seconds)。

$ sudo ipvsadm -l --timeout

timeout (tcp tcpfin udp): 900 120 300

$ $ sudo ipvsadm --set 3600 120 300

$ $ sudo ipvsadm -l --timeout

timeout (tcp tcpfin udp): 3600 120 300

$

三個值依次為tcp會話的超時時間,在接收到fin報文後的tcp會話超時時間,以及udp報文的超時時間。當其中某個值為0時,表示不設定此值,其將保留上一次設定的數值。

需要注意的是,這三個timeout值是針對ipvs網路命名空間的全域性數值,而不只是針對某個虛擬服務。

核心函式ip_vs_set_timeout處理timeout的引數設定。有以下**可見,前兩個timeout設定到了ipproto_tcp協議資料的timeout_table陣列,最後乙個timeout值設定到了ipproto_udp協議資料結構的timeout_table陣列。這三個值分別對應的狀態為:ip_vs_tcp_s_established、ip_vs_tcp_s_fin_wait 和 ip_vs_udp_s_normal。

static int ip_vs_set_timeout(struct netns_ipvs *ipvs, struct ip_vs_timeout_user *u)

if (u->tcp_fin_timeout)

#endif

#ifdef config_ip_vs_proto_udp

if (u->udp_timeout)

#endif

}

對於tcp協議,其協議資料結構在函式__ip_vs_tcp_init中初始化,tcp_timeouts是預先定義好的tcp相關timeout值。

static int __ip_vs_tcp_init(struct netns_ipvs *ipvs, struct ip_vs_proto_data *pd)

int *ip_vs_create_timeout_table(int *table, int size)

在tcp_timeouts陣列中,核心為tcp協議的每個狀態都定義了相應的超時時間,回憶以上的介紹,ipvsadm工具僅是可修改ip_vs_tcp_s_established狀態和ip_vs_tcp_s_fin_wait狀態的超時值,預設情況下分別為1560(900s)和260(120s)。

static const int tcp_timeouts[ip_vs_tcp_s_last+1] = ;
核心函式set_tcp_state在處理tcp狀態轉換的同時,更新當前連線的超時時間。

static inline void set_tcp_state(struct ip_vs_proto_data *pd, struct ip_vs_conn *cp, int direction, struct tcphdr *th)

另外,對於tcp協議,在函式ip_vs_tcp_conn_listen中也進行超時時間的更新,此函式主要由ipvs的ftp模組使用。

void ip_vs_tcp_conn_listen(struct ip_vs_conn *cp)

函式__udp_init負責初始化udp協議資料結構中的timeout_table陣列,udp_timeouts為預定義的超時時間。

static int __udp_init(struct netns_ipvs *ipvs, struct ip_vs_proto_data *pd)

由於udp是無狀態的協議,此處只定義了乙個ip_vs_udp_s_normal狀態,其超時時間為5*60(300s)。可使用ipvsadm命令修改此值。

static const int udp_timeouts[ip_vs_udp_s_last+1] = ;
核心函式的udp協議轉換函式udp_state_transition中,修改當前連線的超時時間。

static void udp_state_transition(struct ip_vs_conn *cp, int direction, const struct sk_buff *skb, struct ip_vs_proto_data *pd)

cp->timeout = pd->timeout_table[ip_vs_udp_s_normal];

}

函式__ip_vs_sctp_init初始化sctp的協議資料結構的成員timeout_table陣列,sctp_timeouts為預定義的sctp相關超時時間。

static int __ip_vs_sctp_init(struct netns_ipvs *ipvs, struct ip_vs_proto_data *pd)

目前,命令列工具ipvsadm不能修改sctp相關的超時時間。

#define ip_vs_sctp_max_rto  ((60 + 1) * hz)

static const int sctp_timeouts[ip_vs_sctp_s_last + 1] = ;

在函式sctp狀態變更函式set_sctp_state中,修改當前連線的超時時間值。

static inline void set_sctp_state(struct ip_vs_proto_data *pd, struct ip_vs_conn *cp, int direction, const struct sk_buff *skb)

核心函式__ip_vs_get_timeouts用於獲取tcp協議相應的ip_vs_tcp_s_established和ip_vs_tcp_s_fin_wait狀態的超時時間,以及udp協議的ip_vs_udp_s_normal狀態的超時時間。

static inline void __ip_vs_get_timeouts(struct netns_ipvs *ipvs, struct ip_vs_timeout_user *u)

核心版本 4.15

超時時間 Session

在web.xml裡的配置 單位分鐘 1 23 4 session config 5 session timeout 15 session timeout 6session config 7.89 view code 在配置servlet的時候指定初始化引數決定超時時間 單位秒 1 servlet 2...

Feign Client的超時時間

在spring cloud微服務架構中,大部分公司都是利用open feign進行服務間的呼叫,而比較簡單的業務使用預設配置是不會有多大問題的,但是如果是業務比較複雜,服務要進行比較繁雜的業務計算,那後台很有可能會出現read timeout這個異常,因此定製化配置超時時間就有必要了。預設開啟 預設...

設定ssh超時時間

方法一 最近公司剛剛買了一台hyper v的vps,但是連線ssh伺服器剛剛離開一會就斷開,不得不需要反覆連線伺服器,為了使ssh伺服器可以保持足夠的連線時間,大家可以按以下方法設定 基於安全的理由,如果使用者連線到 ssh server 後閒置,ssh server 會在超過特定時間後自動終止 s...