3

在一家视频会议公司实习时,关于丢包的话题很多。维基百科声明如下:

数据包丢失通常是由网络拥塞引起的。

我明白,因为视频需要通过网络发送如此大量的数据,所以数据包肯定会丢失。

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

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

4

1 回答 1

6

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

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

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

TCP 是一种面向连接的可靠协议。用简单的方式解释,接收 TCP 段的节点将对接收到的数据发送确认。如果中间丢失了一个 TCP 段,接收节点将不会发送 ACK(确认),并且发送节点会在一定时间后超时。超时后,发送节点将重新传输丢失的数据。这就是为什么接收节点要么接收整个 HTTP 消息,要么在极端情况下,应用程序中会出现错误,告诉您“连接断开”之类的信息(这意味着如果两端都存在问题会意识到这一点)。

于 2015-08-07T09:20:30.527 回答