[转帖]TCP流量控制_(滑动窗口)

tcp,流量,控制,滑动,窗口 · 浏览次数 : 0

小编点评

**一、TCP vs. UDP TCP可提供可靠的数据传输而UDP无法做到** * TCP 是面向流的协议,可以确保数据完整性和顺序。 * UDP 是面向消息的协议,每个 UDP 段都是一条消息,应用程序必须以消息为单位提取数据。 **二、滑动窗口** *滑动窗口是接收端动态调整接收缓冲区大小的技术。 * 当窗口大小太小时,接收端可能无法接收所有可接收的数据。 * 当窗口大小太大时,接收端可能浪费时间等待数据。 **3. TCP 的流量控制** * 发送端向接收端发送窗口大小,接收端根据窗口大小接收数据。 * 当窗口大小太小时,接收端可能无法接收所有可接收的数据。 * 当窗口大小太大时,接收端可能浪费时间等待数据。 **4. UDP 的流量控制** * UDP 没有滑动窗口机制。 * 接收端必须在每个数据包接收之前,向发送端请求窗口大小。 * 当窗口大小太小时,接收端可能无法接收所有可接收的数据。

正文

一、TCP vs. UDP

TCP可提供可靠的数据传输而UDP无法做到,那我们为什么还用UDP?

·使用UDP传送单条消息的开销要比TCP小

·响应式通信,UDP的速度要比TCP快。

DNS是应用UDP的绝好例子。

但使用UDP又需要可靠性保证的应用程序必须自行实现可靠性保障功能。

如果需要更高级的流量控制和拥塞控制,最好直接用TCP。

下面我们粗浅的了解一下TCP的流量控制

二、滑动窗口(Sliding Window)

请仔细阅读下图

 

(上图在接收端用小方块表示1K数据,实心的小方块表示已接收到的数据,虚线框表示接收缓冲区,因此套在虚线框中的空心小方块表示窗口大小,从图中可以看出,随着应用程序提走数据,虚线框是向右滑动的,因此称为滑动窗口。 )

1.发送端发起连接,声明最大段尺寸(每个包大小)是1460,初始序号是0,窗口大小是4K(即win),表示“我的接收缓冲区还有4K字节空闲,你发的数据不要超过4K”。接收端应答连接请求,声明最大段尺寸是1024,初始序号是8000,窗口大小是6K。发送端应答,三方握手结束。

2.发送端发出段4-9,每个段带1K的数据,发送端根据窗口大小知道接收端的缓冲区满了,因此停止发送数据。

3.接收端的应用程序提走2K数据(处理掉部分数据),接收缓冲区又有了2K空闲,接收端发出段10,在应答已收到6K数据的同时声明窗口大小为2K。

4.接收端的应用程序又提走2K数据,接收缓冲区有4K空闲,接收端发出段11,重新声明窗口大小为4K。

5.发送端发出段12-13,每个段带2K数据,段13同时还包含FIN位

6.接收端应答接收到的2K数据(6145-8192),再加上FIN位占一个序号8193,因此应答序号是8194,连接处于半关闭状态,接收端同时声明窗口大小为2K。

7.接收端的应用程序提走2K数据,接收端重新声明窗口大小为4K。

8.接收端的应用程序提走剩下的2K数据,接收缓冲区全空,接收端重新声明窗口大小为6K。

9.接收端的应用程序在提走全部数据后,决定关闭连接,发出段17包含FIN位,发送端应答,连接完全关闭。

从这个例子还可以看出,发送端是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),在底层通讯中这些数据可能被拆成很多数据包来发送,但是一个数据包有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议。而UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消息为单位提取数据,不能一次提取任意字节的数据,这一点和TCP是很不同的。

文章知识点与官方知识档案匹配,可进一步学习相关知识

与[转帖]TCP流量控制_(滑动窗口)相似的内容:

[转帖]TCP流量控制_(滑动窗口)

一、TCP vs. UDP TCP可提供可靠的数据传输而UDP无法做到,那我们为什么还用UDP? ·使用UDP传送单条消息的开销要比TCP小 ·响应式通信,UDP的速度要比TCP快。 DNS是应用UDP的绝好例子。 但使用UDP又需要可靠性保证的应用程序必须自行实现可靠性保障功能。 如果需要更高级的

[转帖]TCP BBR 拥塞控制算法

https://www.91tfboys.com/?p=348 BBR是个好东西。众所周知,在TCP连接中,由于需要维持连接的可靠性,引入了拥塞控制和流量管理的方法。Google BBR就是谷歌公司提出的一个开源TCP拥塞控制的算法。 这里不详细介绍BBR的原理,仅放入部分质量较高的BBR资源,供索

[转帖]kubernetes Tcp流量可视化

https://www.cnblogs.com/charlieroro/p/16771739.html 使用k8spacket和grafana的node graph插件可以查看kubernetes pod的TCP相关信息,如connection、bytes、和duration。下面是接收和响应的字节

[转帖]kubernetes Tcp流量可视化

https://www.cnblogs.com/charlieroro/p/16771739.html 使用k8spacket和grafana的node graph插件可以查看kubernetes pod的TCP相关信息,如connection、bytes、和duration。下面是接收和响应的字节

[转帖]k8spacket 和 Grafana 对 kubernetes 的 TCP 数据包流量可视化

https://devpress.csdn.net/k8s/62ff4fe47e66823466193b95.html 你知道你不看的时候你的k8s集群在做什么吗?谁与他建立 TCP 通信?他调用了谁,例如,来自第三方库? 使用k8spacket和Grafana,您可以可视化集群中的 TCP 流量。

[转帖]【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档

本章介绍如何使用NGINX Plus和NGINX开放源代理和负载平衡TCP和UDP流量。 目录 介绍先决条件配置反向代理配置TCP或UDP负载平衡被动健康监控 选择负载平衡方法配置会话持久性 主动健康监控 怎么运行的先决条件基本配置微调健康检查使用匹配配置块进行微调健康检查 TCP的微调健康检查UD

[转帖]tcpcopy 流量镜像注意事项

https://www.jianshu.com/p/7c58b389cbe9 如果从多台服务器镜像流量, -c 后面的参数使用不同的 IP 段, 也要记得在目的端 server 添加相应的路由。原因是在流量大的情况下,改变后的源ip和源端口可能冲突,导致 tcp reset。例如 流量源1 : -c

[转帖]Linux中iptraf命令详解

https://www.sohu.com/a/217620611_610671 iptraf是一个基于ncurses开发的IP局域网监控工具,它可以实时地监视网卡流量,可以生成各种网络统计数据,包括TCP信息、UDP统计、ICMP和OSPF信息、以太网负载信息、节点统计、IP校验和错误和其它一些信息

[转帖]TCP三次握手详解,滑动窗口,拥塞窗口,网络包路由过程,全连接队列,半连接队列

众所周知,网络分层有传统的OSI七层模型和后来的基于TCP/IP的四层模型: 那么在一次网络的传输过程中具体的流程是怎么样的,我们先从一个数据包的传输说起(以TCP为例): TCP协议根据上层应用提供的信息生成TCP报文 TCP报文在交由下面的IP层(网络层)进行处理,委托IP模块将TCP报文封装成

[转帖]面试必备!TCP协议经典十五连问!

https://juejin.cn/post/6983639186146328607 前言 TCP协议是大厂面试必问的知识点。整理了15道非常经典的TCP面试题,希望大家都找到理想的offer呀 公众号:捡田螺的小男孩 github地址,感谢每一颗star 1. 讲下TCP三次握手流程 开始客户端和