1. 程式人生 > >計算機網路面試一些問題,個人理解

計算機網路面試一些問題,個人理解

# 三次握手和四次揮手

定義或者說想要解決的問題:源主機想要與目的主機進行cp連線時,需要三次握手過程才能建立連線。源主機在與目的主機建立連線後,想要斷開連線就需要四次揮手的過程。

-------

詳細過程:三次握手:首先源主機需要通過socket傳送一個SYN(SYN置1,synchronization,同步)報文給目的主機,相當於發出建立tcp連線的請求,SYN報文在經過網路傳輸到目的主機後,目的主機對該報文進行解析,發現是SYN報文,若允許建立連線,則向源主機發送SYNACK(SYN置1,ACK置1,acknowledgement,確認)報文,即確認SYN報文。源主機接收到回覆的SYNACK報文後,明白目的主機允許建立連線,此時需要向目的主機發送確認報文的確認報文,表示成功接收到了目的主機的回覆。在目的主機接收到這個確認報文後,連線建立。

-------

四次揮手:源主機的所有資料傳輸完畢之後,想要與目的主機斷開連線,此時首先需要傳送一個FIN(FIN置1,finalization,結束)報文到目的主機,此時源主機處於FIN_WAIT1的狀態。目的主機接收到該報文後,若還有待發送的資料,則向源主機發送正常的資料包(ACK置1,表示確認接收),源主機接收到這些資料後,處於FIN_WAIT2狀態。在傳輸完這些資料後,等待一段時間,這一段時間目的主機為CLOSED_WAIT狀態,然後再向源主機發送FIN報文,此時目的主機處於LAST_ACK狀態。源主機接收到該報文後,向目的主機發送一個ACK報文,同時進入TIME_WAIT的狀態,此狀態大概維持2MSL(Maximum Segment LIfet,最大報文生存時間),該狀態主要的作用是:如果目的主機沒有接收到該確認報文,又重新發送了FIN報文,可以保證源主機正確傳送ACK,而不是直接進入CLosed

狀態所傳送的RST(reset)報文,TIME_WAIT持續約2min後進入Closed狀態。目的主機在接收到最後的ACK報文之後,進入Closed狀態。