简约而不简单的分布式通信基石( 二 )


简约而不简单的分布式通信基石文章插图
基于tcp的socket在内核中都有一个发送缓冲区和接收缓冲区 , tcp的双工工作模式以及tcp的滑动窗口就是依赖于这两个独立的buffer以及buffer的数据填充状态 。 接收缓冲区把数据缓存入内核之中 , 如果对应的应用一直没有调用socket的read方法进行数据读取 , 则此数据会一直被缓存在接收缓冲区中 , 如果接收缓冲区满了 , 便会通知对方socket , 以调整对方socket的发送窗口大小 , 这就是滑动窗口的实现 。 如果对方仍然持续发送数据 , 接收方在接收缓冲区没有被读取的情况下将丢弃后到的数据 , 这就是tcp的流量控制 。 对于udp来说 , 它没有真正的发送缓冲区 , 只要有数据就会发送 , 无论对方能否正常正确接收 , 这也是udp丢包的原因之一 , 但是udp的socket 和tcp的socket一样都会有接收缓冲区 , 而且行为也一样 。
作者:菜菜
出处: