面試題 談談你對TCP的認識

2021-08-22 15:07:05 字數 1978 閱讀 4673

1. 簡介

首先,tcp是乙個傳輸層協議,提供程序到程序之間的可靠性資料傳輸服務,還提供流量控制差錯控制等機制。

其次,tcp是面向連線的,其通訊模式是全雙工的;面向連線是指:

連線建立需要進行三次握手,關閉連線需要進行四次揮手

接下來面試官會問可靠性資料傳輸的原理、流量控制、差錯控制、三次握手和四次揮手等;

1. tcp的可靠性傳輸原理

2. 流水線機制

流水線機制,允許傳送方在收到ack之前,可以連續的傳送多個分組,傳送方和接收方需要更大的儲存空間以快取分組。

3. 累計確認

接收方收到序列號1、2、3、4和5的包,不必每個都確認,只需確認第5個就行,當傳送方收到接收方對5的確認ack後,就明白接收方前5個都已經正確接收。

4. 超時重傳和快速重傳

超時重傳:傳送端傳送報文後,由於長時間沒有收到ack(該分組還在路上或者丟失),所以會重傳當前分組;同時定時器rto(retransmission timeout)會加倍。如果再次超時,定時器會再次加倍。

快速重傳:如果發生超時,tcp的定時器的時間會設定到很大,重發丟失分組之前要等很長時間。因此需要通過重複的ack檢測分組丟失,如果傳送方收到同乙個資料的3個ack,則會假定該分組已經丟失,會立即重傳。

流量控制是接收方和傳送方的問題,而擁塞控制是整個網路的問題。

1. 流量控制

在tcp的報頭中,有乙個receive window的字段,接收方會通過設定該欄位儲存自己緩衝區的可用空間。這樣傳送方將會限制自己已傳送但還未收到ack的資料不超過接收方的可用空間。當recvwindow為0時,為了避免死鎖,傳送方還是會傳送很小的資料段。

2. 擁塞控制

通過限制傳送發的傳送速率來進行擁塞控制:

lastbytesent-lastbyteacked <= congwin
congwin(congest window)被稱作擁塞視窗,最後乙個傳送的位元組減去最後乙個被確認過的位元組序列號,要小於等於congwin。傳送速率:

rate≈congwin/rtt (bytes/sec)
動態調整congwin以改變傳送速率。

注:在早期版本,當發生擁塞後直接將congwin置為1,現在是將其置為原來的一半;

如何動態調整傳送速率,可以總結為:

**加性增-乘性減;

慢啟動;**

慢啟動並不是指增長速度慢,而是指初始速率低,初始速率為1,然後每收到乙個ack,就將congwin翻倍,直到達到閾值的一半;

加性增是指到達閾值的一半後,每次讓congwin增加1,而乘性減是當發生loss事件後,將congwin減為原來的一半(也可能置為1);

lose事件:收到3個重複的ack或者超時;

總結:

當congwin低於閾值的時候,傳送者處於慢啟動階段,congwin指數增長;

當congwin高於閾值,傳送者處於擁塞避免階段,congwin線性增長;

當收到3個重複的ack,閾值設定為congwin的一半,congwin設定為閾值,然後進行線性增長;

當超時發生,閾值設定為congwin的一半,congwin設定為1,然後進行指數增長;

最後三次握手和四次揮手請參考:

面試題 談談你對hibernate的理解

說說這類問題一般要和乙個東西比較,說說他們的優點和缺點,hibernate就和jdbc比較唄,你就說說jdbc的優缺點,然後說說hibernate的優缺點,最後對比得出hibernate更好。hibernate 1 運算元據庫的框架 底層是通過jdbc運算元據庫的 2 用物件導向的方式運算元據庫 2...

面試題 談談你對對vuex的理解

當面試官問我們對vuex的理解的時候,我們不能只說 vuex是乙個專為vue.js應用程式開發的狀態管理模式 盡量不要讓面試官連續追問 總會問到自己不會的然後說你實力還差那麼點來可以得降薪 應該從三個方面一次性去說清楚 1.vuex是什麼?2.vuex的核心概念 3.為什麼要用vuex?對於問題一,...

面試官 談談你對mysql事務的認識

今天回頭繼續講講資料庫系列的文章。這篇文章屬於mysql資料庫系列,我們來談談事務方面的常見面試題。那麼,具體題目有下面這些 1 講講為什麼用事務?事務的四大特性?事務的隔離級別知道吧,你們生產用哪種?2 innodb中acid具體是如何實現的?3 redo log和binlog的一致性如何保證?4...