Bri*_*acy 3 sockets networking http packet packet-loss
在一家视频会议公司实习时,有很多关于丢包的讨论。维基百科声明如下:
丢包通常是由网络拥塞引起的。
我知道因为视频需要通过网络发送如此大量的数据,所以数据包必然会丢失。
我不明白的是为什么在其他情况下(例如 HTTP 请求和 AJAX 调用)没有出现丢包的情况。如果丢包真的是网络拥塞造成的,为什么我自己的HTTP请求从来没有遇到过?
HTTP 连接是否不会丢失数据包,或者我发送的请求太小而不会受到影响。如果 HTTP 对丢包免疫,为什么会这样?
任何基于 IP 的协议都可能发生拥塞丢包。如果两台机器之间的中间存在拥塞路由器,则可以丢弃 IP 数据报,因为 IP 是一种尽力而为的协议。
区别在于视频通常通过UDP协议传输,而HTTP通过TCP协议传输。IP 是第 3 层协议。TCP 和 UDP 是两种类型的第 4 层协议。
UDP 不是面向连接的,也不可靠。这意味着如果数据报在中间被丢弃,则没有端点节点意识到这一点(除非有实现可靠性的高层协议)。数据报丢失。
TCP 是一种面向连接的可靠协议。用简单的方式解释,接收 TCP 段的节点将对接收到的数据发送确认。如果中间丢失了一个TCP段,接收节点不会发送ACK(确认),发送节点在一定时间后会超时。超时后,发送节点将重新传输丢失的数据。这就是为什么接收节点要么接收整个 HTTP 消息,要么在极端情况下,应用程序中会出现错误,告诉您诸如“连接已断开”之类的内容(这意味着如果两端都存在问题)会意识到的)。