Java學習手冊:TCP 協議基礎

TCP 協議基礎

一、TCP 協議概述

TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,它在 IP 協議的基礎上提供了可靠的 數據傳輸服務。TCP 通過三次握手建立連接,通過四次揮手斷開連接,確保了數據傳輸的可靠性和有序性。

二、TCP 協議的特點

  • 面向連接 :在數據傳輸之前,TCP 協議需要在通信雙方之間建立一個連接,這個連接是雙向的、可靠的,確保數據可以按順序傳輸。
  • 字節流導向 :TCP 把數據看成一連串無結構的字節流,應用程序需要自己對數據進行分界。
  • 可靠的傳輸 :TCP 使用確認(ACK)、重傳、校驗和等機制來確保數據的可靠傳輸。如果接收方發送了 ACK 確認包,發送方可以確定數據已經成功到達;如果在規定時間內沒有收到 ACK 確認包,發送方會重傳數據。
  • 使用端口號 :TCP 協議通過端口號來區分不同的應用程序進程,使得一個主機可以同時運行多個網絡應用程序。
  • 全雙工通信 :TCP 支持通信雙方同時發送和接收數據,實現全雙工通信。
  • 面向字節流 :TCP 把數據看成一連串無結構的字節流,應用程序需要自己對數據進行分界。

三、TCP 協議的工作原理

  • 三次握手

    • 第一次握手 :客戶端向服務器發送一個帶有 SYN(同步序列編號)標志的數據包,請求建立連接。
    • 第二次握手 :服務器收到 SYN 數據包后,回復一個帶有 SYN 和 ACK(確認)標志的數據包,表示同意建立連接,并為客戶端分配資源。
    • 第三次握手 :客戶端收到服務器的 SYN-ACK 數據包后,再發送一個帶有 ACK 標志的數據包,確認連接建立成功。
  • 數據傳輸 :在連接建立后,客戶端和服務器就可以通過 TCP 協議進行數據傳輸了。TCP 協議會將數據分成多個數據段進行傳輸,并對每個數據段進行編號和確認,以確保數據的可靠傳輸。

  • 四次揮手

    • 第一次揮手 :主動關閉方(通常是客戶端)發送一個帶有 FIN(結束發送)標志的數據包,表示已經沒有數據要發送了。
    • 第二次揮手 :被動關閉方(通常是服務器)收到 FIN 數據包后,發送一個帶有 ACK 標志的數據包,確認收到 FIN 數據包。
    • 第三次揮手 :被動關閉方發送一個帶有 FIN 標志的數據包,表示自己也沒有數據要發送了。
    • 第四次揮手 :主動關閉方收到被動關閉方的 FIN 數據包后,發送一個帶有 ACK 標志的數據包,確認收到 FIN 數據包,連接斷開。

四、TCP 協議的可靠性保證機制

  • 確認(ACK)和重傳 :接收方收到數據后,會發送一個 ACK 確認包給發送方,表示已經成功接收到數據。如果發送方在規定時間內沒有收到 ACK 確認包,就會認為數據丟失,重新發送數據。
  • 序列號和確認號 :TCP 協議為每個數據段都分配了一個序列號,接收方通過序列號可以將數據按正確的順序進行重組。同時,接收方在發送 ACK 確認包時,會攜帶一個確認號,表示已經成功接收到序列號小于確認號的數據。
  • 校驗和 :TCP 協議會對數據段進行校驗和計算,接收方收到數據后,也會進行校驗和計算,如果校驗和不匹配,就認為數據損壞,丟棄該數據段并要求重傳。
  • 流量控制 :TCP 協議通過滑動窗口機制實現流量控制,接收方可以根據自己的接收能力調整窗口大小,發送方只能在窗口范圍內發送數據,避免了接收方因處理不過來而丟棄數據的情況。
  • 擁塞控制 :TCP 協議通過多種算法(如慢啟動、擁塞避免等)來實現擁塞控制,當網絡出現擁塞時,會自動減少發送速率,緩解網絡擁塞。

五、TCP 協議的應用場景

  • 網頁瀏覽(HTTP/HTTPS) :當我們通過瀏覽器訪問網頁時,瀏覽器與 Web 服務器之間通常使用 HTTP 或 HTTPS 協議進行通信,而這些協議都是基于 TCP 協議的。
  • 文件傳輸(FTP) :FTP 協議用于在客戶端和服務器之間傳輸文件,它也是基于 TCP 協議的,以確保文件傳輸的完整性和可靠性。
  • 電子郵件(SMTP、POP3、IMAP) :電子郵件的發送和接收通常使用 SMTP、POP3、IMAP 等協議,這些協議同樣基于 TCP 協議,以確保郵件數據的可靠傳輸。
  • 遠程登錄(SSH、Telnet) :通過 SSH 或 Telnet 進行遠程登錄時,客戶端與服務器之間的通信也是基于 TCP 協議的,以確保命令和數據的準確傳輸。

六、TCP 協議的性能和優化

  • TCP 長連接和短連接

    • 短連接 :每次傳輸數據都要建立和斷開連接,適合偶爾的小數據量傳輸,但頻繁建立和斷開會增加 overhead。
    • 長連接 :建立一次連接后多次復用傳輸數據,適合頻繁的數據交互,減少了建立和斷開連接的 overhead。
  • Nagle 算法與延遲 ACK :Nagle 算法通過將小的數據包合并成較大的數據包發送,減少網絡傳輸的 overhead。但可能會導致時延增加,對于實時性要求高的應用可以通過設置 TCP_NODELAY 選項來禁用 Nagle 算法。延遲 ACK 是接收方延遲發送 ACK 確認包,通常在收到一個數據包后,等待一段時間(通常是 200 毫秒)再發送 ACK,這樣可以將多個 ACK 合并在一起發送,減少網絡傳輸量。但這也可能會增加時延,需要根據具體應用進行權衡。

  • 發送緩沖區和接收緩沖區 :增大發送緩沖區和接收緩沖區可以提高數據傳輸的性能,減少數據丟失和重傳的可能性。可以通過 socket 選項(如 SO_SNDBUF、SO_RCVBUF)來調整緩沖區大小。

七、總結

TCP 協議作為傳輸層的核心協議之一,為網絡通信提供了可靠的傳輸服務。通過理解 TCP 協議的特點、工作原理、可靠性保證機制以及性能優化方法,開發人員可以更好地設計和優化基于 TCP 協議的網絡應用程序。在 JavaWeb 開發中,雖然通常使用高層的協議和框架(如 HTTP、Servlet 等)進行開發,但了解 TCP 協議的基礎知識有助于深入理解網絡通信的本質,為構建高性能、可靠的 Web 應用提供堅實的基礎。

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

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

相關文章

刪除排序數組中的重復項--LeetCode

題目 給你一個非嚴格遞增排列的數組 nums ,請你原地刪除重復出現的元素,使每個元素 只出現一次 ,返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums 中唯一元素的個數。 考慮 nums 的唯一元素的數量為 k &#xff0c…

【Elasticsearch】入門篇

Elasticsearch 入門 前言 官方地址:Elastic — 搜索 AI 公司 | Elastic ES 下載地址:Past Releases of Elastic Stack Software | Elastic 文檔:什么是 Elasticsearch?|Elasticsearch 指南 簡介 Elasticsearch 是一個分布式、…

2024新版仿藍奏云網盤源碼,已修復已知BUG,樣式風格美化,可正常運營生產

說起網盤源碼,網絡上出現的也很多,不過可真正正能夠用于運營的少之又少。今天將的藍奏云網盤源碼,其實網絡上也有,不過是殘缺版,bug很多。我今天分享的仿藍奏云模板是經過長時間測試修復后的源碼,源碼實測可…

機器人結構認知與安裝

機器人結構認知與安裝 1. ES機器人系統結構與硬件組成 核心組件: OPPO ES5機器人系統由機器人本體、控制手柄、48V電源和OPPO Studio終端構成。一體化底座:包含控制主板、安全接口板、監測保護電路單元,支持外接急停開關,采用光耦…

sass 變量

基本使用 如果分配給變量的值后面添加了 !default 標志 ,這意味著該變量如果已經賦值,那么它不會被重新賦值,但是,如果它尚未賦值,那么它會被賦予新的給定值。 如果在此之前變量已經賦值,那就不使用默認值…

python自動化測試1——鼠標移動偏移與移動偏移時間

python對自動化測試運維提供了一個簡易的庫—pyautogui,我們可以借助這個庫進行開發。 import pyautogui as pp.moveTo(100,100,3) 這里將鼠標光標移動到100,100處,并且用時3秒移動 鼠標移動是以固定坐標為單位,鼠標偏移則是在…

LX4-數據手冊相關

數據手冊相關 一 如何獲取數據手冊 ST官網:www.st.com 中文社區網: https://www.stmcu.com.cn/Designresource/list/STM32F1/document/datasheet 淘寶的商品詳情頁 二 如何閱讀數據手冊 芯片手冊 定義:由芯片制造商提供,詳細…

如何使用 uv 構建 Python 包并本地安裝

本文將逐步指導你創建一個簡單的 Python 包,并將其本地安裝到機器或云環境中。完成本教程后,你將擁有一個可復用的 Python 庫,可直接通過 pip 安裝或在項目中導入使用。 步驟詳解 Step 0: 選擇構建工具 - 使用 uv 推薦理由:uv 是…

Linux之安裝配置Nginx

Linux系統下安裝配置Nginx的詳細步驟如下: 一、準備工作 系統環境:確保Linux系統已安裝,并且具有網絡連接(以便在線安裝依賴或下載Nginx)。 安裝依賴:Nginx依賴于一些開發庫和工具,如gcc、pcr…

計算機視覺cv入門之答題卡自動批閱

前邊我們已經講解了使用cv2進行圖像預處理與邊緣檢測等方面的知識,這里我們以答題卡自動批閱這一案例來實操一下。 大致思路 答題卡自動批閱的大致流程可以分為這五步:圖像預處理-尋找考試信息區域與涂卡區域-考生信息區域OCR識別-涂卡區域填涂答案判斷…

語音合成之一TTS技術發展史綜述

TTS技術發展史綜述 引言TTS技術的起源與早期探索基于規則的TTS系統:原理與發展共振峰合成技術:作用與影響拼接合成技術:發展與應用統計參數語音合成:以隱馬爾可夫模型(HMM)為例深度學習驅動的TTS&#xff1…

目標檢測中的損失函數(一) | IoU GIoU DIoU CIoU EIoU Focal-EIoU

🚀該系列將會持續整理和更新BBR相關的問題,如有錯誤和不足懇請大家指正,歡迎討論!!! 📦目標檢測的損失函數一般包含三個部分,分別是邊界框損失也可稱為定位損失、置信度損失和分類損…

結構型模式:適配器模式

什么是適配器模式? 適配器模式(Adapter Pattern)是一種常用的結構型設計模式,它的主要作用是將一個類的接口轉換成客戶端期望的另一個接口。就像現實生活中的各種轉接頭一樣,適配器模式使得原本因接口不兼容而無法一起…

AI Agent認知框架(ReAct、函數調用、計劃與執行、自問自答、批判修正、思維鏈、思維樹詳解和對比,最后表格整理總結

以下是主流AI Agent認知框架的詳細說明、對比及表格總結: 1. 各認知框架詳解 (1) ReAct (Reasoning Action) 定義:結合推理(Reasoning)和行動(Action)的循環過程。核心機制: 模型先推理&…

特征存儲的好處:特征存儲在機器學習開發中的優勢

隨著企業尋求提升機器學習生產力和運營能力 (MLOps),特征存儲 (Feature Store) 的普及度正在迅速提升。隨著 MLOps 技術的進步,特征存儲正成為機器學習基礎設施的重要組成部分,幫助企業提升模型的性能和解釋能力,并加速新模型與生產環境的集成。這些存儲充當集中式存儲庫,…

SPRING-AI 官方事例

springAI 關于最近看了很多SpringAi,閱讀很多代碼都感覺特別陌生 SpringAI依賴的springBoot版本都是3.3以上, 以及很多SpringAi都是依賴JDK版本最低17, 并且出現了很多新關鍵字例如 var,record 等寫法, 煙花繚亂得lambda 表達式, 到處都是使用build 構…

Visual Studio Code 使用tab鍵往左和往右縮進內容

使用VSCode寫東西,經常遇到多行內容同時縮進的情況,今天寫文檔的時候就碰到,記錄下來: 往右縮進 選中多行內容,點tab鍵,會整體往右縮進: 往左縮進 選中多行內容,按shifttab&am…

機器學習(7)——K均值聚類

文章目錄 1. K均值(K-means)聚類是什么算法?2. 核心思想2. 數學目標3. 算法步驟3.1. 選擇K個初始質心:3.2.迭代優化3.3. 重復步驟2和步驟3: 4. 關鍵參數5. 優缺點6. 改進變種7. K值選擇方法8. Python示例9. 應用場景10…

爬蟲案例-爬取某企數據

文章目錄 1、準備要爬取企業名稱數據表2、爬取代碼3、查看效果 1、準備要爬取企業名稱數據表 企業名稱紹興市袍江王新國家庭農場紹興市鄭杜糧油專業合作社紹興市越城區興華家庭農場紹興市越城區銳意家庭農場紹興市越城區青甸畈家庭農場紹興市袍江王新國家庭農場紹興市袍江月明…

足球 AI 智能體技術解析:從數據采集到比賽預測的全鏈路架構

一、引言 在足球運動數字化轉型的浪潮中,AI 智能體正成為理解比賽、預測賽果的核心技術引擎。本文從工程實現角度,深度解析足球 AI 的技術架構,涵蓋數據采集、特征工程、模型構建、實時計算到決策支持的全鏈路技術方案,揭示其背后…