久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

TCP基礎(chǔ)知識(shí)有哪些

共計(jì) 4872 個(gè)字符,預(yù)計(jì)需要花費(fèi) 13 分鐘才能閱讀完成。

本篇內(nèi)容介紹了“TCP 基礎(chǔ)知識(shí)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

TCP 報(bào)文段:概念:分為頭部和數(shù)據(jù)兩部分。

TCP 報(bào)文段頭部中的字段:源端口 / 目的端口 這兩個(gè)字段與 IP 頭部中的源 IP 地址和目的 IP 地址一起,  唯一地標(biāo)識(shí)了每個(gè)連接。一個(gè) ip 地址和一個(gè)端口的組合被稱為一個(gè) socket 或一個(gè) endpoint。序列號(hào)(seq) 本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序列號(hào),seq 的值等于前面已發(fā)送過(guò)的數(shù)據(jù)的最后一個(gè)字節(jié)的序列號(hào) +1。(TCP 傳輸時(shí)將每個(gè)字節(jié)的數(shù)據(jù)都進(jìn)行了編號(hào),這個(gè)編號(hào)就是序列號(hào))
 確認(rèn)號(hào) (ack) 期望收到對(duì)方下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)的序列號(hào),若 ack 為 x,則到序號(hào) x - 1 為止(包括 x -1) 的所有數(shù)據(jù)都已正確收到。確認(rèn)(ACK) 僅當(dāng) ACK= 1 時(shí),ack 字段才有效,當(dāng) ACK= 0 時(shí),ack 無(wú)效。同步(SYN) SYN= 1 且 ACK=0  表明這是一個(gè)連接請(qǐng)求報(bào)文段,若對(duì)方同意建立連接,則對(duì)方應(yīng)在響應(yīng)報(bào)文中包含 SYN= 1 和 ACK=1。終止(FIN) FIN= 1 表明此報(bào)文的發(fā)送方已經(jīng)結(jié)束向?qū)Ψ桨l(fā)送數(shù)據(jù),并要求釋放連接。重置(RST)  重置連接。窗口大小 接收端接收緩沖區(qū)剩余的大小。這是一個(gè) 16 位的字段,單位是字節(jié)數(shù)。窗口大小字段最大能表示 65535 個(gè)字節(jié)(64K),但是 TCP 的接收窗口大小最大并不是 64K。TCP 實(shí)際的接收窗口大小為 16 位窗口大小字段的值左移 M(M 表示:窗口擴(kuò)大因子)位,每移一位,窗口擴(kuò)大兩倍。校驗(yàn)和   該字段覆蓋了 TCP 頭部和數(shù)據(jù),由發(fā)送方進(jìn)行計(jì)算,然后由接收方來(lái)驗(yàn)證。其目的是為了發(fā)現(xiàn) TCP 頭部和數(shù)據(jù)在發(fā)送端到接收端之間發(fā)生的任何改動(dòng),如果接收方檢測(cè)到校驗(yàn)和有差錯(cuò),則 TCP 報(bào)文會(huì)被直接丟棄。
在連接建立后所有傳送的報(bào)文都必須把 ACK 置 1。SYN 報(bào)文段、FIN 報(bào)文段不能攜帶數(shù)據(jù),但會(huì)消耗掉一個(gè)序列號(hào)。ACK 報(bào)文段可以攜帶數(shù)據(jù),但如果不攜帶數(shù)據(jù)則不消耗序列號(hào)。TCP 數(shù)據(jù)

TCP 三次握手

概念:建立一個(gè) TCP 連接時(shí),客戶端和服務(wù)器需要交互 3 次,即發(fā)送 3 次 TCP 報(bào)文段,故稱為 3 次握手。目的:與服務(wù)器建立 TCP 連接,并同步連接雙方的序列號(hào)、確認(rèn)號(hào)、TCP 窗口大小等信息。三次握手改為兩次握手會(huì)產(chǎn)生死鎖:兩次握手:A 發(fā)送連接請(qǐng)求報(bào)文,B 接收 A 的請(qǐng)求報(bào)文并發(fā)出確認(rèn)報(bào)文后,則認(rèn)為連接建立。舉例:A 發(fā)送連接請(qǐng)求報(bào)文,B 收到 A 的請(qǐng)求報(bào)文并發(fā)出確認(rèn)報(bào)文,如果 B 的確定報(bào)文在傳輸過(guò)程中丟失了,此時(shí),B 認(rèn)為連接已建立并開始發(fā)送數(shù)據(jù),而 A 一直在等待著 B 的確定報(bào)文,且不會(huì)接受 B 發(fā)送的數(shù)據(jù),而 B 在發(fā)送數(shù)據(jù)后將一直處于等待 A 確定的狀態(tài)中,從而造成 A 和 B 相互等待,形成死鎖。第一次握手:客戶端向服務(wù)器發(fā)出連接請(qǐng)求報(bào)文段 (報(bào)文段頭部:(初始) 序列號(hào) seq=x、同步 SYN=1),此時(shí)客戶端進(jìn)入 SYN_SENT(同步已發(fā)送)狀態(tài)。說(shuō)明:同步 SYN= 1 會(huì)消耗一個(gè)序列號(hào)位,即把 x 這個(gè)序列號(hào)位給占了,故下次發(fā)送的序列號(hào)應(yīng)該從 x + 1 開始,第一次揮手時(shí)的 FIN 也同理。第二次握手:服務(wù)器收到連接請(qǐng)求報(bào)文段后,若同意建立連接,則向客戶端發(fā)送響應(yīng)報(bào)文段 (報(bào)文段頭部:同步 SYN=1、確認(rèn) ACK=1、確認(rèn)號(hào) ack=x+1、序列號(hào) seq=y,此時(shí)服務(wù)器進(jìn)入 SYN_RECV(同步已收到) 狀態(tài)。此時(shí)的 TCP 連接稱為半連接(half-open connect)。第三次握手:客戶端收到服務(wù)器的響應(yīng)報(bào)文段后,再次向服務(wù)器發(fā)出用于確認(rèn)的報(bào)文段 (報(bào)文段頭部:同步 SYN=0、確認(rèn) ACK=1、確認(rèn)號(hào) ack=y+1、序號(hào) seq=x+1),此時(shí) TCP 連接已建立,客戶端和服務(wù)器都進(jìn)入 ESTABLISHED(已建立連接) 狀態(tài)。

TCP 四次揮手

概念:釋放一個(gè) TCP 連接時(shí),客戶端和服務(wù)器需要交互 4 次,即發(fā)送 4 次 TCP 報(bào)文段,故稱為 4 次揮手。1)斷開 TCP 連接   即   客戶端關(guān)閉發(fā)送數(shù)據(jù)的通道   并且   服務(wù)器關(guān)閉發(fā)送數(shù)據(jù)的通道。2)為什么連接的時(shí)候是三次握手,關(guān)閉的時(shí)候卻是四次握手:1 建立連接時(shí):當(dāng) Server 端收到 Client 端的 SYN 連接請(qǐng)求報(bào)文后,Server 端可以直接發(fā)送 SYN+ACK 報(bào)文,其中 ACK 報(bào)文是用來(lái)應(yīng)答的,SYN 報(bào)文是用來(lái)同步的。2 關(guān)閉連接時(shí):當(dāng) Server 端收到 Client 端的 FIN 報(bào)文后,Server 端很可能不會(huì)立即關(guān)閉 SOCKET,而是先回復(fù)一個(gè) ACK 報(bào)文,告訴 Client 端,你發(fā)的 FIN 報(bào)文我收到了,但是我 (可能) 還有數(shù)據(jù)要發(fā)送,當(dāng) Server 端所有的報(bào)文都發(fā)送完了,Server 端才會(huì)發(fā)送 FIN 報(bào)文,即 Server 端通知 Client 端的過(guò)程中需要揮兩次手,故在關(guān)閉連接的時(shí)候總共需要四次揮手。第一次揮手:客戶端向服務(wù)器發(fā)出連接釋放報(bào)文段 (報(bào)文段頭部:終止 FIN=1、序號(hào) seq=u),并停止發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉 TCP 連接,此時(shí)客戶端進(jìn)入 FIN_WAIT1(終止等待 1) 狀態(tài)。第二次揮手:服務(wù)器收到客戶端的連接釋放報(bào)文段后,向客戶端發(fā)送確認(rèn)報(bào)文段 (報(bào)文段頭部:確認(rèn) ACK=1、確認(rèn)號(hào) ack=u+1、序號(hào) seq=v),此時(shí)服務(wù)器進(jìn)入 CLOSE_WAIT(關(guān)閉等待) 狀態(tài),并通知應(yīng)用進(jìn)程。客戶端收到服務(wù)器的確認(rèn)報(bào)文段后,進(jìn)入 FIN_WAIT2(終止等待 2)狀態(tài)。此時(shí),客戶端已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了,但是服務(wù)器可能還有數(shù)據(jù)要發(fā)送,且客戶端依然可以接受服務(wù)器發(fā)送的數(shù)據(jù),此時(shí)的 TCP 連接處于半關(guān)閉狀態(tài)。第三次揮手:應(yīng)用進(jìn)程通知服務(wù)器釋放連接后,服務(wù)器發(fā)出連接釋放報(bào)文段 (報(bào)文段頭部:確認(rèn) ACK=1,終止 FIN=1、序號(hào) seq=w(在半關(guān)閉狀態(tài)時(shí)服務(wù)器可能又發(fā)送了一些數(shù)據(jù))、確認(rèn)號(hào) ack=u+1),此時(shí)服務(wù)器進(jìn)入 LAST_ACK(最后確定) 狀態(tài)。第四次揮手:客戶端收到服務(wù)器的連接釋放報(bào)文段后,向服務(wù)器發(fā)送確定報(bào)文段 (報(bào)文段頭部:確認(rèn) ACK=1、序號(hào) seq=u+1、確認(rèn)號(hào) ack=w+1),此時(shí)客戶端進(jìn)入到 TIME-WAIT(時(shí)間等待) 狀態(tài),等到等待時(shí)間過(guò)后,二者才都進(jìn)入到 CLOSED(關(guān)閉)狀態(tài)。

SYN 攻擊:概念:SYN 攻擊是一個(gè)典型的 DDOS(Distributed Denial of Service: 分布式拒絕服務(wù))攻擊。

原理:客戶端在短時(shí)間內(nèi)偽造大量不存在的 IP 地址,然后向服務(wù)器不斷地發(fā)送 SYN 包(即不斷地發(fā)起第一次握手,建立大量的半連接狀態(tài)的請(qǐng)求),服務(wù)器收到連接請(qǐng)求后發(fā)送響應(yīng)報(bào)文,并等待客戶的確認(rèn),由于源地址是不存在的,故服務(wù)器需要不斷的重發(fā)直到超時(shí),這些偽造的 SYN 包將長(zhǎng)時(shí)間占用未連接隊(duì)列(syns queue),正常的 SYN 請(qǐng)求被丟棄,目標(biāo)系統(tǒng)運(yùn)行緩慢,嚴(yán)重者引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓。查看狀態(tài)為 SYN_RECV 的 TCP 連接:netstat -npt | grep SYN_RECV #  若 Foreign Address 的 ip 地址是隨機(jī)的,則服務(wù)器此時(shí)很可能正在被 SYN 攻擊。統(tǒng)計(jì) TCP 連接的狀態(tài):netstat -npt | awk  {print $6}  | grep -v  Foreign  | sort | uniq -c
說(shuō)明:一般較新的 TCP/IP 協(xié)議棧都對(duì)這一過(guò)程進(jìn)行修正來(lái)防范 SYN 攻擊,修改 tcp 協(xié)議實(shí)現(xiàn)。主要方法有 SynAttackProtect 保護(hù)機(jī)制、SYN cookies 技術(shù)、增加最大半連接和縮短超時(shí)時(shí)間等. 但是不能完全防范 SYN 攻擊。

socket 編程:Socket.connect() 會(huì)觸發(fā) TCP 的三次握手。Socket.close() 會(huì)觸發(fā) TCP 的四次揮手。表示不發(fā)送數(shù)據(jù)也不接受數(shù)據(jù)了。

超時(shí)重傳:概念:TCP 傳輸數(shù)據(jù)時(shí),發(fā)送方發(fā)送數(shù)據(jù)后會(huì)等待接收方響應(yīng)的 ACK 報(bào)文,并根據(jù) ACK 報(bào)文來(lái)判斷數(shù)據(jù)是否傳輸成功。如果發(fā)送方發(fā)送完數(shù)據(jù)后,長(zhǎng)時(shí)間沒(méi)有等到接收方的 ACK 報(bào)文,那么發(fā)送方會(huì)重新發(fā)送這些數(shù)據(jù)。

發(fā)送方?jīng)]有收到 ACK 報(bào)文的原因:數(shù)據(jù)在傳輸過(guò)程中由于網(wǎng)絡(luò)原因等直接全體丟包,接收方根本沒(méi)有接收到。接收方接收到了響應(yīng)的數(shù)據(jù),但是響應(yīng)的 ACK 報(bào)文卻由于網(wǎng)絡(luò)原因丟包了。之后接收方若再次收到發(fā)送方重新發(fā)送的數(shù)據(jù)(根據(jù)序列號(hào)可判斷是否是重復(fù)數(shù)據(jù)),則會(huì)將這些重復(fù)的數(shù)據(jù)丟棄,但是仍然會(huì)響應(yīng) ACK 報(bào)文。超時(shí)時(shí)間的計(jì)算:默認(rèn) 500ms,重發(fā)一次后,若仍沒(méi)有響應(yīng),那么等待 2 *500ms 的時(shí)間后,再次重傳。重傳的次數(shù)達(dá)到某個(gè)值后,TCP 就認(rèn)為網(wǎng)絡(luò)已經(jīng)斷了或?qū)Ψ匠霈F(xiàn)異常了,然后強(qiáng)制關(guān)閉連接。超時(shí)時(shí)間過(guò)長(zhǎng)會(huì)降低 TCP 傳輸?shù)恼w效率。超時(shí)時(shí)間過(guò)短會(huì)導(dǎo)致頻繁的發(fā)送重復(fù)的包。

窗口機(jī)制:概念:每個(gè) TCP 連接的兩端都維護(hù)了一個(gè)發(fā)送窗口和一個(gè)接收窗口。

發(fā)送窗口:發(fā)送方的發(fā)送緩存內(nèi)的數(shù)據(jù)都可以被分為 4 類,其中類型 2 和類型 3 屬于發(fā)送窗口:1 已發(fā)送,已收到 ACK 
 2 已發(fā)送,未收到 ACK 
 3 未發(fā)送,但允許發(fā)送  
 4 未發(fā)送,但不允許發(fā)送
接收窗口:接收方的緩存數(shù)據(jù)分為 3 類,其中類型 2 屬于接收窗口:1 已接收  
 2 未接收但準(zhǔn)備接收  
 3 未接收而且不準(zhǔn)備接收
滑動(dòng)機(jī)制:發(fā)送窗口只有收到發(fā)送窗口內(nèi)字節(jié)的 ACK 確認(rèn)后,才會(huì)移動(dòng)發(fā)送窗口的左邊界。接收窗口只有在前面所有的報(bào)文段都確認(rèn)的情況下才會(huì)移動(dòng)左邊界。若接收窗口前面還有字節(jié)未接收,此時(shí)如果收到后面的字節(jié),則接收窗口不會(huì)移動(dòng),TCP 也不會(huì)對(duì)后面的字節(jié)發(fā)送確認(rèn),發(fā)送方超時(shí)后會(huì)重傳這些數(shù)據(jù)。

流量控制:概念:TCP 根據(jù)接收端對(duì)數(shù)據(jù)的處理能力 (窗口大小字段的值) 來(lái)決定發(fā)送端的發(fā)送速度。過(guò)程:接收端在確認(rèn)應(yīng)答時(shí)發(fā)送 ACK 報(bào)文,ACK 報(bào)文中包含了自己接收窗口的大小,發(fā)送方根據(jù) ACK 報(bào)文里窗口大小的值的來(lái)設(shè)定自己發(fā)送數(shù)據(jù)的速度。若 ACK 報(bào)文中窗口大小的值為 0,那么發(fā)送方將停止發(fā)送數(shù)據(jù),并定期向接收端發(fā)送窗口探測(cè)數(shù)據(jù)段,以便及時(shí)地獲取接收端最新窗口大小的值。

說(shuō)明:如果發(fā)送端發(fā)送的數(shù)據(jù)太快,則接收端的接收緩沖區(qū)很快就會(huì)被填滿,接受端的接收緩存區(qū)被填滿后,發(fā)送端再發(fā)送的數(shù)據(jù)就會(huì)被接收端丟棄,進(jìn)而觸發(fā)發(fā)送端的超時(shí)重傳。

擁塞控制:概念:路由器因無(wú)法處理高速率到達(dá)的流量而被迫丟棄數(shù)據(jù)的現(xiàn)象稱為擁塞。擁塞的原因:當(dāng)路由器在單位時(shí)間內(nèi)接收到的數(shù)據(jù)量大于其可發(fā)送的數(shù)據(jù)量時(shí),路由器就需要把多余的數(shù)據(jù)存儲(chǔ)起來(lái)。若接收到的數(shù)據(jù)量持續(xù)大于可發(fā)送的數(shù)據(jù)量,那么會(huì)耗盡路由器的存儲(chǔ)資源,導(dǎo)致路由器丟棄部分?jǐn)?shù)據(jù)。

原理:發(fā)送方維持一個(gè)擁塞窗口變量 cwnd,擁塞窗口的大小取決于網(wǎng)絡(luò)的擁塞程度,發(fā)送方的發(fā)送窗口大小取   擁塞窗口的大小   和   接收端的接收窗口大小   的較小值,TCP 通過(guò)動(dòng)態(tài)地調(diào)整發(fā)送窗口的大小來(lái)實(shí)現(xiàn)擁塞控制。慢啟動(dòng)機(jī)制:擁塞窗口的初始值為 1,發(fā)送方每次收到 ACK 報(bào)文后,將擁塞窗口的值加 1。慢啟動(dòng)中的 慢,表示剛開始發(fā)送的數(shù)據(jù)少,發(fā)送的速度慢,但是擁塞窗口值的增長(zhǎng)是指數(shù)級(jí)別的增長(zhǎng),故增長(zhǎng)的非常快。當(dāng)擁塞窗口的值達(dá)到閾值時(shí),擁塞窗口值的增長(zhǎng)就改為線性增長(zhǎng)。在慢啟動(dòng)開始的時(shí)候,慢啟動(dòng)的閾值等于窗口的最大值,TCP 一旦發(fā)現(xiàn)網(wǎng)絡(luò)擁塞,慢啟動(dòng)的閾值將會(huì)變?yōu)楫?dāng)前閥值的一半,同時(shí)擁塞窗口重置為 1。

TCP 的可靠性:連接管理:三次揮手四次握手 傳輸數(shù)據(jù):序列號(hào)和確認(rèn)號(hào)機(jī)制 校驗(yàn)和 超時(shí)重傳機(jī)制 流量控制 擁塞控制

常見問(wèn)題:

服務(wù)器返回“RST”的問(wèn)題:分析:服務(wù)器關(guān)閉 connection 后,若客戶端還在 connection 上讀寫,服務(wù)器內(nèi)核接收到數(shù)據(jù)后發(fā)現(xiàn) Socket 已經(jīng) close 了,此時(shí)服務(wù)器會(huì)返回“RST”標(biāo)志給客戶端。說(shuō)明:服務(wù)器返回了“RST”時(shí),若此時(shí)客戶端正在從 Socket 套接字的輸出流中讀數(shù)據(jù)則會(huì)提示 Connection reset”服務(wù)器返回了“RST”時(shí),若此時(shí)客戶端正在往 Socket 套接字的輸入流中寫數(shù)據(jù)則會(huì)提示“Connection reset by peer”

解決:重試。

“TCP 基礎(chǔ)知識(shí)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計(jì)4872字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 隆安县| 育儿| 孟连| 西城区| 双桥区| 嫩江县| 龙州县| 孝昌县| 宾阳县| 行唐县| 河西区| 平顶山市| 额尔古纳市| 婺源县| 时尚| 牙克石市| 泸定县| 丰原市| 郧西县| 甘泉县| 积石山| 凌海市| 随州市| 崇阳县| 东源县| 南木林县| 广灵县| 桦川县| 昌平区| 张掖市| 昭通市| 马尔康县| 门源| 万源市| 贡觉县| 东明县| 高平市| 临夏市| 阿拉善左旗| 河北区| 兴安县|