HTTP 丢包

Packet Loss over HTTP

在一家视频会议公司实习时,丢包的话题谈得很多。维基百科陈述如下:

Packet loss is typically caused by network congestion.

我知道因为视频需要通过网络传输如此大量的数据,所以数据包必然会丢失。

我不明白的是,为什么在其他情况下,如 HTTP 请求和 AJAX 调用,不会出现丢包。如果丢包真的是网络拥塞造成的,为什么我自己的 HTTP 请求从来没有遇到过?

HTTP 连接是否不受数据包丢失的影响,或者我发送的请求是否太小而不会受到影响。如果 HTTP 不会丢失数据包,为什么会这样?

任何基于 IP 的协议都可能发生拥塞丢包。如果两台机器中间存在拥塞路由器可以丢弃 IP 数据报,因为 IP 是尽力而为协议。

区别在于视频通常通过UDP协议传输,而HTTP通常通过TCP协议传输。 IP 是第 3 层协议。 TCP 和 UDP 是两种类型的第 4 层协议。

UDP 不是面向连接的也不可靠。这意味着如果一个数据报在中间被丢弃,没有端点节点意识到这一点(除非有更高层协议实现可靠性)。数据报丢失。

TCP 是一种面向连接的可靠协议。用简单的方式解释,接收 TCP 段的节点将发送对接收到的数据的确认。如果一个TCP报文段在中途丢失,接收节点不会发送ACK(确认),发送节点会在一定时间后超时。超时后,发送节点将重新传输丢失的数据。这就是为什么接收节点将接收整个 HTTP 消息,或者在极端情况下,应用程序中会出现一个错误,告诉您 "the connection is broken"(这意味着如果有问题,两端都会意识到这一点)。