日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點(diǎn)晴永久免費(fèi)OA]從 TCP 到 WebSocket:一次搞懂網(wǎng)絡(luò)通信的三層演進(jìn)

freeflydom
2025年7月3日 9:21 本文熱度 46

引言

在現(xiàn)代應(yīng)用開發(fā)中,網(wǎng)絡(luò)通信是繞不開的核心議題。無論是構(gòu)建傳統(tǒng)的 Web 應(yīng)用,還是開發(fā)需要實(shí)時交互的系統(tǒng)(如在線協(xié)作工具、金融行情推送、多人游戲),我們總會與 TCP、HTTP、WebSocket 這些名詞打交道。它們之間究竟是何種關(guān)系?為何有了 HTTP 之后還需要 WebSocket?

本文旨在從開發(fā)者的視角,深入剖析這三者之間的技術(shù)關(guān)聯(lián)與演進(jìn)邏輯。我們將逐層遞進(jìn),從底層的傳輸協(xié)議到上層的應(yīng)用規(guī)范,清晰地揭示它們各自的職責(zé)、設(shè)計哲學(xué)以及在不同場景下的技術(shù)選型考量。

第一層:基石 - TCP,一切可靠通信的源頭

TCP (Transmission Control Protocol,傳輸控制協(xié)議) 是網(wǎng)絡(luò)協(xié)議棧中的傳輸層協(xié)議。它的核心使命只有一個:提供一個可靠的、面向連接的、基于字節(jié)流的端到端通信服務(wù)??梢詫⑵淅斫鉃榫W(wǎng)絡(luò)世界的“可靠管道”,后續(xù)的應(yīng)用層協(xié)議(如HTTP和WebSocket)都構(gòu)建在這條管道之上。

TCP 的核心機(jī)制

為了實(shí)現(xiàn)“可靠性”,TCP 設(shè)計了幾個關(guān)鍵機(jī)制:

  1. 三次握手 (Three-Way Handshake):在數(shù)據(jù)傳輸前,客戶端與服務(wù)器必須建立連接。

    • SYN (Synchronize Sequence Numbers): 客戶端發(fā)送一個SYN包,請求建立連接并同步初始序列號。
    • SYN-ACK: 服務(wù)器收到后,回復(fù)一個SYN-ACK包,確認(rèn)客戶端的請求,并發(fā)送自己的初始序列號。
    • ACK: 客戶端收到后,再發(fā)送一個ACK包,表示確認(rèn)收到服務(wù)器的同步信號。至此,一個雙向可靠的連接建立完成。

    這個過程確保了雙方都具備收發(fā)數(shù)據(jù)的能力,并就初始序列號達(dá)成了一致,為后續(xù)的數(shù)據(jù)包排序和確認(rèn)奠定了基礎(chǔ)。

  2. 可靠數(shù)據(jù)傳輸

    • 序列號 (Sequence Number): TCP 將發(fā)送的數(shù)據(jù)分割成塊,并為每個塊分配一個唯一的序列號。
    • 確認(rèn)應(yīng)答 (Acknowledgement, ACK): 接收方每收到一個數(shù)據(jù)塊,都會發(fā)送一個ACK包,告知發(fā)送方“我已經(jīng)收到了序列號為X的數(shù)據(jù)”。
    • 超時重傳 (Timeout Retransmission): 如果發(fā)送方在一定時間內(nèi)沒有收到某個數(shù)據(jù)塊的ACK,它會認(rèn)為該數(shù)據(jù)包丟失,并重新發(fā)送。
  3. 流量控制 (Flow Control):通過滑動窗口 (Sliding Window) 機(jī)制,接收方可以告知發(fā)送方自己還有多少緩沖區(qū)空間可以接收數(shù)據(jù),防止發(fā)送方過快發(fā)送數(shù)據(jù)導(dǎo)致接收方緩沖區(qū)溢出。

  4. 擁塞控制 (Congestion Control):通過慢啟動、擁塞避免等算法,TCP 能夠感知網(wǎng)絡(luò)擁堵狀況,動態(tài)調(diào)整發(fā)送速率,避免造成網(wǎng)絡(luò)癱瘓。

開發(fā)者視角:我們通常不直接操作 TCP。操作系統(tǒng)內(nèi)核的網(wǎng)絡(luò)棧已經(jīng)為我們處理了這一切復(fù)雜性。當(dāng)我們使用高級語言(如Java, Go, Python)創(chuàng)建一個 Socket 時,我們得到的實(shí)際上就是一個封裝好的 TCP 通道。我們只管往里寫數(shù)據(jù)(write)和從里面讀數(shù)據(jù)(read),可靠性由底層 TCP 保證。

第二層:規(guī)約 - HTTP,構(gòu)建 Web 世界的無狀態(tài)契約

HTTP (HyperText Transfer Protocol) 是一個應(yīng)用層協(xié)議,它構(gòu)建于 TCP 之上。它定義了客戶端(通常是瀏覽器)和服務(wù)器之間請求和響應(yīng)的格式與規(guī)則。

HTTP 的核心特性

  1. 請求-響應(yīng)模型 (Request-Response Model):通信嚴(yán)格由客戶端發(fā)起??蛻舳税l(fā)送一個請求,服務(wù)器返回一個響應(yīng)。服務(wù)器不能主動向客戶端推送信息。

  2. 無狀態(tài) (Stateless):每個 HTTP 請求都是獨(dú)立的。服務(wù)器不會記錄前一個請求的任何信息。這種設(shè)計簡化了服務(wù)器的實(shí)現(xiàn),使其易于水平擴(kuò)展。但對于需要維持登錄狀態(tài)等場景,則必須借助外部機(jī)制,如 Cookies 和 Session。

連接管理的演進(jìn)

這是理解 HTTP 性能瓶頸與優(yōu)化的關(guān)鍵:

  • HTTP/1.0 - 短連接:
    最早的設(shè)計是“一次請求,一次連接”。每個 HTTP 請求都需要經(jīng)歷一次完整的 TCP握手 -> 數(shù)據(jù)傳輸 -> TCP揮手 流程。當(dāng)一個網(wǎng)頁包含大量圖片、CSS、JS文件時,這種模式會產(chǎn)生巨大的連接建立開銷。

  • HTTP/1.1 - 持久連接 (Persistent Connection / Keep-Alive):
    為了解決短連接的低效問題,HTTP/1.1 默認(rèn)啟用持久連接??蛻舳撕头?wù)器在完成一次請求-響應(yīng)后,不會立即關(guān)閉 TCP 連接,而是會保持一段時間(由 Keep-Alive-Timeout 控制)。后續(xù)的請求可以復(fù)用這個已建立的 TCP 通道,從而省去了多次握手的開銷。

    請求頭示例:

    GET /style.css HTTP/1.1
    Host: example.com
    Connection: keep-alive 
    

    Connection: keep-alive 明確告知服務(wù)器希望保持連接。盡管這是 HTTP/1.1 的默認(rèn)行為,但顯式聲明是一種良好實(shí)踐。

    開發(fā)者視角:持久連接極大地提升了 Web 頁面加載性能。但其本質(zhì)并未改變——依然是客戶端發(fā)起,服務(wù)器響應(yīng)。對于需要服務(wù)器主動、低延遲推送數(shù)據(jù)的場景(如聊天室),客戶端只能通過輪詢 (Polling) 或長輪詢 (Long Polling) 等方式模擬,但這會帶來延遲和資源浪費(fèi)。

第三層:進(jìn)化 - WebSocket,打破請求-響應(yīng)枷鎖的全雙工通道

WebSocket 協(xié)議同樣是構(gòu)建于 TCP 之上的應(yīng)用層協(xié)議。它的出現(xiàn),正是為了解決 HTTP 在實(shí)時通信領(lǐng)域的根本性缺陷。

WebSocket 的誕生:協(xié)議升級

WebSocket 的巧妙之處在于,它通過一次標(biāo)準(zhǔn)的 HTTP 請求來完成“握手”和“協(xié)議升級”。

  1. 客戶端發(fā)起升級請求: 客戶端發(fā)送一個特殊的 HTTP GET 請求。

    GET /chat HTTP/1.1
    Host: example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Sec-WebSocket-Version: 13
    
    • Upgrade: websocket: 表明客戶端希望將協(xié)議從 HTTP 升級到 WebSocket。
    • Connection: Upgrade: 一個標(biāo)準(zhǔn)的 HTTP/1.1 頭,配合 Upgrade 使用。
    • Sec-WebSocket-Key: 一個 Base64 編碼的隨機(jī)字符串,用于簡單的握手認(rèn)證,防止意外的或惡意的連接。
  2. 服務(wù)器響應(yīng)升級: 如果服務(wù)器支持 WebSocket,它會返回狀態(tài)碼 101 Switching Protocols

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
    
    • Sec-WebSocket-Accept: 服務(wù)器將客戶端的 Sec-WebSocket-Key 與一個固定的“魔術(shù)字符串” (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) 拼接后,計算 SHA-1 哈希,再進(jìn)行 Base64 編碼得到??蛻舳藭?yàn)證此值,以確認(rèn)服務(wù)器確實(shí)理解 WebSocket 協(xié)議。

握手成功后,這個底層的 TCP 連接就不再用于傳輸 HTTP 數(shù)據(jù)了。它被“劫持”并升級為一個全雙工、持久化的 WebSocket 通道。

WebSocket 的核心優(yōu)勢

  1. 全雙工通信 (Full-Duplex): 一旦連接建立,客戶端和服務(wù)器的地位完全平等。任何一方都可以隨時向?qū)Ψ街鲃影l(fā)送數(shù)據(jù),無需等待對方的請求。

  2. 持久化連接: 連接會一直保持,直到某一方明確地關(guān)閉它。這避免了反復(fù)建立連接的開銷,并保證了通信的即時性。

  3. 更小的數(shù)據(jù)開銷: WebSocket 的數(shù)據(jù)幀(Frame)格式非常輕量。每個數(shù)據(jù)幀只有很小的頭部(2-10字節(jié)),相比每次請求都攜帶大量冗余信息的 HTTP 頭部,其傳輸開銷極低。

JavaScript 客戶端代碼示例:

// 1. 創(chuàng)建 WebSocket 連接 (URL 使用 ws:// 或 wss://)
const socket = new WebSocket('wss://example.com/chat');
// 2. 監(jiān)聽連接打開事件
socket.onopen = function(event) {
  console.log('Connection established!');
  // 連接建立后,可以立即發(fā)送消息
  socket.send('Hello Server!');
};
// 3. 監(jiān)聽消息接收事件
socket.onmessage = function(event) {
  // event.data 包含了從服務(wù)器接收到的數(shù)據(jù)
  console.log('Message from server: ', event.data);
};
// 4. 監(jiān)聽連接關(guān)閉事件
socket.onclose = function(event) {
  if (event.wasClean) {
    console.log(`Connection closed cleanly, code=${event.code}, reason=${event.reason}`);
  } else {
    console.error('Connection died');
  }
};
// 5. 監(jiān)聽錯誤事件
socket.onerror = function(error) {
  console.error(`[error] ${error.message}`);
};

總結(jié)與對比

特性TCPHTTP/1.1WebSocket
協(xié)議層級傳輸層應(yīng)用層應(yīng)用層
底層依賴IP 協(xié)議TCPTCP
連接模型面向連接持久連接 (但邏輯上無狀態(tài))持久化全雙工連接
通信模式全雙工字節(jié)流請求-響應(yīng) (客戶端主導(dǎo))全雙工 (雙向?qū)Φ?
數(shù)據(jù)開銷極低 (僅 TCP 頭)較高 (每次請求都有冗余頭)極低 (輕量級數(shù)據(jù)幀)
適用場景任何需要可靠傳輸?shù)牡讓臃?wù)Web 頁面瀏覽、API 調(diào)用、文件下載實(shí)時聊天、在線游戲、數(shù)據(jù)推送、協(xié)同編輯

結(jié)語

理解 TCP、HTTP 和 WebSocket 的關(guān)系,本質(zhì)上是理解網(wǎng)絡(luò)通信抽象層次的演進(jìn)過程:

  • TCP 是堅實(shí)可靠的地基,它不關(guān)心上層應(yīng)用在“說什么”,只負(fù)責(zé)把話“可靠地”送到。
  • HTTP 是建立在地基之上的標(biāo)準(zhǔn)化“問答亭”,規(guī)矩森嚴(yán)(一問一答),通用性極強(qiáng),構(gòu)建了整個 Web 世界。
  • WebSocket 則是對“問答亭”的一次革命性改造,它保留了地基,但拆掉了亭子,換上了一部“對講機(jī)”,實(shí)現(xiàn)了真正自由、高效的實(shí)時對話。

作為開發(fā)者,在進(jìn)行技術(shù)選型時,清晰地認(rèn)知每一層協(xié)議的邊界與能力,才能為特定的業(yè)務(wù)場景選擇最恰當(dāng)?shù)摹巴ㄐ殴ぞ摺保瑥亩鴺?gòu)建出高效、穩(wěn)健的應(yīng)用程序。

?轉(zhuǎn)自https://www.cnblogs.com/aisong/p/18957288


該文章在 2025/7/3 9:21:53 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊、財務(wù)費(fèi)用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

鸡巴在线观看欧洲| 免费电影一区二区AV| 91视频网站欧美| 欧洲亚洲一区二区不卡日日s99| 大吉吧插视频| 午夜网站二区一区国产| 亚洲AV无码一区二区三区观看| 亚洲综合 精品 在线| 色诱女在线| 久久精品国产亚洲AV麻豆探花| 九九九一区二区人妻| 日本久视屏| 久久久久国产Av麻豆| 91久久精品店| 亚州综合国产在线| 久久草不卡精品| 欧美的精品的刺激精品的视频| 亚洲国产蜜臀综合影院在线| 日韩欧美亚洲国产图片一区二区小说| 色欲天天天天天综合网| 国产乱码精品一区二区三上 在线| 97资源免费观看| 日本一区二区三区四区久久久久| 92插逼无码视频| 我操中日美女大逼| 自拍偷拍日韩专区| 色综合月天天综合欧美网| 无码AⅤ久久| 983389人妻超碰| 极品美女被巨屌进入AV| 日本中文字幕日韩精品| 国产人妻人伦一区二区在线| 经典久久三级| 日本乱码一区| 午夜福利自慰| AV美女电影亚洲麻豆| 亚洲图片高清无码在线| 久久嫩草精品久久久精品类型| 欧美成在线手机版1区2区3区| 己操美女的逼| 91人人妻人人搡DVD|