1

我有一个考虑 udp 数据包寿命/路由的问题。我有一个简单的客户端服务器 UDP 方案,在客户端有一个发送调用,在服务器端有一个接收调用。假设发送方法被调用并且数据包实际上到达了另一端,但是服务器的代码执行还没有到达接收方法调用。那个时候数据包会发生什么。现在我尝试在接收调用之前用一个简单的命令输入提示停止执行,稍等片刻,然后让它继续执行,并注意到数据包已收到。你能解释为什么会发生这种情况,比如它是在不同的 OSI 级别上缓冲的吗?

提前致谢。

4

2 回答 2

1

每个 TCP 或 UDP 套接字都有一个发送缓冲区和一个接收缓冲区。您的数据报在发送方排队进入发送缓冲区,然后被发送,然后在接收方排队进入接收缓冲区,然后您从那里读取它。

NB 与它无关。TCP/IP 不服从 OSI 模型。它有自己的先前模型。

于 2014-03-29T23:43:59.577 回答
0

“receive”方法调用不接收数据包。如果该端口有一个“打开”的 UDP 套接字,则意味着分配了缓冲区空间,这就是 NIC+OS 放置数据的地方。当你调用“receive”时,它只是看着那里,如果那里有任何东西,那么它就假装刚刚收到它。

我应该补充一点,如果缓冲区是空的,那么接收调用确实会进入阻塞状态,等待操作系统通知某些东西已经到达。

于 2014-03-30T02:21:29.567 回答