TCP/IP协议为流控制协议,TCP窗口是其中一个重要的概念。在TCP接受和发送端都有缓存区,用户缓存数据,当缓存区满的时候就不能在向缓存区中写入数据了。发送缓存区满表现为send的返回值不再是指定的字节数,而小于该值的一个值;而接收缓存区满表现为对端发送收到影响。

[TCP Window Full] :服务端向客户端发送的一种窗口警告,表示已经发送到数据接收端的极限了。
[TCP Window Update]:缓冲区已释放为所示的大小,因此请恢复传输。
[Zero Window] :客户端向服务端发送的一种窗口警告,告诉发送者你的接收窗口已满,暂时停止发送。

这三种帧经常出现在以下两种情况中:

  1. 接收端比发送端数据处理要慢,导致数据堆积。
  2. 接收端控制了接收速度。
  1. Wireshark [TCP Window Full] & [Zero Window]:关于TCP window full的计算可以参考改文章。
  2. 关于wireshark抓包的那点事儿:关于wirshark常见协议帧的说明
  3. [TCP ZeroWindow], [TCP Window Update], [TCP Window Full] displayed on Wireshark – cause & countermeasure:wireshark中三种帧的含义、原因及对策
然后停止发送,等待新的接收窗口的通知 此时接收端返回TCP零窗口,表示接收端窗口为0,从抓包可以看出,当清除缓存后窗口不再为0时,接收端更新其窗口大小.在这种情况下,请考虑在 TCP 套接字设置 TCP_NODELAY 选项。在编译器头文件找到这个宏的定义,编译ldap也发现这个宏是一直开启的,也就是默认不使用Nagle算法.代码没有找到TCP_NODELAY宏是在哪里定义的,所以在编译器头文件找到了这个宏 1、作为接收方,有接收窗口,也就是接收缓冲区,win=xxx 告诉对方,我的接收窗口大小。 2、当我的接收窗口满了,也就是win=0,Wireshark显示【TCP ZeroWindow】,这个时候,对方不能再发送数据。 3、作为发送方,有发送窗口,发送窗口可以理解为,一口气可以发送多少数据。发送窗口不光要考虑对方的接收窗口,还要考虑网络情况,也就是拥塞窗口,等于它们的最小值。   发送窗口数据分... TCP window full, 是指的发送端发送的数据已经达到的接受窗口的上限。继而停止发送,等待新的接收窗口的通告。 发生TCPwindow Full 的情况分析,下面得包是抓取的FTP的streamflow.  当时的情况是正在发生在客户端上传文件到服务器。 本地主机:146.11.2.87 远端服务器:147.128.6.103 首先看第28406个包,服务器通告本段A 关于TCP window full/TCP zero window TCP window full, 是指的发送端发送的数据已经达到的接受窗口的上限。 继而停止发送,等待新的接收窗口的通告 此时接收端返回的是TCP zero window,表示接收端窗口为0,从抓包可以看出 接收端在清除缓存后窗口不再为0时,更新了其窗口大小 出现该情况是可考虑将TCP socket的设置TCP_NODELAY选项。 setsockopt( s, IPPROTO_TCP, TCP_NODELAY, (char*) &amp 去年我师傅推荐了两本林沛满写的关于wireshark抓包的书,分别是《wireshark就是这么简单》和《wireshark分析的艺术》,写的真心不错。 TCP协议是一个很有意思的内容,这半年对TCP协议有了更多的认识,于是想重新更新一些对TCP协议的内容。今天先从TCP协议里面的滑动窗口说起。 1、先说原理 就发送端来说,一般如下所示: 主要分为:已发送已确认的包(应用层未读取)。发送未确认的包,未发送可发送的包,未发送不可发送的包。其,滑动窗口指的是发送未确认和未发送可发送区域的大小。 2、滑动窗口 本文整理自:《Wireshark网络分析的艺术 第1版》作者:林沛满 著出版时间:2016-02more最近有不少同事开始学习 Wireshark,他们遇到的第一个困难就是理解不了主界面上的提示信息,于是跑来问我。问的人多了,我也总结成一篇文章,希望对大家有所帮助。Wireshark 的提示可是其最有价值之处,对于初学者来说,如果能理解这些提示所隐含的意义,学起来定能事半功倍。 流媒体播放,常常需要借助wiresharkTCP层面对交互过程进行分析,本文记录一些常见的TCP异常报文及其分析。 乱序与丢包 1、[TCP Previous segment not captured] [TCP Previous segment not captured]报文指的是在TCP发送端传输过程,该Seq前的报文缺失了。一般在网络拥塞的情况下,造成TCP报文乱序、丢包时,会出现该标... 1.TCP Previous segment not captured TCP传输过程,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的Seq+Len(握手和挥手除外)。当Wireshark发现后一个包的Seq号大于前一个包的Seq+Len时,就会提示TCP Previous segment not captured。 2.TCP ACK unseen segment 当W... 从传输数据来讲,TCP/UDP以及其他协议都可以完成数据的传输,从一端传输到另外一端,TCP比较出众的一点就是提供一个可靠的,流控的数据传输,所以实现起来要比其他协议复杂的多,先来看下这两个修饰词的意义: 1. Reliability ,提供TCP的可靠性,TCP的传输要保证数据能够准确到达目的地,如果不能,需要能检测出来并且重新发送数据。 2. Data Flow Control,提供TCP的流控特性,管理发送数据的速率,不要超过设备的承载能力 为了能够实现以上2点,TCP实现了很多细节的功能来保证数 新的想法诞生新的技术,从而造出许多新词,云计算、大数据、BYOD、社交媒体……在互联网时代,各种新词层出不穷,让人应接不暇。这些新的技术,这些新兴应用和对应的IT发展趋势,使得IT人必须了解甚至掌握最新的IT技能。 新的想法诞生新的技术,从而造出许多新词,云计算、大数据、BYOD、社交媒体、3D打印机、物联网……在互联网时代,各种新词层出不穷,让人应接不暇。这些新的技术,这些新兴应用和对 此前在对接视频平台过程,获取的视频超过7路,会出现TCP window full的错误,然后获取的视频流会断掉。 产生问题的原因: 业务处理过程速度不够,导致客户端向服务端发送零窗口的错误,最终导致服务端端口卡死。只有等到socket关闭,服务器端的业务才会恢复。 现象:出现断流后,从客户端获取的视频平台码流也断了,说明端口被堵住了。重启程序或客户端(关闭socket连接)后视频业... TCP Window Full: 接收方接收缓冲区满了后,导致发送方的发送缓冲区装满待确认数据,此时发送方会发送一个TCP Window Full消息。 TCP ZeroWindow: 接收方应用没有及时recv消息,导致接收缓冲满,即滑动窗口为0,接收方发送TCP Zero Window告知发送方不能继续发送消息。 TCP ZeroWindowProbe: 零窗口探测报文---滑动窗口 我们之前介绍过,TCP报文window size表示发出这个报文的一端准备多少bytes的数据,当TCP的一端一直接收数据,但是应用层没有及时读取的话,数据一直在TCP模块缓存,最终受限于接收缓存的大小,window size会变为0,此时我们称呼这个接收窗口为零窗(zero window),对端也不能在发送更多的数据。如果随后本端应用层从TCP接收缓存读取了足够数据,T...