Appearance
Appearance
遗憾的是,并非所有网络都是完美的。对于 RealWorld 尤其如此,这意味着有时网络发送的数据包永远不会到达正确的目的地。更糟的是,有时数据包会被网络重新排序,甚至被网络重复发送。
不过,对网络协议来说这不是什么大问题,因为一切都基于“呃,网络本来就应该是有损的。要么处理它,要么承受后果”。
在某些发生 Packet Loss 的情况下,性能可能会显著下降,因此我们可能会有兴趣尽量减少 packetloss 的发生量。(一旦弄清楚数据包为什么丢失以及在哪里丢失,这就很容易)((确定这些信息的技艺常常被视为 BlackMagic))
TCP 等 ConnectionOrientedProtocols 会检测到数据包丢失,并尝试 Retransmit 数据包数据。
UDP 等 ConnectionlessProtocols 不会检测数据包丢失,该数据包中的数据将直接丢失。(UDP 不包含确认信息,因此 UDP 实现无法检测 PacketLoss,UDP 实现也不会 Retransmit 数据包。UDP 之上的协议才是由其实现来检测数据包丢失并重传数据包的部分。)
对于大多数网络而言,数据包丢失是一种典型行为,例如当 Router 接收的数据多于其能够传输的数据时,就会发生这种情况。
有时,有缺陷的硬件/软件会直接“忘记”数据包。
如果网络配置正确,对于数据包丢失通常没有太多可以采取的措施,因为这是一种某种程度上“有意为之”的行为。
对于基于 TCP 的协议,这通常相当容易检测,并且对 PacketLossPatterns 的分析通常可以提示问题原因。常见原因包括 DuplexMismatches 或 Congestion。
关于 Congestion 的优秀资源可以通过 Google 搜索 Sally Floyd 找到。
Imported from https://wiki.wireshark.org/PacketLoss on 2020-08-11 23:17:46 UTC