日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux下如何斷開TCP連接?(linux斷開tcp連接)

在Linux系統(tǒng)中,TCP連接是一種非常重要的網(wǎng)絡(luò)通信方式。一般情況下,TCP連接能夠穩(wěn)定地保持通信,但是有時(shí)候需要手動(dòng)斷開TCP連接。本文將介紹在Linux系統(tǒng)中如何斷開TCP連接。

做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營銷成為有效果、有回報(bào)的無錫營銷推廣。創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站建設(shè)10多年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

斷開TCP連接的方法有很多種,以下是一些常用的方法:

1. 使用kill命令終止進(jìn)程

如果TCP連接是由一個(gè)進(jìn)程建立的,那么可以使用kill命令終止該進(jìn)程,進(jìn)而斷開TCP連接。需要查找建立TCP連接的進(jìn)程ID??梢允褂萌缦旅畈檎遥?/p>

“`

netstat -a | grep :

“`

其中,和是遠(yuǎn)程主機(jī)的IP地址和端口號(hào)。該命令的輸出結(jié)果包含了建立該TCP連接的進(jìn)程ID。然后,可以使用kill命令以該進(jìn)程ID終止該進(jìn)程,來斷開TCP連接:

“`

kill

“`

其中,是建立TCP連接的進(jìn)程ID。

2. 使用iptables

如果TCP連接無法通過終止進(jìn)程來斷開,可以使用iptables命令實(shí)現(xiàn)。iptables是Linux系統(tǒng)中用來管理網(wǎng)絡(luò)流量和安全性的命令??梢允褂胕ptables命令添加一條規(guī)則,來強(qiáng)制斷開TCP連接。具體步驟如下:

(1)查找建立TCP連接的進(jìn)程ID和端口號(hào),使用如下命令:

“`

netstat -apt | grep :

“`

其中,和是遠(yuǎn)程主機(jī)的IP地址和端口號(hào)。該命令的輸出結(jié)果包含了建立該TCP連接的進(jìn)程ID和端口號(hào)。

(2)使用iptables命令添加規(guī)則,強(qiáng)制斷開TCP連接。具體命令如下:

“`

iptables -A OUTPUT -p tcp –sport –tcp-flags RST RST -j DROP

“`

其中,是建立TCP連接的本地端口號(hào)。該命令的作用就是將發(fā)送的TCP數(shù)據(jù)包重置為RST并丟棄。

3. 使用tcpkill命令

tcpkill命令是一種用來終止TCP連接的命令。該命令是tcpdump命令的擴(kuò)展功能,可以指定要終止的TCP連接。具體命令如下:

“`

tcpkill host

“`

其中,是遠(yuǎn)程主機(jī)的IP地址。該命令的作用就是終止所有與該遠(yuǎn)程主機(jī)建立的TCP連接。

4. 使用ss命令

如果不能確定建立TCP連接的進(jìn)程ID和端口號(hào),可以使用ss命令來列出當(dāng)前所有的TCP連接。具體命令如下:

“`

ss -t -a

“`

該命令的輸出結(jié)果列出了所有的TCP連接。然后,可以使用如下命令斷開指定的TCP連接:

“`

ss -K dst dport

“`

其中,和是要斷開的遠(yuǎn)程主機(jī)的IP地址和端口號(hào)。該命令的作用是斷開與該遠(yuǎn)程主機(jī)建立的TCP連接。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!

【TCP】 tcp四次揮手狀態(tài) TIME_WAIT

首先,我們需要明確, 只有主動(dòng)斷開的那一方才會(huì)進(jìn)入 TIME_WAIT 狀態(tài) ,且會(huì)在那個(gè)狀態(tài)持續(xù) 2 個(gè) MSL(Max Segment Lifetime)。

為了講清楚 TIME_WAIT,需要先介紹一下 MSL 的概念。

MSL(報(bào)文更大生存時(shí)間)是 TCP 報(bào)文在網(wǎng)絡(luò)中的更大生存時(shí)間。這個(gè)值與 IP 報(bào)文頭的 TTL 字段有密切的關(guān)系。

IP 報(bào)文頭中有一個(gè) 8 位的存活時(shí)間字段(Time to live, TTL)如下圖。 這個(gè)存活時(shí)間存儲(chǔ)的不是具體的時(shí)間,而是一個(gè) IP 報(bào)文更大可經(jīng)過的路由數(shù),每經(jīng)過一個(gè)路由器,TTL 減 1,當(dāng) TTL 減到 0 時(shí)這個(gè) IP 報(bào)文會(huì)被丟棄。

TTL 經(jīng)過路由器不斷減小的過程如下圖所示,假設(shè)初始的 TTL 為 12,經(jīng)過下一個(gè)路由器 R1 以后 TTL 變?yōu)?11,后面每經(jīng)過一個(gè)路由器以后 TTL 減 1

從上面可以看到 TTL 說的是「跳數(shù)」限制而不是「時(shí)間」限制,盡管如此我們依然假設(shè) 更大跳數(shù)的報(bào)文在網(wǎng)絡(luò)中存活的時(shí)間不可能超過 MSL 秒 。

Linux 的套接字實(shí)現(xiàn)假設(shè) MSL 為 30 秒,因此在 Linux 機(jī)器上 TIME_WAIT 狀態(tài)將持續(xù) 60秒。

要構(gòu)造一個(gè) TIME_WAIT 非常簡(jiǎn)單,只需要建立一個(gè) TCP 連接,然后斷開某一方連接,主動(dòng)斷開的那一方就會(huì)進(jìn)入 TIME_WAIT 狀態(tài),我們用 Linux 上開箱即用的 nc 命令來構(gòu)造一個(gè)。

過程如下圖:

在機(jī)器 c2 上用nc -l 8888啟動(dòng)一個(gè) TCP 服務(wù)器

在機(jī)器 c1 上用 nc c創(chuàng)建一條 TCP 連接

在機(jī)器 c1 上用 Ctrl+C 停止 nc 命令,隨后在用netstat -atnp | grep 8888查看連接狀態(tài)。

之一個(gè)原因是:數(shù)據(jù)報(bào)文可能在發(fā)送途中延遲但最終會(huì)到達(dá),冊(cè)搭因此要等老的“迷路”的重復(fù)報(bào)文段在網(wǎng)絡(luò)中過期失效,這樣可以避免用相同源端口和目標(biāo)端口創(chuàng)建新連接時(shí)收到舊連接姍姍來遲的數(shù)據(jù)包,造成數(shù)據(jù)錯(cuò)亂。

比如下面的例子

假設(shè)客戶端 10.211.55.2 的端口與服務(wù)端 10.211.55.10 的 8080 端口一開始建立了一個(gè) TCP 連接。

假如客戶端發(fā)送完 FIN 包以后不等待直接進(jìn)入 CLOSED 狀態(tài),老連接 SEQ=3 的包因?yàn)榫W(wǎng)絡(luò)的延遲。過了一段時(shí)間 相同缺姿辯 的 IP 和端口號(hào)又新建了另一條連接,這樣 TCP 連接的四元組就完全一樣了。

恰好 SEQ 因?yàn)榛乩@等原因 也正好相同,那么 SEQ=3 的包就無法知道到底是舊連伏缺接的包還是新連接的包了,造成新連接數(shù)據(jù)的混亂。

TIME_WAIT 等待時(shí)間是 2 個(gè) MSL,已經(jīng)足夠讓一個(gè)方向上的包最多存活 MSL 秒就被丟棄,保證了在創(chuàng)建新的 TCP 連接以后,老連接姍姍來遲的包已經(jīng)在網(wǎng)絡(luò)中被丟棄消逝,不會(huì)干擾新的連接。

第二個(gè)原因是確??煽繉?shí)現(xiàn) TCP 全雙工終止連接。

關(guān)閉連接的四次揮手中,最終的 ACK 由主動(dòng)關(guān)閉方發(fā)出,如果這個(gè) ACK 丟失,對(duì)端(被動(dòng)關(guān)閉方)將重發(fā) FIN,如果主動(dòng)關(guān)閉方不維持 TIME_WAIT 直接進(jìn)入 CLOSED 狀態(tài),則無法重傳 ACK,被動(dòng)關(guān)閉方因此不能及時(shí)可靠釋放。

如果四次揮手的第 4 步中客戶端發(fā)送了給服務(wù)端的確認(rèn) ACK 報(bào)文以后不進(jìn)入 TIME_WAIT 狀態(tài),直接進(jìn)入 CLOSED狀態(tài),然后重用端口建立新連接會(huì)發(fā)生什么呢?

如下圖所示

主動(dòng)關(guān)閉方如果馬上進(jìn)入 CLOSED 狀態(tài),被動(dòng)關(guān)閉方這個(gè)時(shí)候還處于LAST-ACK狀態(tài),主動(dòng)關(guān)閉方認(rèn)為連接已經(jīng)釋放,端口可以重用了, 如果使用相同的端口三次握手發(fā)送 SYN 包,會(huì)被處于 LAST-ACK狀態(tài)狀態(tài)的被動(dòng)關(guān)閉方返回一個(gè) RST,三次握手失敗。

為什么時(shí)間是兩個(gè) MSL?

1 個(gè) MSL 確保四次揮手中主動(dòng)關(guān)閉方最后的 ACK 報(bào)文最終能達(dá)到對(duì)端

1 個(gè) MSL 確保對(duì)端沒有收到 ACK 重傳的 FIN 報(bào)文可以到達(dá)

2MS = 去向 ACK 消息更大存活時(shí)間(MSL) + 來向 FIN 消息的更大存活時(shí)間(MSL)

在一個(gè)非常繁忙的服務(wù)器上,如果有大量 TIME_WAIT 狀態(tài)的連接會(huì)怎么樣呢?

連接表無法復(fù)用

socket 結(jié)構(gòu)體內(nèi)存占用

連接表無法復(fù)用  因?yàn)樘幱?TIME_WAIT 的連接會(huì)存活 2MSL(60s),意味著相同的TCP 連接四元組(源端口、源 ip、目標(biāo)端口、目標(biāo) ip)在一分鐘之內(nèi)都沒有辦法復(fù)用,通俗一點(diǎn)來講就是“占著茅坑不拉屎”。

假設(shè)主動(dòng)斷開的一方是客戶端,對(duì)于 web 服務(wù)器而言,目標(biāo)地址、目標(biāo)端口都是固定值(比如本機(jī) ip + 80 端口),客戶端的 IP 也是固定的,那么能變化的就只有端口了,在一臺(tái) Linux 機(jī)器上,端口最多是個(gè)( 2 個(gè)字節(jié))。

如果客戶端與服務(wù)器通信全部使用短連接,不停的創(chuàng)建連接,接著關(guān)閉連接,客戶端機(jī)器會(huì)造成大量的 TCP 連接進(jìn)入 TIME_WAIT 狀態(tài)。

可以來寫一個(gè)簡(jiǎn)單的 shell 腳本來測(cè)試一下,使用 nc 命令連接 redis 發(fā)送 ping 命令以后斷開連接。

如果在 60s 內(nèi)有超過次 redis 短連接操作,就會(huì)出現(xiàn)端口不夠用的情況,這也是使用 連接池 的一個(gè)重要原因。

針對(duì) TIME_WAIT 持續(xù)時(shí)間過長的問題,Linux 新增了幾個(gè)相關(guān)的選項(xiàng),net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_tw_recycle。

下面我們來說明一下這兩個(gè)參數(shù)的用意。 這兩個(gè)參數(shù)都依賴于 TCP 頭部的擴(kuò)展選項(xiàng):timestamp

TCP 頭部時(shí)間戳選項(xiàng)(TCP Timestamps Option,TSopt)

除了我們之前介紹的 MSS、Window Scale 還有以一個(gè)非常重要的選項(xiàng):時(shí)間戳(TCP Timestamps Option,TSopt)

它由四部分構(gòu)成:類別(kind)、長度(Length)、發(fā)送方時(shí)間戳(TS value)、回顯時(shí)間戳(TS Echo Reply)。

時(shí)間戳選項(xiàng)類別(kind)的值等于 8,用來與其它類型的選項(xiàng)區(qū)分。長度(length)等于 10。兩個(gè)時(shí)間戳相關(guān)的選項(xiàng)都是 4 字節(jié)。

如下圖所示:

是否使用時(shí)間戳選項(xiàng)是在三次握手里面的 SYN 報(bào)文里面確定的。

下面的包是 curl github.com 抓包得到的結(jié)果:

發(fā)送方發(fā)送數(shù)據(jù)時(shí),將一個(gè)發(fā)送時(shí)間戳放在發(fā)送方時(shí)間戳 TSval 中

接收方收到數(shù)據(jù)包以后,將收到的時(shí)間戳原封不動(dòng)的返回給發(fā)送方,放在 TSecr 字段中,同時(shí)把自己的時(shí)間戳放在 TSval 中

后面的包以此類推

有幾個(gè)需要說明的點(diǎn):

1. 時(shí)間戳是一個(gè)單調(diào)遞增的值,與我們所知的 epoch 時(shí)間戳不是一回事。 這個(gè)選項(xiàng)不要求兩臺(tái)主機(jī)進(jìn)行時(shí)鐘同步

2. timestamps 是一個(gè)雙向的選項(xiàng),如果只要有一方不開啟,雙方都將停用 timestamps。

比如下面是curl

www.baidu.com

得到的包

可以看到客戶端發(fā)起 SYN 包時(shí)帶上了自己的TSval,服務(wù)器回復(fù)的SYN+ACK 包沒有TSval和TSecr,從此之后的包都沒有帶上時(shí)間戳選項(xiàng)了。

有了這個(gè)選項(xiàng),我們來看一下 tcp_tw_reuse 選項(xiàng)。

緩解緊張的端口資源,一個(gè)可行的方法是重用“浪費(fèi)”的處于 TIME_WAIT 狀態(tài)的連接,當(dāng)開啟 net.ipv4.tcp_tw_reuse 選項(xiàng)時(shí),處于 TIME_WAIT 狀態(tài)的連接可以被重用。

下面把主動(dòng)關(guān)閉方記為 A, 被動(dòng)關(guān)閉方記為 B,它的原理是:

如果主動(dòng)關(guān)閉方 A 收到的包時(shí)間戳比當(dāng)前存儲(chǔ)的時(shí)間戳小,說明是一個(gè)迷路的舊連接的包,直接丟棄掉

如果因?yàn)?ACK 包丟失導(dǎo)致被動(dòng)關(guān)閉方還處于LAST-ACK狀態(tài),并且會(huì)持續(xù)重傳 FIN+ACK。這時(shí) A 發(fā)送SYN 包想三次握手建立連接,此時(shí) A 處于SYN-SENT階段。 當(dāng)收到 B 的 FIN 包時(shí)會(huì)回以一個(gè) RST 包給 B,B 這端的連接會(huì)進(jìn)入 CLOSED 狀態(tài),A 因?yàn)闆]有收到 SYN 包的 ACK,會(huì)重傳 SYN,后面就一切順利了。

tcp_tw_recyle 是一個(gè)比 tcp_tw_reuse 更激進(jìn)的方案, 系統(tǒng)會(huì)緩存每臺(tái)主機(jī)(即 IP)連接過來的最新的時(shí)間戳。

對(duì)于新來的連接,如果發(fā)現(xiàn) SYN 包中帶的時(shí)間戳與之前記錄的來自同一主機(jī)的同一連接的分組所攜帶的時(shí)間戳相比更舊,則直接丟棄;如果更新則接受復(fù)用 TIME-WAIT 連接。

這種機(jī)制在客戶端與服務(wù)端一對(duì)一的情況下沒有問題,如果經(jīng)過了 NAT 或者負(fù)載均衡,問題就很嚴(yán)重了。

什么是 NAT呢?

NAT(Network Address Translator)的出現(xiàn)是為了緩解 IP 地址耗盡的臨時(shí)方案,IPv4 的地址是 32 位,全部利用最 多只能提 42.9 億個(gè)地址,去掉保留地址、組播地址等剩下的只有 30 多億,互聯(lián)網(wǎng)主機(jī)數(shù)量呈指數(shù)級(jí)的增長,如果給每個(gè)設(shè)備都分配一個(gè)唯一的 IP 地址,那根本不夠。于是 1994 年推出的 NAT 規(guī)范,NAT 設(shè)備負(fù)責(zé)維護(hù)局域網(wǎng)私有 IP 地址和端口到外網(wǎng) IP 和端口的映射規(guī)則。

它有兩個(gè)明顯的優(yōu)點(diǎn):

出口 IP 共享:通過一個(gè)公網(wǎng)地址可以讓許多機(jī)器連上網(wǎng)絡(luò),解決 IP 地址不夠用的問題

安全隱私防護(hù):實(shí)際的機(jī)器可以隱藏自己真實(shí)的 IP 地址 當(dāng)然也有明顯的弊端:NAT 會(huì)對(duì)包進(jìn)行修改,有些協(xié)議無法通過 NAT。

當(dāng) tcp_tw_recycle 遇上 NAT 時(shí),因?yàn)榭蛻舳顺隹?IP 都一樣,會(huì)導(dǎo)致服務(wù)端看起來都在跟同一個(gè) host 打交道。

不同客戶端攜帶的 timestamp 只跟自己相關(guān),如果一個(gè)時(shí)間戳較大的客戶端 A 通過 NAT 與服務(wù)器建連,時(shí)間戳較小的客戶端 B 通過 NAT 發(fā)送的包服務(wù)器認(rèn)為是過期重復(fù)的數(shù)據(jù),直接丟棄,導(dǎo)致 B 無法正常建連和發(fā)數(shù)據(jù)。

TIME_WAIT 狀態(tài)是最容易造成混淆的一個(gè)概念,這個(gè)狀態(tài)存在的意義是:

1. 可靠的實(shí)現(xiàn) TCP 全雙工的連接終止(處理最后 ACK 丟失的情況)

2. 避免當(dāng)前關(guān)閉連接與后續(xù)連接混淆(讓舊連接的包在網(wǎng)絡(luò)中消逝)

假設(shè) MSL 是 60s,請(qǐng)問系統(tǒng)能夠初始化一個(gè)新連接然后主動(dòng)關(guān)閉的更大速率是多少(忽略1~1024區(qū)間的端口)?

2MSL = 120s,() / 120 = 537.6 次/秒

每120秒可以初始化()個(gè)

“時(shí)間戳是一個(gè)單調(diào)遞增的值,與我們所知的 epoch 時(shí)間戳不是一回事” 這個(gè)epoch和時(shí)間戳分別是什么差異?

不是一回事,跟時(shí)間沒有什么關(guān)系,只是隨著時(shí)鐘信號(hào)CPU中斷遞增。

SO_REUSEADDR是針對(duì)服務(wù)端的,tcp_tw_reuse和tcp_tw_recyle是針對(duì)客戶端的,可以這樣理解嗎?

SO_REUSEADDR 兩端都可以用,不過服務(wù)端上因?yàn)榻?jīng)常要固定端口,不設(shè)置,下次重啟就bind 失敗 。

tcp_tw_reuse和tcp_tw_recyle 也是主要用于繁忙的“服務(wù)端”,“客戶端”和“服務(wù)端”這個(gè)說法是在不同的場(chǎng)景下可以互相轉(zhuǎn)換的,服務(wù)端也可以發(fā)起請(qǐng)求充當(dāng)客戶端 。

深入理解 TCP 協(xié)議:從原理到實(shí)戰(zhàn)

從SO_REUSEADDR選項(xiàng)說起

linux下tcp通信怎么限制客戶端的連接數(shù)量

listen(int fd, int backlog); 設(shè)置第二個(gè)參數(shù)就行。

listen的backlog參數(shù)指定的是已經(jīng)三次握手完成,達(dá)到了established狀態(tài)但是等待accept的隊(duì)列的容量。當(dāng)遲舉這個(gè)容量超過上限的時(shí)候服務(wù)器端便不處理客戶端的三次握手了。這個(gè)隊(duì)列的容量當(dāng)然乎旦數(shù)不是樓主所說的并發(fā)連接數(shù)。

但是lisen的再后一道程序便是accept了。如果你想要的是在tcp并發(fā)連接數(shù)量超過上限的時(shí)候服務(wù)器不再處理了三次握手那么只有兩種辦法:

1.關(guān)閉listen的socket

2.自己修改tcp協(xié)議棧的實(shí)現(xiàn),當(dāng)然這個(gè)就比較麻煩了。

用iptables防火墻來限制tcp連接歲首,

如下,限制用戶的tcp連接數(shù)為50

iptables -I INPUT-p tcp -m connlimit –connlimit-above 50 -j REJECT

iptables防悔沒哪火碧碼墻察滑

iptables -I INPUT-p tcp -m connlimit –connlimit-above 50 -j REJECT

linux斷開tcp連接的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux斷開tcp連接,Linux下如何斷開TCP連接?,【TCP】 tcp四次揮手狀態(tài) TIME_WAIT,linux下tcp通信怎么限制客戶端的連接數(shù)量的信息別忘了在本站進(jìn)行查找喔。

創(chuàng)新互聯(lián)-老牌IDC、云計(jì)算及IT信息化服務(wù)領(lǐng)域的服務(wù)供應(yīng)商,業(yè)務(wù)涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務(wù)、云計(jì)算服務(wù)、IT信息化、AI算力租賃平臺(tái)(智算云),軟件開發(fā),網(wǎng)站建設(shè),咨詢熱線:028-86922220


當(dāng)前題目:Linux下如何斷開TCP連接?(linux斷開tcp連接)
網(wǎng)頁鏈接:http://www.5511xx.com/article/cohhpoj.html