經典面試題整理-TCP

TCP、UDP區別?


經典面試題整理-TCP


  • TCP要求系統資源較多,UDP較少
  • TCP向上層提供面向連接的可靠服務 ,UDP向上層提供無連接不可靠服務。
  • 雖然 UDP 並沒有 TCP 傳輸來的準確,但是也能在很多實時性要求高的地方有所作為
  • 對數據準確性要求高,速度可以相對較慢的,可以選用TCP

TCP實現可靠傳輸的方法?

  • 確認和重傳:接收方收到報文就會確認,發送方發送一段時間後沒有收到確認就重傳。
  • 數據校驗:TCP報文頭有校驗和,用於校驗報文是否損壞
  • 數據合理分片和排序:tcp會按MTU合理分片,接收方會緩存未按序到達的數據,重新排序後再交給應用層。而UDP:IP數據報大於1500字節,大於MTU。這個時候發送方的IP層就需要分片,把數據報分成若干片,是的每一片都小於MTU。而接收方IP層則需要進行數據報的重組。由於UDP的特性,某一片數據丟失時,接收方便無法重組數據報,導致丟棄整個UDP數據報。
  • 流量控制:當接收方來不及處理發送方的數據,通過滑動窗口,能提示發送方降低發送的速率,防止包丟失
  • 擁塞控制:當網絡擁塞時,通過擁塞窗口,減少數據的發送。

解釋下三次握手、四次揮手

這個資料可太多了,直接上圖吧

經典面試題整理-TCP

三次握手過程:

經典面試題整理-TCP

經典面試題整理-TCP

四次揮手過程:

經典面試題整理-TCP

為什麼要三次握手?兩次不行嗎?

如客戶端發出連接請求,但因連接請求報文丟失而未收到確認,於是客戶端再重傳一次連接請求。後來收到了確認,建立了連接。數據傳輸完畢後,就釋放了連接,客戶端共發出了兩個連接請求報文段,其中第一個丟失,第二個到達了服務端,但是第一個丟失的報文段只是在某些網絡結點長時間滯留了,延誤到連接釋放以後的某個時間才到達服務端,此時服務端誤認為客戶端又發出一次新的連接請求,於是就向客戶端發出確認報文段,同意建立連接,不採用三次握手,只要服務端發出確認,就建立新的連接了,此時客戶端忽略服務端發來的確認,也不發送數據,

則服務端一致等待客戶端發送數據,浪費資源。

揮手為什麼需要四次?

關閉連接時,當服務端收到FIN報文時,很可能並不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴客戶端,"你發的FIN報文我收到了"。只有等到我服務端所有的報文都發送完了,我才能發送FIN報文。故需要四次揮手。

四次揮手釋放連接時,為什麼要等待2MSL?

  • 為了保證客戶端發送的最後一個ACK報文段能夠到達服務器。因為這個ACK有可能丟失,從而導致處在LAST-ACK狀態的服務器收不到對FIN-ACK的確認報文。服務器會超時重傳這個FIN-ACK,接著客戶端再重傳一次確認,重新啟動時間等待計時器。最後客戶端和服務器都能正常的關閉。假設客戶端不等待2MSL,而是在發送完ACK之後直接釋放關閉,一但這個ACK丟失的話,服務器就無法正常的進入關閉連接狀態。
  • 防止“已失效的連接請求報文段”出現在本連接中。客戶端在發送完最後一個ACK報文段後,再經過2MSL,就可以使本連接持續的時間內所產生的所有報文段都從網絡中消失,使下一個新的連接中不會出現這種舊的連接請求報文段。

SYN攻擊是什麼?

SYN攻擊就是Client在短時間內偽造大量不存在的IP地址,並向Server不斷地發送SYN包,Server則回覆確認包,並等待Client確認,由於源地址不存在,因此Server需要不斷重發直至超時,這些偽造的SYN包將長時間佔用未連接隊列,導致正常的SYN請求因為隊列滿而被丟棄,從而引起網絡擁塞甚至系統癱瘓。SYN 攻擊是一種典型的 DoS/DDoS 攻擊。

參考 :

  • https://juejin.im/post/5d9c284b518825095879e7a5
  • https://blog.csdn.net/qzcsu/article/details/72861891


分享到:


相關文章: