【发布时间】:2011-09-13 00:21:04
【问题描述】:
我有 2 个基于 linux 的系统 - 一个带有 2 个接口(1 个 LAN、1 个调制解调器)的客户端和一个服务器。
我打开 2 个 UDP 套接字,并使用带有 SO_BINDTODEVICE 的 setsockopt 将每个套接字绑定到它的接口。
然后我通过每个套接字从客户端向服务器发送一条消息。
他们都到达服务器。服务器套接字读取它们,并向它们中的每一个发送回复。
然后我尝试在客户端读取服务器的回复。
但是,只有 1 条回复。
另外,如果我运行 tcpdump,我会看到两个回复都在它们的相关接口上接收到,在它们离开的同一个端口上。然而,其中只有一个到达插座。另一个丢了?
“丢失”的数据包不是随机的,它是“非”默认数据包。如果我的路由表为空,则调制解调器丢失。如果我从调制解调器接口添加到服务器 ip 的路由,丢失的数据包将是局域网的。
然而,它们总是到达服务器,总是返回,总是在 tcpdump 中看到,但 1 从未到达套接字。怎么可能?
【问题讨论】:
-
我们需要看看您是如何设置路由的。
标签: linux sockets networking