日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 架構(gòu)師社區(qū)
[導(dǎo)讀]本文會圍繞,三次握手和四次揮手相關(guān)的一些列核心問題,分享如何更準確的回答和應(yīng)對常見的面試問題,以后面對再刁鉆的面試官,你都可以隨意地跟他扯皮了。

TCP的三次握手和四次揮手,可以說是老生常談的經(jīng)典問題了,通常也作為各大公司常見的面試考題,具有一定的水平區(qū)分度。看似是簡單的面試問題,如果你的回答不符合面試官期待的水準,有可能就直接涼涼了。

本文會圍繞,三次握手和四次揮手相關(guān)的一些列核心問題,分享如何更準確的回答和應(yīng)對常見的面試問題,以后面對再刁鉆的面試官,你都可以隨意地跟他扯皮了。

淘寶二面,面試官居然把TCP三次握手問的這么詳細

面試TCP的意義

我想要先說明一個重要問題,到底面試 TCP 的意義何在?

經(jīng)常會聽到這樣抱怨:我是做業(yè)務(wù)程序開發(fā)的,面試官竟然問我 TCP 三次握手、TCP 擁塞控制的問題,還問的這么細致?

這些同學(xué)會覺著面試官是閑的淡疼,或是故意刁難候選人,更有同學(xué)認為面試官是為了防止自己技術(shù)退步拿來練手的,這種想法我也是醉了。

當然,不同人對此可能會有不同的想法,但我們技術(shù)人應(yīng)該以積極的心態(tài)來理解和面對這個問題,在我看來面試 TCP 有重要的意義:

1. 從面試官的角度,可以快速考察候選人對基礎(chǔ)知識的掌握程度,以及候選人對待技術(shù)的那種知其所以然的態(tài)度。

2. 從求職者的角度,即使工作內(nèi)容中沒有直接用到 TCP 協(xié)議,但在遇到網(wǎng)絡(luò)故障,調(diào)試和分析問題時,熟悉 TCP 顯得十分重要,要不抓包都看不懂。

3. 從學(xué)習(xí)的角度,我們可以學(xué)習(xí) TCP 的設(shè)計理念,比如 TCP 重傳、擁塞控制,以及如何在性能和原理之間做權(quán)衡和取舍的,舉一反三,將這些原理細節(jié)應(yīng)用到我們平時的軟件設(shè)計上,也是一種思維上的學(xué)習(xí)成長。

4. 如果想要調(diào)整 TCP 參數(shù)來提升傳輸速度,可服務(wù)器上相關(guān)的系統(tǒng)參數(shù)有幾十個,究竟該怎么調(diào)整呢?

5. 在服務(wù)器本地的 TCP 連接狀態(tài)出現(xiàn)了類似fin_wait、time_wait,該怎么解決,是什么原因引起的?如果不懂 TCP,即使別人告訴你解決方案,你也不能夠真正理解的。

所以,我們非常有必要認真學(xué)習(xí) TCP 協(xié)議,對 TCP 熟悉程度,在某種意義上也是你與別人拉開距離的重要標識。

TCP 基礎(chǔ)

這里先幫小伙伴們熟悉和回顧下 TCP 的基本概念,以至于能夠更好的理解文章后邊的內(nèi)容。

TCP 其實是非常復(fù)雜的協(xié)議,我們先聊一些基礎(chǔ)的。我們知道 TCP 是一種可靠的協(xié)議,它主要通過解決這幾個問題來實現(xiàn)可靠性的,分別是:亂序、丟包重傳、流控、擁塞控制。通過從圖中報文格式的字段,也能夠簡單了解到 TCP 的相關(guān)概念。

淘寶二面,面試官居然把TCP三次握手問的這么詳細
  • TCP 在網(wǎng)絡(luò) OSI 七層模型中的第四層,TCP 包是沒有 IP 地址的,但有源端口和目的端口,用來標識通信的進程。

  • Sequence Number是記錄包的序號,TCP 會按照報文字節(jié)進行編號,它是用來解決包在網(wǎng)絡(luò)中亂序的問題。

  • Acknowledgement Number確認序列號,是用于向發(fā)送方確認已經(jīng)收到了哪些包,用來解決不丟包的問題。

  • Windows也叫Advertised-Windows,也就是著名的滑動窗口,主要是用來解決流控的。

  • TCP Flag就是包的類型,主要是用于操控 TCP 狀態(tài)機的。

三次握手

三次握手是各個公司常見的面試考點。以過來人經(jīng)驗來講,雖然該問題看似簡單,但你還真不一定能夠回答的好。

見過比較典型面試問答場景:

面試官:請描述一下三次握手的過程吧
求職者:第一次客戶端給服務(wù)端發(fā)送一個報文,第二次是服務(wù)器收到包之后,也給客戶端應(yīng)答一個報文,第三次是客戶端再給服務(wù)器發(fā)送一個回復(fù)報文,TCP 三次握手成功。
面試官:還有嗎?
求職者:說完了哈,這就是三次握手,很簡單的
面試官:嗯,我沒什么問的了,你還有什么問題嗎?

這時求職者緊張的心終于平靜了,因為面試官沒有深入下去的意思,繼續(xù)問下去可能也不懂,皆大歡喜!當然本次面試基本上也就game over了。

求職者回答的不正確么?正確,但是回答的過于簡單,離面試官的期望的答案還有一定的距離,我們該怎么回答呢?

淘寶二面,面試官居然把TCP三次握手問的這么詳細

TCP 三次握手,其實就是建立一個 TCP 連接,客戶端與服務(wù)器交互需要 3 個數(shù)據(jù)包。握手的主要作用就是為了確認雙方的接收和發(fā)送能力是否正常,初始序列號,交換窗口大小以及 MSS 等信息。

  • 第一次握手:客戶端發(fā)送SYN報文,并進入SYN_SENT狀態(tài),等待服務(wù)器的確認;

  • 第二次握手:服務(wù)器收到SYN報文,需要給客戶端發(fā)送ACK確認報文,同時服務(wù)器也要向客戶端發(fā)送一個SYN報文,所以也就是向客戶端發(fā)送SYN + ACK報文,此時服務(wù)器進入SYN_RCVD狀態(tài);

  • 第三次握手:客戶端收到SYN + ACK報文,向服務(wù)器發(fā)送確認包,客戶端進入ESTABLISHED狀態(tài)。待服務(wù)器收到客戶端發(fā)送的ACK包也會進入ESTABLISHED狀態(tài),完成三次握手。

我們回答時,可以先簡單概述 TCP 過程,然后三次握手具體描述時,需要說明狀態(tài)的基本轉(zhuǎn)換。

TCP 三次握手,其實就是 TCP 應(yīng)用在發(fā)送數(shù)據(jù)前,通過 TCP 協(xié)議跟通信對方協(xié)商好連接信息,建立起TCP的連接關(guān)系。

我們需要知道,TCP 連接并非是在通信設(shè)備兩端之間建立信號隧道,而本質(zhì)上就是雙方各自維護所需的狀態(tài)狀態(tài),以達到 TCP 連接的效果。所以 TCP 狀態(tài)機是 TCP 的核心內(nèi)容,學(xué)習(xí) TCP 一定要搞懂這些狀態(tài)機之間的轉(zhuǎn)換。

二次握手可以嗎

問:為什么 TCP 采用三次握手,二次握手可以嗎?

我們可以從幾個方面來解釋:

(一)確認雙方的收發(fā)能力

TCP 建立連接之前,需要確認客戶端與服務(wù)器雙方的收包和發(fā)包的能力。

1. 第一次握手:客戶端發(fā)送網(wǎng)絡(luò)包,服務(wù)端收到了。這樣服務(wù)端就能得出結(jié)論:客戶端的發(fā)送能力、服務(wù)端的接收能力是正常的。

2. 第二次握手:服務(wù)端發(fā)包,客戶端收到了。這樣客戶端就能得出結(jié)論:服務(wù)端的接收、發(fā)送能力,客戶端的接收、發(fā)送能力是正常的。不過此時服務(wù)器并不能確認客戶端的接收能力是否正常。

3. 第三次握手:客戶端發(fā)包,服務(wù)端收到了。這樣服務(wù)端就能得出結(jié)論:客戶端的接收、發(fā)送能力正常,服務(wù)器自己的發(fā)送、接收能力也正常。

所以,只有三次握手才能確認雙方的接收與發(fā)送能力是否正常。

(二)序列號可靠同步

如果是兩次握手,服務(wù)端無法確定客戶端是否已經(jīng)接收到了自己發(fā)送的初始序列號,如果第二次握手報文丟失,那么客戶端就無法知道服務(wù)端的初始序列號,那 TCP 的可靠性就無從談起。

(三)阻止重復(fù)歷史連接的初始化

客戶端由于某種原因發(fā)送了兩個不同序號的SYN包,我們知道網(wǎng)絡(luò)環(huán)境是復(fù)雜的,舊的數(shù)據(jù)包有可能先到達服務(wù)器。如果是兩次握手,服務(wù)器收到舊的SYN就會立刻建立連接,那么會造成網(wǎng)絡(luò)異常。

如果是三次握手,服務(wù)器需要回復(fù)SYN+ACK包,客戶端會對比應(yīng)答的序號,如果發(fā)現(xiàn)是舊的報文,就會給服務(wù)器發(fā)RST報文,直到正常的SYN到達服務(wù)器后才正常建立連接。

所以三次握手才有足夠的上下文信息來判斷當前連接是否是歷史連接。

(四)安全問題

我們知道 TCP 新建連接時,內(nèi)核會為連接分配一系列的內(nèi)存資源,如果采用兩次握手,就建立連接,那會放大 DDOS 攻擊的。

TCP 作為一種可靠傳輸控制協(xié)議,其核心思想:既要保證數(shù)據(jù)可靠傳輸,又要提高傳輸?shù)男?,而三次握手恰好可以滿足以上兩方面的需求!

初始序列號(ISN)

問:ISN 代表什么?意義何在?ISN 是固定不變的嗎?ISN為何要動態(tài)隨機?

ISN 是什么?

答:ISN全稱是Initial Sequence Number,是 TCP 發(fā)送方的字節(jié)數(shù)據(jù)編號的原點,告訴對方我要開始發(fā)送數(shù)據(jù)的初始化序列號

ISN 是固定不變的嗎?

答:ISN 如果是固定的,攻擊者很容易猜出后續(xù)的確認序號,為了安全起見,避免被第三方猜到從而發(fā)送偽造的RST報文,因此 ISN 是動態(tài)生成的

半連接隊列

什么是半連接隊列?

答:服務(wù)器第一次收到客戶端的SYN之后,就會處于SYN_RCVD狀態(tài),此時雙方還沒有完全建立連接。服務(wù)器會把這種狀態(tài)下請求連接放在一個隊列里,我們把這種隊列稱之為半連接隊列。

當然還有一個全連接隊列,就是已經(jīng)完成三次握手,建立起連接的就會放在全連接隊列中。如果隊列滿了就有可能會出現(xiàn)丟包現(xiàn)象。

三次握手可以攜帶數(shù)據(jù)嗎?

問:三次握手過程中,可以攜帶數(shù)據(jù)嗎?

答:第一次、第二次握手不可以攜帶數(shù)據(jù),而第三次握手是可以攜帶數(shù)據(jù)的。

我們可以思考一個問題,假如第一次握手可以攜帶數(shù)據(jù)的話,如果有人要惡意攻擊服務(wù)器,那他每次都在第一次握手中的 SYN 報文中放入大量的數(shù)據(jù),瘋狂著重復(fù)發(fā) SYN 報文,這會讓服務(wù)器花費大量的內(nèi)存空間來緩存這些報文,這樣服務(wù)器就更容易被攻擊了。

對于第三次握手,此時客戶端已經(jīng)處于連接狀態(tài),他已經(jīng)知道服務(wù)器的接收、發(fā)送能力是正常的了,所以可以攜帶數(shù)據(jù)是情理之中。

TCP 四次揮手

當我們的應(yīng)用程序不需要數(shù)據(jù)通信了,就會發(fā)起斷開 TCP 連接。建立一個連接需要三次握手,而終止一個連接需要經(jīng)過四次揮手。

淘寶二面,面試官居然把TCP三次握手問的這么詳細
  • 第一次揮手??蛻舳税l(fā)起FIN包(FIN = 1),客戶端進入FIN_WAIT_1狀態(tài)。TCP 規(guī)定,即使FIN包不攜帶數(shù)據(jù),也要消耗一個序號。

  • 第二次揮手。服務(wù)器端收到FIN包,發(fā)出確認包ACK(ack = u + 1),并帶上自己的序號 seq=v,服務(wù)器端進入了CLOSE_WAIT狀態(tài)。這個時候客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了,不過服務(wù)器端有數(shù)據(jù)發(fā)送的話,客戶端依然需要接收。客戶端接收到服務(wù)器端發(fā)送的ACK后,進入了FIN_WAIT_2狀態(tài)。

  • 第三次揮手。服務(wù)器端數(shù)據(jù)發(fā)送完畢后,向客戶端發(fā)送FIN包(seq=w ack=u+1),半連接狀態(tài)下服務(wù)器可能又發(fā)送了一些數(shù)據(jù),假設(shè)發(fā)送 seq 為 w。服務(wù)器此時進入了LAST_ACK狀態(tài)。

  • 第四次揮手??蛻舳耸盏椒?wù)器的FIN包后,發(fā)出確認包(ACK=1,ack=w+1),此時客戶端就進入了TIME_WAIT狀態(tài)。注意此時 TCP 連接還沒有釋放,必須經(jīng)過2*MSL后,才進入CLOSED狀態(tài)。而服務(wù)器端收到客戶端的確認包ACK后就進入了CLOSED狀態(tài),可以看出服務(wù)器端結(jié)束 TCP 連接的時間要比客戶端早一些。

問:為什么建立連接握手三次,關(guān)閉連接時需要是四次呢?

答:其實在 TCP 握手的時候,接收端發(fā)送SYN+ACK的包是將一個ACK和一個SYN合并到一個包中,所以減少了一次包的發(fā)送,三次完成握手。

對于四次揮手,因為 TCP 是全雙工通信,在主動關(guān)閉方發(fā)送 FIN 包后,接收端可能還要發(fā)送數(shù)據(jù),不能立即關(guān)閉服務(wù)器端到客戶端的數(shù)據(jù)通道,所以也就不能將服務(wù)器端的FIN包與對客戶端的ACK包合并發(fā)送,只能先確認ACK,然后服務(wù)器待無需發(fā)送數(shù)據(jù)時再發(fā)送FIN包,所以四次揮手時必須是四次數(shù)據(jù)包的交互。

問:為什么TIME_WAIT 狀態(tài)需要經(jīng)過 2MSL 才能返回到 CLOSE 狀態(tài)?

答:MSL指的是報文在網(wǎng)絡(luò)中最大生存時間。在客戶端發(fā)送對服務(wù)器端的FIN的確認包ACK后,這個ACK包是有可能不可達的,服務(wù)器端如果收不到ACK的話需要重新發(fā)送FIN包。

所以客戶端發(fā)送ACK后需要留出2MSL時間(ACK 到達服務(wù)器 + 服務(wù)器發(fā)送 FIN 重傳包,一來一回)等待確認服務(wù)器端確實收到了 ACK 包。

也就是說客戶端如果等待2MSL時間也沒有收到服務(wù)器端的重傳包FIN,說明可以確認服務(wù)器已經(jīng)收到客戶端發(fā)送的ACK。

還有第 2 個理由,避免新舊連接混淆。

在客戶端發(fā)送完最后一個ACK報文段后,在經(jīng)過2MSL時間,就可以使本連接持續(xù)的時間內(nèi)所產(chǎn)生的所有報文都從網(wǎng)絡(luò)中消失,使下一個新的連接中不會出現(xiàn)這種舊的連接請求報文。

你要知道,有些自作主張的路由器會緩存 IP 數(shù)據(jù)包,如果連接重用了,那么這些延遲收到的包就有可能會跟新連接混在一起。

總結(jié)

本篇文章以 TCP 三次握手和四次揮手這個經(jīng)典問題為主題,初步窺探了 TCP 協(xié)議的入門知識點,后邊會有一系列的文章,來分享 TCP 協(xié)議相關(guān)的方方面面,如果感興趣請關(guān)注我,我們一起把 TCP 協(xié)議徹底搞透徹了。

最后,幫大家總結(jié)一下 TCP 的核心知識點。我們知道 TCP 協(xié)議是可靠的,它主要是通過解決如下幾個問題來保證可靠性的:

  • 亂序

  • 丟包

  • 流控

  • 擁塞控制

TCP 是一個巨復(fù)雜的協(xié)議,基本上 TCP 涉及的所有內(nèi)容都是圍繞解決這幾個問題的,請務(wù)必時刻認真牢記。


	

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉