首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TCP如何通过滑动窗口实现流量控制?

TCP/IP协议是计算机通信网络中目前使用最多的协议,同时也融入了生活的方方面面,不管是浏览网页使用的HTTP/HTTPS协议、物联网设备使用的MQTT/MQTTS协议与下载文件使用的ftp协议、工业以太网中使用的Modbus TCP协议等很多应用层协议,都是基于TCP/IP协议。TCP/IP协议在传输数据的同时,也提供了以下功能:

慢启动:网络环境拥塞检测

重传机制:保证数据的完整性与连接可靠性

滑动窗口:流量控制,降低网络环境压力,避免数据丢包

Keep-alive:网络异常检测

正因为以太网在我们生活中广泛的应用,以及物联网设备的普及,而以太网设备的处理能力以及网络接口的速度又可能差异巨大。比如目前主流的PC、交换机与路由器等网络设备都支持1000Mbps的连接速度,而老的产品能支持到100Mbps,甚至某些低成本以太网产品只能支持到10Mbps,所有怎样才能保证以太网设备在通讯的时候,接收数据的稳定性,并且在接收方没有能力接收数据的情况下“告诉”对方暂时不要发送数据呢?

本文将介绍TCP滑动窗口,并且如何通过滑动窗口实现流量控制。

TCP协议简介

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它提供了一种全双工的、面向连接的、可靠的字节流服务,是TCP/IP协议簇中最重要也是最复杂的协议。

TCP的主要特点包括:

面向连接:通信前需要先三次握手建立连接,通信后四次挥手释放连接。

可靠:通过序号解决报文乱序/丢失、超时重传、拥塞控制、滑动窗口、检验和等方式保证数据传输的可靠性。

字节流:没有固定的报文边界,数据在TCP中以字节流的形式传输。

全双工:通信两端在任意时刻可以互相发送数据,既可以是客户端也可以是服务端。

TCP假设它可以从较低级别的协议获得简单的、可能不可靠的数据报服务,原则上TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

滑动窗口

1.通过TCP连接报文查看双方接收窗口大小

上图中是通过wireshark抓取的一段TCP连接报文,Win=64240表示客户端(192.168.3.111:53065)的接收窗口为64240,WS=256代表窗口缩放256倍,即64240*256。Win=64240表示服务器(192.168.3.207:8000)的接收窗口为64240,WS=32代表窗口缩放32倍,即64240*32。

2.正常接收数据时接收窗口的变化

从上图中可以看出,当发送方应用层有大量数据发送的时候,发送方并不一定会等待接收方的ACK,并且接收方的接收窗口会有一个变小,再变大的过程。

3.当接收方无法处理数据时的窗口状态

上图为客户端(192.168.3.111)一直往服务器(192.168.3.207)发送数据且服务器不从协议栈读出数据的一段报文,从上图中可以看到,服务器的接收窗口一直处于下降状态。客户端数据正常在发送。

4.接收方窗口满后,发送方被流控

当发送方一直发送,直到接收方ACK Win=160的时候,发送方发送了最后160字节。后续发送方一直发送窗口检测包,而非应用层数据。(此时在一些操作系统下若发送方应用层使用阻塞api,那么发送线程就会阻塞在发送函数中)无法继续发送数据。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OeOCCmL-nRjZomePT-ZymL9A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券