网络协议系列之六:TCP流量控制

简介:

TCP的流量控制就是TCP接收端对发送端发送多少字节的数据进行控制,防止接收端处理不及而丢失数据。差错控制就是保证接收端接收的数据是完整未受损伤的,是可靠性的重要保证。

这里以TCP连接的建立过程说明流量控制,则流量控制的过程如下:

  1. TCP发送端向接收端发送一个SYN=1、seqNo=100的连接请求。这里的SYN=1表示一个建立连接的标志位,seqNo表示发送端发送数据的起始字节的编号是100
  2. 接收端收到SYN=1、seqNo=100的报文后,给客户端发送ACK=1、seqNo=1000、ackNo=101、rwnd=800的响应报文,告诉发送端,我如果向你发送数据则我这边的数据的字节起始编号是1000,而且你刚才发送的连接请求我已经收到了,我下一个希望接收编号是101的字节,还告诉发送端发送窗口是800,并且接收端的接收窗口也是800字节
  3. 发送端收到后,发送端的连接就建立了,于是给接收端发送ackNo=1001、ACK=1的报文,接收端收到后知道发送端已经收到刚才自己发的报文,所以接收端的连接也建立了。
  4. 当两边的连接建立后就可以发送数据了,首先发送端发送seqNo=101,Data=200bytes的数据。
  5. 接收端收到这200字节的数据后,接收窗口由800变为600(因为窗口缓存是800字节),并向发送端发送ACK=1、seqNo=301、rwnd=600的报文,告诉发送端你发送的200字节我已经收到了,下次发送的字节的起始编号是301,你的发送窗口要变为600了
  6. 发送端收到后,知道刚才发送的200字节一杯确认了,于是把发送窗口向右移动200字节,这样发送窗口就变为600字节了。之后,发送继续向接收端发送数据,发送seqNo=301,Data=300bytes的报文,向接收端发送起始编号为301且长度是300的数据
  7. 接收端收到后,把窗口减小为300字节,这时接收进程从接受缓存中拉取了100字节的数据,于是接收窗口的大小重新变为400字节,于是向发送端发送ACK=1、ackNo=601、rwnd=400的报文,告诉发送端你刚才发送的300字节数据我已经收到了,我下次希望接收的字节起始编号是601,你要把发送窗口继续减小为400字节
  8. 发送端收到后,知道刚才发送的300字节被确认了,于是把发送窗口向右移动,并不得不继续较小发送窗口为400字节
  9. 一会后,接收进程从接收缓存中拉取了200字节的数据,接收窗口变为600字节,于是接收端向发送端发送ACK=1、ackNo=601、rwnd=600的报文,告诉发送端窗口可以增大为600字节了
  10. 后面的过程与此类似,以此类推

从这个过程中,可以发现,发送窗口的大小是受到接收窗口的控制的。发送窗口必须根据接收端的大小及时调整发送窗口的大小,这个机制保证了每次TCP传输的数据量都是接收端可以及时处理的。不过这个过程中可能存在一个特例,就是当发送端每次只发送一个字节的数据的时候后者接收端处理数据的速度每一次只有一个1字节或者两者都有的时候,每次发送的报文段都很短,就会导致低效率,以发送端每次发送1字节为例,数据1字节、TCP首部20字节、IP首部20字节,这样为了发送1字节需要使用41字节发送浪费率达到40/41,加上数据链路层以及物理层的开销,可能这个数值还更大。这个问题有一个术语叫糊涂窗口综合征。有兴趣可以自己了解一下

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
运维 监控 网络协议
面对全球化的泼天流量,出海企业观测多地域网络质量
网络监控与分析在保证网络可靠性、优化用户体验和提升运营效率方面发挥着不可或缺的作用,对于出海企业应对复杂的网络环境和满足用户需求具有重要意义,为出海企业顺利承接泼天流量保驾护航。
549 215
|
9月前
|
运维 监控 安全
如何高效进行网络质量劣化分析与流量回溯分析?-AnaTraf
在数字化时代,网络质量分析与流量回溯对保障业务运行至关重要。网络拥塞、丢包等问题可能导致业务中断、安全隐患及成本上升。传统工具常缺乏细粒度数据,难以溯源问题。流量回溯分析可还原现场,助力精准排障。AnaTraf网络流量分析仪作为专业工具,能高效定位问题,提升团队响应力,降低运营风险。
如何高效进行网络质量劣化分析与流量回溯分析?-AnaTraf
|
8月前
|
人工智能 运维 算法
AI加持下的网络流量管理:智能调度还是流量黑洞?
AI加持下的网络流量管理:智能调度还是流量黑洞?
332 8
|
8月前
|
存储 监控 网络协议
了解流量探针,助你更好地优化网络
流量探针是现代网络运维中不可或缺的工具,用于实时监测网络数据包,提供一手数据。它通过镜像方式采集、过滤、分析流量,支持从二层到七层协议解码,助力网络瓶颈排查、业务性能优化及安全威胁检测。合理部署流量探针可实现精细化网络管理,提升性能与安全性。
|
10月前
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
392 12
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
379 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
11月前
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
289 0
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
507 3
|
域名解析 缓存 网络协议
TCP传输层详解(计算机网络复习)
本文详细解释了TCP/IP协议族的分层模型、各层的功能、TCP报文的格式以及TCP连接建立的三次握手和断开的四次挥手过程。
1823 2
TCP传输层详解(计算机网络复习)

热门文章

最新文章