流量控制

字节二面问我计算机网络的拥塞控制问题,清明节假,我终于搞明白了...

巧了我就是萌 提交于 2020-04-06 21:31:19
多点头发,少点代码 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 本来想先更新TCP的基础和TCP可靠性等问题的,但是被你们暗示了,就先更流量控制和拥塞控制了。希望龙叔讲的你能搞清楚,如果有不清楚的,可以加龙叔微信一起探讨。 龙叔的号暂时还没开通留言功能(大家要是有留言号,可以贡献一个出来喔😆),大家有什么问题就直接后台回复 龙叔 即可加龙叔微信,享受一对一技术探讨(只要是问我问题的都会回复大家,基本是在晚上十点之后和周末,做好不会秒回的心理准备) 流量控制 讲流量控制之前先花简短的话语絮叨下TCP基础知识,详细知识细节后面会出文章一一道来。 TCP是一种面向连接、保证可靠性、流式传输服务。 面向连接 就是建立链接,也就是面试常问的三次挥手建立链接,四次挥手断开链接。 保证可靠性 到是很好理解,就是你发送的数据尽最大可能保证让接收端接收到。 流式传输 就是传输的数据是以字节流的形式发送和接受(不要硬是和我说,什么字节流传输?明明物理层上都是波信号,这,抱拳。) TCP传输数据都是建立链接之后才进行传输,传输的时候为保证可靠性,也是采用确认应答机制。所谓确认应答机制就是发送数据之后必须收到确认消息,才算一次有效传输。 举个简单栗子,就是你和别人交流之前必须叫别人一声(这位先生你好

清明节假,终于搞明白了网络拥塞控制问题

久未见 提交于 2020-04-06 12:15:03
多点头发,少点代码 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 本来想先更新TCP的基础和TCP可靠性等问题的,但是被你们暗示了,就先更流量控制和拥塞控制了。希望龙叔讲的你能搞清楚,如果有不清楚的,可以加龙叔微信一起探讨。 龙叔的号暂时还没开通留言功能(大家要是有留言号,可以贡献一个出来喔😆),大家有什么问题就直接后台回复 龙叔 即可加龙叔微信,享受一对一技术探讨(只要是问我问题的都会回复大家,基本是在晚上十点之后和周末,做好不会秒回的心理准备) 流量控制 讲流量控制之前先花简短的话语絮叨下TCP基础知识,详细知识细节后面会出文章一一道来。 TCP是一种面向连接、保证可靠性、流式传输服务。 面向连接 就是建立链接,也就是面试常问的三次挥手建立链接,四次挥手断开链接。 保证可靠性 到是很好理解,就是你发送的数据尽最大可能保证让接收端接收到。 流式传输 就是传输的数据是以字节流的形式发送和接受(不要硬是和我说,什么字节流传输?明明物理层上都是波信号,这,抱拳。) TCP传输数据都是建立链接之后才进行传输,传输的时候为保证可靠性,也是采用确认应答机制。所谓确认应答机制就是发送数据之后必须收到确认消息,才算一次有效传输。 举个简单栗子,就是你和别人交流之前必须叫别人一声(这位先生你好

java网络

*爱你&永不变心* 提交于 2020-03-26 09:57:26
这个图很形象的展示了OSI的五层架构之间的关系。 OSI被称为开放式互联,是国际标准组织制定的网络模型,本来是七层,后来把表现层和会话层加到应用层里面了。 那么五层模型中的每一层具体都是干什么的呢? 在标准的网络模型中,每一层都有它不同的用处,而且每一层都只提供向上和向下的接口,而不会垮层去通信。 在应用层这里,主要是为特定的应用程序提供数据传输服务。这一层是和程序员关系最紧密的一层,其中的代表性协议就是http,它的数据单位是报文。 在传输层,为进程提供数据传输服务。这一层主要为应用层的各种各样的协议提供通用的传输层协议。这里主要就是两个最简单的协议:TCP协议和UDP协议。这里传输是端到端,连接的是端口号,也就是进程。 在网络层,为主机提供数据传输服务。这一层主要将传输层的数据报封装成分组。经典协议就是IP协议。 在数据链路层,为同一链路的主机提供数据传输服务。将网络层传下来的分组封装成帧,这里主要是MAC地址。 在物理层,最底层,传输的是二进制比特流。 我们从网络层说起,一般网络层下面的就不去了解了。 网络层是整个互联网的核心。网络层向上只提供简单灵活的、无连接的。尽最大努力交互的数据报服务。 IP数据报的格式: 版本:众所周知,ip现在有两个版本,ipv4和ipv6,ipv4的地址已经用光了,ipv6地址非常多。 首部长度:上面每一行是4个字节,除去可变部分,最少有五行

一起学Python:TCP简介

青春壹個敷衍的年華 提交于 2020-03-25 03:47:13
一起学Python:TCP简介 TCP介绍 TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。 TCP通信需要经过 创建连接、数据传送、终止连接 三个步骤。 TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,"打电话"" TCP特点 1. 面向连接 通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。 双方间的数据传输都可以通过这一个连接进行。 完成数据交换后,双方必须断开此连接,以释放系统资源。 这种连接是一对一的, 因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。 2. 可靠传输 1) TCP采用发送应答机制 TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功 2) 超时重传 发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。 TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认

一起学Python:TCP简介

主宰稳场 提交于 2020-03-25 03:46:55
一起学Python:TCP简介 TCP介绍 TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。 TCP通信需要经过 创建连接、数据传送、终止连接 三个步骤。 TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,"打电话"" TCP特点 1. 面向连接 通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。 双方间的数据传输都可以通过这一个连接进行。 完成数据交换后,双方必须断开此连接,以释放系统资源。 这种连接是一对一的, 因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。 2. 可靠传输 1) TCP采用发送应答机制 TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功 2) 超时重传 发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。 TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认

什么是TCP拥塞控制算法?

一世执手 提交于 2020-03-22 23:44:08
最近花了些时间在学习TCP/IP协议上,首要原因是由于本人长期以来对TCP/IP的认识就只限于三次握手四次分手上,所以希望深入了解一下。再者,TCP/IP和Linux系统层级的很多设计都可以用于中间件系统架构上,比如说TCP 拥塞控制算法也可以用在以响应时间来限流的中间件上。更深一层,像TCP/IP协议这种基础知识和原理性的技术,都是经过长时间的考验的,都是前人智慧的结晶,可以给大家很多启示和帮助。 本文中会出现一些缩写,因为篇幅问题,无法每个都进行解释,如果你不明白它的含义,请自己去搜索了解,做一个主动寻求知识的人。 TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制。 TCP协议通过滑动窗口来进行流量控制,它是控制发送方的发送速度从而使接受者来得及接收并处理。而拥塞控制作用于整体网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。 拥塞算法需要 掌握其状态机和四种算法 。拥塞控制状态机的状态有五种,分别是: "Open,Disorder、CWR、Recovery和Loss状态" 。四个算法为 "慢启动,拥塞避免,拥塞发生时算法和快速恢复" 。 Congestion Control State Machine 和TCP一样,拥塞控制算法也有其状态机。当发送方收到一个ACK时,Linux TCP通过状态机的状态来决定其接下来的行为

TCP 拥塞控制算法简介

ⅰ亾dé卋堺 提交于 2020-03-22 15:26:46
最近花了些时间在学习TCP/IP协议上,首要原因是由于本人长期以来对TCP/IP的认识就只限于三次握手四次分手上,所以希望深入了解一下。再者,TCP/IP和Linux系统层级的很多设计都可以用于中间件系统架构上,比如说TCP 拥塞控制算法也可以用于以响应时间来限流的中间件。更深一层,像TCP/IP协议这种基础知识和原理性的技术,都是经过长时间的考验的,都是前人智慧的结晶,可以给大家很多启示和帮助。  本文中会出现一些缩写,因为篇幅问题,无法每个都进行解释,如果你不明白它的含义,请自己去搜索了解,做一个主动寻求知识的人。  TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制。  TCP协议通过滑动窗口来进行流量控制,它是控制发送方的发送速度从而使接受者来得及接收并处理。而拥塞控制是作用于网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。  拥塞算法需要掌握其状态机和四种算法。拥塞控制状态机的状态有五种,分别是Open,Disorder,CWR,Recovery和Loss状态。四个算法为慢启动,拥塞避免,拥塞发生时算法和快速恢复。 Congestion Control State Machine  和TCP一样,拥塞控制算法也有其状态机。当发送方收到一个Ack时,Linux TCP通过状态机(state)来决定其接下来的行为

TCP的滑动窗口与拥塞窗口

五迷三道 提交于 2020-03-22 06:19:01
一、滑动窗口 滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。 对ACK的再认识,ack通常被理解为收到数据后给出的一个确认ACK,ACK包含两个非常重要的信息: 一是期望接收到的下一字节的序号n,该n代表接收方已经接收到了前n-1字节数据,此时如果接收方收到第n+1字节数据而不是第n字节数据,接收方是不会发送序号为n+2的ACK的。举个例子,假如接收端收到1-1024字节,它会发送一个确认号为1025的ACK,但是接下来收到的是 2049-3072,它是不会发送确认号为3072的ACK,而依旧发送1025的ACK。 二是当前的窗口大小m,如此发送方在接收到ACK包含的这两个数据后就可以计算出还可以发送多少字节的数据给对方,假定当前发送方已发送到第x字节,则可以发送的字节数就是y=m-(x-n).这就是滑动窗口控制流量的基本原理. 滑动窗口协议如图所示: 在这个图中,我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口,它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,且通告窗口大小为6。我们知道窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。当接收方确认数据后,这个滑动窗口不时地向右移动

TCP可靠传输措施

血红的双手。 提交于 2020-03-20 20:08:33
3 月,跳不动了?>>> 一、TCP的可靠传输 序号 TCP在传输时会把数据看成一个有序的字节流,给每一个字节都编上序号。 确认 在接收端接收到发送端发送过来的数据后,会期望接受到下一个编号的数据。如,在B接受到A传输过来的数据0、1、2后,会把发送给A的确认报文首部的确认字段设为3。若接下来A发送的数据3、4在传输过程中丢失,只成功发送了5、6,那么B到A的确认报文段将确认号字段置为3。 重传 有两种情况会导致TCP对报文段进行重传:超时和冗余ACK。 ①超时:TCP每发送一个报文段,都会进行一次计时,在规定时间前没有收到确认,就要重传这一报文。 ②冗余ACK: 能触发超时重传的周期往往比较长,所以常常用更有效的冗余ACK方法来检测丢包的情况。如A发送了序号为1、2、3、4、5的报文段,但是2丢失,所以3、4、5报文段对B来说就成了失序报文段。 TCP规定每当比期望序号大的失序报文到达时,发送一个冗余ACK。 所以当B收到3、4、5 报文段时,会给A发送3个对2号报文段的冗余ACK,表示自己期望接收到2号报文段。 TCP规定当发送方收到对同一个报文段的3个冗余ACK时,就可以认为这个报文段发生了丢失。 这时A可以立即对2号报文执行重传,这种技术也叫 快速重传 。 二、TCP流量控制 TCP提供的流量控制服务是为了消除发送方使接收方缓存区溢出的可能性

SP CCIE新一代流量控制技术Segment Routing Traffic-eng(SRTE)

人盡茶涼 提交于 2020-03-09 22:43:17
SRTE(Segment Routing Traffic-eng)是新一代的主要在运营商或大型的内容提供商网络中部署的控制流量传输路径的技术,老的技术是RSVP-TE。 RSVP-TE在出来以后,实际部署的不多,主要原因是RSVP这个协议是逐跳的,并且是软状态的。软状态的意思是需要周期性的发送控制信令包来维护RSVP-TE计算出来的路径和预留带宽的状态。所以不具有扩展性,核心有K*N2的状态项。 SRTE在设计的时候充分考虑了RSVP-TE的缺陷,有以下特点: 简单,自动化和可扩展 无核心状态:数据包标头中包含路径 没有隧道接口:“SR Policy”(早期设计用的tunnel,后期变成了SR-Policy) 没有Head-end预先配置:on-demand策略实例化(可以与BGP联动,生成配置) 没有Head-end预先转向:自动转向(这个与autoroute不一样,有机会后面跟大家分享) 多域(Multi-Domain) 思科提供:XR Traffic Controller(XTC)(思科提供的控制器) PCE(标准化的技术,用于收集信息和计算生成路径等) Binding-SID(BSID)用于扩展(用于LSP之间的拼接) 下面给大家列一下SRTE的基本配置: 第一步:信息发布(在所有路由器的相应接口都需要配置) 第二步:头端设备将信息发布到SRTE Database 第三步