标签:html 比较 百度一下 更新 log over 人工智 pre 函数
熬过了几个夜晚,终于把TCP的拥塞处理的Linux撸了一遍,仓促中也总结了一幅巨大的图,然而今天下午的例会讨论后,我自己说着说着发现还有一些值得商榷的地方,有的是笔误,也有的是一些细节依然没有搞清楚,因此特此勘误,原文我只修改了文字,因为重新贴图代价实在太大,再者,我希望留下一些错误的印记,这样也能看清楚整个发展的历程,希望两篇一起看。
虽然在大师级的神看来,这不算什么,但是对于我,这是一个比较浩大的工程,错误之处在所难免,请谅解!谢谢!如果能共同进步,这就是我分享的最终目的和动力。
PS:
选择:从una开始,标记没有被sack的4个数据包,即UNA,hole1,hole2,hole3。这也是我在原图中的理解,但事实上呢?我们开看代码(Linix 3.10),tcp_mark_head_lost:
static void tcp_mark_head_lost(struct sock *sk, int packets, int mark_head)
{
struct tcp_sock *tp = tcp_sk(sk);
struct sk_buff *skb;
int cnt, oldcnt;
int err;
unsigned int mss;
/* Use SACK to deduce losses of new sequences sent during recovery */
const u32 loss_high = tcp_is_sack(tp) ? tp->snd_nxt : tp->high_seq;
...
tcp_for_write_queue_from(skb, sk) {
if (skb == tcp_send_head(sk))
break;
/* TODO: do this better */
/* this is not the most efficient way to do this... */
tp->lost_skb_hint = skb;
tp->lost_cnt_hint = cnt;
if (after(TCP_SKB_CB(skb)->end_seq, loss_high))
break;
oldcnt = cnt;
if (tcp_is_fack(tp) || tcp_is_reno(tp) ||
// 请注意,被标记为SACKED的数据包也会占据mark lost计数!!如上例,当UNA,hole1,hole2被标记完
// 以后,下一个本应该标记hole3,但是由于sack1占据可一个“位置”,因此如果只标记4个LOST,那么将会
// 到sack1为止!!,不会再标记hole3!
// 但这并不意味着LOST标记仅仅会标记左边数第一系列的空洞,如果标记数为5,那么由于sack2也占据了一个
// 位置,标记为LOST的依然是UNA,hole1,hole2,但是如果是标记6个LOST,那么结果将是标记UNA,hole1,hole2,
// hole3为LOST!明白了吗?
(TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_ACKED))
cnt += tcp_skb_pcount(skb);
if (cnt > packets) {
...
}
tcp_skb_mark_lost(tp, skb);
if (mark_head)
break;
}
tcp_verify_left_out(tp);
}
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
TCP拥塞控制图解 不包括RTO,因为它太简单了 【勘误1】
标签:html 比较 百度一下 更新 log over 人工智 pre 函数
原文地址:https://www.cnblogs.com/ksiwnhiwhs/p/10390496.html