新聞中心
TCP協(xié)議是計算機網(wǎng)絡(luò)中最常用的傳輸協(xié)議之一,它不僅保證了數(shù)據(jù)傳輸?shù)目煽啃?,還具有較強的容錯能力和擁塞控制能力。然而,在實際應(yīng)用中,由于各種原因,TCP連接中的數(shù)據(jù)包很可能會被重傳,這不僅會影響傳輸效率,還會加重網(wǎng)絡(luò)負載,導(dǎo)致延遲增加甚至連接斷開。

為了解決TCP包重傳的問題,Linux系統(tǒng)提供了TCP重傳次數(shù)的設(shè)置功能,可以根據(jù)實際情況調(diào)整重傳次數(shù),優(yōu)化網(wǎng)絡(luò)性能。本文將介紹Linux TCP包重傳次數(shù)設(shè)置的技巧。
一、TCP包重傳的原因
在TCP連接中,重傳數(shù)據(jù)包的原因通常有以下幾種:
1. 數(shù)據(jù)包丟失
數(shù)據(jù)包在傳輸過程中可能會因為網(wǎng)絡(luò)原因或其他問題丟失,這時TCP協(xié)議會發(fā)現(xiàn)數(shù)據(jù)缺失并要求重傳。
2. 數(shù)據(jù)包損壞
數(shù)據(jù)包在傳輸過程中可能會因為信號干擾或其他原因受到損壞,這時TCP協(xié)議會發(fā)現(xiàn)數(shù)據(jù)校驗和錯誤并要求重傳。
3. 數(shù)據(jù)包延遲
數(shù)據(jù)包在傳輸過程中可能會因為擁塞控制等原因被暫時阻塞,這時TCP協(xié)議會等待一定時間后再次發(fā)送數(shù)據(jù)包,如果還沒有收到確認則會重傳。
以上三種情況都會導(dǎo)致TCP連接中數(shù)據(jù)包的重傳,而TCP協(xié)議中規(guī)定了一定的重傳策略,達到一定次數(shù)后仍未得到確認,則判斷連接中斷并主動關(guān)閉。
二、TCP包重傳次數(shù)設(shè)置方法
在Linux系統(tǒng)上,可以通過/sys/class/net/eth0/目錄下的tcp_retries1和tcp_retries2這兩個文件來設(shè)置TCP包重傳的次數(shù)。其中,tcp_retries1表示重傳更大次數(shù),tcp_retries2表示重傳延遲時間,單位為毫秒。
默認情況下,tcp_retries1和tcp_retries2的值都是5,即TCP連接中的數(shù)據(jù)包最多重傳5次,重傳時間為200毫秒??梢酝ㄟ^修改這兩個文件的值來調(diào)整TCP包重傳次數(shù),從而優(yōu)化網(wǎng)絡(luò)性能。
1. 查詢當前設(shè)置
可以使用以下命令查詢當前系統(tǒng)的TCP包重傳次數(shù)設(shè)置:
$ cat /proc/sys/net/ipv4/tcp_retries1
$ cat /proc/sys/net/ipv4/tcp_retries2
其中,結(jié)果1為tcp_retries1的值,結(jié)果2為tcp_retries2的值。
2. 修改TCP包重傳次數(shù)設(shè)置
可以使用echo命令將修改后的值寫入tcp_retries1和tcp_retries2文件中,例如:
$ sudo echo “10” > /proc/sys/net/ipv4/tcp_retries1
$ sudo echo “500” > /proc/sys/net/ipv4/tcp_retries2
以上命令將TCP連接中數(shù)據(jù)包的更大重傳次數(shù)設(shè)置為10次,重傳延遲時間為500毫秒??梢愿鶕?jù)實際情況進行調(diào)整。
需要注意的是,修改這兩個文件的值可能會影響系統(tǒng)的網(wǎng)絡(luò)性能和穩(wěn)定性,因此應(yīng)慎重設(shè)置,并在修改之前備份這兩個文件的值,以便出現(xiàn)問題時恢復(fù)到原始設(shè)置。
三、TCP包重傳次數(shù)設(shè)置的建議
在設(shè)置TCP包重傳次數(shù)時,需要根據(jù)實際情況進行調(diào)整,以下是一些建議:
1. 增大重傳次數(shù)
如果網(wǎng)絡(luò)環(huán)境不穩(wěn)定或傳輸數(shù)據(jù)量較大,則可以適當增大TCP包重傳的次數(shù),從而提高數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
2. 減少重傳延遲
如果網(wǎng)絡(luò)延遲較高或需要盡快完成數(shù)據(jù)傳輸,則可以適當減少TCP包重傳的延遲時間,以加快數(shù)據(jù)傳輸速度。
3. 綜合考慮
實際應(yīng)用中,TCP包重傳次數(shù)設(shè)置需要綜合考慮網(wǎng)絡(luò)延遲、傳輸數(shù)據(jù)量、網(wǎng)絡(luò)穩(wěn)定性等因素,以達到更佳的網(wǎng)絡(luò)性能和穩(wěn)定性。
四、
TCP包重傳是保證網(wǎng)絡(luò)數(shù)據(jù)傳輸可靠性的重要機制之一,而Linux系統(tǒng)提供了TCP包重傳次數(shù)的設(shè)置功能,可以根據(jù)實際情況調(diào)整重傳次數(shù),優(yōu)化網(wǎng)絡(luò)性能。
在設(shè)置TCP包重傳次數(shù)時,需要根據(jù)實際情況進行調(diào)整,考慮網(wǎng)絡(luò)環(huán)境、傳輸數(shù)據(jù)量、網(wǎng)絡(luò)穩(wěn)定性等因素,并在修改之前備份原始設(shè)置,以便出現(xiàn)問題時恢復(fù)到原始設(shè)置。
適當設(shè)置TCP包重傳次數(shù)可以提高數(shù)據(jù)傳輸?shù)目煽啃院蛡鬏斔俣?,提高網(wǎng)絡(luò)性能和穩(wěn)定性。
相關(guān)問題拓展閱讀:
- linux 如何強制關(guān)閉 time_wait 連接
linux 如何強制關(guān)閉 time_wait 連接
沒有辦法吧,但有縮短tcp鏈接的關(guān)閉時間,褲物前調(diào)整內(nèi)核參數(shù)可以縮短關(guān)螞州閉時間的。但也要注意,胡清太短時間也會造成很多網(wǎng)絡(luò)上不了。因為系統(tǒng)認為超時了。
# netstat -an|awk ‘/tcp/ {print $6}’|sort|uniq -c
CLOSE_WAIT
CLOSING
ESTABLISHED
FIN_WAIT1
FIN_WAIT2
LAST_ACK
LISTEN
SYN_RECV
TIME_WAIT
#
狀態(tài):描述
CLOSED:無連接是活動的或正在進行
LISTEN:服務(wù)器在等待進入彎蠢呼叫
SYN_RECV:一個連接請求已經(jīng)到達,等待確認
SYN_SENT:應(yīng)用已經(jīng)開始,打開一個連接
ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài)
FIN_WAIT1:應(yīng)用說它已經(jīng)完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關(guān)閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
linux sysctl.conf close_wait
$ /proc/sys/net/core/wmem_max
更大socket寫buffer,可參考的優(yōu)化值:873200
$ /proc/sys/net/core/rmem_max
更大socket讀buffer,可參考的優(yōu)化值:873200
$ /proc/sys/net/ipv4/tcp_wmem
TCP寫buffer,可參考的優(yōu)化值:73200
$ /proc/sys/net/ipv4/tcp_rmem
TCP讀buffer,可參考的優(yōu)化值:873200
$ /proc/sys/net/ipv4/tcp_mem
同樣有3個值,意思是:
net.ipv4.tcp_mem:低于此值,TCP沒有內(nèi)存壓力.
net.ipv4.tcp_mem:在此值下,進入內(nèi)存壓力階段.
net.ipv4.tcp_mem:高于此值,TCP拒絕分配socket.
上述內(nèi)存單位是頁,而不是字節(jié).可參考的優(yōu)化值是:
$ /proc/sys/net/core/netdev_max_backlog
進入包的更大設(shè)備隊列.默認是300,對重負載服務(wù)器而言,該值太低,可調(diào)整到1000.
$ /proc/sys/net/core/somaxconn
listen()的默認參數(shù),掛起請求的更大數(shù)量.默認是128.對繁忙的服務(wù)器,增加該值有助于網(wǎng)絡(luò)性能.可調(diào)整到256.
$ /proc/sys/net/core/optmem_max
socket buffer的更大初始化值,默認10K.
$ /proc/sys/net/ipv4/tcp_max_syn_backlog
進入SYN包的更大請求隊列.默認1024.對重負載服務(wù)器,增加該值顯然有好處.可調(diào)整到2023.
$ /proc/sys/net/ipv4/tcp_retries2
TCP失敗重傳次數(shù),默認值15,意味乎備著重傳15次才徹底放棄.可減少到5,以盡早釋放內(nèi)核資源.
$ /proc/sys/net/ipv4/tcp_keepalive_time
$ /proc/sys/net/ipv4/tcp_keepalive_intvl
$ /proc/sys/net/ipv4/tcp_keepalive_probes
這3個參數(shù)與TCP KeepAlive有關(guān).默認值是:
tcp_keepalive_time = 3600 seconds (1 hours)
tcp_keepalive_probes = 3
tcp_keepalive_intvl = 60 seconds
意思是如果某個TCP連接在idle 2個小時后,內(nèi)核才發(fā)起probe.
如果probe 3次(每次60秒)不成功,內(nèi)核才徹底放棄,認為該連接已失效.
對服務(wù)器而言,顯然上述值太大. 可調(diào)整到:
/proc/sys/net/ipv4/tcp_keepalive_time 120
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 2
$ proc/sys/net/ipv4/ip_local_port_range
指定端口范圍的一個配置歲鬧毀,默認是,已夠大.
在大并發(fā)時可以調(diào)成
下面是處理time_wait狀態(tài)時需要處理的一些參數(shù).
net.ipv4.tcp_syncookies = 1
表示開啟SYN Cookies。當出現(xiàn)SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關(guān)閉;
net.ipv4.tcp_tw_reuse = 1
表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認為0,表示關(guān)閉;
net.ipv4.tcp_tw_recycle = 1
表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關(guān)閉。
net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求關(guān)閉,這個參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時間。
net.ipv4.tcp_keepalive_time = 1200
表示當keepalive起用的時候,TCP發(fā)送keepalive消息的頻度。缺省是2小時,改為20分鐘。
net.ipv4.ip_local_port_range =
表示用于向外連接的端口范圍。缺省情況下很小:32768到61000,改為1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。
net.ipv4.tcp_max_tw_buckets = 5000
表示系統(tǒng)同時保持TIME_WAIT套接字的更大數(shù)量,如果超過這個數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息。
默認為,改為 5000。對于Apache、Nginx等服務(wù)器,上面提到的參數(shù)可以很好地減少TIME_WAIT套接字數(shù)量,
關(guān)于linuxtcp包重傳次數(shù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
分享名稱:LinuxTCP包重傳次數(shù)設(shè)置技巧(linuxtcp包重傳次數(shù))
本文網(wǎng)址:http://www.5511xx.com/article/ccohodd.html


咨詢
建站咨詢
