21. 今天 10.10 阿里雲筆試@土豆:
1、三次握手;
2、死鎖的條件。
解答:
在tcp/ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。
1、第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀態,等待伺服器確認;
2、第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器 進入syn_recv狀態;
3、第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入 established狀態,完成三次握手。
通過這樣的三次握手,客戶端與服務端建立起可靠的雙工的連線,開始傳送資料。
三次握手的最主要目的是保證連線是雙工的,可靠更多的是通過重傳機制來保證的。 **
但是為什麼一定要進行三次握手來保證連線是雙工的呢,一次不行麼?兩次不行麼?我們舉乙個現實生活中兩個人進行語言溝通的例子來模擬三次握手。
第一次對話:
老婆讓甲出去打醬油,半路碰到乙個朋友乙,甲問了一句:哥們你吃飯了麼?
結果乙帶著耳機聽歌呢,根本沒聽到,沒反應。甲心裡想:跟你說話也沒個音,不跟你說了,溝通失敗。說明乙接受不到甲傳過來的資訊的情況下溝通肯定是失敗的。
如果乙聽到了甲說的話,那麼第一次對話成功,接下來進行第二次對話。
第二次對話:
乙聽到了甲說的話,但是他是老外,中文不好,不知道甲說的啥意思也不知道怎樣回答,於是隨便回答了一句學過的中文 :我去廁所了。甲一聽立刻笑噴了,「去廁所吃飯」?道不同不相為謀,離你遠點吧,溝通失敗。說明乙無法做出正確應答的情況下溝通失敗。
如果乙聽到了甲的話,做出了正確的應答,並且還進行了反問:我吃飯了,你呢?那麼第二次握手成功。
通過前兩次對話證明了乙能夠聽懂甲說的話,並且能做出正確的應答。接下來進行第三次對話。
第三次對話:
甲剛和乙打了個招呼,突然老婆喊他,「你個死鬼,打個醬油咋這麼半天,看我回家咋收拾你」,甲是個妻管嚴,聽完嚇得二話不說就跑回家了,把乙自己晾那了。乙心想:這什麼人啊,得,我也回家吧,溝通失敗。說明甲無法做出應答的情況下溝通失敗。
如果甲也做出了正確的應答:我也吃了。那麼第三次對話成功,兩人已經建立起了順暢的溝通渠道,接下來開始持續的聊天。
通過第二次和第三次的對話證明了甲能夠聽懂乙說的話,並且能做出正確的應答。
可見,兩個人進行有效的語言溝通,這三次對話的過程是必須的。
同理對於tcp為什麼需要進行三次握手我們可以一樣的理解:
為了保證服務端能收接受到客戶端的資訊並能做出正確的應答而進行前兩次(第一次和第二次)握手,為了保證客戶端能夠接收到服務端的資訊並能做出正確的應答而進行後兩次(第二次和第三次)握手。
互斥條件(mutual exclusion) :
1、資源不能被共享,只能由乙個程序使用。
2、請求與保持條件(hold and wait):已經得到資源的程序可以再次申請新的資源。
3、非剝奪條件(no pre-emption):已經分配的資源不能從相應的程序中被強制地剝奪。
4、迴圈等待條件(circular wait):系統中若干程序組成環路,該環路中每個程序都在等待相鄰程序正占用的資源。
處理死鎖的策略:
1.忽略該問題。例如鴕鳥演算法,該演算法可以應用在極少發生死鎖的的情況下。
為什麼叫鴕鳥演算法呢,因為傳說中鴕鳥看到危險就把頭埋在地底下,可能鴕鳥覺得看不到危險也就沒危險了吧。跟掩耳盜鈴有點像。
2.檢測死鎖並且恢復。
3.仔細地對資源進行動態分配,以避免死鎖。
4.通過破除死鎖四個必要條件之一,來防止死鎖產生。
tcp三次握手 TCP 三次握手總結
tcp特點概述 tcp segment structure 段結構 step2 server host receives syn,replie with syn ack segment 答覆syn ack報文段 step3 client receives synack,replies with ac...
TCP三次握手四次揮手以及死鎖
tcp和udp都屬於傳輸層協議 第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn sent狀態,等待伺服器確認 syn 同步序列編號 synchronize sequence numbers 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己...
tcp的三次握手 傳輸層 TCP 三次握手
使用tcp協議進行通訊的雙方必須先建立連線,然後才能開始傳輸資料。為了確保連線雙方可靠性,在雙方建立連線時,tcp協議採用了三次握手策略。如圖 客戶端傳送帶有syn標誌的連線請求報文段,然後進入syn send狀態,等待服務端的確認。服務端接收到客戶端的syn報文段後,需要傳送ack資訊對這個syn...