我想问一下dhcreay的运行机制。我们可以用两个命令运行 dhcrelay,然后它将作为 2 个进程运行
dhcrelay -i eth3 172.16.17.3
dhcrelay -i eth1 172.16.17.5
#ps ax | grep dhcre
26464 ? Ss 0:00 /usr/sbin/dhcrelay -i eth3 172.16.17.3
26465 ? Ss 0:00 /usr/sbin/dhcrelay -i eth1 172.16.17.5
或者使用一个命令,换句话说,单个进程
dhcrelay -i eth3 -i eth1 172.16.17.3 172.16.17.5
#ps ax | grep dhcre
28127 ? Ss 0:00 /usr/sbin/dhcrelay -i eth1 -i eth3 172.16.17.3 172.16.17.5
我想知道这两种方式除了进程计数之外是否有任何技术差异?
在查看源代码时,有几件事跳出来,似乎会受到运行单个命令和多个命令的影响。
首先这条评论在
dispatch.c
:它似乎
dhcrelay.c
使用了轮询架构。在轮询其中一个接口(例如:-i eth0或-i eth1 )时,这看起来会使用超时(基于时间)。这似乎表明在轮询另一个接口时可能会阻塞一个接口。
另一个片段,这次在
dispatch()
函数内,它正在轮询指定接口之一:在上面的轮询函数超时或接收到数据包后,
dhcrelay
移动到“下一个”接口:请注意,整个
dispatch
包含一个while(1)
循环。那么,这意味着什么?
我想说的是,如果您的网络流量很大且有很多主机并且您的 DHCP 租约相对较短,那么您可能需要考虑运行 2 个 dchrelay 实例。
但是,如果您的网络相对较小并且 DHCP 租约超时时间相对较长,那么运行单个实例应该没问题。
一些额外的事情要考虑