Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 通过多个接口发送/接收数据_Linux_Sockets_Networking - Fatal编程技术网

Linux 通过多个接口发送/接收数据

Linux 通过多个接口发送/接收数据,linux,sockets,networking,Linux,Sockets,Networking,我有两个基于linux的系统-一个具有2个接口(1个LAN、1个调制解调器)的客户端和一个服务器。 我打开2个UDP套接字,并使用setsockopt和SO_BINDTODEVICE将每个套接字绑定到其接口。 然后,我通过每个套接字从客户端向服务器发送消息。 它们都到达服务器。服务器套接字读取它们,并向每一个发送回复。 然后我尝试在客户端上读取服务器的回复。 但是,只有一个回复。 另外,如果我运行tcpdump,我会看到这两个回复都是在它们的相关接口上接收的,在它们离开的同一端口上。然而,他们中

我有两个基于linux的系统-一个具有2个接口(1个LAN、1个调制解调器)的客户端和一个服务器。
我打开2个UDP套接字,并使用setsockopt和SO_BINDTODEVICE将每个套接字绑定到其接口。
然后,我通过每个套接字从客户端向服务器发送消息。
它们都到达服务器。服务器套接字读取它们,并向每一个发送回复。
然后我尝试在客户端上读取服务器的回复。
但是,只有一个回复。

另外,如果我运行tcpdump,我会看到这两个回复都是在它们的相关接口上接收的,在它们离开的同一端口上。然而,他们中只有一个到达了插座。另一个丢失了?

“丢失”数据包不是随机的,它是“非”默认数据包。如果我的路由表为空,则调制解调器表将丢失。如果我从调制解调器接口添加到服务器ip的路由,丢失的数据包将是lan数据包。


然而,它们总是到达服务器,总是返回,总是在tcpdump中看到,但1从未到达套接字。这是怎么回事?

有一个名为rp\u filter(反向路径验证筛选器)的ipv4网络配置参数。基本上,如果一个数据包的回复不会从这个数据包进入的接口发出,那么这是一个虚假的数据包,应该被忽略。这就是为什么当我在tcpdump上看到数据包时,它从未到达套接字。禁用它成功了

sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.ppp0.rp_filter=0

我们需要看看您是如何设置路由的。