天天看點

面試-網絡基礎TCP和UDP的知識基本記錄一下網絡基礎(TCP和UDP)的知識

基本記錄一下網絡基礎(TCP和UDP)的知識

面試-網絡基礎TCP和UDP的知識基本記錄一下網絡基礎(TCP和UDP)的知識

UDP和TCP

UDP

首先說一下概念,UDP是一種無連接配接傳輸層協定,提供面向事務的簡單不可靠的資訊傳輸服務

特點:

1.udp是無連接配接的,也就是發送資料包無需建立連接配接,并是以減少了開銷和發送資料之前不必要的時延

2.使用盡量努力傳遞資料

3.是面向封包的

可能你會有這樣的疑問?那麼為什麼不直接使用IP協定而是要重新定義出一個UDP呢?

一個重要的原因的是IP協定并沒有端口,UDP可以多通道,将資料送到對應的接口裡面去

TCP

首先說一下概念,TCP是一種面向連接配接、可靠、基于位元組流的傳輸協定,屬于5層或者7層網絡協定中的傳輸層協定

特點:

面向連接配接:不同于UDP,TCP協定需要通信雙方确定彼此已經建立連接配接後才可以進行資料傳輸;

可靠:連接配接建立的雙方在進行通信時,TCP保證了不會存在資料丢失,或是資料丢失後存在拯救丢失的措施;位元組流:實際傳輸中,不論是何種資料,TCP都按照位元組的方式傳輸,而非以資料包為機關。

說一下TCP的三次握手,四次揮手,和具體每一步的操作和作用

簡單介紹一下TCP的封包

面試-網絡基礎TCP和UDP的知識基本記錄一下網絡基礎(TCP和UDP)的知識
字段 含義
URG 緊急指針是否有效。為1,表示某一位需要被優先處理
ACK 确認号是否有效,一般置為1。
PSH 提示接收端應用程式立即從TCP緩沖區把資料讀走。
RST 對方要求重建立立連接配接,複位。
SYN 請求建立連接配接,并在其序列号的字段進行序列号的初始值設定。建立連接配接,設定為1
FIN 希望斷開連接配接。

三次握手

面試-網絡基礎TCP和UDP的知識基本記錄一下網絡基礎(TCP和UDP)的知識

第一次握手:建立連接配接時,用戶端發送syn包(syn=x)到伺服器,并進入SYN_SENT狀态,等待伺服器确認;SYN:同步序列編号(Synchronize Sequence Numbers)

保證了用戶端發送正常

第二次握手:伺服器收到syn包,必須确認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn=y),即SYN+ACK包,此時伺服器進入SYN_RECV狀态;

保證了服務端接受正常,發送正常

第三次握手:用戶端收到伺服器的SYN+ACK包,向伺服器發送确認包ACK(ack=y+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED(TCP連接配接成功)狀态,完成三次握手。

保證了用戶端接受正常,建立連接配接成功,開始工作

四次揮手

面試-網絡基礎TCP和UDP的知識基本記錄一下網絡基礎(TCP和UDP)的知識

1)用戶端程序發出連接配接釋放封包,并且停止發送資料。釋放資料封包首部,FIN=1,其序列号為seq=u(等于前面已經傳送過來的資料的最後一個位元組的序号加1),此時,用戶端進入FIN-WAIT-1(終止等待1)狀态。 TCP規定,FIN封包段即使不攜帶資料,也要消耗一個序号。

伺服器收到連接配接釋放封包,發出确認封包,ACK=1,ack=u+1,并且帶上自己的序列号seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀态。TCP伺服器通知高層的應用程序,用戶端向伺服器的方向就釋放了,這時候處于半關閉狀态,即用戶端已經沒有資料要發送了,但是伺服器若發送資料,用戶端依然要接受。這個狀态還要持續一段時間,也就是整個CLOSE-WAIT狀态持續的時間。

(中斷中發送未完成資料流 )用戶端收到伺服器的确認請求後,此時,用戶端就進入FIN-WAIT-2(終止等待2)狀态,等待伺服器發送連接配接釋放封包(在這之前還需要接受伺服器發送的最後的資料)。

2)伺服器将最後的資料發送完畢後,就向用戶端發送連接配接釋放封包,FIN=1,ack=u+1,由于在半關閉狀态,伺服器很可能又發送了一些資料,假定此時的序列号為seq=w,此時,伺服器就進入了LAST-ACK(最後确認)狀态,等待用戶端的确認。

3)用戶端收到伺服器的連接配接釋放封包後,必須發出确認,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此時,用戶端就進入了TIME-WAIT(時間等待)狀态。注意此時TCP連接配接還沒有釋放,必須經過2∗∗MSL(最長封包段壽命)的時間後,當用戶端撤銷相應的TCB後,才進入CLOSED狀态。

4)伺服器隻要收到了用戶端發出的确認,立即進入CLOSED狀态。同樣,撤銷TCB後,就結束了這次的TCP連接配接。可以看到,伺服器結束TCP連接配接的時間要比用戶端早一些。

關于TCP的面試題比較多一些,下面羅列幾個面試題(網上總結的):

【問題1】為什麼連接配接的時候是三次握手,關閉的時候卻是四次握手?

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

【問題2】為什麼TIME_WAIT狀态需要經過2MSL(最大封包段生存時間)才能傳回到CLOSE狀态?

答:雖然按道理,四個封包都發送完畢,我們可以直接進入CLOSE狀态了,但是我們必須假象網絡是不可靠的,有可以最後一個ACK丢失。是以TIME_WAIT狀态就是用來重發可能丢失的ACK封包。在Client發送出最後的ACK回複,但該ACK可能丢失。Server如果沒有收到ACK,将不斷重複發送FIN片段。是以Client不能立即關閉,它必須确認Server接收到了該ACK。Client會在發送出ACK之後進入到TIME_WAIT狀态。Client會設定一個計時器,等待2MSL的時間。如果在該時間内再次收到FIN,那麼Client會重發ACK并再次等待2MSL。所謂的2MSL是兩倍的MSL(Maximum Segment Lifetime)。MSL指一個片段在網絡中最大的存活時間,2MSL就是一個發送和一個回複所需的最大時間。如果直到2MSL,Client都沒有再次收到FIN,那麼Client推斷ACK已經被成功接收,則結束TCP連接配接。

【問題3】為什麼不能用兩次握手進行連接配接?

答:3次握手完成兩個重要的功能,既要雙方做好發送資料的準備工作(雙方都知道彼此已準備好),也要允許雙方就初始序列号進行協商,這個序列号在握手過程中被發送和确認。

現在把三次握手改成僅需要兩次握手,死鎖是可能發生的。作為例子,考慮計算機S和C之間的通信,假定C給S發送一個連接配接請求分組,S收到了這個分組,并發 送了确認應答分組。按照兩次握手的協定,S認為連接配接已經成功地建立了,可以開始發送資料分組。可是,C在S的應答分組在傳輸中被丢失的情況下,将不知道S 是否已準備好,不知道S建立什麼樣的序列号,C甚至懷疑S是否收到自己的連接配接請求分組。在這種情況下,C認為連接配接還未建立成功,将忽略S發來的任何資料分 組,隻等待連接配接确認應答分組。而S在發出的分組逾時後,重複發送同樣的分組。這樣就形成了死鎖。

【問題4】如果已經建立了連接配接,但是用戶端突然出現故障了怎麼辦?TCP還設有一個保活計時器,顯然,用戶端如果出現故障,伺服器不能一直等下去,白白浪費資源。伺服器每收到一次用戶端的請求後都會重新複位這個計時器,時間通常是設定為2小時,若兩小時還沒有收到用戶端的任何資料,伺服器就會發送一個探測封包段,以後每隔75秒鐘發送一次。若一連發送10個探測封包仍然沒反應,伺服器就認為用戶端出了故障,接着就關閉連接配接。

說一下TCP和UDP有什麼不同處

1、 TCP面向連接配接 (如打電話要先撥号建立連接配接); UDP是無連接配接 的,即發送資料之前不需要建立連接配接

2、TCP提供可靠的服務。也就是說,通過TCP連接配接傳送的資料,無差錯,不丢失,不重複,且按序到達;UDP盡最大努力傳遞,即不保證可靠傳遞

Tcp通過校驗和,重傳控制,序号辨別,滑動視窗、确認應答實作可靠傳輸。如丢包時的重發控制,還可以對次序亂掉的分包進行順序控制。

3、UDP具有較好的實時性,工作效率比TCP高,适用于對高速傳輸和實時性有較高的通信或廣播通信。

4.每一條TCP連接配接隻能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通信

5、TCP對系統資源要求較多,UDP對系統資源要求較少。

TCP那麼好,那麼為什麼還需要UDP,UDP相對的優勢在哪裡

UDP以其簡單、傳輸快的優勢,在越來越多場景下取代了TCP,如實時遊戲。

(1)網速的提升給UDP的穩定性提供可靠網絡保障,丢包率很低,如果使用應用層重傳,能夠確定傳輸的可靠性。

(2)TCP為了實作網絡通信的可靠性,使用了複雜的擁塞控制算法,建立了繁瑣的握手過程,由于TCP内置的系統協定棧中,極難對其進行改進。

采用TCP,一旦發生丢包,TCP會将後續的包緩存起來,等前面的包重傳并接收到後再繼續發送,延時會越來越大,基于UDP對實時性要求較為嚴格的情況下,采用自定義重傳機制,能夠把丢包産生的延遲降到最低,盡量減少網絡問題對遊戲性造成影響。

如何讓UDP更不易丢包,變成可靠的UDP呢?

我覺得這個問題比較複雜,咱們可以單獨開一篇文章說明

以上就是我整理的TCP和UDP的相關面試知識