zoukankan      html  css  js  c++  java
  • 《网络编程实战》笔记 | 13 小数据包的应对之策:理解 TCP协议中的动态数据传输

    0 前言

    果然还是要写笔记才能记得牢靠,虽然是会慢好多,总是比过了就忘的差不多好。
    这一节其实是讲 TCP 的流量控制、拥塞控制,说的比较通俗易懂。

    1 流量控制的生产者-消费者模型

    接收端限于缓存大小和处理速度,不能让发送端没有限制的一直发送数据,当接收端来不及处理的时候,就需要告知发送端慢下来,甚至停下来,这就是流量控制。发送端相当于生产者,接收端相当于消费者,生产的物品用不完可不得停下来,不然等着发霉?
    在 TCP 中,流量控制是通过发送窗口和接收窗口大小来进行的。接收窗口就是接收缓存还能存入的字节数,发送窗口表示允许发送的字节数,报文中携带的窗口值是发送方的接收窗口大小,对端通过该值进行发送窗口大小设置。缓存与窗口关系如下图所示:

    1. 发送窗口用来控制发送和接收端的流量;阻塞窗口用来控制多条链接公平使用有限带宽;
    2. 小数据包加剧了网络带宽的浪费,针对糊涂窗口综合征,引入Nagle算法和延时ACK机制;
    3. 程序设计层面,不要多次频繁地发送,使用writev批量发送;
    #include <sys/uio.h>
    ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
    ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
    
  • 相关阅读:
    算法与数据结构9
    算法与数据结构8
    数据结构与算法7
    数据结构与算法6
    计算机视觉(七)
    计算机视觉(六)
    计算机视觉(五)
    vscode 创建java项目
    vue 访问API接口
    vscode+vue 框架搭建
  • 原文地址:https://www.cnblogs.com/1million/p/14344172.html
Copyright © 2011-2022 走看看