我想知道一件事 我正在玩一个EC2实例,并希望使用192.168.1.0/29范围内的一些本地子网。 所以我在eth0上设置别名如下:
[root@server jvehent]# ifconfig -a eth0 Link encap:Ethernet HWaddr 12:25:8B:0a:B1:EB inet addr:10.28.118.95 Bcast:10.28.118.255 Mask:255.255.254.0 [...] eth0:1 Link encap:Ethernet HWaddr 12:25:8B:0a:B1:EB inet addr:192.168.1.1 Bcast:192.168.1.7 Mask:255.255.255.248 [...] eth0:2 Link encap:Ethernet HWaddr 12:25:8B:0a:B1:EB inet addr:192.168.1.2 Bcast:192.168.1.7 Mask:255.255.255.248 [...] eth0:3 Link encap:Ethernet HWaddr 12:25:8B:0a:B1:EB inet addr:192.168.1.3 Bcast:192.168.1.7 Mask:255.255.255.248 [...] eth0:4 Link encap:Ethernet HWaddr 12:25:8B:0a:B1:EB inet addr:192.168.1.4 Bcast:192.168.1.7 Mask:255.255.255.248 [...] lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0
很好,所以我得到以下路由表
[root@server jvehent]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.248 U 0 0 0 eth0 10.28.118.0 0.0.0.0 255.255.254.0 U 0 0 0 eth0 0.0.0.0 10.28.118.1 0.0.0.0 UG 0 0 0 eth0
现在,如果我想要两个服务使用本地别名相互交谈,我可以设置netcat如下:
监听netcat:
nc -l 192.168.1.4 1664
连接netcat:
nc -s 192.168.1.1 192.168.1.4 1664
而且,从我所看到的情况来看,stream量通过本地主机界面。 我正在使用tcpdump -i lo进行检查,并看到数据包正在通过。 eth0上没有任何东西。
我对内核的基本知识告诉我,由于内核拥有所有的IP,因此它会在内部执行所有操作,并将数据包从套接字复制到另一个,而不将其传递到NIC。 正确吗?
有没有办法强制内核在networking上发送这些数据包?
是的,不,是的,内核将它传递给回送接口。 不,您不能将它们发送到networking,因为networking不会将它们发回。 网卡可以发送或接收数据包,但不能同时发送数据包和接收数据包。 (也许一个开关可以编程来模拟这个,但是你在一个EC2实例上,而且没有开关,没有NIC)