TCP/IP:拥塞算法与流量控制算法 学习小结
2015-04-22 10:08
465 查看
1.查看支持的拥塞控制协议?
cat /proc/sys/net/ipv4/tcp_allowed_congestion_control
2.修改阻塞算法:
sysctl net.ipv4.tcp_congestion_control=???? 进行修改算法
概念:
SWND(SendWindow,发送窗口);
拥塞窗口(Congestion Window,CWND);
3
拥塞算法与流量控制算法有什么关系与区别?
所以Nagle算法的一个整体的算法,包含了拥塞算法(reno算法、vegas算法和cubic算法等),后者属于整个流量控制过程的一个环节,他们互相影响cwnd的调整:发端窗口大小
= min{ rwnd , cwnd };
理解成:
”发端窗口的大小(Nagle算法控制)“取决于:收端的窗口大小rwnd(TCP报文的窗口大小字段,)和
“拥塞窗口大小cwnd”(见拥塞控制:拥塞算法(reno算法、vegas算法和cubic算法等来控制);
“根据协议TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认”
意思就是:发送过程为例:
发送者,使用nagle算法来控制发送者的流量,同时收到,接受者的
ack包。发送者根据ack包,使用拥塞算法,调整cwnd;
接收者,在接收的时候,使用拥塞算法达到控制cwnd的大小,cwnd的大小就决定了发送者的发送窗口大小。
-----------这样一来一回,保证了发送和接收的稳定和可靠。
4 拥塞算法与流量控制算法什么时候
起用?
根据算法原理,对于TCP数据包“发送过程”,简单理解如下:
TCPpackage-> 缓冲进window缓存区 ->
slow start网络探测 ->
连接被唤醒 -> 包大小超过拥塞阀值 ->
yes -> 开始拥塞 -> congestion avoidance解除拥塞-> 是否解除
->
yes -> 准备从缓存区发包到目标设备 ->
是否满足Nagle算法 ->
yes -> (a) 发送包... ->
是否超时或收到重复ack ->
yes ->
fast retransmit快速重发ack->
是否三次重发ack失败 ->
yes->
丢包,fast recovery快速恢复 -> (a)
5 拥塞算法
什么时候
启动?
拥塞控制算法会在”tcp_ack()函数“中被调用,如果是正常的ack(比如不是重复的,不是sack等等)就会进入拥塞控制算法。
Tck_ack,发生在接收窗口:
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4):static int tcp_ack(struct sock *sk, conststruct sk_buff *skb, int flag)
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4): tcp_ack(sk,skb, 0);
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4): tcp_ack(sk,skb, FLAG_DATA);
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4): if(tcp_ack(sk, skb, FLAG_SLOWPATH | FLAG_UPDATE_TS_RECENT) < 0)
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4): tcp_ack(sk,skb, FLAG_SLOWPATH);
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4): intacceptable = tcp_ack(sk, skb, FLAG_SLOWPATH |
调起---》icsk->icsk_ca_ops->cong_avoid();
6.为何“拥塞控制算法 ”只对接收包(也就是只针对接收到的ack包)
由于需要考虑“拥塞控制”和“流量控制”两个方面的内容,因此TCP的真正的:发送窗口=min(rwnd, cwnd)。但是rwnd是由对端确定的,网络环境对其没有影响,所以在考虑拥塞的时候我们一般不考虑rwnd的值,我们暂时只讨论如何确定cwnd值的大小
cat /proc/sys/net/ipv4/tcp_allowed_congestion_control
2.修改阻塞算法:
sysctl net.ipv4.tcp_congestion_control=???? 进行修改算法
概念:
SWND(SendWindow,发送窗口);
拥塞窗口(Congestion Window,CWND);
3
拥塞算法与流量控制算法有什么关系与区别?
流量控制 | 流量控制用来避免“主机分组发送”得过快而使接收方来不及完全收下 |
拥塞控制 | 是“接收机”对cwnd的窗口调整 |
算法 | 属于 | 描述 | 算法使用的位置 |
Nagle算法 | 流量控制 | 1. 起始缓冲算法 (slow start) 2. 解除拥塞算法 (congestion avoidance) 3. 快速重发算法 (fast retransmit) 4. 快速恢复算法 (fast recovery) Nagle算法就是以这4种算法为基础来实现的。 | 发送的时候使用:tcp_write_xmit |
reno算法、vegas算法和cubic算法等 | 拥塞控制 | 对应上面的“ 2. 解除拥塞算法 (congestion avoidance) ” 它们或者部分或者全部实现了上述四个部分; | 接收端ack包的时候使用tcp_ack()函数 |
= min{ rwnd , cwnd };
理解成:
”发端窗口的大小(Nagle算法控制)“取决于:收端的窗口大小rwnd(TCP报文的窗口大小字段,)和
“拥塞窗口大小cwnd”(见拥塞控制:拥塞算法(reno算法、vegas算法和cubic算法等来控制);
“根据协议TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认”
意思就是:发送过程为例:
发送者,使用nagle算法来控制发送者的流量,同时收到,接受者的
ack包。发送者根据ack包,使用拥塞算法,调整cwnd;
接收者,在接收的时候,使用拥塞算法达到控制cwnd的大小,cwnd的大小就决定了发送者的发送窗口大小。
-----------这样一来一回,保证了发送和接收的稳定和可靠。
4 拥塞算法与流量控制算法什么时候
起用?
根据算法原理,对于TCP数据包“发送过程”,简单理解如下:
TCPpackage-> 缓冲进window缓存区 ->
slow start网络探测 ->
连接被唤醒 -> 包大小超过拥塞阀值 ->
yes -> 开始拥塞 -> congestion avoidance解除拥塞-> 是否解除
->
yes -> 准备从缓存区发包到目标设备 ->
是否满足Nagle算法 ->
yes -> (a) 发送包... ->
是否超时或收到重复ack ->
yes ->
fast retransmit快速重发ack->
是否三次重发ack失败 ->
yes->
丢包,fast recovery快速恢复 -> (a)
5 拥塞算法
什么时候
启动?
拥塞控制算法会在”tcp_ack()函数“中被调用,如果是正常的ack(比如不是重复的,不是sack等等)就会进入拥塞控制算法。
Tck_ack,发生在接收窗口:
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4):static int tcp_ack(struct sock *sk, conststruct sk_buff *skb, int flag)
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4): tcp_ack(sk,skb, 0);
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4): tcp_ack(sk,skb, FLAG_DATA);
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4): if(tcp_ack(sk, skb, FLAG_SLOWPATH | FLAG_UPDATE_TS_RECENT) < 0)
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4): tcp_ack(sk,skb, FLAG_SLOWPATH);
Tcp_input.c(prerelease.p36\kernel-3.10\net\ipv4): intacceptable = tcp_ack(sk, skb, FLAG_SLOWPATH |
调起---》icsk->icsk_ca_ops->cong_avoid();
6.为何“拥塞控制算法 ”只对接收包(也就是只针对接收到的ack包)
由于需要考虑“拥塞控制”和“流量控制”两个方面的内容,因此TCP的真正的:发送窗口=min(rwnd, cwnd)。但是rwnd是由对端确定的,网络环境对其没有影响,所以在考虑拥塞的时候我们一般不考虑rwnd的值,我们暂时只讨论如何确定cwnd值的大小
相关文章推荐
- TCP/IP笔记 三.运输层(2)——TCP 流量控制与拥塞控制
- TCP/IP的流量控制与拥塞控制机制
- 流量控制与拥塞控制学习小结
- TCP/IP学习(六)拥塞控制与定时器
- TCP的流量控制和拥塞控制 (小结)
- TCP/IP学习之 TCP拥塞控制与定时器
- TCP/IP之TCP协议——流量控制(滑动窗口协议)
- TCP流量控制与拥塞解决
- TCP/IP之TCP协议:流量控制(滑动窗口协议)
- TCP的流量控制与拥塞控制的对比
- TCP流量控制与拥塞控制
- TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
- TCP的流量控制和拥塞控制
- TCP/IP(十一)TCP滑动窗口和拥塞控制
- TCP的流量控制和拥塞处理
- TCP中的流量控制及拥塞控制
- TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
- TCP具体解释(3):重传、流量控制、拥塞控制……
- 网络拥塞控制之TCP拥塞控制算法
- TCP/IP 学习笔记-ICMP控制报文