【网络】TCP连接的顺序问题、丢包问题、流量控制、拥塞控制问题

前言

接收端应答方式:累计确认,每次确认多个ID;

  1. 发送端的数据结构分为四个部分
    【网络】TCP连接的顺序问题、丢包问题、流量控制、拥塞控制问题
  2. 接收端的数据结构
    【网络】TCP连接的顺序问题、丢包问题、流量控制、拥塞控制问题

顺序问题、丢包问题

超时重传

流量控制机制(滑动窗口rwnd)

目的:防止发送方把接收方缓存塞满。
在对于包的确认中,同时会携带一个窗口的大小
根据接收方处理数据的速度,自动调整窗口大小。

拥塞控制问题(拥塞窗口cwnd)

目的:防止网络被塞满即要避免两种现象:包丢失和超时重传。
速度控制公式:LastByteSent - LastByteAcked <= min{cwnd,rwnd}发送还未确认的数据<=最小窗口

拥塞控制是通过拥塞窗口来解决的,相当于往管道里面倒水,快了容易溢出,慢了浪费带宽,要摸着石头过河,找到最优值。

那发送方怎么判断网络是不是满呢?这其实是个挺难的事情,因为对于TCP协议来讲,他压根不知道整个网络路径都会经历什么,对他来讲就是一个黑盒。TCP发送包常被比喻为往一个水管里面灌水,而TCP的拥塞控制就是在不堵塞,不丢包的情况下,尽量发挥带宽。
水管有粗细,网络有带宽,也即每秒钟能够发送多少数据;水管有长度,端到端有时延。在理想状态下,水管里面水的量=水管粗细x水管长度。对于到网络上,通道的容量=带宽×往返延迟
如果我们设置发送窗口,使得发送但未确认的包为为通道的容量,就能够撑满整个管道。
【网络】TCP连接的顺序问题、丢包问题、流量控制、拥塞控制问题
【网络】TCP连接的顺序问题、丢包问题、流量控制、拥塞控制问题