1. 程式人生 > >計算機網路常見面試題整理

計算機網路常見面試題整理

1、TCP三次握手、四次分手。

TCP三次握手:

    假設主機A為客戶端,主機B為伺服器端。

  • 三次握手的過程:主機A向主機B傳送連線請求,主機B對收到的主機A的報文段進行確認,主機A再次對主機B的確認進行確認。
  • 目的:為了防止已經失效的連線請求報文段突然又傳到伺服器端,因而產生錯誤。《計算機網路》例子:A向B傳送的連線請求SYN報文段滯留在網路中的某處。於是A超時重傳,與B建立了TCP連線,交換了資料,最後也釋放了TCP連線。但滯留在網路中某處的陳舊的SYN報文段,現在突然傳送到B了。如果不使用三次握手,那麼B就以為A現在再次建立TCP連線,於是就分配資源,等待A傳送資料。但A並沒有想要建立TCP連線,也不會向B傳送資料,B就白白等待A傳送資料。浪費了資源。

TCP四次握手:

  • 四次握手過程:主機A向主機B傳送關閉請求,主機B對收到的主機A的報文段進行確認,主機B向主機A傳送關閉請求,主機A對收到的主機B的報文段進行確認。

為什麼建立連線是三次握手,而關閉連線卻是四次揮手?

  • 這是因為服務端在LISTEN狀態下,收到建立連線請求的SYN報文後,把ACK和SYN放在一個報文裡傳送給客戶端。

2、TCP/IP的流量控制?

使用滑動視窗實現流量控制,如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。是一種端到端的控制。

主要方式:返回的ACK中會包含自己的接收視窗的大小,並且利用大小來控制傳送方的資料傳送。

1) 1位元滑動視窗協議

當傳送視窗和接收和接收視窗固定為1時,滑動視窗協議退化為停等協議。該協議規定傳送方每傳送一幀後就要停下來,等待接收方已正確接收的確認返回後 才能繼續傳送下一幀。

2)後退n協議

傳送方在發完一個數據幀後,不停下來等待應答幀,而是連續傳送若干個資料幀,即使在連續傳送過程中受到了接收方發來的應答幀,也可以繼續傳送。且傳送方在每傳送完一個數據幀時都要設定超時定時器。只要在所設定的超時時間內仍收到確認幀,就要重發相應的資料幀以及之後的所有幀。

接收方若發現錯誤幀就不再接收後續的幀,即使是正確到達的幀。這顯然是一種浪費。

3)選擇重傳協議

在後退n幀協議基礎上改進,當接收方發現某幀出錯後,其後繼續送來的正確的幀雖然不能立即遞交給高層,但接收方仍可接收下來,存放在一個緩衝區中,同時要求傳送方重新傳送出錯的那一幀。一旦收到重新傳來的幀後,就可以將緩衝區中其餘幀一併按正確的順序遞交高層。

選擇重發減少了浪費,但要求接收方有足夠大的緩衝區空間。

3、TCP擁塞控制?

防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不止於過載。

主要方式:1)慢開始、擁塞避免  2)快重傳、快恢復

傳送方維持一個叫做擁塞視窗的狀態變數。擁塞視窗的大小取決於網路的擁塞程度,並且動態地在變化。傳送方讓自己的傳送視窗等於擁塞視窗,另外考慮到接收方的接收能力,傳送視窗可能小於擁塞視窗。

慢開始演算法就是:先探測一下,由小到大逐漸增大發送視窗,也就是說,由小到大逐漸增大擁塞視窗數值。通常在剛剛開始傳送報文段時,先把擁塞視窗cwnd設定為一個最大報文段MSS數值。而在每收到一個對新的報文段的確認後,把擁塞視窗增加至多一個MSS的數值。用這樣的方法逐步增大發送方擁塞視窗cwnd,可以使分組注入到網路的速率更加合理。(指數增長)

擁塞避免演算法就是:每經過一個往返時間RTT就把傳送方的擁塞視窗+1,即讓擁塞視窗緩慢地增大,按照線性規律增長。當出現網路擁塞,比如丟包時,將慢開始門限設為原先的一半,然後將cwnd設為1,執行慢開始演算法。

擁塞視窗cwnd和慢開始門限ssthresh狀態變數的關係如下:

  • 當cwnd<ssthresh時,使用上述的慢開始演算法。
  • 當cwnd>ssthresh時,停止使用慢開始演算法而改用擁塞避免演算法。
  • 當cwnd=ssthresh時,即可使用慢開始演算法,也可使用擁塞控制避免演算法。

快重傳的機制是:接收方如果發現一個包丟失,則對後續的包繼續傳送針對該包的重傳請求;一旦傳送方接收到三個一樣的確認,就知道該包之後出現了錯誤,立刻重傳該包;此時傳送方開始執行“快恢復”演算法:a.慢開始門限減半;b.cwnd設為慢開始門限減半後的數值;c.執行擁塞避免演算法(線性增長)

當rwnd<cwnd時,是接收方的接收能力限制傳送方視窗的最大值。

當cwnd<rwnd時,則是網路的擁塞限制傳送方視窗的最大值。

擁塞控制並非可以避免擁塞,而是將擁塞視窗控制為按線性規律增長,使網路比較不容易出現擁塞。