<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用TCP連接HTTP詳細資料說明

Wildesbeast ? 來源:網絡整理 ? 作者:佚名 ? 2020-04-06 14:05 ? 次閱讀

1. HTTP 是如何使用 TCP 連接的;

世界上幾乎所有的 HTTP 通信都是由 TCP/IP 承載的,TCP/IP 是全球計算機及網絡設備都 在使用的一種常用的分組交換網絡分層協議集??蛻舳藨贸绦蚩梢源蜷_一條 TCP/IP 連 接,連接到可能運行在世界任何地方的服務器應用程序。一旦連接建立起來了,在客戶端 和服務器的計算機之間交換的報文就永遠不會丟失、受損或失序。

盡管報文不會丟失或受損,但如果計算機或網絡崩潰了,客戶端和服務器之間的通信仍然會被斷開。在這種情況下, 會通知客戶端和服務器通信中斷了。

當瀏覽器收到一個 URL 的時候,會執行幾個相對應的步驟,如下

瀏覽器解析出主機名;

瀏覽器查詢主機名的 IP 地址;

瀏覽器獲得端口號;

瀏覽器發起對該 IP 地址對應端口號的鏈接;

瀏覽器向服務器發送一條 HTTP GET報文;

瀏覽器從服務器讀取 HTTP 相應報文;

瀏覽器關閉連接;

1.1 TCP 連接的基本知識

TCP 是可靠的數據管道

TCP 會按序、無差錯地承載 HTTP 數據,TCP 為 HTTP 提供了一條可靠的比特傳輸管道。從 TCP 連接一端填入的字節會從另一端 以原有的順序、正確地傳送出來。

TCP 流是分段的、由 IP 分組傳送

TCP 的數據是通過名為 IP 分組(或 IP 數據報)的小數據塊來發送的。

這樣的話,如圖HTTP 就是“HTTP over TCP over IP”這個“協議?!敝械淖铐攲恿?。其安全版本 HTTPS 就是在 HTTP 和 TCP 之間插入了一個(稱為 TLS 或 SSL 的)密碼加密層(安全層),就是在圖中的右半部分。

HTTP 要傳送一條報文時,會以流的形式將報文數據的內容通過一條打開的 TCP 連接按 序傳輸。TCP 收到數據流之后,會將數據流砍成被稱作段的小數據塊,并將段封裝在 IP 分組中,通過因特網進行傳輸,如下圖中大家看到的內容:

每個 TCP 段都是由 IP 分組承載,從一個 IP 地址發送到另一個 IP 地址的。

而每個 IP 分組中都包括:

一個 IP 分組首部(通常為 20 字節);

一個 TCP 段首部(通常為 20 字節);

一個 TCP 數據塊(0 個或多個字節)。

IP 首部包含了源和目的 IP 地址、長度和其他一些標記。TCP 段的首部包含了 TCP 端口 號、TCP 控制標記,以及用于數據排序和完整性檢查的一些數字值。

保持 TCP 連接的持續不間斷地運行

在任意時刻計算機都可以有幾條 TCP 連接處于打開狀態。TCP 是通過端口號來保持所有 這些連接的正確運行的。 端口號和雇員使用的電話分機號很類似。

這就和我之前舉得例子是一樣的,公司的總機和你自己的座機一樣,公司的總機號碼能將你接到前臺,而分機號 可以將你接到正確的雇員位置一樣,IP 地址可以將你連接到正確的計算機,而端口號則 可以將你連接到正確的應用程序上去。TCP 連接是通過 4 個值來識別的:

源IP 地址、源端口號、目的IP 地址、目的端口號

這 4 個值一起唯一地定義了一條連接。兩條不同的 TCP 連接不能擁有 4 個完全相同的地 址組件值(但不同連接的部分組件可以擁有相同的值)。

這里需要我們注意的是,有些連接共享了相同的目的端口號,有些連接使用了相同的源 IP 地址,有些使用了相同的目的 IP 地址,但沒有兩個不同連接所有的 4 個值都一樣。

TCP 套接字

操作系統提供了一些操縱其 TCP 連接的工具。為了更具體地說明問題,我們來看一個 TCP 編程接口,這些套接字我就不一一介紹了,我給大家一個表格,大家可以理解一下

套接字API調用描 述s = socket()創建一個新的、未命名、未關聯的套接字bind(s,)向套接字賦一個本地端口號和接口connect(s, )創建一條連接本地套接字與遠程主機及端口的連接listen(s,…)標識一個本地套接字,使其可以合法接受連接s2 = accept(s)等待某人建立一條到本地端口的連接

套接字 API 允許用戶創建 TCP 的端點數據結構,將這些端點與遠程服務器的 TCP 端點進 行連接,并對數據流進行讀寫。TCP API 隱藏了所有底層網絡協議的握手細節,以及 TCP 數據流與 IP 分組之間的分段和重裝細節。

TCP 客戶端和服務器是如何通過 TCP 套接字接口進行通信的

上圖中說明了可以怎樣通過套接字 API 來凸顯客戶端和服務器在實現 HTTP 事務時所應執行的步驟。

2. TCP 連接的握手

TCP 連接握手需要經過以下幾個步驟。 如圖所示:

請求新的 TCP 連接時,客戶端要向服務器發送一個小的 TCP 分組(通常是 40 ~ 60 個字節)。這個分組中設置了一個特殊的 SYN 標記,說明這是一個連接請求。

如果服務器接受了連接,就會對一些連接參數進行計算,并向客戶端回送一個 TCP 分組,這個分組中的 SYN 和 ACK 標記都被置位,說明連接請求已被接受。

最后,客戶端向服務器回送一條確認信息,通知它連接已成功建立

我們永遠不會看到這些分組——這些分組都由 TCP/IP 軟件管理,對其是不可見 的。HTTP 程序員看到的只是創建 TCP 連接時存在的時延。

在這里我們需要注意的就是 TCP 連接的握手時延,通常 HTTP 事務都不會交換太多數據,此時,SYN/SYN+ACK 握手(參見圖中的 a 段 和圖中的 b 段)會產生一個可測量的時延。TCP 連接的 ACK 分組(參見圖中的 c 段)通常都足夠大,可以承載整個 HTTP 請求報文,而且很多 HTTP 服務器響應報文都可 以放入一個 IP 分組 中去(比如,響應是包含了裝飾性圖片的小型 HTML 文件,或者是對瀏覽器高速緩存請求產生的 304 Not Modified 響應)。

TCP 慢啟動

TCP 數據傳輸的性能還取決于 TCP 連接的使用期(age)。TCP 連接會隨著時間進行自 我“調諧”,起初會限制連接的最大速度,如果數據成功傳輸,會隨著時間的推移提高傳輸 的速度。這種調諧被稱為 TCP 慢啟動(slow start),用于防止因特網的突然過載和擁 塞。

TCP 慢啟動限制了一個 TCP 端點在任意時刻可以傳輸的分組數。簡單來說,每成功接收 一個分組,發送端就有了發送另外兩個分組的權限。如果某個 HTTP 事務有大量數據要發 送,是不能一次將所有分組都發送出去的。必須發送一個分組,等待確認;然后可以發送 兩個分組,每個分組都必須被確認,這樣就可以發送四個分組了,以此類推。這種方式被 稱為“打開擁塞窗口”。

由于存在這種擁塞控制特性,所以新連接的傳輸速度會比已經交換過一定量數據的、“已 調諧”連接慢一些。由于已調諧連接要更快一些,所以 HTTP 中有一些可以重用現存連接 的工具。

3. HTTP 連接的處理

前面我們說了 TCP 連接,我們重新來分析一下 HTTP ,之前我也說過在 HTTP 1.0的時候和1.1之后,有 Keep-Alive ,關于 Keep-Alive 不懂的請翻看前面的公眾號的文章內容,接下來我分幾個內容給大家講述 HTTP 對連接上的處理。

并行連接1 通過多條 TCP 連接發起并發的 HTTP 請求。

持久連接1 重用 TCP 連接,以消除連接及關閉時延。

管道化連接1 通過共享的 TCP 連接發起并發的 HTTP 請求。

我們來看一下串行:

每個事務都需要(串行地建立)一條 新的連接,那么連接時延和慢啟動時延就會疊加起來

并行連接就是說 HTTP 允許客戶端打開多條連接,并行的去執行多個HTTP 的事務,就會出現多條線路平行的情況。

其實并行連接并沒有說是頁面的傳輸速度,是因為多個對象同時在進展,所以,他的速度要比疊加起來,讓你在感覺上快不少。

持久連接

HTTP 1.1 允許 HTTP 設備在事務處理結束之后 將 TCP 連接保持在打開狀態,以便為未來的 HTTP 請求重用現存的連接。在事務處理結束之后仍然保持在打開狀態的 TCP 連接被稱為持久連接。非持久連接會在每個事務結束之后關閉。持久連接會在不同事務之間保持打開狀態,直到客戶端或服務器決定將其關閉為止。

管道化連接(也有人稱之為管線化)

HTTP/1.1 允許在持久連接上可選地使用請求管道。這是相對于 keep-alive 連接的又一性能優化。在響應到達之前,可以將多條請求放入隊列。當第一條請求通過網絡流向地球另一端的服務器時,第二條和第三條請求也可以開始發送了。在高時延網絡條件下,這樣做可以降低網絡的環回時間,提高性能。

其實管道化說白了就是 傳送過程中不需先等待服務端的回應,然后又發了幾條,瀏覽器將 HTTP 要求大批提交可大幅縮短頁面的加載時間,特別是在傳輸延遲(lag/latency)較高的情況下(如衛星連接)。此技術之關鍵在于多個 HTTP 的要求消息可以同時塞入一個 TCP 分組中,所以只提交一個分組即可同時發出多個要求,借此可減少網絡上多余的分組并降低線路負載。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • HTTP
    +關注

    關注

    0

    文章

    467

    瀏覽量

    30382
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1279

    瀏覽量

    78414
  • URL
    URL
    +關注

    關注

    0

    文章

    135

    瀏覽量

    14904
收藏 人收藏

    評論

    相關推薦

    TCP/IP詳細資料

    TCP/IP詳細資料 一.TCP/IP通訊協定的緣起不滅    話起一九六八年至今已有29個年頭,TCP/IP(Transmission Control Pr
    發表于 01-27 10:09 ?686次閱讀

    TCP IP相關知識的詳細資料說明免費下載

    本文檔的主要內容詳細介紹的是TCP IP相關知識的詳細資料說明免費下載。主要內容包括了:TCP報文格式,
    發表于 12-05 11:19 ?19次下載
    <b class='flag-5'>TCP</b> IP相關知識的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>免費下載

    同軸連接器HFSS模擬的詳細資料說明

    本文檔的主要內容詳細介紹的是同軸連接器HFSS模擬的詳細資料說明免費下載。
    發表于 12-20 16:04 ?81次下載

    LabVIEW通信編程的詳細資料說明

    本文檔的主要內容詳細介紹的是LabVIEW通信編程的詳細資料說明包括了:1.串行通信,2.DataSocket通信技術,3.TCP通信
    發表于 03-26 08:00 ?26次下載
    LabVIEW通信編程的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    如何使用netbeans連接數據庫并將access數據寫入的詳細資料說明

    本文檔的主要內容詳細介紹的是如何使用netbeans連接數據庫并將access數據寫入的詳細資料說明。
    發表于 05-24 14:50 ?18次下載
    如何使用netbeans<b class='flag-5'>連接</b>數據庫并將access數據寫入的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    Labview數據庫連接工具VI的詳細資料說明

    本文檔的主要內容詳細介紹的是Labview數據庫連接工具VI的詳細資料說明。
    發表于 06-03 08:00 ?22次下載
    Labview數據庫<b class='flag-5'>連接</b>工具VI的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    Java的23種設計模式詳細資料說明

    Java的23種設計模式詳細資料說明。
    發表于 12-13 16:28 ?11次下載
    Java的23種設計模式<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    AD快捷鍵的詳細資料說明

    本文檔的主要內容詳細介紹的是AD快捷鍵的詳細資料說明
    發表于 03-17 08:00 ?0次下載

    TCP如何與UDP命令連接詳細指南說明

    本文檔的主要內容詳細介紹的是TCP如何與UDP命令連接詳細指南說明。
    發表于 02-28 08:00 ?6次下載
    <b class='flag-5'>TCP</b>如何與UDP命令<b class='flag-5'>連接</b><b class='flag-5'>詳細</b>指南<b class='flag-5'>說明</b>

    WIFI模塊通過TCP協議發送HTTP詳細資料說明

    本文檔的主要內容詳細介紹的是WIFI模塊通過TCP協議發送HTTP詳細資料說明。
    發表于 08-14 10:45 ?42次下載

    信號與系統總復習的詳細資料說明

    本文檔的主要內容詳細介紹的是是信號與系統總復習的詳細資料說明。
    發表于 03-09 08:00 ?0次下載
    信號與系統總復習的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    emmc啟動燒寫的詳細資料說明

    本文檔的主要內容詳細介紹的是emmc啟動燒寫的詳細資料說明。
    發表于 03-12 16:43 ?26次下載

    AO系列MOSFET管的詳細資料說明

    本文檔的主要內容詳細介紹的是AO系列MOSFET管的詳細資料說明。
    發表于 03-14 08:00 ?14次下載
    AO系列MOSFET管的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    英業達上電時序的詳細資料說明

    本文檔的主要內容詳細介紹的是英業達上電時序的詳細資料說明。
    發表于 12-04 08:00 ?57次下載
    英業達上電時序的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    Python的100個小例子詳細資料說明

    本文檔的主要內容詳細介紹的是Python的100個小例子詳細資料說明。
    發表于 02-05 14:05 ?15次下載
    Python的100個小例子<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>