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

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


咨詢
建站咨詢
