1. 程式人生 > >客戶端收到一個視窗為 0 的包怎麼處理

客戶端收到一個視窗為 0 的包怎麼處理

調整視窗大小:
當TCP堆 棧接收到資料的時候,生成一個確認資訊並以回覆的方式傳送,但是放置在接收端快取中的資料並不總是立即被處理。當伺服器忙於處理從多個客戶端接收的報文, 伺服器很有可能因為清理快取而變得緩慢,無法騰出空間接收新的資料,如果沒有流控,則可能會造成丟包和資料損壞。好在,接收視窗所設定的速率無法使伺服器 正常處理資料時,能夠調整接收視窗大小。通過減小返回給傳送端的ACK報文的TCP頭視窗大小值來實現。如下圖所示:

上圖中,伺服器初始視窗大小為5000位元組。客戶端傳送2000位元組,之後又傳送了2000位元組,緩衝區中只有1000位元組可用。伺服器意識到緩衝 區正在快速填滿,它知道如果資料繼續以此速率傳輸,很快會有報文丟失。為了防止報文丟失,伺服器傳送確認資訊給客戶端,更新視窗大小為1000位元組。結 果,客戶端減少資料傳送,伺服器以可以接受的速率處理快取內容,即保持資料流以穩定的速率傳輸。
調整視窗大小在兩個方向都是可行的。當伺服器能夠更加快速的處理報文時,它會發送一個較大視窗的ACK報文

零視窗暫停資料流:

某些情況下,伺服器無法再處理從客戶端傳送的資料。可能是由於記憶體不足,處理能力不夠,或其他原因。這可能會造成資料被丟棄以及傳輸暫停,但接收視窗能夠幫助減小負面影響。
上述情況發生時,伺服器會發送視窗為0的報文。當客戶端接收到此報文時,它會暫停所有資料傳輸,但會保持與伺服器的連線以傳輸探測(keep- alive)報文。探測報文在客戶端以穩定間隙傳送,以檢視伺服器接收視窗狀態。一旦伺服器能夠再次處理資料,將會返回非零值視窗大小,傳輸會恢復。下圖 示例了零視窗通知過程

伺服器初始接收資料視窗為5000位元組大小。從客戶端接收4000位元組資料之後,伺服器負載變得非常繁重,無法繼續處理客戶端任何資料。伺服器於是傳送窗 口大小值為0的報文。客戶端暫停資料傳輸併發送一個探測報文。探測報文之後,伺服器回覆以告知客戶端現在可以接收資料的報文,以及視窗大小為1000字 節。客戶端恢復傳送資料。

相關推薦

客戶收到一個視窗 0怎麼處理

調整視窗大小: 當TCP堆 棧接收到資料的時候,生成一個確認資訊並以回覆的方式傳送,但是放置在接收端快取中的資料並不總是立即被處理。當伺服器忙於處理從多個客戶端接收的報文, 伺服器很有可能因為清理快取而變得緩慢,無法騰出空間接收新的資料,如果沒有流控,則可

這是進行客戶測試,發起OLW

aci line eight spl 9.png .cn mil clas wid 這是進行客戶端測試,發起為OLWasdfasdfasda sdsadf這是進行客戶端測試,發起為OLW

Webservice客戶工程導成runnable jar執行時出現異常

一、問題描述 eclipse整合環境,spring 4.1.3.RELEASE + cxf 2.5.0框架,開發的Webservice客戶端程式。在eclipse開發環境下執行正常,匯出runnable jar包時出現如下異常: java.lang.NullPointerExcept

[Android]ServiceManager的客戶proxy本質是BpBinder(0)

在客戶端,我們通常都是使用ServiceManager的getService或者checkService方法去獲取相應服務的proxy, 比如dumpsys.cpp中有     sp<IServiceManager> sm =defaultService

Java開發後臺介面+Android開發客戶一個例項(學生成績管理)(一)

本文主要是一個查詢學生成績的一整套系統,主要為功能實現,串聯起來後端和移動端的連線。UI後期可以根據自己的愛好再調整,這裡分為兩部分進行介紹: 1、使用Java開發後臺介面,使用現如今非常流行的SpringBoot框架,使用MySql資料庫,持久層框架使用MyBatis,後臺開發平臺為idea,

【TCP通訊】多客戶連線一個伺服器總結

Windows下TCP通訊,多個客戶端連線伺服器端。 一、伺服器端流程實現如下: 1、通過socket函式,建立基於流式型別的socket,可名為serverSocket; 2、呼叫bind函式,繫結本地的監聽埠號和本地IP地址; 3、呼叫listen函式,開始監聽客戶端請求。其中該函式第二個引數指定了最大

rtmp直播拉流客戶EasyRTMPClient TCP視窗大小設計方法

EasyRTMPClient 簡介 EasyRTMPClient是EasyDarwin流媒體團隊開發、提供的一套非常穩定、易用、支援重連線的RTMPClient工具,以SDK形式提供,介面呼叫非常簡單。該EasyRTMPClient庫未使用或參考現有的任何RT

live555 客戶 接受rtsp 儲存 h264

rt, 這個是幫別人寫的一個專案。 主要流程就是通過 live555 接受rtsp資料。 這裡我寫成了一個c++ 介面, 可以接受若干urls, 同時每隔60s輸出這些urls的h264資料。 我照著testRTSPCLient寫的, 因為那個檔案太長了, 所以我給分開了

CXF獲取客戶IP(解決WebServiceContextnull問題)

網路上很多文章都是這樣配的: @Resource private WebServiceContext wscontext; public String getIP(){ MessageContext ctx = wscontext.getMessage

無配置WCF客戶一個簡單到令人髮指的實現方法

因為專案比較大,介面一大堆,同時也是為了模組間完全解耦(只依賴Common),只能是採用多個WCF服務類庫的方案。這樣帶來的問題就是上帝都不知道在配置檔案中到底需要配置多少個Endpoint!理論上是一個模組一個Endpoint,但問題是沒有人知道今後這個系統會有哪些模組。

go語言基礎 TCP程式設計 結合Goroutine 多個客戶訪問一個伺服器

我們平時可以多個使用者往一個伺服器中上傳檔案,這是可以通過TCP程式設計來做到的,我們只要結合go語言的併發,就可以做到先是伺服器package main import ( "net" "

給定一個m×n矩陣,如果一個元素0,則將其整行和列的值設定0.

本題源自LeetCode -------------------------------------------------- 思路1  遍歷整個陣列,遇到0  就把整行和整列不為0 的值置為* ,然後再次遍歷陣列把* 換為0 void setZeroes(vector&

使用Struts 2將客戶JSON資料對映伺服器Java物件

上文()介紹瞭如何將Java物件序列化成JSON格式並傳到客戶端。這篇文章就說說如何將客戶端的JSON資料對映為伺服器端的Java物件。 pom.xml 需要引入struts2-json-plugin包。 <dependencies> <depen

Java Servlet 向客戶返回一個影象的方法(靜態)

 一、伺服器端的靜態圖片。 1.1  基於ImageIO來實現。 public void getMap(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOE

微信H5安卓客戶app支付中遇到的問題處理: 商家引數格式有誤,請聯絡商家解決

解決在APP中使用微信H5支付,提示“商家引數格式有誤…” 引子:近期碰到了微信支付的新需求,用到微信H5支付,後發現如果只使用瀏覽器做H5支付, 沒什麼問題,主流的手機瀏覽器均已測試,都可以調起微信支付(QQ,UC,百度 ) 但是當我在APP中喚起的時候,安卓總是出現“商家引數格式有誤,請

springmvc 通過異常增強返回給客戶統一格式 springmvc請求引數異常處理

本文轉載於:http://www.cnblogs.com/nosqlcoco/p/5562107.html  在springmvc開發中,我們經常遇到這樣的問題;邏輯正常執行時返回客戶端指定格式的資料,比如json,但是遇NullPointerException空指標

Netty原始碼分析第3章(客戶接入流程)---->第2節: 處理接入事件之handle的建立

  Netty原始碼分析第三章: 客戶端接入流程   第二節: 處理接入事件之handle的建立   上一小節我們剖析完成了與channel繫結的ChannelConfig初始化相關的流程, 這一小節繼續剖析客戶端連線事件的處理 回到上一章NioEventLoop的p

Linux下網路程式設計之自定義協議進行併發多客戶與伺服器的通訊(多程序處理併發)不足佔用資源太多

自定義協議訊息體*********msg.h*************#ifndef _MSG_H_#define _MSG_H_struct msg{ char head[10]; //頭部 char msg_chck; //效驗碼 char buff[512];/

SSRS 報表開發過程中,除數0處理

ble return 代碼編輯 lse ror pre vid 屬性 應該 這裏僅供記錄,方法並非原創 在SSRS報表開發過程中,我們經常會遇到除數為0的計算 一般來說,我們都是通過IIF來進行處理,比如: =IIF(B=0,0,A/B) 但實際效果,則是,如果B=

java在線聊天項目0.9版 實現把服務接收到的信息返回給每一個客戶窗口中顯示功能之客戶接收

nec 一個 out for tex ava 添加 implement com 客戶端要不斷接收服務端發來的信息 與服務端不斷接收客戶端發來信息相同,使用線程的方法,在線程中循環接收 客戶端修改後代碼如下: package com.swift; import java.