流量控制

TCP传输协议如何进行流量控制?

三世轮回 提交于 2019-11-27 10:08:51
TCP流量控制,简单来说就是让数据传输端传输的速率不要太快,让数据接收端来得及接收,利用滑动窗口机制可以很方便的在TCP连接上实现对数据传输端的流量控制。TCP的窗口单位是字节,不是报文段,数据传输端的发送窗口不能超过接收端给出的接收窗口的数值,流量控制的机制是控制丢包率,主要目的:让数据传输端了解数据接收端当前的接收能力,可灵活调整传输速率。流量控制机制图如下图所示: 滑动窗口: TCP采用大小可变的滑动窗口进行流量控制,窗口大小的单位是字节。 数据传输窗口在连接建立时由双方商定。但在通信的过程中,数据接收端可根据自己的资源情况,随时动态地调整对方的传输窗口大小。滑动窗口实例图如下图所示: 滑动窗口引进原由: 我们可以把窗口理解为缓冲区(但是有些窗口和缓冲区又不太一样)。 如果没有这些“窗口”,那么TCP每发送一段数据后都必须等到数据接收端确认后才能发送下一段数据,这样做的话TCP传输的效率实在是太低了。 解决的办法就是在发送端等待确认的时候继续发送数据,假设发送到第X个数据段是收到数据接收端的确认信息,如果X在可接受的范围内那么这样做也是可接受的。这就是窗口(缓冲区)引入的缘由。 滑动窗口: A、数据接收端窗口 X 接收端缓冲区大小。接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。 B、拥塞窗口 Y 发送端缓冲区大小 C、数据传输窗口 Z 发送窗口的上限值

课程回顾4

一个人想着一个人 提交于 2019-11-27 09:36:34
一、数据链路层的功能: 1、链路管理; 2、信息传输; 3、流量与差错控制; 4、异常情况处理。 二、数据链路层的流量控制协议:指对在数据链路上传输的帧进行速度的控制,保证接收端有足够的缓冲单元存储发送端发来的信息以便接收端处理。 常用的两种方法: 1、停—等流量控制; 2、滑动窗口流量控制。 特殊情况处理: 超时计时器—防止由于信息丢失导致发送端的无休止等待; 给帧编序号—防止重帧现象出现。 三、当用n个比特进行编号时,若接收端 的大小为1,则发送窗口 的大小与编码二进制位数之间的关系为 四、广域网数据链路控制规程的分类: 1、面向字符型传输控制规程:以字符型作为传输基本单位,典型的有BSC、DDCMP等; 2、面向比特型传输控制规程::以比特型作为传输基本单位,典型的有HDLC、SDLC、ADCCP等。 来源: https://www.cnblogs.com/wdn135468/p/11937323.html

TCP/UDP对比总结

怎甘沉沦 提交于 2019-11-27 06:10:09
目录 1 TCP-UDP对比 2 UDP介绍 3 TCP介绍 3.1 可靠传输的原理和实现 3.1.1 可靠传输原理 3.1.2 可靠传输实现 3.2 TCP面向连接管理 3.2.1 建立连接 3.2.2 释放连接 3.3 流量控制 3.4 拥塞控制   在计算机网络中,有三种体系结构划分方式,第一种是OSI七层协议体系结构,由上到下分别是:应用层,表示层,会话层,运输层,网络层,数据链路层,物理层;第二种是TCP/IP四层协议,由上到下分别是:应用层,运输层,网际层,网络接口层。第一种划分方式复杂又不实用,第二种划分方式最下面“网络接口层”对计算机网络来说,和一般的通信链路没有多大的区别,所以最后折中为我们常用的五层协议:应用层,运输层,网络层,数据链路层,物理层。   运输层向它上面的应用层提供服务,它属于面向通信部分的最高层,同时也是用户功能的最底层。两个主机通过核心网络进行端到端通信时,只有主机部分有运输层,核心网络部分的路由在转发分组时只用到下面三层。   TCP/UDP作为传输层协议,各自都有着非常广泛的应用场景,下面先对这两种协议做一个简单对比,然后分别介绍下这两种协议。本文仅从原理上介绍两种协议,暂并不涉及编程。 1 TCP-UDP对比    相同点:   TCP和UDP都是网络层之上的,传输层协议,都能都能保护网络层的传输,双方的通信都需要开放端口

k8s+istio:流量控制之灰度发布

老子叫甜甜 提交于 2019-11-26 16:38:34
通过Kubernetes+Istio的流量控制实现灰度发布,主要演示通过流量权重实现蓝绿,通过http自定义头实现金丝雀 准备环境 k8s和istio不想自己装的话可以在云上买个按量付费集群,用完即删,推荐华为云。 项目中用到的代码 用的springboot+springcloud feign做rest强类型调用,放到github了 https://github.com/assionyang/istio-test.git 代码结构说明 istio-service-union #聚合服务项目,用来测试调用user服务,也做为入口 |-Dockerfile #dockerfile istio-service-user #用户服务,用来演示版本切换 |-Dockerfile #dockerfile istio-service-user-api #类库,使用feign暴露client与dto,union服务依赖user-api k8s #k8s&istio发布文件目录 |-config |- istio-service-union.yaml # union服务ConfigMap |- istio-service-user-v1.yaml # user服务v1版本ConfigMap |- istio-service-user-v2.yaml # user服务v2版本ConfigMap |-

HTB进行流量控制方法

半世苍凉 提交于 2019-11-26 14:55:57
TC 为 TrafficControl 的缩写,借助linux下的tc命令。 HTB 顾名思义是一个层次式的过滤框架 , 可以通过配置 TC HTB 规则来实现流量控制 . 我是在嵌入式linux环境中进行流量控制的,所以除了tc命令的移植,还需要内核方便的支持。所以分为两部分, 一是:iproute2-2.6.31的移植,生成tc命令。二是编译内核,进入内核目录进行make menuconfig 进入Networking support ---->   Networking option ---->     选中 QoS and/or fair queueing ---->         选择需要的项目,如果你的设备空间足够大也可大部分都选上。让后进行编译。同时把先前移植好的tc放进设备中。 下面开始进行流量控制的命令: 1 tc qdisc del root dev eth0 // 删除设备eth0上的规则队列 2 tc qdisc add dev eth0 root handle 1 :htb default 91 3 tc class add dev eth0 parent 1 : 0 classid1: 1 htb rate 100mbit 4 tc class add dev eth0 parent 1 : 1 classid 1 : 2 htb rate

TCP协议和UDP协议

浪子不回头ぞ 提交于 2019-11-26 14:51:32
TCP协议和UDP协议的区别 TCP协议: TCP可以提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),但是会增加资源的开销。 UDP协议: UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认,故UDP属于不可靠连接。 TCP如何保证可靠传输 (1)数据处理: 将应用层数据分割成TCP认为最佳的分组。 (2) 对每一个分组进行排序编号,做有序传输并且丢弃重复分组 。 (3)检验和: 校验分组的和,校验和的数值若超过十六进制,则补码后做校验和;通常用在远距离通信中确保数据的完整性和准确性 。 (4)流量控制: TCP数据传输的双方都有数据接收缓冲区并且设有大小(使用滑动窗口设定大小),这样可以控制发送速率保证数据丢失 (5)拥塞控制: 网络拥塞时减少分组的传输。 (6)ARQ协议: 原理是先发送一个分组,待确认之后,再进行下一个分组的发送。 (7)超时重发: TCP发出一个分组后,启动一个定时器,超时就重新发送一遍。 ARQ协议: 定义: 即自动重传请求,是运输层错误纠正协议之一。使用确认和超时两个机制,若没有收到确认帧就会重新发送;包括停止等待ARQ协议(发送一个分组就停止和等待

HTTP/2 新特性总结

拜拜、爱过 提交于 2019-11-26 02:31:45
我在想了解HTTP/2的时候,查阅了很多资料,发现这篇很好,是外国的文章.我翻译过来,加入自己的一点理解. HTTP/2 更简单,高效,强大.它在传输层解决了以前我们HTTP1.x中一直存在的问题.使用它可以优化我们的应用.HTTP/2 的首要目标是通过完全的请求,响应多路复用,头部的压缩头部域来减小头部的体积,添加了请求优先级,服务端推送.为了支持这些特性,他需要大量的协议增加头部字段来支持,例如新的流量控制,差错处理,升级机制.而这些是每个web开发者都应该在他们的应用中用到的. HTTP/2并没有在应用中改变HTTP的语义,而是通过在客户端和服务端传输的数据格式(frame)和传输.它通过在新的二进制帧层控制整个过程以及隐藏复杂性,而这不需要改变原来有的东西就可以实现. 1. 设计和技术目标 HTTP是因特网广泛普及和采纳的应用层协议.它的易于实现性同样有了对应用性能方面的影响.HTTP/1.x 需要开启多个连接来实现并发和减少潜在影响.HTTP/1.x 的头部没有压缩,造成不必要的网络拥塞.HTTP/1.x没有应用资源优先级,导致重要Tcp连接的糟糕使用. 它的好处如下; HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by

TCP流量控制与拥塞控制

故事扮演 提交于 2019-11-25 20:14:15
一:流量控制 什么是流量控制?流量控制的目的? 如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。 如何实现流量控制? 由滑动窗口协议(连续ARQ协议)实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。主要的方式就是接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。 流量控制引发的死锁?怎么避免死锁的发生? 当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。 为了避免流量控制引发的死锁,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。 二:拥塞控制和流量控制的区别 拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用的方法就是:( 1 )慢开始、拥塞避免( 2