滑动窗口(Sliding window)是一种流量控制技术。早期的网络通讯中,通讯双方不会考虑网络的拥挤状况直接发送数据。因为你们不知道网络拥塞情况,同时发送数据,致使中间节点阻塞掉包,谁也发不了数据,因此就有了滑动窗口机制来解决此问题。(百度百科)算法
其实滑动窗口就是互相的协商, 发送的数据不能超过对方的处理能力.网络
其中黑色的框就是咱们说的滑动窗口, 它的大小为 20 字节, 当 #2 Ack回来的时候, 会从新返回对方的窗口大小, 而后发送方进行动态调节.tcp
上图展现了发送窗口和接收窗口两端的实际执行状况, 有意思的是最后出现了 窗口占满(window=0) 的状况, 一般这种状况会发生 RST 标志位进行重置. 这个再也不这次范围讨论里面.ide
上图中咱们能够看到 Server 端每次根据自身消费数据缓冲区状况,从新计算 RCV.WND 值大小, ACK 响应给 Client 端都会携带 window 字段, Client 端根据 Server端的 window 大小, 从新调整了 发送窗口 大小.ui
可是若是频繁的进行 TCP小包 通讯, 网络效率是很是低下的, 对于发送方来讲咱们可使用 Nagle 算法来提升传输效率操作系统
只有收到前一数据的 ACK 消息时或者超时40ms、达到了 MSS 值时, Nagle 算法才发送下一份数据。 TCP 套接字默认使用的 Nagle 算法交换数据, 所以最大限度地进行缓冲, 直到收到 ACK。3d
可使用 TCP_NODELAY 参数关闭掉 Naggle 算法.cdn
接收方在收到数据后,并不会当即回复ACK, 而是延迟必定时间 或者 达到2x最大段数据长度为止 (不一样操做系统实现并不同)htm
www.tcpipguide.com/free/t_TCPS…blog
更多精彩内容 关注公众号(呆呆熊的技术路):