面試突擊68:為什麼 TCP 需要 3 次握手?
攜手創作,共同成長!這是我參與「掘金日新計劃 · 8 月更文挑戰」的第1天,點選檢視活動詳情
TCP 三次握手是一道經典的面試題,它是指 TCP 在傳遞資料之前,需要進行 3 次互動才能正式建立起連線,並進行資料傳遞。 TCP 之所以需要 3 次握手是因為 TCP 雙方都是全雙工的。所謂全雙工指的是,TCP 任何一端既是傳送資料方,又是接收資料方,因此這就要求 TCP 通訊雙方既要保證自己的傳送能力,又要保證自己的接收能力才行。 這就好像打電話時,通訊雙方都要保證自己能話筒(傳遞聲音)和耳機(接收聲音)都是正常的才行,這樣才能進行有效的交流,通常打電話時,都是這樣開頭的:
- 我:喂,能聽到我說話嗎?
- 對方:能聽到你說話,你能聽到我說話嗎?
- 我:能聽到你說話,那我們就來聊正事吧。
TCP 三次握手也是相同的道理,3 次握手證明的能力詳情如下:
TCP 三次握手流程
TCP 三次握手流程如下:
- 客戶端傳送 SYN 給伺服器端,表示希望建立連線;
- 伺服器端接收到訊息之後,迴應一個 SYN 和 ACK(確認應答)給客戶端;
- 客戶端收到伺服器端的 SYN 報文之後,迴應一個 ACK 報文。
具體執行流程如下圖所示:
總結
TCP 之所以需要 3 次握手,是因為 TCP 通訊雙方都是全雙工的,所以要經過 3 次互動才能確認雙方的傳送能力和接收能力,並且 TCP 握手必須是 3 次,如果是 2 次握手,不能證明伺服器端的傳送能力和客戶端的接收能力;也不能是 4 次握手,因為 3 次已經能證明的事情,再互動握手 1 次完全沒有必要。
參考 & 鳴謝
《碼出高效:Java開發手冊》
《Offer 來了》
是非審之於己,譭譽聽之於人,得失安之於數。
公眾號:Java面試真題解析
「其他文章」
- 面試官:什麼是雙親委派模型?
- 面試官:熔斷和降級有什麼區別?
- 寬表為什麼橫行?
- 有沒有完全自主的國產化資料庫技術
- 面試突擊64:瞭解 HTTP 協議嗎?
- 面試突擊80:說一下 Spring 中 Bean 的生命週期?
- 面試突擊89:事務隔離級別和傳播機制有什麼區別?
- 面試突擊82:SpringBoot 中如何操作事務?
- 面試突擊87:說一下 Spring 事務傳播機制?
- 面試突擊81:什麼是跨域問題?如何解決?
- 面試突擊71:GET 和 POST 有什麼區別?
- 面試突擊70:什麼是粘包和半包?怎麼解決?
- 面試突擊68:為什麼 TCP 需要 3 次握手?
- 面試突擊66:請求轉發和請求重定向有什麼區別?
- 面試突擊63:MySQL 中如何去重?
- 面試突擊65:為什麼要用HTTPS?它有什麼優點?
- 面試突擊62:group by 有哪些注意事項?
- 面試突擊53:常見的 HTTP 狀態碼有哪些?
- 面試突擊61:說一下MySQL事務隔離級別?
- 面試突擊52:什麼是三正規化?它有什麼用?