TCP和Http協議

TCP 三次握手:

第一次握手?:

  • 初始狀態:開始時,客戶端處于?CLOSED(關閉)狀態服務端處于?LISTEN(監聽)狀態,等待客戶端的連接請求。
  • 客戶端發送請求:客戶端向服務端發送一個?SYN(Synchronize Sequence Numbers,同步序列號)報文,該報文將?SYN?標志位置為 1,表示這是一個連接請求報文。同時,客戶端會隨機初始化一個序列號(seq=x,這里的?x?是一個隨機生成的數值),并將此序列號置于 TCP 首部的「序號」字段中。此報文不包含應用層數據,發送完后,客戶端進入?SYN_SENT(已發送 SYN 報文等待確認)狀態。

第二次握手?:

  • 服務端接收并響應:服務端收到客戶端的?SYN?報文后,知道客戶端想要建立連接。服務端會以自己的?SYN?報文作為應答,并且也隨機初始化自己的序號(seq=yy?也是一個隨機生成的數值),將此序號填入 TCP 首部的「序號」字段中。同時,把客戶端的?seq?值加 1(即?ack=x+1作為?ACK(Acknowledgment,確認)的值,表示自己已經收到了客戶端的?SYN,接著把?SYN?和?ACK?標志位置為 1
  • 服務端發送報文:最后把該報文發給客戶端,此報文也不包含應用層數據。發送完這個報文后,服務端進入?SYN_RCVD(已收到 SYN 報文等待客戶端確認)狀態。

第三次握手

  • 客戶端確認:客戶端收到服務端的?SYN+ACK?報文后,會對服務端的?SYN?分組進行確認。客戶端將?ACK?標志位置為 1,確認序號?ack=y+1(這里的?y?是服務端在第二次握手中發送的序列號),并且把自己的序列號加 1(即?seq=x+1,這里的?x?是客戶端在第一次握手中發送的序列號),然后將該報文發送給服務端。此報文可以攜帶客戶到服務端的數據,但如果不攜帶數據,則不消耗序號。
  • 連接建立:服務端收到客戶端的確認報文后,也進入?ESTABLISHED(已建立連接)狀態。至此,客戶端和服務端都完成了三次握手,雙方的 TCP 連接正式建立,之后就可以開始相互發送數據了。

第一次握手斷開:客戶端會在一段時間后超時并重傳?SYN?報文,以嘗試重新建立連接。

第二次握手斷開:客戶端也會進行重傳?SYN?報文。而服務器端在發送?SYN-ACK?報文后,會進入?SYN_RCVD(已收到?SYN?報文等待客戶端確認)狀態,并等待客戶端的?ACK?報文。如果服務器端在一段時間內沒有收到客戶端的?ACK?報文,也會認為連接建立失敗,并釋放為此次連接申請的資源。

第三次握手斷開服務器端由于沒有收到客戶端的確認報文,會多次重傳?SYN-ACK?報文,等待客戶端的回應。最終會認為連接建立失敗,并釋放相關資源。客戶端在發送?ACK?報文后,會認為連接已經建立成功。當客戶端后續向服務器發送數據時,服務器會以?RST(復位)包響應客戶端,客戶端收到?RST?包后,就會意識到連接出現了問題。

TCP 四次揮手:

第一次揮手?客戶端發出連接釋放報文,并且停止發送數據。

第二次揮手?服務器端接收到連接釋放報文后,發出確認報文,服務端就進入了CLOSE-WAIT 關閉等待狀態

第三次揮手?客戶端接收到服務器端的確認請求后,客戶端就會進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文,服務器將最后的數據發送完畢后,就向客戶端發送連接釋放報文,服務器就進入了LAST-ACK(最后確認)狀態,等待客戶端的確認

第四次揮手 客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態,但此時TCP連接還未終止,必須要經過2MSL后(最長報文壽命),當客戶端撤銷相應的TCB后,客戶端才會進入CLOSED關閉狀態,服務器端接收到確認報文后,會立即進入CLOSED關閉狀態,到這里TCP連接就斷開了,四次揮手完成

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

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

相關文章

圖論 之 最小生成樹

文章目錄 題目1584.連接所有點的最小費用 最小生成樹MST,有兩種算法進行求解,分別是Kruskal算法和Prim算法Kruskal算法從邊出發,適合用于稀疏圖Prim算法從頂點出發,適合用于稠密圖:基本思想是從一個起始頂點開始&#…

前端面試之Box盒子布局:核心知識與實戰解析

目錄 引言:布局能力決定前端高度 一、盒模型基礎:看得見的像素戰爭 1. 標準盒模型 vs IE盒模型 2. 核心組成公式 3. 視覺格式化模型 二、傳統布局三劍客 1. 浮動布局(Float Layout) 2. 定位布局(Position Layou…

OnlyOffice:前端編輯器與后端API實現高效辦公

OnlyOffice:前端編輯器與后端API實現高效辦公 一、OnlyOffice概述二、前端編輯器:高效、靈活且易用1. 完善的編輯功能2. 實時協作支持3. 自動保存與版本管理4. 高度自定義的界面 三、后端API:管理文檔、用戶與權限1. 輕松集成與定制2. 實時協…

Python多線程編程理解面試題解析

一、多線程介紹 Python 的多線程是一種實現并發編程的方式,允許程序同時執行多個任務。然而,由于 Python 的全局解釋器鎖(GIL)的存在,多線程在某些場景下可能無法充分利用多核 CPU 的性能。以下是對 Python 多線程的理…

如何通過 Python 實現一個消息隊列,為在線客服系統與海外運營的APP對接

對方有兩個核心需求: 訪客上線的時候,要通知對方的業務系統,業務系統根據訪客的身份信息,推送個性化的歡迎詞。訪客完成下單的時候,要能推送一個下單成功的通知,并且包含訂單信息和鏈接。根據這兩個需求,那就需要實現由客服系統到業務系統的消息隊列推送,以及通過 Open…

中文Build a Large Language Model (From Scratch) 免費獲取全文

中文pdf下載地址:https://pan.baidu.com/s/1aq2aBcWt9vYagT2-HuxdWA?pwdlshj 提取碼:lshj 原文、代碼、視頻項目地址:https://github.com/rasbt/LLMs-from-scratch 翻譯工具:沉浸式翻譯(https://app.immersivetrans…

項目設置內網 IP 訪問實現方案

在我們平常的開發工作中,項目開發、測試完成后進行部署上線。比如電商網站、新聞網站、社交網站等,通常對訪問不會進行限制。但是像企業內部網站、內部管理系統等,這種系統一般都需要限制訪問,比如內網才能訪問等。那么一個網站應…

elf_loader:一個使用Rust編寫的ELF加載器

本文介紹一個使用Rust實現的ELF加載器。 下面是elf_loader的倉庫鏈接: github: https://github.com/weizhiao/elf_loaderhttps://github.com/weizhiao/elf_loader crates.io: https://crates.io/crates/elf_loaderhttps://crates.io/cra…

數據庫驅動免費下載(Oracle、Mysql、達夢、Postgresql)

數據庫驅動找起來好麻煩,我整理到了一起,需要的朋友免費下載:驅動下載 目前收錄了Oracle、Mysql、達夢、Postgresql的數據庫驅動的多個版本,后續可能會分享更多。

對接扣子雙向流式 TTS Demo

Web端對接Demo <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>TTS 測試</title> </head><body><h1>TTS 測試頁面</h1><textarea id"textInput" rows&…

科普:“git“與“github“

Git與GitHub的關系可以理解為&#xff1a;Git是一種軟件工具&#xff0c;而GitHub則是一個在線平臺&#xff0c;它們是“一家子”。二者的關聯最直接體現在你通過Git在GitHub倉庫中clone軟件包到你的機器中來。 具體來說&#xff1a; 一、Git 定義&#xff1a;Git是一個開源的…

jsherp importItemExcel接口存在SQL注入

一、漏洞簡介 很多人說管伊佳ERP&#xff08;原名&#xff1a;華夏ERP&#xff0c;英文名&#xff1a;jshERP&#xff09;是目前人氣領先的國產ERP系統雖然目前只有進銷存財務生產的功能&#xff0c;但后面將會推出ERP的全部功能&#xff0c;有興趣請幫點一下 二、漏洞影響 …

【目標檢測】【BiFPN】EfficientDet:Scalable and Efficient Object Detection

EfficientDet&#xff1a;可擴展且高效的目標檢測 0.論文摘要 模型效率在計算機視覺中變得越來越重要。在本文中&#xff0c;我們系統地研究了用于目標檢測的神經網絡架構設計選擇&#xff0c;并提出了幾項關鍵優化以提高效率。首先&#xff0c;我們提出了一種加權雙向特征金…

拖動線條改變區域大小

瀏覽網頁時&#xff0c;經常看到這樣一個功能&#xff0c;可以通過拖拽線條&#xff0c;改變左右區域大小 在管理后臺中更為常見&#xff0c;菜單的寬度如果固定死&#xff0c;而后續新增的菜單名稱又不固定&#xff0c;所以很可能導致換行&#xff0c;樣式不太美觀&#xff0c…

輸入框元素覆蓋沖突

后端響應中的 "trainingKbGroupName": "基礎死型" 通過searchForm2.initFormData(rowData[0]);操作會把基礎死型四個字填充到<div class"col-sm-5 form-group"> <label class"col-sm-3 control-label">知識點分組名稱<…

【LLM】Llama 3 論文精讀

導言 Llama 3.5系列模型的發布&#xff1a; Llama 3.5系列模型是開源的&#xff0c;最大模型參數為405B&#xff08;[[稠密Transformer架構]]&#xff0c;而不是MOE 架構&#xff09;&#xff0c;上下文窗口長度為128K。模型支持多語言和工具使用&#xff0c;并且在某些評估中已…

selenium環境搭建

1. 安裝selenium pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/如遇以下報錯 Getting requirements to build wheel ... errorerror: subprocess-exited-with-error Getting requirements to build wheel did not run successfully.│ exit code: 1╰─…

My first Android application

界面元素組成&#xff1a; 功能代碼&#xff1a; /*實現功能&#xff1a;當輸入內容后&#xff0c;歡迎文本發生相應改變&#xff0c;并清除掉文本域內容當未輸入任何內容時&#xff0c;彈出提示文本以警告用戶*/val greetingText findViewById<TextView>(R.id.printer)…

js版本ES6、ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14[2023]新特性

ES全稱ECMAScript,ECMAScript是ECMA制定的標準化腳本語言,本文講述Javascript[ECMAScript]版本ES6、ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14[2023]的新特性,幫助朋友們更好的熟悉和使用Javascript ES5 1.嚴格模式 use strict2.Object getPrototypeOf,返回一個對象的原…

Redis數據結構-String字符串

1.String字符串 字符串類型是Redis中最基礎的數據結構&#xff0c;關于數據結構與要特別注意的是&#xff1a;首先Redis中所有的鍵的類型都是字符串類型&#xff0c;而且其他集中數據結構也都是在字符串類似基礎上進行構建&#xff0c;例如列表和集合的元素類型是字符串類型&a…