面試實戰 問題三十 HTTP協議中TCP三次握手與四次揮手詳解

HTTP協議中TCP三次握手與四次揮手詳解

在HTTP協議中,連接建立和斷開依賴于底層的TCP協議。雖然HTTP本身不定義握手過程,但所有HTTP通信都通過TCP三次握手建立連接,通過四次揮手斷開連接。以下是詳細解析:


一、TCP三次握手(連接建立)
客戶端服務器SYN=1, seq=x (請求同步)SYN_SENT狀態SYN=1, ACK=1, seq=y, ack=x+1 (確認請求)SYN_RCVD狀態ACK=1, seq=x+1, ack=y+1 (確認響應)ESTABLISHED狀態ESTABLISHED狀態客戶端服務器
  1. 第一次握手(SYN)

    • 客戶端發送SYN=1標志的TCP包,攜帶隨機初始序列號seq=x
    • 客戶端進入SYN_SENT狀態
    • 目的:檢測客戶端的發送能力
  2. 第二次握手(SYN+ACK)

    • 服務器返回SYN=1ACK=1標志的包
    • 攜帶自己的序列號seq=y和確認號ack=x+1
    • 服務器進入SYN_RCVD狀態
    • 目的:檢測服務器的收發能力
  3. 第三次握手(ACK)

    • 客戶端發送ACK=1標志的包
    • 攜帶seq=x+1ack=y+1
    • 雙方進入ESTABLISHED狀態
    • 目的:確認客戶端接收能力正常

為什么需要三次握手?

  • 防止歷史連接干擾(兩次握手時失效請求可能建立無效連接)
  • 最小化握手次數保證可靠性(四次握手會降低效率)
  • 避免資源浪費:$ \text{可靠性} \propto \frac{1}{\text{握手次數}} $(三次是最優解)

二、TCP四次揮手(連接斷開)
客戶端服務器FIN=1, seq=u (請求斷開)FIN_WAIT_1狀態ACK=1, seq=v, ack=u+1 (確認請求)CLOSE_WAIT狀態FIN_WAIT_2狀態FIN=1, ACK=1, seq=w, ack=u+1 (準備斷開)LAST_ACK狀態ACK=1, seq=u+1, ack=w+1 (最終確認)TIME_WAIT狀態(2MSL)CLOSED狀態客戶端服務器
  1. 第一次揮手(FIN)

    • 主動關閉方(如客戶端)發送FIN=1標志的包,序列號seq=u
    • 進入FIN_WAIT_1狀態
  2. 第二次揮手(ACK)

    • 被動關閉方(如服務器)返回ACK=1標志的包
    • 攜帶確認號ack=u+1和自身序列號seq=v
    • 服務器進入CLOSE_WAIT狀態,客戶端進入FIN_WAIT_2狀態
  3. 第三次揮手(FIN)

    • 服務器處理完剩余數據后發送FIN=1ACK=1標志的包
    • 攜帶新序列號seq=w和確認號ack=u+1
    • 服務器進入LAST_ACK狀態
  4. 第四次揮手(ACK)

    • 客戶端發送ACK=1標志的包(確認號ack=w+1
    • 客戶端進入TIME_WAIT狀態(等待2MSL時間)
    • 服務器收到后立即關閉連接

關鍵設計解析

  1. 四次揮手的必要性:TCP連接是全雙工的,需獨立關閉兩個方向的數據流
  2. TIME_WAIT狀態的作用:
    • 確保最后一個ACK到達服務器(未到達時會重傳FIN)
    • 防止舊連接數據包干擾新連接
    • 等待時間:$ 2 \times \text{MSL} $(默認60秒,MSL=30秒)
  3. 服務器CLOSE_WAIT狀態:處理遺留數據的關鍵階段

三、HTTP協議與TCP的關系
階段HTTP行為TCP狀態變化
請求發起瀏覽器發送HTTP請求觸發三次握手
數據傳輸通過已建立的TCP連接傳輸HTTP報文ESTABLISHED狀態
連接關閉短連接:每次請求后關閉
長連接:復用
觸發四次揮手
錯誤處理連接超時/重置TCP重傳機制激活
  • HTTP/1.0:默認短連接(每次請求完成即四次揮手)
  • HTTP/1.1+:默認長連接(復用TCP連接,減少握手揮手開銷)

四、Java網絡編程驗證
  1. 觸發三次握手

    try (Socket socket = new Socket("www.example.com", 80)) {// 連接建立時自動完成三次握手
    }  // 退出try-block時自動觸發四次揮手
    
  2. 觀察TCP狀態(Linux)

    netstat -nat | grep ESTABLISHED
    netstat -nat | grep TIME_WAIT
    
  3. 模擬連接重置

    // 設置SO_LINGER強制關閉連接
    socket.setSoLinger(true, 0);  // 發送RST而非FIN
    

五、面試高頻問題
  1. 為什么連接建立是三次握手,斷開卻要四次揮手?

    • 建立連接時服務器可將SYN+ACK合并發送
    • 斷開連接時服務器需等待數據處理完畢才能發FIN
  2. TIME_WAIT狀態過多會導致什么問題?如何解決?

    • 問題:耗盡端口資源(Linux默認端口范圍:net.ipv4.ip_local_port_range
    • 解決方案:
      // Java中啟用端口復用
      socket.setReuseAddress(true);
      
  3. TCP握手能保證100%可靠嗎?

    • 不能!三次握手比兩次更可靠,但網絡本質不可靠(如握手成功后斷網)
  4. Wireshark抓包如何識別握手過程?

    • SYN包:Flags [S]
    • SYN+ACK包:Flags [S.]
    • FIN包:Flags [F]

總結

過程關鍵特征設計目的
三次握手SYN → SYN+ACK → ACK最小代價驗證雙向通信能力
四次揮手FIN → ACK → FIN → ACK安全關閉雙向數據流
TIME_WAIT等待2MSL(60秒)容錯處理+防止舊數據干擾

核心結論:HTTP通信建立在TCP連接之上,理解三次握手和四次揮手是優化網絡性能(如連接復用)和調試網絡問題的基石


相關問題

  1. TCP半連接(SYN Flood)攻擊的原理是什么?Java如何防御?
  2. 為什么HTTP/2需要多路復用?這與TCP握手有什么關系?
  3. Java中Socket.close()Socket.shutdownOutput()在揮手過程中的區別?
  4. 如何通過Wireshark抓包分析HTTPS連接的TLS握手過程?
  5. TCP的Keep-Alive機制如何影響HTTP長連接的超時管理?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93160.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93160.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93160.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

讀《精益數據分析》:雙邊市場的核心指標分析

雙邊市場數據分析指南:從指標體系到實戰落地(基于《精益數據分析》框架)在互聯網平臺經濟中,雙邊市場(如電商、出行、外賣、自由職業平臺等)的核心矛盾始終是"供需平衡與效率優化"。這類平臺連接…

Queue參考代碼

queue.c #include "queue.h" #include "stdlib.h" // 初始化循環隊列 void initializeCircularQueue(CircularQueue *cq, uint8_t *buffer, uint32_t size) {cq->front 0;cq->rear 0;cq->count 0;cq->size size;cq->data buffer; }…

通過時間計算地固系到慣性系旋轉矩陣

通過時間計算地固系到慣性系旋轉矩陣 1. 引言 在航天工程和衛星導航領域,經常需要在地固坐標系(ECEF)和慣性坐標系(ECI)之間進行轉換。本文將詳細介紹如何根據UTC時間計算這兩個坐標系之間的旋轉矩陣,并提供完整的C語言實現。 2. 基本概念 2.1 坐標系定義…

【Datawhale AI 夏令營】金融文檔分析檢索增強生成系統的架構演變與方法論進展

# **金融文檔分析檢索增強生成系統的架構演變與方法論進展****第一部分:基礎原則和基線系統分析****第一部分:金融領域檢索增強生成范式的解構****第二部分:基線剖析:流水線的二分法****同步軌跡 (SimpleRAG)****異步改進 (AsyncS…

C語言相關簡單數據結構:順序表

目錄 1.順序表的概念及結構 1.1 線性表 如何理解邏輯結構和物理結構? 1.2 順序表分類 順序表和數組的區別: 順序表分類: 靜態順序表 動態順序表 1.3 動態順序表的實現 初始化 尾插 頭插 尾刪 頭刪 在指定位置之前插入數據 刪…

nginx配置代理服務器

Nginx 作為代理服務器時,主要用于反向代理(最常用,轉發客戶端請求到后端服務)或正向代理(較少用,為客戶端提供訪問外部網絡的代理)。以下是兩種場景的具體配置示例: 一、反向代理配置…

MySQL數據庫知識體系總結 20250813

一、數據庫的原理 1.數據庫的分類 我們可以根據數據的結構類型,將數據分成三類,分別是:結構化數據,半結構化數據,非結構化數據。 要點:對于結構化數據來講通常是先有結構再有數據。要點:對于半…

C++ 中構造函數參數對父對象的影響:父子控件管理機制解析

文章目錄C 中構造函數參數對父對象的影響:父子控件管理機制解析1. Qt 中的父對象管理機制2. 構造函數傳遞父對象的不同方式2.1. 父控件是 QWidget parent(通用方式)分析:2.2. 父控件是 Books_Client parent(限制父控件…

直播美顏SDK開發實戰:高性能人臉美型的架構與實現

在直播行業里,美顏已經不再是錦上添花,而是標配中的標配。無論是游戲主播、帶貨達人,還是唱歌、跳舞的才藝主播,直播美顏SDK往往決定了用戶的第一印象和停留時長。尤其是高性能人臉美型技術,不僅能讓主播的五官更加自然…

JavaWeb(蒼穹外賣)--學習筆記18(Apache POI)

前言 本篇文章是學習B站黑馬程序員蒼穹外賣的學習筆記📑。我的學習路線是Java基礎語法-JavaWeb-做項目,管理端的功能學習完之后,就進入到了用戶端微信小程序的開發,用戶端開發的流程大致為用戶登錄—商品瀏覽(其中涉及…

OpenJDK 17 源碼 安全點輪詢的信號處理流程

OpenJDK 17 源碼,安全點輪詢的信號處理流程如下(重點分析安全點輪詢相關部分):核心信號處理流程信號觸發:當線程訪問安全點輪詢內存頁時(SafepointMechanism::is_poll_address),會觸…

InfluxDB 在工業控制系統中的數據監控案例(一)

工業控制系統數據監控的重要性**在工業領域,生產過程的復雜性和連續性使得數據監控成為保障生產穩定運行的關鍵環節。通過實時收集、處理和分析生產數據,企業能夠及時掌握設備運行狀態、產品質量信息以及生產流程的各項參數,從而為生產決策提…

嵌入式學習(day26)frambuffer幀緩沖

一、UI技術: User interface(1)framebuffer: 幀緩沖、幀緩存技術 Linux內核專門為圖形化顯示提供的一套應用程序接口。流程如下:1. 打開顯示設備 (/dev/fb0) 2. 獲取顯示設備相關參數(分辨率,像素格式)---》…

408每日一題筆記 41-50

答案:A 解析:CSMA/CD 協議里,“爭用期” 就是信號在總線上最遠兩個端點之間往返傳輸的時間,也叫沖突窗口,選 A。

【物聯網】基于樹莓派的物聯網開發【26】——樹莓派開啟串口并配置串口助手Minicom

串口配置 (1)打開串口,終端輸入命令: sudo raspi-config (2)串口設置選擇Interfacing Options→Serial port→No→Yes→ok(3)設置開啟,打開串口 (4&#xff0…

考研/考公知識共享平臺的設計與實現-項目分享

考研/考公知識共享平臺的設計與實現-項目分享項目介紹項目摘要學生前臺用例圖管理員用例圖系統流程圖系統功能結構圖實體圖學生信息實體圖資料信息管理實體圖報考指南管理寫在最后項目介紹 使用者:管理員、學生前臺、學生后臺 開發技術:MySQLJavaSpring…

一鍵設置 NTP 時區的腳本(親測,適用于部署 K8S 的前置環境)

文章目錄一、時區和時間同步的配置命令二、完整腳本ntp_timezone_setup.sh三、使用方法3.1、創建腳本3.2、賦予執行權限3.3、運行腳本3.4、驗證一、時區和時間同步的配置命令 整理用于做時區和時間同步的配置幾條命令分別如下: 1?? 編輯 chrony 配置 vim /etc/…

BPMN編輯器技術實現總結AI時代的工作流編輯器

項目概述 基于 diagram.js 的 BPMN 流程設計器,通過依賴注入(DI)實現模塊化擴展,自定義模塊擴展與SVG圖形渲染。后端工作流引擎自定義統一任務調度函數,實現異構模型統一調用。 核心技術架構 1. diagram.js 架構基礎 核心模塊組成 Canv…

兩階段最小二乘法(2SLS)與 工具變量(IV)模型

以下是關于兩階段最小二乘法(2SLS)與工具變量(IV)模型關系的系統解析,結合計量經濟學理論與論文上下文進行說明:一、核心關系:2SLS是IV模型的實現方法 1. IV模型:解決內生性的理論框…

熬夜面膜賽道跑出的新物種

在快節奏的現代生活中,熬夜已成為都市人群的常態,深夜11點后的朋友圈總是一片“失眠”哀嚎。隨之而來的是“熬夜肌”問題的激增——暗沉、干燥、屏障受損等訴求催生了龐大的熬夜面膜市場。2025年,中國面膜線上規模已達484億元,其中…