面試經典問題 TCP連線經典問題

2021-08-29 16:14:09 字數 1384 閱讀 5892

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

因為服務端的listen狀態下的socket當收到syn報文的連線請求後,它可以把ack和syn(ack起應答作用,syn同步作用)放在乙個報文中傳送。但關閉連線時,當收到對方的fin報文時,僅僅表示對方想要斷開連線,但未必你想,因為不會馬上關閉socket,因此過段時間再傳送fin報文給對方表示斷開連線。因此ack和fin是分開傳送的。

2.為什麼time_wait狀態還需要等2msl才能返回closed狀態?

(1)可靠的實現tcp全雙工連線的終止

我們要假想網路是不可靠的,無法保證最後傳送的ack報文一定會被對方收到,因此對方可能會因為超時未收到ack,因此這個time_wait狀態的作用是用來重發可能丟失的ack報文。

(2) 允許老的重複的分節在網路中消逝

假 設在12.106.32.254的1500埠和206.168.1.112.219的21埠之間有乙個tcp連線。我們關閉這個鏈結,過一段時間後在 相同的ip位址和埠建立另乙個連線。後乙個鏈結成為前乙個的化身。因為它們的ip位址和埠號都相同。

tcp必須防止來自某乙個連線的老的重複分組在連 接已經終止後再現,從而被誤解成屬於同一鏈結的某乙個某乙個新的化身。為做到這一點,tcp將不給處於time_wait狀態的鏈結發起新的化身。既然 time_wait狀態的持續時間是msl的2倍,這就足以讓某個方向上的分組最多存活msl秒即被丟棄,另乙個方向上的應答最多存活msl秒也被丟棄。 通過實施這個規則,我們就能保證每成功建立乙個tcp連線時。來自該鏈結先前化身的重複分組都已經在網路中消逝了。

3.為什麼不能用兩次握手進行連線?

三次握手完成兩個非常重要的功能,既要雙方做好傳送資料的準備工作,也要允許對方就初始序列號進行協商。

而改為兩次的話,死鎖是可能發生的,考慮a和b之間的通訊,假設a給b發了乙個連線請求分租,b收到了,並傳送ack,按照兩次握手的協定,s認為連線已經成功建立,可以開始傳送資料,但是a在b的應答分組在傳輸被丟失的情況下,不知道b是否準備好,不知道b建立什麼樣的序列號,那麼a認為連線未建立成功,將忽略b發來的任何資料,只等待ack,而在b傳送的資料分組超時後,重**送相同的分組,造成死鎖。

4.在停止等待協議中如果不使用編號是否可行?為什麼?

不可行,沒有編號,無法確定是確認資訊是哪個分組的確認資訊。

5.在停止等待協議中,如果收到重複的報文段而不予理睬是否可行?

不可行,比如在確認丟失的情況下,a向b傳送資料,b發回的確認訊號丟失,那麼a會重發該資料,這時候b收到了重複的資料,如果不予理睬,a會一直重發,因此b應該傳送確認訊號。

6.為什麼在tcp首部要把tcp的埠號放在最開始的4個位元組?

在icmp的差錯報文中,要包含ip首部後面的8個位元組的內容,而這裡面有tcp首部的源埠和目的埠,當tcp收到icmp時需要用這兩個埠來確定哪條連線出了問題。

面試經典問題 TCP 詳解

源埠號 表示傳送端埠號,字段長為16位。目標埠號 表示接收埠號,字段長為16位。序列號 seq 為當前端成功傳送的資料位數 由計算機生成的乙個隨機數作為其初始值,以後再將每次成功 過去的位元組數累加到初始值上表示資料的位置 確認號 為當前端成功接收的資料位數 1。表示下一次應該收到的資料位置,傳送端...

面試經典問題

面試經典問題之請你自我介紹一下 你有什麼業餘愛好 談談你的缺點 說說你的優勢 你為什麼選擇我們公司 談一談你的一次失敗經歷 面試時很可能遇到的這些問題該如何作答?博主為你一一解答。思路1 這是面試的必考題目。2 介紹內容要與個人簡歷相一致。3 表述方式上盡量口語化。4 要切中要害,不談無關 無用的內...

面試的經典問題

面試時,有幾個問題是公司面試人員常常會提出的,針對這些問題好好準備,在面試時也就不會啞口無言,無言以對了,下面就面試十大必考題做出分析 1 為什麼想進本公司?這通常是面試官最先問到的問題。此時面試官就開始評斷錄用與否了,建議大家先判斷自己去應徵的工作性質,是專業能力導向呢,或是需要溝通能力,其實現在...