Switch-Router

Recent Posts

  • 2019-08-28

    TCP的重传退避与公平

    TCP在发送报文后,如果没有收到对端应答,那么在重传定时器超时后会触发重传,超时时间遵循二进制退避原则,也就是{1,2,4,8,16}这样成倍地扩大超时时间。退避是因为TCP认为丢包意味着网络有拥塞,为了不加重网络的拥塞,TCP选择等待更长的时间再进行重传。这和CSMA/CD中的二进制退避算法如出一辙。在TCP拥塞基础曾经提到过网络拥塞的来历,网络中的网络设备(路由器、交换机)在收到了超过队列限制的报文后,后续的报文会被丢弃。从TCP采用的二进制退避算来看,TCP绝对算得上是网络里的谦谦君...

  • 2019-08-25

    Linux 路由缓存的前世今生

    3.6版本一定算得上是Linux网络子系统中一个特别的版本, 这个版本(补丁patch)移除了查找FIB之前的缓存查找。本文就来谈谈路由缓存的前世今生。几个基本概念为了让本文的阅读曲线更加平缓我决定还是将本文涉及的一些术语作个说明。路由:将skb按照规则送到该去的地方,这个地方可能是本机,也可能是局域网中的其他主机,或者更远的主机。从这个角度来说,它一个动词。那么路由发生在哪个时候呢? 我们知道路由是网络层(L3)的概念,接收方向,它需要决定收到的skb是应该上送本机还是转发,发送方向,它...

  • 2019-08-17

    如何学习 Linux 内核网络协议栈

    部门来了新的小伙伴,领导说要让我做一个关于 Linux 内核网络协议栈的 Presentation,于是有了此文。为什么是文字而不是 PPT 呢 ? 因为我真的不喜欢 PPT !准备工作对于没有学习过 Linux 内核网络的人来说,可能会对这个它产生向往,也有可能产生恐惧。但当你深入理解并且验证后得到正反馈时,那种豁然开朗的感觉,会让你感到满足,信可乐也。回想当初自己进入这个主题时,我产生过以下疑问: Q1:内核网络子系统这么大,我应该从何处开始?会不会栽到里面就晕了? Q2:内核网络...

  • 2019-08-10

    IP地址是主机的还是网卡的?

    读大学时,宿舍每个人都买了电脑,为了节约网费,整个宿舍又从二手市场淘了台TP-LINK路由器。这样每个人的电脑就通过路由器连接到学校网管中心,再连接到外网。从路由器后台界面可以看到,路由器为每个人的电脑分配了一个IP地址。这看上去IP是属于主机的.进入职场以后,公司的电脑都安装了两个物理网卡,通过两根网线分别接入了两个网络(10.X.X.X/8 和 192.X.X.X/24).从适配器管理界面可以看到,两个网卡都有各自的IP地址.这样看上去,IP地址是属于网卡的。那么,究竟哪种说法正确呢 ...

  • 2019-08-02

    锁与无锁

    当我们在编写多线程程序时,常常会涉及到多个线程对共享数据的访问。如果不对这种访问加以限制,往往会导致程序运行结果与预期不符锁编写代码时,我们以及习惯了用锁去保护数据。那么,这里的锁是什么?为什么它能满足我们的要求?它存在于哪里?让我们从一个最简单的例子出发—多个线程并发修改一个全局变量:/* 全局变量 */int g_sum = 0;/* 每个线程入口 */void *thread(void* arg){ for(int i = 0; i < 100; i++) { g_s...