拥塞控制

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

巧了我就是萌 提交于 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传输数据都是建立链接之后才进行传输,传输的时候为保证可靠性,也是采用确认应答机制。所谓确认应答机制就是发送数据之后必须收到确认消息,才算一次有效传输。 举个简单栗子,就是你和别人交流之前必须叫别人一声(这位先生你好

BBR拥塞控制算法

柔情痞子 提交于 2020-04-06 00:33:23
BBR拥塞控制算法是Google最新研发的单边TCP拥塞控制算法 Linux 内核4.9 已引入这个BBR算法,本人在CAC测试Ubuntu 14.04 安装Linux 4.9内核,延迟优化效果和TCP连接速度提升效果明显好于锐速! Ubuntu更新内核、开启BBR:https://github.com/iMeiji/shadowsocks_install/wiki/%E5%BC%80%E5%90%AFTCP-BBR%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6%E7%AE%97%E6%B3%95 BBR算法科普:http://blog.csdn.net/dog250/article/details/52830576 http://www.zrblog.net/15718.html 来源: https://www.cnblogs.com/crac/p/6220548.html

开启TCP BBR拥塞控制算法

安稳与你 提交于 2020-04-06 00:23:08
原文来自: https://github.com/iMeiji/shadowsocks_install/wiki/%E5%BC%80%E5%90%AFTCP-BBR%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6%E7%AE%97%E6%B3%95 BBR 目的是要尽量跑满带宽, 并且尽量不要有排队的情况, 效果并不比速锐差 Linux kernel 4.9+ 已支持 tcp_bbr 下面简单讲述基于KVM架构VPS如何开启 附: OpenVZ 架构VPS开启BBR (容易导致判定滥用ban机,慎用!) Debian/Ubuntu TCP BBR 魔改版 (不支持4.13.*及更新的内核) Debian 8+ / Ubuntu 14 下载最新内核,最新内核查看 这里 wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.12/linux-image-4.14.12-041412-generic_4.14.12-041412.201801051649_amd64.deb 安装内核 dpkg -i linux-image-4.*.deb 删除旧内核(可选) dpkg -l | grep linux-image apt-get purge 旧内核 更新 grub 系统引导文件并重启 update-grub

java网络

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

什么是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。我们知道窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。当接收方确认数据后,这个滑动窗口不时地向右移动

计算机网络原理-8

大城市里の小女人 提交于 2020-03-08 16:49:11
网络拥塞 用户对网络资源的总需求超过了网络固有的容量 网络负载在膝点附近时,吞吐量和分组平均延迟达到理想的平衡,网络的使用效率最高。 发生拥塞的原因: 缓冲区容量有限 传输线路的带宽有限 网络节点的处理能力有限 网络中某些部分发生了故障 流量感知路由 :权值根据网络负载动态调整,可以讲网络流量引导到不同的链路上,均衡网络负载 准入控制 :广泛应用于虚电路网络的拥塞预防技术 流量调节 : 来源: https://www.cnblogs.com/jojoword/p/12442981.html

TCP机制 流量控制和拥堵控制

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