天天看點

徹徹底底了解三次握手四次揮手(視訊講解)

今天來徹底講講計算機網絡中必考的知識點–三次握手,四次揮手。總結了所有的考點。後面有視訊歐。

三次握手

徹徹底底了解三次握手四次揮手(視訊講解)

四次揮手

徹徹底底了解三次握手四次揮手(視訊講解)

專有名詞講解

SYN:(連接配接建立時用于同步序号SYN這個标志位隻有在TCP建立連接配接才會被置為1,握手完成後SYN标志位被置為0)

seq:(标記資料段的順序,就是這個封包段中的第一個位元組的資料編号)

ACK:(确認号,僅當ACK=1,确認号字段才有效。ACK=0,确認号無效)

ack:(期待收到對方下一個封包段的第一個資料位元組的序号)

MSL:(最大封包生存時間)

FIN:(用來釋放一個連接配接)

1 為什麼是三次握手(一次兩次行不行)

一次握手:肯定建立不了連接配接,因為沒法判定是否發送成功。

兩次握手:當A想要建立連接配接時發送一個SYN,然後等待ACK,結果這個SYN因為網絡問題沒有及時到達B,是以A在一段時間内沒收到ACK後,再發送一個SYN,這次B順利收到,接着A也收到ACK,這時A發送的。第一個SYN終于到了B(網絡延遲),對于B來說這是一個新連接配接請求,然後B又為這個連接配接申請資源,傳回ACK,然而這個SYN是個無效的請求,A收到這個SYN的ACK後也并不會理會它,而B卻不知道,B會一直為這個連接配接維持着資源,造成資源的浪費。

三次握手:可以保證任何一次握手的失敗都是可感覺的,不會浪費資源。

四次握手:沒有必要,三次足矣。

2 如果已經建立了連接配接,但是用戶端突然出現故障了怎麼辦

用戶端如果出現故障,伺服器不能一直等下去,白白浪費資源。伺服器每收到一次用戶端的請求後都會重新複位這個計時器,時間通常是設定為2小時,若兩小時還沒有收到用戶端的任何資料,伺服器就會發送一個探測封包段,以後每隔75秒鐘發送一次。若一連發送10個探測封包仍然沒反應,伺服器就認為用戶端出了故障,接着就關閉連接配接。

3 Client發送一個SYN包給Server後就挂了,這個時候這個連接配接處于什麼狀态呢

Client發送SYN包給Server後挂了,Server回給Client的SYN-ACK一直沒收到Client的ACK确認,這個時候這個連接配接既沒建立起來這就會設定一個逾時時間讓Server将這個連接配接斷開,否則這個連接配接就會一直占用Server的SYN連接配接隊列中的一個位置,大量這樣的連接配接就會将Server的SYN連接配接隊列耗盡,讓正常的連接配接無法得到處理。,Linux下預設會進行5次重發SYN-ACK包,重試的間隔時間從1s開始,下次的重試間隔時間是前一次的雙倍,5次的重試時間間隔為1s, 2s, 4s, 8s, 16s,總共31s,第5次發出後還要等32s都知道第5次也逾時了,是以,總共需要 1s + 2s + 4s+ 8s+ 16s + 32s = 63s,TCP才會把斷開這個連接配接。

4 三次握手帶來的危害

由于,SYN逾時需要63秒,那麼就給攻擊者一個攻擊伺服器的機會,攻擊者在短時間内發送大量的SYN包給Server(俗稱 SYN flood 攻擊),用于耗盡Server的SYN隊列。

5 為什麼需要四次揮手,三次揮手可以嗎

TCP連接配接是雙向傳輸的對等的模式,就是說雙方都可以同時向對方發送或接收資料。當有一方要關閉連接配接時,會發送指令告知對方,我要關閉連接配接了。這時對方會回一個ACK,此時一個方向的連接配接關閉。但是另一個方向仍然可以繼續傳輸資料,等到發送完了所有的資料後,會發送一個FIN段來關閉此方向上的連接配接。 接收方發送ACK确認關閉連接配接。注意,接收到FIN封包的一方隻能回複一個ACK, **它是無法馬上傳回對方一個FIN封包段的,**因為結束資料傳輸的“指令”是上層應用層給出的,我隻是一個“搬運工”,我無法了解“上層的意志”。

6 為什麼Time_wait(2MSL)

2MSL是任何封包在網絡上的存在的最長時間,超過這個時間封包将被丢棄。這裡的2MSL是時間等待計時器設定的。

2MSL可以使本連接配接持續的時間内所産生的所有封包段都從網絡中消失。 這樣就可以使不一個新的連接配接中不會出現這種舊的連接配接請求封包段。

如果小于2MSL,第一個連接配接結束,第二個擁有相同的連接配接出現,而第一個連接配接的重複封包出現,幹擾第二個連接配接。就會出現某個連接配接的重複封包在連接配接終止後出現。

7 關閉連接配接時最後一個ACK丢失了怎麼辦

如果最後一個ACK丢失的話,TCP就會認為它的FIN丢失,進行重發FIN。在用戶端收到FIN後,就會設定一個2MSL計時器,2ML計時器可以使客戶等待足夠長的時間,**使得在ACK丢失的情況下可以等到下一個FIN的到來。**如果在TIME一WAIT狀态中有一個新的FIN到達了,客戶就會發送一個新的ACK,并重新設定2MSL計時器。

如果重傳FIN到達用戶端時,用戶端已經進入 CLOSED狀态時,那麼客戶就永遠收不到這個重傳的FN封包段, 伺服器收不到ACK,伺服器無法關閉連接配接。

8 如果網絡連接配接中出現大量TIME_WAIT狀态會有什麼危害

如果系統中有很多socket處于TIME_WAT狀态,當需要建立新的 socket連接配接的時可能會受到影響,這也會影響到系統的擴充性。之是以TIME_WAIT能夠影響系統的擴充性是因為在一個TCP連接配接中,一個Socket如果關閉的話,它将保持TIME_WAIT狀态大約1-4分鐘。 如果很多連接配接快速的打開和關閉的話系統中處于TIME_WAIT狀态的socket将會積累很多,由于本地端口數量的限制,同一時間隻有有限數量的 socket連接配接可以建立,如果太多的socket處于TIME_WAT狀态你會發現,由于用于建立連接配接的本地端口太缺乏将會很難再建立新的。

視訊版本位址https://mp.weixin.qq.com/s/Pw8v6sZy95DV_TQkS5Llbg

視訊Bz原址https://www.bilibili.com/video/BV1hK4y1W7NP?pop_share=1

原傷口試複習圖(點選菜單擷取)

徹徹底底了解三次握手四次揮手(視訊講解)
徹徹底底了解三次握手四次揮手(視訊講解)
徹徹底底了解三次握手四次揮手(視訊講解)

繼續閱讀