首頁 運維干貨Linux運維常見網絡部分面試題庫

Linux運維常見網絡部分面試題庫

運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

一、TCP/IP面試題庫

1.1 為什么連接的時候是三次握手,關閉的時候卻是四次握手?

答:因為當Server端收到Client端的SYN連接請求報文后,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當Server端收到FIN報文時,很可能并不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,”你發的FIN報文我收到了”。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。故需要四步握手。

1.2 為什么TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態?

MSL(MaximumSegment Lifetime),TCP允許不同的實現可以設置不同的MSL值。第一,保證客戶端發送的最后一個ACK報文能夠到達服務器,因為這個ACK報文可能丟失,站在服務器的角度看來,我已經發送了FIN+ACK報文請求斷開了,客戶端還沒有給我回應,應該是我發送的請求斷開報文它沒有收到,于是服務器又會重新發送一次,而客戶端就能在這個2MSL時間段內收到這個重傳的報文,接著給出回應報文,并且會重啟2MSL計時器。第二,防止類似與“三次握手”中提到了的“已經失效的連接請求報文段”出現在本連接中??蛻舳税l送完最后一個確認報文后,在這個2MSL時間中,就可以使本連接持續的時間內所產生的所有報文段都從網絡中消失。這樣新的連接中不會出現舊連接的請求報文。

1.3 為什么建立連接是三次握手,關閉連接確是四次揮手呢?

建立連接的時候,服務器在LISTEN狀態下,收到建立連接請求的SYN報文后,把ACK和SYN放在一個報文里發送給客戶端。而關閉連接時,服務器收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,而自己也未必全部數據都發送給對方了,所以己方可以立即關閉,也可以發送一些數據給對方后,再發送FIN報文給對方來表示同意現在關閉連接,因此,己方ACK和FIN一般都會分開發送,從而導致多了一次。

1.4 為什么不能用兩次握手進行連接?

答:3次握手完成兩個重要的功能,既要雙方做好發送數據的準備工作(雙方都知道彼此已準備好),也要允許雙方就初始序列號進行協商,這個序列號在握手過程中被發送和確認?,F在把三次握手改成僅需要兩次握手,死鎖是可能發生的。作為例子,考慮計算機S和C之間的通信,假定C給S發送一個連接請求分組,S收到了這個分組,并發送了確認應答分組。按照兩次握手的協定,S認為連接已經成功地建立了,可以開始發送數據分組??墒?,C在S的應答分組在傳輸中被丟失的情況下,將不知道S是否已準備好,不知道S建立什么樣的序列號,C甚至懷疑S是否收到自己的連接請求分組。在這種情況下,C認為連接還未建立成功,將忽略S發來的任何數據分組,只等待連接確認應答分組。而S在發出的分組超時后,重復發送同樣的分組。這樣就形成了死鎖。

1.5 如果已經建立了連接,但是客戶端突然出現故障了怎么辦?

TCP還設有一個?;钣嫊r器,顯然,客戶端如果出現故障,服務器不能一直等下去,白白浪費資源。服務器每收到一次客戶端的請求后都會重新復位這個計時器,時間通常是設置為2小時,若兩小時還沒有收到客戶端的任何數據,服務器就會發送一個探測報文段,以后每隔75分鐘發送一次。若一連發送10個探測報文仍然沒反應,服務器就認為客戶端出了故障,接著就關閉連接。

1.6 為什么要三次握手?

保證可靠的核心就是雙方都需要確認自己發送和接受信息的功能正常,但因為網絡環境的不穩定性,這一秒能收發下一秒可能網絡核心就發生嚴重擁塞,所以世界上不存在完全可靠的通信協議.兩次握手會怎樣?若建立連接只需兩次握手,客戶端并沒有太大的變化,在獲得服務端的應答后進入ESTABLISHED狀態,即確認自己的發送和接受信息的功能正常.但如果服務端在收到連接請求后就進入ESTABLISHED狀態,不能保證客戶端能收到自己的信息,此時如果網絡擁塞,客戶端發送的連接請求遲遲到不了服務端,客戶端便超時重發請求,如果服務端正確接收并確認應答,雙方便開始通信,通信結束后釋放連接。此時,如果那個失效的連接請求抵達了服務端,由于只有兩次握手,服務端收到請求就會進入ESTABLISHED狀態,等待發送數據或主動發送數據。但此時的客戶端早已進入CLOSED狀態,服務端將會一直等待下去,這樣浪費服務端連接資源。

1.7 為什么要四次揮手?

TCP連接的釋放一共需要四步,因此稱為『四次揮手』.我們知道,TCP連接是雙向的,因此在四次揮手中,前兩次揮手用于斷開一個方向的連接,后兩次揮手用于斷開另一方向的連接。

  • 第一次揮手:若A認為數據發送完成,則它需要向B發送連接釋放請求.該請求只有報文頭,頭中攜帶的主要參數為:FIN=1,seq=u.此時,A將進入FIN-WAIT-1狀態。1,FIN=1表示該報文段是一個連接釋放請求. 2,seq=u,u-1是A向B發送的最后一個字節的序號.
  • 第二次揮手:B收到連接釋放請求后,會通知相應的應用程序,告訴它A向B這個方向的連接已經釋放.此時B進入CLOSE-WAIT狀態,并向A發送連接釋放的應答,其報文頭包含:ACK=1,seq=v,ack=u+1.
    • ACK=1:除TCP連接請求報文段以外,TCP通信過程中所有數據報的ACK都為1,表示應答.
    • 1,seq=v,v-1是B向A發送的最后一個字節的序號.
    • 2,ack=u+1表示希望收到從第u+1個字節開始的報文段,并且已經成功接收了前u個字節.A收到該應答,進入FIN-WAIT-2狀態,等待B發送連接釋放請求.
    • 第二次揮手完成后,A到B方向的連接已經釋放,B不會再接收數據,A也不會再發送數據。但B到A方向的連接仍然存在,B可以繼續向A發送數據。
  • 第三次揮手:當B向A發完所有數據后,向A發送連接釋放請求,請求頭中包含:FIN=1,ACK=1,seq=w,ack=u+1.隨后B進入LAST-ACK狀態.
  • 第四次揮手:A收到釋放請求后,向B發送確認應答,此時A進入TIME-WAIT狀態.該狀態會持續2MSL時間,若該時間段內沒有B的重發請求的話,就進入CLOSED狀態,撤銷TCB.當B收到確認應答后,也便進入CLOSED狀態,撤銷TCB。

1.8 為什么TCP客戶端最后還要發送一次確認呢?

一句話,主要防止已經失效的連接請求報文突然又傳送到了服務器,從而產生錯誤。如果使用的是兩次握手建立連接,假設有這樣一種場景,客戶端發送了第一個請求連接并且沒有丟失,只是因為在網絡結點中滯留的時間太長了,由于TCP的客戶端遲遲沒有收到確認報文,以為服務器沒有收到,此時重新向服務器發送這條報文,此后客戶端和服務器經過兩次握手完成連接,傳輸數據,然后關閉連接。此時此前滯留的那一次請求連接,網絡通暢了到達了服務器,這個報文本該是失效的,但是,兩次握手的機制將會讓客戶端和服務器再次建立連接,這將導致不必要的錯誤和資源的浪費。如果采用的是三次握手,就算是那一次失效的報文傳送過來了,服務端接受到了那條失效報文并且回復了確認報文,但是客戶端不會再次發出確認。由于服務器收不到確認,就知道客戶端并沒有請求連接。

本文鏈接:http://www.royaladd.com/43138.html

網友評論comments

發表回復

您的電子郵箱地址不會被公開。

暫無評論

Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
掃二維碼
掃二維碼
返回頂部
欧美激情视频一区二区|国产精品毛片va一区二区|999国内精品永久免费|国产无码sm视频在线观看