HTTP上的数据包丢失

时间:2015-08-07 06:29:30

标签: sockets http networking packet packet-loss

在视频会议公司实习时,有很多关于数据包丢失的讨论。维基百科声明如下:

  

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

据我所知,由于视频需要通过网络发送大量数据,因此数据包必然会丢失。

我不明白为什么在其他情况下(例如HTTP请求和AJAX调用)没有遇到丢包的原因。如果数据包丢失确实是由于拥塞的网络造成的,为什么我从未经历过我自己的HTTP请求呢?

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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