ip route show src字段

我读了ip的手册页,仍然不明白什么是src ,我找不到太多的文档。

请,如果你能够彻底解释或指向一些链接它是一个很好的答案。

将路由添加到多宿主主机时,可能需要控制主机从使用此路由开始通信时发送的源IP地址。 这是src的用途。

一个简短的例子:你有一个主机有两个接口,IP地址为192.168.1.123/24和10.45.22.12/24。 您正在通过10.45.22.1添加到78.22.45.0/24的路由,并且要确保您没有使用192.168.1.123地址发送到78.22.45.0/24(可能是因为networking78.22.45.0/24没有回路到192.168.1.0/24,或者因为你不希望你的stream量出于某种原因或其他原因而采取这种方式):

 ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12 

请注意,您所提供的src只会影响源自您的主机的stream量。 如果一个外部数据包正在被路由,显然它已经有一个源IP地址,所以它会被传送(除非你正在使用NAT,但这是完全不同的事情)。 另外,这个设置可能会被一个特别select绑定到一个特定地址的进程覆盖,而不是在启动连接时使用默认值(相当less见)。

src属性是地址selectalgorithm使用的提示。 当一个主机有多个IP地址时,这是非常重要的,当它有多个接口时,这个地址通常是,但并不总是一样。 虽然有其他规则影响地址select,并且networking应用程序也可以使用像bind()这样的系统调用来覆盖selectalgorithm,但src属性是一种使用路由表查找来回答“如果我想要启动到主机X的连接,我应该使用哪个地址?“

这里是一个例子来说明src属性的使用和效果。 为了说明这与地址和路由有关,而不是与接口相关,这个示例主机只有一个networking接口,但是有两个地址。 而且,这两个地址都在同一子网上,以强调没有其他明显的方法来select使用哪一个。

 $ ip -4 addr show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 10.1.0.2/24 brd 10.1.0.255 scope global eth0 inet 10.1.0.16/24 scope global secondary eth0 $ ip route list dev eth0 10.1.0.32/27 scope link src 10.1.0.16 10.1.0.0/24 proto kernel scope link src 10.1.0.2 

这个主机可以从这个/ 24子网的任何一个地址与任何其他的252个地址通信,但是默认情况下它将在10.1.0.32到10.1.0.63的连接中使用10.1.0.16,并且所有的地址都使用10.1.0.2rest。

如果主机正在响应,而不是启动,那么它将响应请求的目的地址。 例如,如果10.1.0.32上的另一台主机连接到10.1.0.2的主机,则响应将来自10.1.0.2,即使该返回路由与返回路由的src属性不匹配。