字節跳動面試題總結1-tcp相關的內容

我覺得網上的面試題太多了
我彙總了一下 按知識點
tpc相關的
http和https
mysql
nginx
linux
算法等吧 一個個來背吧

今天先第一部分
tcp部分

相關知識

1. tcp三次握手和四次揮手 下圖就可以很好的表示 一個SYN 一個FIN

三次握手
在這裏插入圖片描述
在這裏插入圖片描述
四次揮手
在這裏插入圖片描述
在這裏插入圖片描述

2. 爲什麼要三次握手

爲了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤
說白了就是:防止了服務器端的一直等待而浪費資源

3. 爲什麼要四次揮手

簡單來說 就是第一次server回覆ack的時候 還需要把服務端所有的數據再發送給客戶端, 只有等都發送完了,纔再發送一次ack
所以只能先回復一個ACK報文,告訴Client端,“你發的FIN報文我收到了”。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,
那四次揮手又是爲何呢?TCP協議是一種面向連接的、可靠的、基於字節流的運輸層通信協議。TCP是全雙工模式,
這就意味着,當主機1發出FIN報文段時,只是表示主機1已經沒有數據要發送了,主機1告訴主機2,它的數據已經全部發送完畢了;
但是,這個時候主機1還是可以接受來自主機2的數據;當主機2返回ACK報文段時,表示它已經知道主機1沒有數據發送了,但是主機2還是可以發送數據到主機1的;
當主機2也發送了FIN報文段時,這個時候就表示主機2也沒有數據要發送了,就會告訴主機1,我也沒有數據要發送了,之後彼此就會愉快的中斷這次TCP連接。

4. 爲什麼TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態?

雖然按道理,四個報文都發送完畢,我們可以直接進入CLOSE狀態了,但是我們必須假象網絡是不可靠的,有可以最後一個ACK丟失。所以TIME_WAIT狀態就是用來重發可能丟失的ACK報文
然後一次報文的有效時間也是2s

5. 100Mbps的帶寬三個人使用,每人50Mbps,tcp怎麼保證速度的

首先是tcp怎麼保證速度, 多TCP連接,可以充分利用帶寬,用狀態表示每個TCP的連接狀況
可以共享TCP連接。
單個TCP怎麼保證: 會有下面幾個特性 滑動窗口, 快速重傳, 延遲應答, 捎帶應答 詳細文章https://blog.csdn.net/liuchenxia8/article/details/80434264
然後第二個問題是怎麼實現每個加起來,比總的大
這些中間設備,通常服務於成千上百(萬)的用戶,帶寬是供所有的用戶共享使用的。路由器的帶寬有限,無法保證每個連接都按照它所能支持的最大速率進行傳輸,即便不考慮路由器本身做的流量控制功能,單單這成百上千(萬)的用戶訪問所形成的TCP連接之間的競爭,就會產生如1樓所說的,各連接均分整個帶寬的情況。

因此,現實環境下,由於傳輸網絡的帶寬有限,通常各個連接會均分帶寬,導致單連接下載時速率較低,而多連接下載時速率較高。
https://segmentfault.com/a/1190000008803687?utm_source=tag-newest

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章