HTTP --tcp

TCP

TCP連接

tcp/ip是全球計算機以及網絡設備都在使用的一種常見的分組交換網絡分層協議集,客戶端可以打開一條tcp/ip連接,連接到可能運行在世界各地的服務器應用程序,一旦連接建立起來了,在客戶端和服務器的計算機之間交換的報文就永遠不會丟失,受損或者失序。

TCP的可靠數據管道

HTTP連接實際上就是TCP連接以及使用規則,TCP連接是互聯網上的可靠連接。
TCP為HTTP提供了一條比較靠譜的比特傳輸管道,從TCP連接一段填入字節會從另一端以原有的順序,正確的表達出來。
在這里插入圖片描述

TCP會按序,無差錯的承載HTTP數據。

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

TCP的數據是通過名為IP分組或者IP數據報的小數據塊來發送的,安全版本就是在HTTP和TCP之間插入了一個TLS或者SSL密碼加密層
HTTP要傳送一個報文的時候,會以流的形式講報文數據的內容通過一條打開的tcp連接按照時序傳輸。tcp收到數據流之后,會將數據流砍成叫做段的小數據塊,所有的這些工作都是由tcp ip軟件來處理的。程序員不會參與。
每個tcp段都是由ip分組承載,從一個ip地址發送到另一個ip地址的,每個ip分組包括

  • 一個ip分組首部
  • 一個TCP段首部
  • 一個TCP數據塊
    ip首部包含了源和目的ip地址,長度和其他一些標記。tcp段的首部包含了tcp端口號,tcp控制標記,用于將數據排序和完整性檢查的一些數字值。

保持tcp連接持續不斷的運行

在任意時間計算機都可以由幾條tcp連接處于被打開狀態,tcp是通過端口號來保持所有這些連接持續不斷的運行
tcp連接是通過4個值來識別的<源ip地址, 源端口號, 目的ip地址, 目的端口號>
兩條不同的tcp連接不能擁有4個完全相同的地址組件值。但是不同的部分組件可以有相同的值。
在這里插入圖片描述

用tcp套接字編程

在這里插入圖片描述

套接字api允許用戶創建tcp的端口數據結構,將這些端點與遠程服務器的tcp端點進行連接,對數據流進行讀寫。
tcp的api隱藏了所有網絡協議的握手細節,以及tcp數據流和ip分組的分段和重裝細節
在這里插入圖片描述

一旦建立了連接,客戶端就會發送HTTP請求,服務器就會讀取請求,一旦服務器獲取了整條報文請求,就會對請求進行處理,執行所請求的動作,并將數據寫回客戶端,客戶端讀取數據,并對響應的數據進行處理

對tcp性能的考慮

HTTP緊挨著TCP,位于上層,所以HTTP事務的性能很大程序取決于底層tcp通道的性能。

HTTP事務的時延

在這里插入圖片描述

建立TCP連接,以及傳輸請求和響應報文的時間相比,事務時間可能是很短的。除非客戶端和服務器超載,或者正在處理復雜的動態資源。狗則http就是由tcp網絡時延構成的。
HTTP事務的時延由以下幾種原因

  1. 客戶端首先需要根據URI確定出web服務器的ip地址和端口號,如果沒有對URI中的主機名進行訪問,通過DNS解析系統會將URI的主機名轉換為一個ip地址,這個可能需要花費數10s的時間。
  2. 接下來,客戶端會向服務器發送一條tcp連接請求,并等待服務器回送一個請求接受應答,每條tcp連接都會有連接建立時延,最多只有一二秒鐘,但是如果是數百個HTTP事務的話,會疊加上去。
  3. 一旦建立起來了連接,客戶端就會通過新建立的tcp管道來發送http請求,數據到達的時候,web服務器就會從tcp連接中讀取報文,對請求進行處理。
  4. web服務器回送回HTTP響應,這個也需要花費時間。

性能聚焦的區域

  1. tcp連接建立握手
  2. tcp慢啟動擁塞控制
  3. 數據聚集的Nagle算法
  4. 用于捎帶確認的tcp延遲確認算法
  5. TIME_WAIT時延和端口耗盡

tcp連接的握手時延

如果建立一條新的tcp連接,甚至是發送任意的數據之前,tcp軟件會交換一系列的ip分組,對連接的有關參數會進行溝通,如果連接只是用來傳輸少量的數據,這些交換過程就會降低http的性能
外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳
建立tcp的幾個步驟

  1. 建立tcp連接時,客戶端需要向服務器發送一個小的tcp分組,這個分組中有設置syn標記,表明是一個連接請求
  2. 如果服務器接受了請求,就會對參數進行計算,并向客戶端返回一個分組,這個分組中的syn和ack都被置位,說明連接已成功
  3. 客戶端向服務器回送一條確認信息,通知它連接已成功建立
    小的HTTP事務可能會在TCP建立上花費50%

延遲確認

每個tcp段都會有一個小的序列號和數據完整性校驗和,每個段的接收者受到完整的段的時候,會像發送者會送小的確認分組,如果發送者沒有再指定的窗口時間內受到確認的信息,發送者就會認為分組被損壞和損毀,重新發送數據。
延遲算法為了增強確認報文找到通向傳輸數據分組的可能性。延遲確認算法會在一個特定的窗口時間中將輸出確認存放在緩存區中,以尋找能夠捎帶它的輸出數據分組,如果在這個時間段內沒有輸出分組,就將確認信息放在單獨的分組中去。如果沒有輸出分組,就會將確認信息放在單獨的分組中傳送。
HTTP具有雙峰特征的請求——應答行為,降低了捎帶信息的可能,延遲確認算法會引入相當大的時延。

tcp慢啟動

tcp會隨著時間提高傳輸的速度。用于防止因特網的突然過載和擁塞。
如果HTTP事務由大量的數據要發送,不能一次將所有的分組都發送出去,發送一個分組,等待確認,就可以發送兩個分組,每個分組必須被確認。

Nagle算法和TCP_NODELAY

如果tcp發送了大量含有少量數據的分組,網絡的性能就會嚴重的下降。 發送大量單字節分組的行為稱為“發送端傻窗口綜合癥”。這種行為效率很低、違反社會道德,而且可能會影響其他的因特網流量
Nagle算法鼓勵發送全尺寸的段,只有當所有其他分組都被確認之后,才會允許發送非全尺寸的分組。如果其他分組仍然在傳輸過程中,就將那部分數據緩存起來。只有當掛起分組被確認,或者緩存中積累了足夠發送一個全尺寸分組的數據時,才會將緩存的數據發送出去
缺點: 1. 小的HTTP報文可能無法填滿一個分組,可能會因為等待那些永遠不會到來的額外數據而產生時延
TCP_NODELAY:http應用在自己的棧中設計參數,禁用這個算法,提高性能。但是要確保在tcp中寫入大塊的數據

TIME_WAIT累積和端口耗盡

當某個TCP端點關閉TCP連接時,會在內存中維護一個小的控制塊,用來記錄最近所關閉連接的IP地址和端口號,這類信息維持2MSL時間。
TIME_WAIT狀態通常會持續2倍的最大報文段生存時間(2MSL),以確保在這段時間內不會創建具有相同地址和端口號的新連接。
當系統中存在大量的短連接時,每個連接在關閉后都會進入TIME_WAIT狀態,導致TIME_WAIT狀態的數量迅速增加。由于每個TCP連接都需要一個唯一的端口號,而端口資源是有限的,因此大量的TIME_WAIT狀態可能會導致端口資源耗盡,從而影響新的連接的建立。

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

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

相關文章

@autowired 注入進來對象為null的幾種場景及解決辦法

一、原因 Autowired 注解用于自動注入 Spring 容器中管理的依賴對象。如果注入的對象為 null&#xff0c;可能是以下原因之一&#xff1a; 被注入的對象沒有被 Spring 容器管理&#xff0c;即沒有被 Spring 掃描到或者沒有配置相應的 。注入的對象在 Spring 容器中有多個實例…

el-date-picker的使用,及解決切換type時面板樣式錯亂問題

這里選擇器的類型可以選擇日月年和時間范圍&#xff0c;根據類型不同&#xff0c;el-date-picker的面板也展示不同&#xff0c;但是會出現el-date-picker錯位&#xff0c;或者面板位置和層級等問題。 源代碼&#xff1a; <el-selectv-model"dateType"placeholder&…

BOOST_SREATCH

BOOST Boost是一個由C社區開發的開源庫&#xff0c;為C語言標準庫提供擴展。這個庫由C標準委員會庫工作組成員發起&#xff0c;旨在提供大量功能和工具&#xff0c;幫助C開發者更高效地編寫代碼。Boost庫強調跨平臺性和對標準C的遵循&#xff0c;因此與編寫平臺無關&#xff0…

PyCharm設置前端:全面解析與個性化配置指南

PyCharm設置前端&#xff1a;全面解析與個性化配置指南 PyCharm&#xff0c;作為一款強大的Python集成開發環境&#xff08;IDE&#xff09;&#xff0c;在編程界享有極高的聲譽。然而&#xff0c;對于許多前端開發者來說&#xff0c;如何在PyCharm中設置和優化前端工作環境可…

如何防止商業秘密泄露?商業秘密保護措施有哪些?

商業秘密是企業核心競爭力的關鍵所在&#xff0c;其保密性直接關系到企業的生存和發展。 因此&#xff0c;防止商業秘密泄露&#xff0c;確保商業秘密的安全至關重要。 本文將探討如何有效防止商業秘密泄露&#xff0c;并重點介紹域智盾軟件作為解決方案&#xff0c;在商業秘密…

Jvm(一)之棧、堆、方法區

前言-與正文無關 生活遠不止眼前的苦勞與奔波&#xff0c;它還充滿了無數值得我們去體驗和珍惜的美好事物。在這個快節奏的世界中&#xff0c;我們往往容易陷入工作的漩渦&#xff0c;忘記了停下腳步&#xff0c;感受周圍的世界。讓我們一起提醒自己&#xff0c;要適時放慢腳步…

【機器學習系列】掌握隨機森林:從基礎原理到參數優化的全面指南

目錄 目錄 一、隨機森林簡介 (一)隨機森林模型的基本原理如下&#xff1a; (二)隨機森林模型的優點包括&#xff1a; (三)森林中的樹的生成規則如下&#xff1a; (四)在隨機森林中&#xff0c;每棵樹都使用不同的訓練集進行訓練&#xff0c;原因如下 隨機森林的分類性能&…

說說影響網絡的因素

1. 物理層面 帶寬 帶寬是指網絡傳輸數據的能力&#xff0c;帶寬越大&#xff0c;網絡能夠傳輸的數據量就越大。 信號強度和干擾 信號強度和干擾對無線網絡尤其重要。信號強度低或干擾嚴重會導致數據丟失、傳輸錯誤和重傳次數增加&#xff0c;從而降低網絡性能。 器件質量 路由…

點賦科技:建設智能飲品高地,打造數字化產業先鋒

在當今數字化時代的浪潮中&#xff0c;點賦科技以其敏銳的洞察力和卓越的創新能力&#xff0c;致力于建設智能飲品高地&#xff0c;打造數字化產業先鋒。 點賦深知智能飲品機對于推動社會進步和滿足人們日益增長的需求的重要性。因此&#xff0c;他們投入大量資源和精力&#x…

2020 6.s081——Lab1:Xv6 and Unix utilities夢開始的地方

一任宮長驍瘦 臺高冰淚難流 錦書送罷驀回首 無余歲可偷 ——知否知否 完整代碼見&#xff1a;6.s081/kernel at util SnowLegend-star/6.s081 (github.com) Lecture 01知識點總結 首先透徹理解Lecture01的知識很是重要 ①pidwait((int *) 0); “wait(int *status)”函數用于…

Python變量用法——單下劃線變量名_

單下劃線變量名_ 在常用的諸多變量中&#xff0c;單下劃線_是比較特殊的一個。它常作為一個無意義的占位符出現在賦值語句中。_這個名字本身沒有什么特別之處&#xff0c;這算是大家約定俗成的一種用法。 舉例&#xff0c;假如你想在解包賦值時忽略某些變量&#xff0c;就可以…

Day54 判斷子序列 + 不同的子序列

392 判斷子序列 題目鏈接&#xff1a;392. 判斷子序列 - 力扣&#xff08;LeetCode&#xff09; 給定字符串 s 和 t &#xff0c;判斷 s 是否為 t 的子序列。 字符串的一個子序列是原始字符串刪除一些&#xff08;也可以不刪除&#xff09;字符而不改變剩余字符相對位置形成…

記一次服務器數據庫被攻擊勒索

如圖&#xff0c;早上一起來就發現&#xff0c;我的MongoDB數據庫里面的信息全部沒有了&#xff0c;只留下一段話。 大致意思就是&#xff1a;我的數據庫的數據被他們備份然后全部刪掉了&#xff0c;我必須要支付0.0059的bitcoin&#xff08;折合400美刀&#xff09;來贖回我的…

Springboot+WebSocket實現消息推送

WebSocket是一種在單個TCP連接上進行全雙工通信的協議。WebSocket通信協議于2011年被IETF定為標準RFC 6455&#xff0c;并由RFC7936補充規范。WebSocketAPI也被W3C定為標準。 WebSocket使得客戶端和服務器之間的數據交換變得更加簡單&#xff0c;允許服務端主動向客戶端推送數…

學習率調整

學習率調整 import mathdef adjust_learning_rate(optimizer, epoch, args):"""Decay the learning rate with half-cycle cosine after warmup"""if epoch < args.warmup_epochs:lr args.lr * epoch / args.warmup_epochs else:lr args.m…

不是,你不會還在用雙層遍歷循環來做新舊數組對比,尋找新增元素吧?

目錄 一、雙層循環遍歷 1.1、雙循環錯誤示范 1.2、正確的做法 ①使用array.includes() ②使用set 二、array.includes()的使用與技巧 2.1、基本語法 2.2、返回值 2.3、使用技巧 2.3.1、用戶輸入驗證 2.3.2、權限檢查 2.4、兼容問題 三、總結 一、雙層循環遍歷 1.…

【重學C語言】十七、預處理指令

【重學C語言】十七、預處理指令 預處理指令預定義宏`#define` 宏定義示例注意事項特殊符號條件編譯頭文件包含`#pragma`預處理指令 C語言中的預處理指令(Preprocessor Directives)是一種特殊的指令,它們在編譯過程的早期階段(即實際編譯之前)被預處理器(Preprocessor)處…

OpenCV學習 基礎圖像操作(十六):圖像距離變換

基礎原理 顧名思義&#xff0c;我們可以利用像素之間的距離作為對該像素的一種刻畫&#xff0c;并將其運用到相應的計算之中。然而&#xff0c;在一幅圖像之中&#xff0c;某種類型的像素并不是唯一的&#xff0c;因此我門常計算的是一類像素到另一類的最小距離&#xff0c;并…

My Spirit | “頂級復盤”

世界不會在意你的自尊&#xff0c; 人們看到的只是你的成就。 在你沒有成就之前&#xff0c; 切勿過分強調自尊。 ——菲茨杰拉德《了不起的蓋茨比》 目錄 My Spirit | “頂級復盤”00 | 日復盤01 | 周復盤2.1 周計劃2.2 周復盤2.3 下步計劃2.4 下步總結 02 | 月復盤2.1 本月目…

香橙派KunPengPro評測

一、引言 二、開箱 2.1、主要包含說明 1、充電器(贈typec-c線) 2、香橙派kunpengpro(已經帶裝好帶散熱器) 3、SD卡(32G)(已經帶裝好系統openEuler 22.03 (LTS-SP3)) (注意&#xff1a;上電接HDMI線可直接用&#xff0c;賬號&#xff1a;openEuler 密碼&#xff1a;openEuler)…