netty學習分享(一)

TCP與UDP

TCP 是面向連接的、可靠的流協議,通過三次握手建立連接,通訊完成時要拆除連接。

UDP是面向無連接的通訊協議,UDP通訊時不需要接收方確認,屬于不可靠的傳輸,可能會出現丟包現象

端口號:

端口號用來識別同一臺計算機中進行通信的不同應用程序。因此,它也被稱為程序地址

TCP得數據包

請求報文結構

請求報文的首部內容由以下數據組成:

請求行——包含用于請求的方法、請求 URI 和 HTTP 版本。

首部字段——包含表示請求的各種條件和屬性的各類首部。(通用首部、請求首部、實體首部以及RFC里未定義的首部如 Cookie 等)

響應報文結構

狀態行——包含表明響應結果的狀態碼、原因短語和 HTTP 版本。

首部字段——包含表示請求的各種條件和屬性的各類首部。(通用首部、響應首部、實體首部以及RFC里未定義的首部如 Cookie 等)

請求狀態碼:

類別

原因

1xx

Informational(信息性狀態碼)

接收的請求正在處理

2xx

Success(成功狀態碼)

請求正常處理完畢

3xx

Redirection(重定向狀態碼)

需要進行附加操作以完成請求

4xx

Client Error(客戶端錯誤狀態碼)

服務器無法處理請求

5xx

Server Error(服務器錯誤狀態碼)

服務器處理請求出錯

TCP得滑動窗口傳輸機制

TCP協議數據包傳輸時并不是每一個報文段都會回復ACK的,可能會對兩個報文段發送一個ACK,也可能會對多個報文段發送1個ACK【累計ACK】,比如說發送方有1/2/3 3個報文段,先發送了2,3 兩個報文段,但是接收方期望收到1報文段,這個時候2,3報文段就只能放在緩存中等待報文1的空洞被填上,如果報文1,一直不來,報文2/3也將被丟棄,如果報文1來了,那么會發送一個ACK對這3個報文進行一次確認。

例子:

假設32~45 這些數據,是上層Application發送給TCP的,TCP將其分成四個Segment來發往接收方

2. 數據包1 32~34 ,數據包3 35~36, 數據包3 37~41 ,數據包4 42~45 這四個片段,依次發送出去,此時假設接收端之接收到了數據包1 數據包2 數據包4

3. 此時接收端的行為是回復一個ACK包說明已經接收到了32~36的數據,并將seg4進行緩存(保證順序,產生一個保存數據包3 的hole)

4. 發送端收到ACK之后,就會將32~36的數據包從發送并沒有確認切到發送已經確認,提出窗口,這個時候窗口向右移動

5. 假設接收端通告的Window Size仍然不變,此時窗口右移,產生一些新的空位,這些是接收端允許發送的范疇

6. 對于丟失的seg3,如果超過一定時間,TCP就會重新傳送(重傳機制),重傳成功會seg3 seg4一塊被確認,不成功,seg4也將被丟棄

就是不斷重復著上述的過程,隨著窗口不斷滑動,將真個數據流發送到接收端,實際上接收端的Window Size通告也是會變化的,接收端根據這個值來確定何時及發送多少數據,從對數據流進行流控。原理圖如下圖所示:

滑動窗口動態調整

主要是根據接收端的接收情況,動態去調整Window Size,然后來控制發送端的數據流量,當接收方再一定時間內數據讀取達到上限了,則會動態得調整下次數據接收窗口大小,并通知給發送方,發送方收到接收方得窗口大小后會改變下次傳輸得數據包大小,保證數得傳輸不會因為接收方數據量過載導致的丟失,以此用來做擁塞控制提高傳輸安全性

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

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

相關文章

【微信小程序】記一次自定義微信小程序組件的思路

最近來個需求,要求給小程序的 modal 增加個關閉按鈕,上網一查發現原來 2018 年就有人給出解決方案了,于是總結下微信小程序自定義組件的思路:一句話,用 wxml css實現和原生組件類似的樣式和效果,之后用 JS…

【uniapp】uniapp設置安全區域:

文章目錄 一、效果圖:二、實現代碼: 一、效果圖: 二、實現代碼: {"path": "pages/index/index","style": {"navigationStyle": "custom","navigationBarTextStyle": "white","navigationBarTitle…

消息隊列學習筆記

消息隊列基礎 適合消息隊列解決的問題 異步處理:處理完關鍵步驟后直接返回結果,后續放入隊列慢慢處理流量控制: 使用消息隊列隔離網關和后端服務,以達到流量控制和保護后端服務的目的。能根據下游的處理能力自動調節流量&#x…

leetcode做題筆記79單詞搜索

給定一個 m x n 二維字符網格 board 和一個字符串單詞 word 。如果 word 存在于網格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相…

Matlab工具NIFTI包的基本功能函數

Matlab工具NIFTI包的基本功能函數 Nifti 格式最初是為神經影像學發明的。神經影像信息學技術計劃(NIFTI)將 NIfTI 格式預設為 ANALYZE7.5 格式的替代品。它最初的應用領域是神經影像,但是也被用在其他領域。這種格式的主要特點就是它包含兩個…

Docker基礎入門:常規軟件安裝與鏡像加載原理

Docker基礎入門:常規軟件安裝與鏡像加載原理 一、Docker常規軟件安裝1.1、部署nginx1.2、部署tomcat1.3、部署elasticsearch1.4、如何部署kibana-->連接elasticsearch1.5、部署可視化工具 二、 鏡像加載原理2.1、鏡像是什么2.2、Docker鏡像加速原理2.3、分層理解…

為什么我的集群一個 Spark Executor / Yarn Container 只分配一個vCore?

在很多集群里,在關閉了Spark的DynamicAllocation的前提下(避免自動申請空閑資源,干擾測試結果),都會觀察到:提交Spark作業時,申請 1 個 driver + n 個 executor 會在Yarn上對應創建 n+1 個 container,但是每個container只有一個vCore,通過--driver-cores和--executor-…

Grafana Prometheus 通過JMX監控kafka 【2023最新方式】

第三方kafka exporter方案 目前網上關于使用Prometheus 監控kafka的大部分資料都是使用一個第三方的 kafka exporter,他的原理大概就是啟動一個kafka客戶端,獲取kafka服務器的信息,然后提供一些metric接口供Prometheus使用,隨意它…

docker 安裝mysql8.0

1、拉取鏡像 docker pull mysql2、運行鏡像 docker run -d --restartalways --name mysql --privilegedtrue -p 3306:3306 -v /home/sunyuhua/docker/mysql/data:/var/lib/mysql -v /home/sunyuhua/docker/mysql/conf:/etc/mysql/conf.d -v /home/sunyuhua/docker/mysql/logs…

07_Hudi案例實戰、Flink CDC 實時數據采集、Presto、FineBI 報表可視化等

7.第七章 Hudi案例實戰 7.1 案例架構 7.2 業務數據 7.2.1 客戶信息表 7.2.2 客戶意向表 7.2.3 客戶線索表 7.2.4 線索申訴表 7.2.5 客戶訪問咨詢記錄表 7.3 Flink CDC 實時數據采集 7.3.1 開啟MySQL binlog 7.3.2 環境準備 7.3.3 實時采集數據 7.3.3.1 客戶信息表 7.3.3.2 客戶…

ubuntu安裝jdk、emqx、nginx

一、安裝jdk 要在Ubuntu上安裝JDK 1.8,您可以按照以下步驟進行操作: 打開終端(CtrlAltT)。確保您的系統已更新: sudo apt update sudo apt upgrade安裝OpenJDK 8: sudo apt install openjdk-8-jdk安裝完成…

.net core發布到IIS上出現 HTTP 錯誤 500.19

1.檢查.net core 環境運行環境是否安裝完成,類似如下環境 2.IIS是否安裝全 本次原因就是IIS未安裝全導致的 按照網上說的手動重啟iis(iisreset)也不行

基于C#的消息處理的應用程序 - 開源研究系列文章

今天講講基于C#里的基于消息處理的應用程序的一個例子。 我們知道,Windows操作系統的程序是基于消息處理的。也就是說,程序接收到消息代碼定義,然后根據消息代碼定義去處理對應的操作。前面有一個博文例子( C#程序的啟動顯示方案(無窗口進程發…

【數據結構】 ArrayList簡介與實戰

文章目錄 什么是ArrayListArrayList相關說明 ArrayList使用ArrayList的構造無參構造指定順序表初始容量利用其他 Collection 構建 ArrayListArrayList常見操作獲取list有效元素個數獲取和設置index位置上的元素在list的index位置插入指定元素刪除指定元素刪除list中index位置上…

機器學習基礎(二)

線性回歸 誤差是獨立并且具有相同的分布通常認為服從均值為0方差為的高斯分布。 損失函數(loss Function)/代價函數(Cost Function) 其實兩種叫法都可以,損失函數(loss function)或代價函數(cost function)是將隨機事件或其有關隨機變量的取值映射為非負實數以表示該隨…

Android開發之性能優化:過渡繪制解決方案

1. 過渡繪制 屏幕上某一像素點在一幀中被重復繪制多次,就是過渡繪制。 下圖中多個卡片跌在一起,但是只有第一個卡片是完全可見的。背后的卡片只有部分可見。但是Android系統在繪制時會將下層的卡片進行繪制,接著再將上層的卡片進行繪制。但其…

springcloud3 hystrix實現服務降級的案例配置2

一 服務降級的說明 1.1 服務降級說明 "服務器忙,請稍后在試"不讓客戶達等待,立即返回一個友好的提示。 1.2 服務降級的觸發情況 1.程序運行異常; 2.超時; 3.服務熔斷觸發服務降級;4 .線程池/信號量打…

電商增強現實3D模型優化需要關注的4個方面

到目前為止,AR技術已經發展到足以在更廣泛的范圍內實施。 在電子商務中,這項技術有望提供更令人興奮的購物體驗。 為了實現這一目標,在這篇博客中,我將介紹如何針對電子商務中的 AR 優化 3D 模型。 推薦:用 NSDT編輯器…

Python 函數

Built-in Functions — Python 3.11.4 documentation

Transformer(二)(VIT,TNT)(基于視覺CV)

目錄 1.視覺中的Attention 2.VIT框架(圖像分類,不需要decoder) 2.1整體框架 2.2.CNN和Transformer遇到的問題 2.3.1CNN 2.3.2Transformer 2.3.3二者對比 2.4.公式理解 3TNT 參考文獻 1.視覺中的Attention 對于人類而言看到一幅圖可以立…