當前位置:首頁 » 網路連接 » 計算機網路簡答題三次握手
擴展閱讀
農行移動網路授權 2024-10-23 19:59:07

計算機網路簡答題三次握手

發布時間: 2024-06-20 06:49:16

計算機網路什麼叫「三次握手」

TCP/IP是很多的不同的協議組成,實際上是一個協議組,TCP用戶數據報表協議(也稱作TCP傳輸控制協議,Transport Control Protocol。可靠的主機到主機層協議。這里要先強調一下,傳輸控制協議是OSI網路的第四層的叫法,TCP傳輸控制協議是TCP/IP傳輸的6個基本協議的一種。兩個TCP意思非相同。 )。TCP是一種可靠的面向連接的傳送服務。它在傳送數據時是分段進行的,主機交換數據必須建立一個會話。它用比特流通信,即數據被作為無結構的位元組流。 通過每個TCP傳輸的欄位指定順序號,以獲得可靠性。是在OSI參考模型中的第四層,TCP是使用IP的網間互聯功能而提供可靠的數據傳輸,IP不停的把報文放到 網路上,而TCP是負責確信報文到達。在協同IP的操作中TCP負責:握手過程、報文管理、流量控制、錯誤檢測和處理(控制),可以根據一定的編號順序對非正常順序的報文給予從新排列順序。關於TCP的RFC文檔有RFC793、RFC791、RFC1700。

在TCP會話初期,有所謂的「三握手」:對每次發送的數據量是怎樣跟蹤進行協商使數據段的發送和接收同步,根據所接收到的數據量而確定的數據確認數及數據發送、接收完畢後何時撤消聯系,並建立虛連接。為了提供可靠的傳送,TCP在發送新的數據之前,以特定的順序將數據包的序號,並需要這些包傳送給目標機之後的確認消息。TCP總是用來發送大批量的數據。當應用程序在收到數據後要做出確認時也要用到TCP。由於TCP需要時刻跟蹤,這需要額外開銷,使得TCP的格式有些顯得復雜

㈡ 計算機網路——TCP三次握手四次揮手

用戶進程和伺服器進程需要完成一次通信都需要完成 三個階段 : 連接建立、數據傳送、連接釋放

參考:三次握手和四次揮手

首先先明確幾個概念:

序列號seq(4B) :用來標記數據段的順序,TCP把連接中發送的所有數據位元組都編上一個序號,第一個位元組的編號由本地隨機產生,給位元組編上序號後,就給每一個報文段指派一個序號, 序列號seq就是這個報文段中的第一個位元組的數據編號 。

確認號ack(4B) : 期待收到對方下一個報文段的第一個數據位元組的序號 ,序列號表示報文段攜帶數據的第一個位元組的編號,而確認號指的是期望接受到下一個位元組的編號,因此擋牆報文段最後一個位元組的編號+1即是確認號。

確認ACK(1bit) :僅當ACK=1,確認號欄位才有效。ACK=0,確認號無效。

同步SYN : 連接建立時 用於同步序號。SYN=1表示這是一個連接請求,或連接接收報文,SYN這個標志位只有在TCP建立連接才會被置為1,握手完成後SYN標志位被置為0.當SYN=1,ACK=0表示:這是一個連接請求報文段。若同意連接,則在響應報文段中使用SYN=1,ACK=1

終止FIN :用來釋放一個連接。

B的TCP伺服器進程先創建傳輸控制塊TCB,准備接受客戶進程的連接請求。然後伺服器進程就處於LISTEN(收聽)狀態,等待客戶的連接請求。若有,則作出響應。

1)第一次握手:A首先向B發一個SYN (Synchronize) 標記的包,告訴B請求建立連接,一個 SYN包就是僅SYN標記設為1的TCP包(參見TCP包頭Resources), SYN=1的報文段不能攜帶數據 ,但要 消耗掉一個序號, 此時TCP客戶進程進入SYN-SENT(同步已發送)狀態。

2)第二次握手:B收到後會發一個對SYN包的確認包(SYN/ACK)回去,表示對第一個SYN包的確認,並繼續握手操作.注意: SYN/ACK包是僅SYN 和 ACK 標記為1的包。在確認報文段中,測試TCP伺服器進程進入SYN-RCVD(同步收到)狀態;

3)第三次握手:TCP客戶進程收到B的確認後,要向B給出確認報文段,ACK報文段可以攜帶數據,不攜帶數據則不消耗序號。TCP連接已經建立,A進入ESTABLISHED(已建立連接)。

當B收到A的確認後,也進入建立連接狀態。

序列號和確認號的關系:

第一次握手序列號seq=x;

第二次握手序列號seq=y,確認號ack=x+1;

第三次握手序列號seq=x+1,確認號ack=y+1;

序列號seq是上一次的確認號,而確認號是上一次的序列號+1;這是因為SYN=1的報文段不能攜帶數據,但要消耗掉一個序號,所以下一個報文段要+1;

為了防止已經失效的連接請求報文段突然又傳到服務端,因而產生錯誤」,這種情況是:一端(client)A發出去的第一個連接請求報文並沒有丟失,而是因為某些未知的原因在某個網路節點上發生滯留,導致延遲到連接釋放以後的某個時間才到達另一端(server)B。本來這是一個早已失效的報文段,但是B收到此失效的報文之後,會誤認為是A再次發出的一個新的連接請求,於是B端就向A又發出確認報文,表示同意建立連接。如果不採用「三次握手」,那麼只要B端發出確認報文就會認為新的連接已經建立了,但是A端並沒有發出建立連接的請求,因此不會去向B端發送數據,B端沒有收到數據就會一直等待,這樣B端就會白白浪費掉很多資源。如果採用「三次握手」的話就不會出現這種情況,B端收到一個過時失效的報文段之後,向A端發出確認,此時A並沒有要求建立連接,所以就不會向B端發送確認,這個時候B端也能夠知道連接沒有建立。(知乎上對上面的解釋的評論:這個解答不是問題的本質,這個課本很多知識比較片面。問題的核心在於保證信道數據傳輸的可靠性,避免資源浪費僅僅是一個小的弱原因,不重要。) 

從客戶端到服務端釋放連接的過程中,需要四次報文傳輸。

TCP四次揮手過程

1)A的應用進程先向其TCP發出連接釋放報文段(FIN=1,序號seq=u),並停止再發送數據,主動關閉TCP連接,進入FIN-WAIT-1(終止等待1)狀態,等待B的確認。

2)B收到連接釋放報文段後即發出確認報文段,(ACK=1,確認號ack=u+1,序號seq=v),B進入CLOSE-WAIT(關閉等待)狀態,此時的TCP處於半關閉狀態,A到B的連接釋放。

3)A收到B的確認後,進入FIN-WAIT-2(終止等待2)狀態,等待B發出的連接釋放報文段。

4)B沒有要向A發出的數據,B發出連接釋放報文段(FIN=1,ACK=1,序號seq=w,確認號ack=u+1),B進入LAST-ACK(最後確認)狀態,等待A的確認。

5)A收到B的連接釋放報文段後,對此發出確認報文段(ACK=1,seq=u+1,ack=w+1),A進入TIME-WAIT(時間等待)狀態。此時TCP未釋放掉,需要經過時間等待計時器設置的時間2MSL後,A才進入CLOSED狀態。

大概就是A和B:

A:「我不和你說話了」

B:「知道了」

此時A單方面不和B說話,當B也沒有話對A說的時候

B:「我也不和你說話了」

A:「好的」

兩個人互相不說話了

TCP四次揮手總結

客戶端發送FIN後,進入終止等待狀態,伺服器收到客戶端連接釋放報文段後,就立即給客戶端發送確認,伺服器就進入CLOSE_WAIT狀態,此時TCP伺服器進程就通知高層應用進程,因而從客戶端到伺服器的連接就釋放了。此時是「半關閉狀態」,即客戶端不可以發送給伺服器,伺服器可以發送給客戶端。

此時,如果伺服器沒有數據報發送給客戶端,其應用程序就通知TCP釋放連接,然後發送給客戶端連接釋放數據報,並等待確認。客戶端發送確認後,進入TIME_WAIT狀態,但是此時TCP連接還沒有釋放,然後經過等待計時器設置的2MSL後,才進入到CLOSE狀態。

㈢ 三次握手機制用於解決什麼

用於解決網路中出現重復請求報文的問題。

第一次:首先A發送一個(SYN)到B,意思是A要和B建立連接進行通信,如果是只有一次握手,這樣肯定是不行的,A壓根都不知道B是不是收到了這個請求。

第二次:B收到A要建立連接的請求之後,發送一個確認(SYN+ACK)給A,意思是收到A的消息了,B這里也是通的,表示可以建立連接。如果只有兩次通信,這時候B不確定A是否收到了確認消息,有可能這個確認消息由於某些原因丟了。

第三次:A如果收到了B的確認消息之後,再發出一個確認(ACK)消息,意思是告訴B,這邊是通的,然後A和B就可以建立連接相互通信了。

(3)計算機網路簡答題三次握手擴展閱讀:

注意事項:

剛接觸網路編程時,感覺網路連接的建立、網路數據的收發、網路連接的斷開這些操作僅僅是調用幾個socket AIP就可以搞定的事情,跟網路中講述的TCP三次握手等內容完全扯不上關系。

listen函數:內核為任何一個給定的套接字維護兩個隊列 1.未完成連接狀態(客戶端發送的第一個SYN已經到伺服器,伺服器等待TCP三次握手完成,這些套接字處於SYN_RCVD狀態)。