天天看點

20道TCP協定高頻面試題

作者:航淳技術

1. TCP連接配接的三次握手過程是什麼?

(1)用戶端發送SYN資料包給服務端,請求建立連接配接;

(2)服務端收到用戶端的請求後,發送ACK資料包作為響應,并且發送SYN資料包給用戶端;

(3)用戶端收到服務端的響應後,發送ACK資料包作為确認。這樣就建立了一個TCP連接配接。

2. TCP連接配接的四次揮手過程是什麼?

(1)用戶端發送FIN資料包給服務端,表示請求關閉連接配接;

(2)服務端收到用戶端的請求後,發送ACK資料包作為響應;

(3)服務端發送FIN資料包給用戶端,請求關閉連接配接;

(4)用戶端收到服務端的請求後,發送ACK資料包作為确認。

3. TCP為什麼需要三次握手才能建立連接配接?

3.1. 為什麼不是兩次握手?

兩次握手可以建立連接配接,但會導緻潛在的“半連接配接狀态”問題。這個問題是由于網絡傳輸的不确定性引起的。假設用戶端向伺服器發送了連接配接請求封包段,但該封包段卻因為丢失或延遲到達伺服器。伺服器沒有收到請求封包段,自然也就不會傳回确認封包段。此時,用戶端并不知道連接配接請求封包是否已經到達伺服器,是以會重新發送連接配接請求封包段。但之前的這個連接配接請求封包段卻在這段時間内到達了伺服器,于是伺服器傳回了确認封包段。此時,用戶端會認為連接配接已經建立成功,但實際上卻是伺服器的響應封包段遲到了。這時候,用戶端發送資料,而伺服器并不會理睬,因為它認為連接配接并沒有建立成功。這就是“半連接配接狀态”問題,會導緻連接配接不穩定和網絡擁塞。

3.2. 為什麼不是四次握手?

四次握手會增加額外的開銷和時間,不利于網絡通信的效率。在四次握手的情況下,用戶端和伺服器分别進行兩次發送和兩次确認的過程,這樣會增加網絡傳輸和處理的時間和資源。此外,如果用戶端在收到伺服器的斷開封包之前發送了資料,伺服器可能會因為收到了用戶端的資料而認為連接配接還沒有斷開,需要繼續等待,這樣也會導緻連接配接不穩定。

3.3. 為什麼是三次握手?

因為三次握手可以確定雙方的通信能力和狀态都正常,同時保證連接配接的可靠性。在三次握手的情況下,用戶端向伺服器發送連接配接請求封包段,伺服器向用戶端發送确認封包段,用戶端再次向伺服器發送确認封包段。通過這個過程,雙方可以确認對方的通信能力和狀态,確定連接配接的可靠性。如果隻進行兩次握手,可能會存在一些網絡問題,例如已失效的請求封包段等,這些問題會導緻連接配接不穩定。如果進行四次握手,雖然也可以建立連接配接,但是會增加額外的開銷和時間,不利于網絡通信的效率。是以,三次握手是相對最佳的解決方案。

4. TCP的流量控制是如何工作的?

TCP的流量控制是通過滑動視窗機制實作的。在TCP通信過程中,接收端會告訴發送端自己可以接收的資料量,也就是接收視窗大小。發送端則根據接收端的接收視窗大小來控制發送資料的速度。如果接收端接收速度比較慢,發送端會控制自己的發送速度,防止發送資料過快導緻接收端無法接收。這樣就保證了TCP通信的流量控制。

5. TCP的擁塞控制是如何工作的?

TCP的擁塞控制是為了防止網絡擁塞而設計的。在TCP通信過程中,發送端會根據網絡的擁塞情況來調整發送速度。如果網絡出現擁塞,發送端會逐漸減慢發送速度,直至接收到正常的ACK确認信号。如果網絡沒有擁塞,發送端會逐漸加快發送速度,直至達到最大帶寬。這樣就保證了TCP通信的擁塞控制。

6. TCP為什麼需要序列号和确認号?

TCP需要序列号和确認号是為了保證資料傳輸的可靠性。序列号用于辨別發送端發送的資料包的順序,确認号則用于辨別接收端收到的資料包的順序。發送端發送的資料包需要按照序列号的大小來排序,接收端接收的資料包需要按照确認号的大小來排序。這樣就確定了資料傳輸的可靠性。

7. TCP的逾時重傳是如何工作的?

TCP的逾時重傳是為了保證資料傳輸的可靠性。如果發送端沒有接收到接收端的ACK确認信号,說明資料包沒有被正常接收。這時發送端會等待一段時間,如果還是沒有收到ACK信号,就會将資料包重新發送。這樣就保證了資料傳輸的可靠性。

8. TCP的擁塞視窗是什麼?

TCP的擁塞視窗是由發送端和接收端共同維護的一個變量,用來控制資料的發送速度。發送端維護的是擁塞視窗的大小,接收端維護的是接收視窗的大小。發送端發送資料時,會根據擁塞視窗的大小來控制發送速度,以避免網絡擁塞。

9. TCP的滑動視窗是什麼?

TCP的滑動視窗是一種流量控制和擁塞控制的機制,用來控制資料傳輸的速度。滑動視窗由發送端和接收端共同維護,發送端維護的是發送視窗的大小,接收端維護的是接收視窗的大小。發送端發送資料時,會根據發送視窗的大小來控制發送速度,接收端接收資料時,會根據接收視窗的大小來控制接收速度。這樣就實作了流量控制和擁塞控制。

10. TCP的可靠性是怎麼實作的?

TCP的可靠性是通過重傳機制和校驗和機制實作的。發送端發送的每個資料包都帶有一個序列号和一個校驗和,接收端接收到資料包後,會根據序列号和校驗和來判斷資料是否正确。如果資料不正确,接收端會要求發送端重新發送資料包。如果發送端沒有收到接收端的确認信号,就會認為資料包沒有被正常接收,會重新發送資料包。這樣就保證了資料傳輸的可靠性。

11. TCP的擁塞控制算法有哪些?

1. 慢啟動算法

慢啟動算法是TCP的擁塞控制算法中最基本的算法之一。慢啟動算法利用指數增長的方式增加發送方的擁塞視窗(cwnd),避免在網絡擁塞時發送過多的資料包,導緻網絡最終發生擁塞。即發送方一開始發送一個封包段,然後接收到一個确認封包段後,發送方将cwnd計算成目前cwnd的兩倍,不斷重複這個過程,直到cwnd達到一個門檻值ssthresh。當cwnd超過ssthresh後,使用擁塞避免算法進行擁塞控制。

2. 擁塞避免算法

擁塞避免算法是TCP的另一種擁塞控制算法,在慢啟動算法的基礎上,采用線性增長的方式逐漸增加擁塞視窗,直到網絡最大容量的一半。如果超過了這個門檻值,就将cwnd砍半,然後重新進入慢啟動算法時的狀态,進行指數增長。

3. 快重傳和快恢複算法

快重傳算法是TCP中的逾時重傳機制的改進算法,能夠避免逾時重傳的等待時間,提高網絡的吞吐量。快重傳算法的基本思想是,在發送方連續收到三個重複的ack時,就可以确定該資料包被丢失了,并立即重傳該資料包。快恢複算法是快重傳算法的一種改進算法,它避免了丢失資料包後進行慢啟動的過程,進而在網絡擁塞時更加高效。

4. 随機早期檢測算法

随機早期檢測算法是TCP的另一種改進算法,可以更好地應對擁塞控制的問題。這個算法的基本思想是,在接收方發現有丢失的封包段時,随機選取一個時間點發送一個重複确認封包段,進而避免所有的發送方都在同一時間視窗進行擁塞控制,降低網絡的吞吐量。

TCP的擁塞控制算法的目标是在網絡容量和負載均衡之間找到一個平衡。對于每一種擁塞控制算法,其内部的原理和細節都有所不同,但它們的目标都是避免網絡擁塞,提高網絡的性能和吞吐量。

12. TCP的流量控制算法有哪些?

1. 滑動視窗算法

滑動視窗算法是TCP流量控制算法中最基本的算法之一。發送方和接收方都維護一個接收視窗和發送視窗的大小,用于控制資料的流量。發送方通過發送視窗的大小來限制發送資料的速率,接收方通過接收視窗的大小來控制接收資料的速率。發送方将發送視窗和接收方傳回的确認資訊結合起來,實時計算出可以發送的資料大小,進而有效地控制了通信資料的流量。

2. TCP SACK

TCP SACK算法是在TCP的滑動視窗算法基礎上,為了處理網絡中丢失的封包段,而設計的一種改進算法。該算法允許接收方傳回多個不連續資料的确認資訊,進而使得發送方可以快速定位丢失的資料,并進行重傳。 TCP SACK算法可以顯著提高TCP的網絡吞吐量。

3. 延遲确認

延遲确認算法是TCP流量控制算法中的一種改進算法,該算法允許接收方緩沖多個資料封包,同時減少确認封包的發送,進而降低網絡通信的開銷,提高網絡吞吐量。延遲确認算法根據不同的延遲和資料包長度,自适應地對确認封包的發送時間進行調整。

4. TCP Vegas

TCP Vegas算法是一種基于延遲測量的流量控制算法,該算法利用RTT(往返時間)來判斷網絡的擁塞程度,進而根據網絡的狀況動态地調整發送速率。TCP Vegas算法可以快速适應網絡環境的變化,達到更好的網絡性能。

TCP的流量控制算法旨在控制資料的發送和接收速率,使資料傳輸過程中不發生擁塞。每一種流量控制算法都有自己的特性和優點,在不同的網絡環境中應用更為廣泛。

13. TCP的粘包問題是什麼?

TCP的粘包問題是指在資料傳輸過程中,多個資料包被一起傳輸,接收端無法區分每個資料包的邊界。解決TCP的粘包問題需要使用一些特殊的技術,如添加標頭和包尾資訊、使用消息定長、使用消息分隔符等。

14. TCP和UDP的差別是什麼?

TCP和UDP是兩種不同的傳輸層協定,它們之間的主要差別在于其連接配接方式、資料傳輸可靠性、傳輸效率和應用場景等方面。

1. 連接配接方式:

TCP是面向連接配接的協定,需要在通信前建立連接配接,保持連接配接狀态,然後再發送資料。UDP是無連接配接的協定,不需要建立連接配接和維持連接配接狀态,可以直接發送資料。

2. 資料傳輸可靠性:

TCP是可靠的協定,可以保證資料的正确性、完整性和有序性,會進行重傳,确認等方式來保證資料的可靠傳輸。UDP是不可靠的協定,資料傳輸過程中不能保證資料的可靠性,資料可能丢失、重複、亂序等。

3. 傳輸效率:

TCP的傳輸效率相對較低,因為需要進行連接配接的建立、維護和資料的确認等操作,這些操作會消耗較多的網絡資源和時間,但資料的可靠性很高。UDP的傳輸效率相對較高,因為沒有連接配接的建立、維護和資料确認等操作,資料傳輸速度快,但可靠性較低。

4. 應用場景:

TCP适用于對資料傳輸可靠性要求較高的應用場景,如檔案傳輸、電子郵件、網頁浏覽等;UDP适用于對資料傳輸速度要求較高,資料傳輸可靠性要求相對較低的應用場景,如音視訊傳輸、遊戲等。

TCP和UDP都有其自身的特點和适用場景,需要根據實際情況選擇合适的傳輸協定。

15. TCP的端口号是什麼?

TCP的端口号是一個16位的整數,用來辨別一個TCP連接配接的端口。TCP協定中,有兩種端口号,一種是源端口号,一種是目标端口号。源端口号用來辨別用戶端的端口,目标端口号用來辨別服務端的端口。

16. TCP的最大傳輸單元是什麼?

TCP的最大傳輸單元(MTU)是指網絡中能夠傳輸的最大資料包的大小。在TCP通信過程中,發送的資料包大小不能超過MTU。TCP的MTU根據網絡的傳輸媒介和網絡裝置的性能有所不同,通常為1500位元組左右。

17. TCP的延遲确認是什麼?

TCP的延遲确認是為了提高網絡傳輸效率而設計的。在TCP通信過程中,接收端不會立即發送ACK确認信号,而是等待一定的時間,如果沒有收到新的資料包,就會發送ACK确認信号。這樣可以減少網絡流量,提高網絡傳輸效率。

18. TCP的視窗縮放是什麼?

TCP的視窗縮放機制是為了解決網絡延遲和帶寬小的問題而設計的。視窗縮放機制可以将發送視窗的大小擴大,進而提高資料傳輸的速度,同時也可以提高資料傳輸的可靠性。

19. TCP的Nagle算法是什麼?

TCP的Nagle算法是為了解決網絡擁塞問題而設計的。Nagle算法通過緩存一部分資料來減少網絡流量,防止因為發送過多的小資料包而導緻網絡擁塞。Nagle算法的原理是,等待接收端的ACK确認信号再發送資料包,這樣可以減少網絡擁塞。

20. TCP的Keep-Alive機制是什麼?

TCP的Keep-Alive機制是為了保持TCP連接配接的存活狀态而設計的。在TCP連接配接建立完成後,如果一段時間内沒有資料傳輸,就會發送Keep-Alive資料包來确認連接配接是否存活。如果接收端沒有響應Keep-Alive資料包,就會認為連接配接已經斷開,關閉連接配接。