假设我有一张 100mbit 以太网卡,连接到我的 100mbit 路由器,然后连接到我的电缆调制解调器;我的 ISP 向我出售了 50mbps。
现在假设我开始将一个非常大的文件上传到网络服务器,并且假设网络服务器可以接受无限的速度(因此我们只关注“我的端”)。
是什么阻止我的上传速度超过 50mbps?也许我的电缆调制解调器配置为只发送那么多数据(通过它所拥有的任何类型的链接),但我的(PC、路由器、电缆调制解调器)如何知道“限制”它?我的操作系统如何知道不要以 100mbps 的速度从我的 NIC 发送数据,因为下游连接无法处理它(我的 ISP/电缆调制解调器)。
我认为我知道的是:
如果它使用 TCP,它将使用 TCP 的机制进行相应发送。如果它使用 UDP,它将以 100mbps 的速度发送垃圾邮件,最终填满我的电缆调制解调器的缓冲区,并且数据包将丢失。如果这是真的,那么在发生这种情况之前,它可能会发出一些其他流量控制消息?
有人能解释一下吗?我很好奇!
答案1
TCP 提供上层的端到端流量控制,以尝试平衡其经过的每个节点的传输速度,以免占用任何特定设备的缓冲区,但第 2 层网络还提供直接流量控制消息,例如 ETHERNETII PAUSE 帧。
您的调制解调器会告诉您的主机在缓冲区耗尽时后退一小会儿。更大的问题是当网络路径中间的设备必须缓冲您的 UDP 视频流时。它只能抑制上游一跳的源,这大概也会向其上游通信伙伴提出同样的要求。但是,当中间的设备填满时,它们会开始丢帧。UDP 一直是尽力而为的,这是一个完美的例子。
因此,总而言之,除了计算一段时间内的传输平均值之外,您的网络实际上并不知道其连接速度,但硬件会响应流量控制机制并启发式地达到网络可以应对的速度。