哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

揭秘TCP/IP三次握手:深入探索網(wǎng)絡(luò)通信的初始化過(guò)程

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2025-02-20 10:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

網(wǎng)絡(luò)連接狀態(tài)

網(wǎng)絡(luò)連接狀態(tài)(11種)非常重要這里既包含三次握手中的也包括四次斷開(kāi)中的,所以要熟悉。

LISTEN被動(dòng)打開(kāi),首先服務(wù)器需要打開(kāi)一個(gè)socket進(jìn)行監(jiān)聽(tīng),監(jiān)聽(tīng)來(lái)自遠(yuǎn)方TCP端口的連接請(qǐng)求,等于服務(wù)器端執(zhí)行socket、bind、listen三個(gè)函數(shù)之后阻塞在accept處。

SYN_SENT表示主動(dòng)連接,客戶端能通過(guò)應(yīng)用程序調(diào)用connect()函數(shù)進(jìn)行active open。于是客戶端TCP發(fā)送一個(gè)SYN以請(qǐng)求建立一個(gè)連接,之后狀態(tài)為SYN_SEND,表示已發(fā)送一個(gè)SYN到服務(wù)器端,等待SYN 1+ACK 0響應(yīng)。

SYN_RECV服務(wù)器端收到客戶端的SYN 1,然后狀態(tài)變?yōu)镾YN_RECV。表示服務(wù)器收到了客戶端發(fā)來(lái)的SYN,然后自己也響應(yīng)了給客戶端一個(gè)SYN 1+ACK 1,然后等待客戶端確認(rèn)。這時(shí)候客戶端過(guò)來(lái)的連接(屬于半連接狀態(tài))被放在一個(gè)SYN隊(duì)列里面,SYN泛洪***也是這樣的,就是服務(wù)器響應(yīng)了SYN+ACK之后,客戶端就不在發(fā)送ACK了,然后繼續(xù)發(fā)送SYN,直到把服務(wù)器的最大連接數(shù)量耗盡。半連接隊(duì)列長(zhǎng)度是由內(nèi)核參數(shù)tcp_max_syn_backlog來(lái)決定的。

ESTABLISHED代表一個(gè)打開(kāi)的連接,客戶端收到服務(wù)器發(fā)送的SYN 1+ACK 1,就變?yōu)檫@個(gè)狀態(tài),然后向服務(wù)器發(fā)送ACK,如果服務(wù)器收到這個(gè)ACK,那么它也變?yōu)檫@個(gè)狀態(tài)。這個(gè)狀態(tài)就是表示連接以及建立,正在或即將傳輸數(shù)據(jù)。服務(wù)器收到ACK以后就會(huì)把半連接從上面提到的SYN隊(duì)列中刪除,然后放到ACCEPT隊(duì)列中,這時(shí)這個(gè)半連接的狀態(tài)就變成了ESTABLISHED。

FIN_WAIT1主動(dòng)關(guān)閉端(可以是服務(wù)器也可以是客戶端)應(yīng)用程序調(diào)用了close,于是其TCP發(fā)出FIN主動(dòng)關(guān)閉請(qǐng)求,也就是四次斷開(kāi)的第一次,之后就進(jìn)入了FIN_WAIT1狀態(tài),等待遠(yuǎn)程主機(jī)的ACK請(qǐng)求。

CLOSE_WAIT被動(dòng)關(guān)閉端(可以是服務(wù)器有可以是客戶端)收到了對(duì)方發(fā)來(lái)的FIN后,進(jìn)入該狀態(tài),然后發(fā)出ACK+1以回應(yīng)FIN請(qǐng)求(它的接收也作為文件結(jié)束符傳遞給上層應(yīng)用程序)。這個(gè)狀態(tài)實(shí)際上是說(shuō)客戶端告訴服務(wù)器我沒(méi)有請(qǐng)求或者數(shù)據(jù)要發(fā)送了,等待看看服務(wù)器或者說(shuō)是進(jìn)程還有沒(méi)有數(shù)據(jù)要發(fā)送,如果有則繼續(xù)發(fā)送,如果沒(méi)有的話,就發(fā)送反向關(guān)閉指令。如果服務(wù)器大量連接是這個(gè)狀態(tài)就要去查看程序,很有可能是程序設(shè)計(jì)的問(wèn)題。

FIN_WAIT2主動(dòng)關(guān)閉端收到ACK+1后,就進(jìn)入的FIN_WAIT2狀態(tài),也就等服務(wù)器是否還有數(shù)據(jù)發(fā)來(lái),如果服務(wù)器沒(méi)有數(shù)據(jù)了,那么服務(wù)器就發(fā)送的反向關(guān)閉指令。也就是反向關(guān)閉連接指令FIN1+ACK1。實(shí)際上是告訴客戶端我的數(shù)據(jù)發(fā)送完了,可以關(guān)閉連接了。

LAST_ACK被動(dòng)關(guān)閉端,發(fā)送反向結(jié)束連接請(qǐng)求FIN 1+ACK 1,然后進(jìn)入LAST_ACK狀態(tài),等待主動(dòng)關(guān)閉端發(fā)送ACK。

TIME_WAIT主動(dòng)關(guān)閉端收到FIN 1 +ACK 1后,并進(jìn)入TIME_WAIT狀態(tài),然后發(fā)送ACK+1,等待一段時(shí)間(2MSL)以確保服務(wù)器收到了ACK+1,然后自己進(jìn)入CLOSED狀態(tài)。這個(gè)階段主要是客戶端為了再次確認(rèn)一下服務(wù)器是否可以關(guān)閉連接,因?yàn)榫W(wǎng)絡(luò)畢竟是不可靠的。對(duì)于服務(wù)器有大量TIME_WAIT這個(gè)問(wèn)題通常調(diào)整sysctl來(lái)解決。

CLOSING比較少見(jiàn),表示等待遠(yuǎn)程TCP對(duì)連接中斷的確認(rèn)。

CLOSED被動(dòng)關(guān)閉端在收到ACK包以后,就進(jìn)入closed狀態(tài),連接結(jié)束。

三次握手過(guò)程

d6c53bc8-eea2-11ef-9310-92fbcf53809c.png

客戶端:發(fā)送SYN=J請(qǐng)求建立連接,此時(shí)客戶端進(jìn)入SYN_SENT狀態(tài)等待服務(wù)器響應(yīng)

服務(wù)器:收到客戶端的SYN=J后發(fā)送SYN=K, ACK J+1表示收到建立連接請(qǐng)求,然后自己進(jìn)入SYN_RECV狀態(tài)進(jìn)行等待客戶端的最后確認(rèn)

客戶端:收到服務(wù)器發(fā)來(lái)的SYN=K, ACK J+1然后發(fā)送ACK=K+1表示收到之前確認(rèn),然后自己進(jìn)入ESTABLISHED狀態(tài)表示自己處于連接建立狀態(tài)

服務(wù)器:收到客戶端的ACK以后則自己進(jìn)入ESTABLISHED狀態(tài),此時(shí)雙方都處于連接建立狀態(tài),之后進(jìn)行數(shù)據(jù)傳送。

三次握手的目的:是為了告訴對(duì)方SEQ然后服務(wù)器回復(fù)SEQ+1,這樣發(fā)送端就知道包沒(méi)有丟;另外握手的目的是交換信息,比如:

MSS:最大傳輸包(不含TCP/IP頭),MMS+包頭就是MTU,如果MTU過(guò)大傳輸就會(huì)卡死。

SACK_PERM:是否支持Selective ack(用戶優(yōu)化重傳效率),比如客戶端發(fā)送5個(gè)包給服務(wù)器,中途丟了2號(hào)包,服務(wù)器回復(fù)的時(shí)候只能回復(fù)2,表示2號(hào)前面的都收到了,請(qǐng)求重傳2號(hào)包,可是客戶端并不知道2后面的345是否收到?jīng)]有,如果支持SACK的話,那么服務(wù)器請(qǐng)求重傳2的時(shí)候就可以同時(shí)告訴345已經(jīng)收到,這樣客戶端只需要重傳2,如果沒(méi)有SACK機(jī)制,那么客戶端就會(huì)重傳2345,這樣效率就低了。

半連接和全連接

d6e9db72-eea2-11ef-9310-92fbcf53809c.jpg

未完成連接隊(duì)列:客戶端發(fā)送SYN到服務(wù)器,服務(wù)器正在等待完成三次握手,此時(shí)就會(huì)把客戶端發(fā)起的這個(gè)連接請(qǐng)求放在該隊(duì)列里,也就是sync隊(duì)列。這個(gè)隊(duì)列由net.ipv4.tcp_max_syn_backlog參數(shù)決定, 系統(tǒng)默認(rèn)2048,服務(wù)器端口狀態(tài)為 SYNC_RCVD。

cat /proc/sys/net/ipv4/tcp_max_syn_backlog

d6f968f8-eea2-11ef-9310-92fbcf53809c.png

已完成連接隊(duì)列:已經(jīng)完成握手的連接從SYN隊(duì)列移動(dòng)到這個(gè)隊(duì)列,也就是accept隊(duì)列,默認(rèn)128(其實(shí)這個(gè)隊(duì)列最終的大小是由SOMAXCONN和使用listen函數(shù)傳入?yún)?shù)的兩者取最小值決定的),服務(wù)器端口狀態(tài)為ESTABLISHED,在Linux內(nèi)核2.4.25之后在/etc/sysctl.conf中

net.core.somaxconn = 128直接修改。

cat /proc/sys/net/core/somaxconn

d72aa634-eea2-11ef-9310-92fbcf53809c.png

TCP的三次握手第一步服務(wù)器收到客戶端的SYN后,把該請(qǐng)求放在半連接隊(duì)列中,之后回復(fù)SYN+ACK,當(dāng)客戶端收到這個(gè)信號(hào)并發(fā)送ACK之后并且服務(wù)器正常收到和處理后就把該請(qǐng)求從半連接隊(duì)列移動(dòng)到ACCEPT隊(duì)列,進(jìn)入這個(gè)隊(duì)列才能從Listen變成accept。

比如syn泛洪***就是針對(duì)syn隊(duì)列的,***方不同的建立連接,但是只做連接的第一步,當(dāng)***者收到SYN+ACK后直接丟棄,導(dǎo)致受***的服務(wù)器上這個(gè)隊(duì)列滿了然后其他正常請(qǐng)求就無(wú)法進(jìn)入。

常見(jiàn)問(wèn)題:客戶端在發(fā)送完最后一個(gè)ACK之后服務(wù)器端如果收到正常情況下應(yīng)該把該鏈接從SYNC隊(duì)列移動(dòng)到ACCEPT隊(duì)列,如果ACCEPT隊(duì)列滿了,默認(rèn)服務(wù)器丟棄不會(huì)響應(yīng),所以從客戶端角度來(lái)看三次握手已經(jīng)完成,但服務(wù)器沒(méi)有響應(yīng)這個(gè)鏈接,這種情況經(jīng)常出現(xiàn)在服務(wù)器同時(shí)收到很多鏈接請(qǐng)求的時(shí)候。如何確定這個(gè)問(wèn)題?使用如下命令:

netstat-s|egrep"listen|LISTEN"

如果出現(xiàn):

xxxxxtimesthelistenqueueofasocketoverflowed(全連接隊(duì)列溢出次數(shù))

xxxxxSYNs to LISTEN sockets ignored (半連接隊(duì)列溢出次數(shù))

d7363d00-eea2-11ef-9310-92fbcf53809c.png

這兩個(gè)值有時(shí)你會(huì)看到一樣多,但是通常半連接溢出次數(shù)會(huì)大于等于全連接溢出次數(shù)。就說(shuō)明可能會(huì)有這個(gè)問(wèn)題。因?yàn)槿绻@個(gè)數(shù)值一直在增加那么就要注意了。如果想再次確認(rèn),那么你需要修改內(nèi)核參數(shù)

echo '1' > /proc/sys/net/ipv4/tcp_abort_on_overflow

d74df80a-eea2-11ef-9310-92fbcf53809c.png

該參數(shù)默認(rèn)為0,參數(shù)含義看后面。修改之后客戶端再次發(fā)起連接就會(huì)收到reset信號(hào),如果抓包收到這個(gè)信號(hào),就證明服務(wù)器端的accept隊(duì)列滿了,你需要進(jìn)行調(diào)整。比如JAVA中默認(rèn)socket的backlog值大小是50.

ss -lnt

d7591ff0-eea2-11ef-9310-92fbcf53809c.png

Send-Q:表示LISTEN端口上的全連接隊(duì)列最大為多少

Recv-Q:為全連接隊(duì)列當(dāng)前使用了多少

全連接隊(duì)列大小取決于:min(backlog, somaxconn),前一個(gè)是在socket創(chuàng)建時(shí)傳入的(listen函數(shù)),somaxconn是OS級(jí)別的參數(shù),這個(gè)somaxconn的含義請(qǐng)查看后面的內(nèi)涵參數(shù)說(shuō)明

半連接隊(duì)列大小取決于:/proc/sys/net/ipv4/tcp_max_syn_backlog 這個(gè)內(nèi)核參數(shù)

Nginx默認(rèn)的accept隊(duì)列是511,而且是多個(gè)進(jìn)程同時(shí)監(jiān)聽(tīng)一個(gè)端口;Tomcat的accept隊(duì)列是100,默認(rèn)短連接。

# 查看Accept隊(duì)列溢出情況,如果當(dāng)前沒(méi)有溢出則沒(méi)有任何返回值 netstat -s | grep TCPBacklogDrop

思考:

如果客戶端發(fā)出ACK之后剛好服務(wù)器ACCEPT隊(duì)列滿了,也就是客戶端認(rèn)為連接成功建立而實(shí)際上服務(wù)器端連接沒(méi)有準(zhǔn)備好,而這時(shí)客戶端認(rèn)為建立好了而強(qiáng)行發(fā)送數(shù)據(jù)會(huì)怎么辦呢?客戶端發(fā)送之后肯定會(huì)得不到響應(yīng),因?yàn)榉?wù)器丟棄了,然后客戶端認(rèn)為丟失所以進(jìn)行重傳,一定次數(shù)之后客戶端認(rèn)為異常,然后一直到超時(shí)最后斷開(kāi)。

關(guān)于Backlog

TCP連接客戶端connect()返回并不代表TCP連接成功,有可能是服務(wù)器接收隊(duì)列滿了,系統(tǒng)會(huì)丟棄后續(xù)的ACK請(qǐng)求,
客戶端以為建立了連接,然后就執(zhí)行后續(xù)操作,然后就等待到超時(shí)。服務(wù)器則會(huì)等待ACK超時(shí),會(huì)重傳SYN。

TCP隊(duì)列的一些問(wèn)題

客戶端通過(guò)connect向服務(wù)器發(fā)出SYN包,客戶端會(huì)維護(hù)一個(gè)socket等待隊(duì)列,而服務(wù)器則會(huì)維護(hù)一個(gè)SYN隊(duì)列

此時(shí)是半連接狀態(tài),如果socket等待隊(duì)列滿了,服務(wù)器則會(huì)丟棄,而客戶端會(huì)返回超時(shí)。只要客戶端沒(méi)有收到SYN+ACK,3秒后客戶端會(huì)再次發(fā)送,然后依然沒(méi)有收到,9秒后再繼續(xù)發(fā)送。

半連接SYN隊(duì)列長(zhǎng)度由tcp_max_syn_backlog決定

當(dāng)服務(wù)器收到客戶端SYN后,會(huì)返回SYN+ACK包,客戶端的TCP協(xié)議棧會(huì)喚醒socket等待隊(duì)列,發(fā)出connect調(diào)用

客戶端返回ACK后,服務(wù)器會(huì)進(jìn)入一個(gè)新的叫做accept的隊(duì)列,這個(gè)隊(duì)列長(zhǎng)度為min(backlog,somaxconn)默認(rèn)情況下somaxconn是128,表示最多有129的ESTAB的連接等待accept(),而backlog的值由int listen(int sockfd,int backlog)中的第二個(gè)參數(shù)指定,其含義是設(shè)置listen()函數(shù)最多允許多個(gè)網(wǎng)絡(luò)連接同時(shí)處于掛起狀態(tài),大部分平臺(tái)都是511

當(dāng)accept隊(duì)列滿了之后,即是客戶端繼續(xù)向服務(wù)器發(fā)送ACK包,也不會(huì)得到響應(yīng),此時(shí)服務(wù)器通過(guò)tcp_abort_on_overflow來(lái)決定如何返回,0表示直接丟棄,1表示發(fā)送RST通知;客戶端則會(huì)分別返回read timeout或者connection reset by peer。從上面可以看到有2個(gè)隊(duì)列,一個(gè)保存SYN_SEND以及SYN_RECV,另外一個(gè)accept隊(duì)列保存ESTAB的狀態(tài)。

比如客戶端通Nginx通信,Nginx立即返回ACK,但是3秒后才返回響應(yīng)數(shù)據(jù),Nginx同后端通信,發(fā)送SYN請(qǐng)求等待3秒后端才響應(yīng),就可能是backlog值設(shè)置過(guò)小,導(dǎo)致accept queue溢出,SYN被丟棄導(dǎo)致3s重傳。

關(guān)于ss命令中Recv-Q和Send-Q的含義?

這兩個(gè)指標(biāo)在不同場(chǎng)景含義不同。一個(gè)是狀態(tài)處于LISTEN狀態(tài)、一個(gè)是非LISTEN的其他狀態(tài)。

LISTEN狀態(tài)

d77302f8-eea2-11ef-9310-92fbcf53809c.png

這里的含義就是上面說(shuō)的Recv-Q是當(dāng)前全連接隊(duì)列使用量;Send-Q是當(dāng)前對(duì)應(yīng)進(jìn)程SOCKET套接字最大blacklog的數(shù)量,也就是全連接隊(duì)列最大長(zhǎng)度

非LISTEN狀態(tài)

d7822ec2-eea2-11ef-9310-92fbcf53809c.png

Recv-Q:數(shù)據(jù)已經(jīng)接收到本地緩存,還有多少?zèng)]有被程序取走,單位bytes

Send-Q:要發(fā)送的數(shù)據(jù)有多少還在本地緩沖區(qū)對(duì)方未確認(rèn),如果不是0可能是本地發(fā)送數(shù)據(jù)過(guò)快或者對(duì)方接收數(shù)據(jù)過(guò)慢,單位bytes

上述兩個(gè)值在非LISTEN狀態(tài)下都應(yīng)該保持0或者瞬間不為0,如果長(zhǎng)期不為0則可能有問(wèn)題。

# 統(tǒng)計(jì)各種狀態(tài)的值 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' # 統(tǒng)計(jì)特定進(jìn)程的TCP狀態(tài) netstat -ntap | grep '3141' | awk '{++S[$6]} END {for(a in S) print a, S[a]}'

d79f9f8e-eea2-11ef-9310-92fbcf53809c.png

Linux內(nèi)核中的TCP/IP參數(shù)

tcp_abort_on_overflow 默認(rèn)為0

TCP全連接隊(duì)列也就是accept隊(duì)列滿了之后如何處理,默認(rèn)是0,也就是丟棄,可以改為1,表示如果隊(duì)列滿了這時(shí)候有客戶端建立連接則發(fā)送一個(gè)reset包給客戶端,表示廢除這個(gè)握手。

net.core.netdev_max_backlog 默認(rèn)為128

表示當(dāng)每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時(shí),允許發(fā)送到隊(duì)列的數(shù)據(jù)包最大數(shù)目。就是說(shuō)當(dāng)接口接收包的速度比內(nèi)核處理的快時(shí),那么多出來(lái)的數(shù)據(jù)包要存放到隊(duì)列中,那么這個(gè)隊(duì)列最大可以放多少個(gè)呢?就是這個(gè)參數(shù)設(shè)置的。
net.ipv4.tcp_max_orphans
用于設(shè)定系統(tǒng)中最多允許存在多少TCP套接字不被關(guān)聯(lián)到任何一個(gè)用戶文件句柄上,如果超過(guò)這個(gè)值,那么沒(méi)有與用戶文件句柄關(guān)聯(lián)的TCP套接字就會(huì)被復(fù)位,同時(shí)給出警告信息。這個(gè)值主要是為了防止DOS***。一般在系統(tǒng)內(nèi)存比較大的情況下可以調(diào)大。
net.ipv4.tcp_max_syn_backlog
用于記錄尚未收到客戶端ACK信息的連接請(qǐng)求最大值。內(nèi)存比較多可以設(shè)置大一點(diǎn)。也就是半連接的隊(duì)列,表示服務(wù)器收到了客戶端的SYN包同時(shí)服務(wù)器也發(fā)送了ACK+SYN,但是還沒(méi)有收到客戶端返回的ACK包,此時(shí)連接處于SYN_RECV狀態(tài),當(dāng)服務(wù)器收到客戶端的ACK包時(shí),則刪除該半連接條目,服務(wù)器進(jìn)入ESTABLISHED狀態(tài),這時(shí)候把該連接放入Accept隊(duì)列。修改這個(gè)值可以增加更多的網(wǎng)絡(luò)連接,但是過(guò)大容易受到SYN泛洪***。
net.core.somaxconn
表示用于調(diào)節(jié)系統(tǒng)同時(shí)發(fā)起的TCP連接數(shù),一般為128,當(dāng)高并發(fā)的情況下,如果這個(gè)值比較小,就會(huì)導(dǎo)致連接超時(shí)或者重傳現(xiàn)象。Nginx服務(wù)器中定義的NGX_LISTEN_BACKLOG默認(rèn)是511,所以需要調(diào)整這個(gè)參數(shù)。當(dāng)服務(wù)器收到ACK包之后,就會(huì)進(jìn)入一個(gè)叫accept的隊(duì)列這個(gè)隊(duì)列的最大長(zhǎng)度就是由這個(gè)參數(shù)決定的。表示最多可有多少個(gè)ESTAB的連接等待accept()。這個(gè)值表示已客戶端和服務(wù)器已完成三次握手的已建立連接的隊(duì)列大小。
net.ipv4.tcp_timestamps
該參數(shù)用于設(shè)置時(shí)間戳,可以避免序列號(hào)重復(fù),在一個(gè)端口速率比較大的網(wǎng)卡下,遇到重復(fù)的序列號(hào)的概率還是比較大的。如果設(shè)置為0表示禁用對(duì)TCP時(shí)間戳的支持。默認(rèn)情況下,系統(tǒng)是允許重復(fù)的。但是對(duì)于Nginx來(lái)說(shuō)還是建議關(guān)閉。
net.ipv4_tcpsynack_retries
用于設(shè)置內(nèi)核放棄TCP連接之前向客戶端發(fā)送ACK+SYN包的數(shù)量,也就是重試次數(shù)。這個(gè)參數(shù)主要影響三次握手中的第二次,也就是服務(wù)器向客戶端發(fā)送SYN+前一個(gè)SYN的ACK。一般設(shè)置為1,表示內(nèi)核放棄連接之前發(fā)送一次SYN+ACK包。比如客戶端發(fā)來(lái)SYN,然后服務(wù)器回復(fù)ACK+SYN,這時(shí)候客戶端斷線了,之后會(huì)怎么辦呢?服務(wù)器會(huì)進(jìn)行重發(fā)ACK+SYNC,Linux中默認(rèn)重試5次,每次時(shí)間間隔為上一次的一倍,1s-2s-4s-8s-16s之后再等一個(gè)32s如果還沒(méi)有客戶端響應(yīng),則服務(wù)器斷開(kāi)這個(gè)連接。
net.ipv4.syn_retries

參數(shù)和上一個(gè)類似,這是這次是設(shè)置內(nèi)核放棄建立連接之前發(fā)送SYN包的數(shù)量。也建議設(shè)置為1.

net.ipv4.tcp.syncookies

修改此參數(shù)可以有效防范syn flood***。原理是在TCP服務(wù)器收到SYN包后,***者就下線,這樣默認(rèn)服務(wù)器需要等待63秒之后才會(huì)斷開(kāi)這個(gè)連接(中間服務(wù)器要重試幾次),這樣服務(wù)器的SYN隊(duì)列很快就滿了。這個(gè)參數(shù)的目的就是為了解決這個(gè)問(wèn)題,當(dāng)SYN隊(duì)列滿了,服務(wù)器根據(jù)預(yù)源端口、目的IP和時(shí)間戳生產(chǎn)一個(gè)序列號(hào)(可以叫做cookie)發(fā)送出去,如果是***者它是不會(huì)響應(yīng)的,如果是真實(shí)請(qǐng)求則會(huì)返回這個(gè)cookie,然后服務(wù)器根據(jù)這個(gè)Cookie來(lái)建立連接就算你不在SYN隊(duì)列中也可以。默認(rèn)為0,1表示開(kāi)啟。對(duì)于連接請(qǐng)求很大的服務(wù)器不要開(kāi)啟這個(gè)參數(shù),因?yàn)樗⒉粐?yán)謹(jǐn)。你應(yīng)該設(shè)置三個(gè)參數(shù)來(lái)變相解決這個(gè)問(wèn)題:net.ipv4_tcpsynack_retries、net.ipv4.tcp_max_syn_backlog和tcp_abort_on_overflow也就是,也就是減少重試次數(shù)、增大SYN隊(duì)列長(zhǎng)度和如果處理不過(guò)來(lái)就拒絕。

net.ipv4.tcp_tw_reuse

表示開(kāi)啟重用。允許將TIME_WAIT狀態(tài)的sockets重新用于新的TCP連接,因?yàn)榇罅刻幱赥IME_WAIT狀態(tài)很浪費(fèi)資源,占用文件描述符,默認(rèn)為0,表示關(guān)閉,設(shè)置為1表示開(kāi)啟;
net.ipv4.tcp_tw_recycle
表示開(kāi)啟TCP連接中TIME_WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉。設(shè)置為1表示開(kāi)啟。
net.ipv4.tcp_fin_timeout
表示如果套接字由本端要求關(guān)閉,這個(gè)參數(shù)決定了它保持在FIN_WAIT-2狀態(tài)的時(shí)間。默認(rèn)為2MSL。不建議修改,如果要修改可以根據(jù)實(shí)際情況而定。
net.ipv4.tcp_keepalive_time
TCP keepalive心跳包機(jī)制,用于檢測(cè)連接是否已經(jīng)斷開(kāi),這個(gè)值就是設(shè)置檢測(cè)頻率的。表示當(dāng)keepalive起用的時(shí)候,TCP發(fā)送keepalive消息的頻度。缺省是2小時(shí),改為20分鐘。
net.ipv4.ip_local_port_range = 1024 65000
表示用于向外連接的端口范圍。缺省情況下很小,改為1024到65000。
net.ipv4.tcp_max_tw_buckets = 5000
表示系統(tǒng)同時(shí)保持TIME_WAIT套接字狀態(tài)的最大數(shù)量,如果超過(guò)這個(gè)數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息。默認(rèn)為180000,改為5000。對(duì)于Apache、Nginx等服務(wù)器,上幾行的參數(shù)可以很好地減少TIME_WAIT套接字?jǐn)?shù)量,但是對(duì)于Squid,效果卻不大。此項(xiàng)參數(shù)可以控制TIME_WAIT套接字的最大數(shù)量,避免Squid服務(wù)器被大量的TIME_WAIT套接字拖死。

鏈接:https://www.cnblogs.com/rexcheny/p/9381433.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • IP
    IP
    +關(guān)注

    關(guān)注

    5

    文章

    1882

    瀏覽量

    156676
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1433

    瀏覽量

    83760
  • 網(wǎng)絡(luò)通信
    +關(guān)注

    關(guān)注

    4

    文章

    846

    瀏覽量

    32653

原文標(biāo)題:深入剖析 TCP/IP 三次握手:網(wǎng)絡(luò)通信背后的秘密

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    怎么理解TCP三次握手和四揮手

    作為運(yùn)維工程師,無(wú)論是排查網(wǎng)絡(luò)故障、分析日志,還是配置負(fù)載均衡器,都需要對(duì) TCP 協(xié)議有深入理解。很多"疑難雜癥"的根源,往往在于對(duì) TCP 狀態(tài)轉(zhuǎn)換和連接管理理解不夠透徹。
    的頭像 發(fā)表于 04-10 16:42 ?780次閱讀

    配線架:未來(lái)網(wǎng)絡(luò)通信的智能趨勢(shì)

    隨著5G、物聯(lián)網(wǎng)、云計(jì)算等技術(shù)的快速發(fā)展,未來(lái)網(wǎng)絡(luò)通信正朝著更高速度、更大容量、更低延遲的方向邁進(jìn)。在這一背景下,配線架作為網(wǎng)絡(luò)通信的基礎(chǔ)設(shè)施之一,也面臨著智能升級(jí)的挑戰(zhàn)與機(jī)遇。本文將探討配線架
    的頭像 發(fā)表于 04-09 10:41 ?210次閱讀

    TCP/IP(Socket)協(xié)議深度剖析

    TCP/IP協(xié)議作為互聯(lián)網(wǎng)通信的基礎(chǔ)架構(gòu),其核心機(jī)制Socket編程承載著全球數(shù)據(jù)交換的使命。本文將深入剖析這一協(xié)議的七層架構(gòu)、三次
    的頭像 發(fā)表于 03-03 17:06 ?776次閱讀

    TCP三次握手與四揮手的詳細(xì)過(guò)程

    TCP 三次握手和四揮手,大概是網(wǎng)絡(luò)領(lǐng)域被問(wèn)爛了的面試題。但真正能把狀態(tài)變遷、序列號(hào)變化、抓包細(xì)節(jié)講清楚的人并不多。很多人背了八股文,一到
    的頭像 發(fā)表于 02-25 10:38 ?426次閱讀

    芯動(dòng)科技與雄立科技合作高性能100G網(wǎng)絡(luò)通信芯片一流片成功

    近日,一站式IP和芯片定制賦能型領(lǐng)軍企業(yè)——芯動(dòng)科技宣布,與國(guó)內(nèi)全棧網(wǎng)絡(luò)通信芯片和解決方案提供商——雄立科技攜手合作的高性能100G網(wǎng)絡(luò)通信芯片,一流片成功,實(shí)現(xiàn)規(guī)模
    的頭像 發(fā)表于 02-05 09:46 ?903次閱讀
    芯動(dòng)科技與雄立科技合作高性能100G<b class='flag-5'>網(wǎng)絡(luò)通信</b>芯片一<b class='flag-5'>次</b>流片成功

    EtherCAT總線初始化步驟

    EtherCAT(Ethernet for Control Automation Technology)是一種高性能的工業(yè)以太網(wǎng)通信協(xié)議,廣泛應(yīng)用于工業(yè)自動(dòng)領(lǐng)域。其初始化過(guò)程是確保系
    的頭像 發(fā)表于 12-22 10:10 ?928次閱讀
    EtherCAT總線<b class='flag-5'>初始化</b>步驟

    TCP和UDP的區(qū)別

    相比,TCP大核心特性: 1、面向連接。所謂的連接,指的是客戶端和服務(wù)器的連接,在雙方互相通信之前,TCP 需要三次
    發(fā)表于 12-09 07:24

    TCP三次握手

    ,Server進(jìn)入SYN_RCVD狀態(tài)。 (3)第三次握手:Client收到確認(rèn)后,檢查ack是否為J+1,ACK是否為1,如果正確則將標(biāo)志位ACK置為1,ack=K+1,并將該數(shù)據(jù)包發(fā)送給Server
    發(fā)表于 12-02 07:16

    串口通信基石:Air8000下Modbus RTU串口初始化詳解!

    串口初始化是Modbus RTU通信穩(wěn)定可靠的關(guān)鍵起點(diǎn)。本篇深入剖析Air8000開(kāi)發(fā)板串口參數(shù)配置、初始化代碼實(shí)現(xiàn)及調(diào)試要點(diǎn),結(jié)合master_rtu示例,分享實(shí)際操作中的經(jīng)驗(yàn)與避坑
    的頭像 發(fā)表于 10-28 16:33 ?1778次閱讀
    串口<b class='flag-5'>通信</b>基石:Air8000下Modbus RTU串口<b class='flag-5'>初始化</b>詳解!

    GraniStudio:初始化例程

    1.文件運(yùn)行 導(dǎo)入工程 雙擊運(yùn)行桌面GraniStudio.exe。 通過(guò)引導(dǎo)界面導(dǎo)入初始化例程,點(diǎn)擊導(dǎo)入按鈕。 打開(kāi)初始化例程所在路徑,選中初始化.gsp文件,點(diǎn)擊打開(kāi),完成導(dǎo)入。 2.功能
    的頭像 發(fā)表于 08-22 16:45 ?1023次閱讀
    GraniStudio:<b class='flag-5'>初始化</b>例程

    GraniStudio : TCP/IP(Socket)協(xié)議深度剖析

    (Socket)客戶端與服務(wù)器模塊,通過(guò)高度封裝的可視功能,將復(fù)雜的套接字通信邏輯轉(zhuǎn)化為簡(jiǎn)單的 “拖拽式” 操作,為工業(yè)用戶構(gòu)建穩(wěn)定、高效的網(wǎng)絡(luò)通信系統(tǒng)提供了強(qiáng)大支撐。本文將從技術(shù)原理、功能實(shí)現(xiàn)、應(yīng)用場(chǎng)景
    的頭像 發(fā)表于 08-03 22:20 ?1353次閱讀
    GraniStudio : <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b>(Socket)協(xié)議深度剖析

    定義IO初始化結(jié)構(gòu)體

    由上述IOPORT相關(guān)功能的枚舉類型我們可以知道,在對(duì)IOPORT模塊進(jìn)行初始化時(shí)需要根據(jù)情況配置它們。因此我們定義一個(gè)IOPORT初始化的結(jié)構(gòu)體類型IOPORT_Init_t,它的成員包括了由上述所有枚舉類型所聲明的變量,因此該結(jié)構(gòu)體類型的變量可以包含IOPORT的相關(guān)
    的頭像 發(fā)表于 07-16 16:26 ?1560次閱讀

    【嘉楠堪智K230開(kāi)發(fā)板試用體驗(yàn)】網(wǎng)絡(luò)收發(fā)信息

    /IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過(guò)程中端點(diǎn)的抽象表示,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議(通常是
    發(fā)表于 07-13 08:13

    揭秘EtherNet IP轉(zhuǎn)Modbus TCP 網(wǎng)關(guān)在工業(yè)自動(dòng)中的工程優(yōu)化分析

    揭秘EtherNet IP轉(zhuǎn)Modbus TCP 網(wǎng)關(guān)在工業(yè)自動(dòng)中的工程優(yōu)化分析
    的頭像 發(fā)表于 05-23 19:22 ?727次閱讀
    <b class='flag-5'>揭秘</b>EtherNet <b class='flag-5'>IP</b>轉(zhuǎn)Modbus <b class='flag-5'>TCP</b> 網(wǎng)關(guān)在工業(yè)自動(dòng)<b class='flag-5'>化</b>中的工程優(yōu)化分析

    TCP三次握手和四揮手,這樣解釋太通俗易懂了!

    TCP連接的建立和釋放分別通過(guò)“三次握手”和“四揮手”來(lái)完成。三次握手
    的頭像 發(fā)表于 04-24 19:33 ?1673次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>和四<b class='flag-5'>次</b>揮手,這樣解釋太通俗易懂了!
    集安市| 禹州市| 米易县| 时尚| 镇原县| 清镇市| 天门市| 杭州市| 望奎县| 同心县| 湛江市| 西丰县| 清涧县| 宜黄县| 正定县| 遂宁市| 盐城市| 高陵县| 漳浦县| 庄浪县| 嵊泗县| 岗巴县| 永嘉县| 南木林县| 景德镇市| 巩留县| 镇江市| 兴文县| 昌黎县| 焦作市| 黄平县| 曲周县| 上虞市| 桃源县| 宜川县| 高平市| 怀远县| 田东县| 镇安县| 肃南| 盘山县|