![UDP 如何跟踪连接?](https://linux22.com/image/534776/UDP%20%E5%A6%82%E4%BD%95%E8%B7%9F%E8%B8%AA%E8%BF%9E%E6%8E%A5%EF%BC%9F.png)
如果 UDP 不像 TCP 那样建立连接,那么它似乎只能通过源 IP/端口和目标 IP/端口来跟踪连接。这是正确的吗?
因此,我猜想存在针对“连接被拒绝”和“连接重置”的特殊数据包。对吗?
此外,我的数据是否可能无法按照发送的顺序接收?
答案1
你的第一段是正确的。虽然有些 IP 引擎使用源地址/端口和目标地址/端口来提供基于同步性的近似状态,但两者之间没有任何联系。
拒绝通过 ICMP 处理,通常是 ICMP 端口不可达(类型 3 子类型 3)。
您的最后一段也是正确的;由您的应用程序来确保 UDP 传输的数据按正确的顺序排列。
答案2
UDP 中没有connection
。它不是一个可靠的协议。如果需要传输可靠性,则必须在用户的应用程序中实现它。请查看这一页。
是的,数据包可能会乱序到达,也可能会丢失。如果需要,应用程序应该处理这些事情。
答案3
UDP 也称为不可靠数据协议。UDP 中没有跟踪功能。您可以使用源和目标 IP/端口组合进行跟踪,但不确定这样做能带来什么效果。
第二个问题的答案是正确的,即数据可能未按发送顺序接收。TCP 使用序列号。如果数据包按顺序接收,则会被丢弃。客户端向发送方发送已接收序列数据包的确认,然后发送方从该点开始发送数据。这还可能包括重新传输某些数据包。这就是 TCP 提供数据保证的方式。
答案4
UDP 是一种面向数据报的服务。每个 UDP 数据包都应(理想情况下!)在数据包中具有其完整上下文,因为数据包可能会在传输过程中丢失或重新排序。
另一方面,TCP 是一种面向流的协议,在两个端点之间提供双向流(这意味着可靠性和顺序性,而数据报服务则不一定)。