1. 程式人生 > 其它 >第十一屆藍橋杯 國賽B.含 2 天數

第十一屆藍橋杯 國賽B.含 2 天數

一、三次握手講解

  1. 客戶端傳送位碼為syn=1,隨機產生seq number=1234567的資料包到伺服器,伺服器由SYN=1知道客戶端要求建立聯機(客戶端:我要連線你)
  2. 伺服器收到請求後要確認聯機資訊,向A傳送ack number=(客戶端的seq+1),syn=1,ack=1,隨機產生seq=7654321的包(伺服器:好的,你來連吧)
  3. 客戶端收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,客戶端會再發送ack number=(伺服器的seq+1),ack=1,伺服器收到後確認seq值與ack=1則連線建立成功。(客戶端:好的,我來了)

二、為什麼http建立連線需要三次握手,不是兩次或四次?

答:三次是最少的安全次數,兩次不安全,四次浪費資源;

三、TCP關閉連線過程

  1. Client向Server傳送FIN包,表示Client主動要關閉連線,然後進入FIN_WAIT_1狀態,等待Server返回ACK包。此後Client不能再向Server傳送資料,但能讀取資料。

  2. Server收到FIN包後向Client傳送ACK包,然後進入CLOSE_WAIT狀態,此後Server不能再讀取資料,但可以繼續向Client傳送資料。

  3. Client收到Server返回的ACK包後進入FIN_WAIT_2狀態,等待Server傳送FIN包。

  4. Server完成資料的傳送後,將FIN包傳送給Client,然後進入LAST_ACK狀態,等待Client返回ACK包,此後Server既不能讀取資料,也不能傳送資料。

  5. Client收到FIN包後向Server傳送ACK包,然後進入TIME_WAIT狀態,接著等待足夠長的時間(2MSL)以確保Server接收到ACK包,最後回到CLOSED狀態,釋放網路資源。

  6. Server收到Client返回的ACK包後便回到CLOSED狀態,釋放網路資源。

四、為什麼要四次揮手?

TCP是全雙工通道,何為全雙工就是客戶端與服務端建立兩條通道,通道1:客戶端的輸出連線服務端的輸入;通道2:客戶端的輸入連線服務端的輸出。兩個通道可以同時工作:客戶端向服務端傳送訊號的同時服務端也可以向客戶端傳送訊號。所以關閉雙通道的時候就是這樣:

客戶端:我要關閉輸入通道了。
服務端:好的,你關閉吧,我這邊也關閉這個通道。

服務端:我也要關閉輸入通道了。
客戶端:好的你關閉吧,我也把這個通道關閉。