【摘要】 好了,到这里至少你应该能看懂路由表信息了。给你一个目的IP,你也应该知道它会使用哪一条路由了。 路怎么走就看骚年你了~
一、路由
其实关于网络大家遇到最多的问题就是:卧 槽,为什么不通啊!
比这个运气好一点的:卧 槽,过去通,回来不通啊!
不慌,看完这一章节,这种问题下次碰到基本自己就能搞定。首先我们希望两台机子能通,那你得知道通是怎么通的,也就是通的时候,路是怎么走的。
大多数情况你(这里的你是指你的报文)走过去的路,跟走回来的路是一样的。
少数情况下,你走大路过去,然后绕小路回来。这个都不影响找路的原理。
举个栗子:当你在杭州,想去黑龙江,应该往北走。一般情况你不会从深圳绕一把。万一线路中断,你从西安绕一下也行。
整体而言:具体报文怎么走,就是路由的问题了。
二、路由表如果有你想要懂网络,这张表是一定要看懂的。
找台Linux主机,输入#route -n
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.120.174.1 0.0.0.0 UG 0 0 0 eth0 10.120.174.0 0.0.0.0 255.255.254.0 U 0 0 0 eth0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0注意,这里的-n参数不是必须的,但是建议带上,其他很多网络相关的命令,也都建议带-n参数。
(原因:route命令,默认会把IP地址翻译为hostname,但是IP->Hostname这个动作,就会去查DNS,有时候DNS配置的不好,例如查不通,那么route命令就会感觉卡住了一样。)
这个表的第一行:
Destination Gateway Genmask Flags Metric Ref Use Iface
红色部分是基础,含义分别为:
Destination Gateway Genmask Iface
目的IP 网关 掩码 网卡
(目的地, 中转站, 目的地范围, 哪个门出发)
先看中间一条路由记录 目的地 中转站 目的地范围, 哪个门出发 10.120.174.0 0.0.0.0 255.255.254.0 eth0首先,目的地址是 10.120.174.0,范围是 255.255.254.0
根据上节的掩码原理,我们知道掩码是23位的,也就是只有前面23不动,只有最后9位可以动。
两者一结合(与),就知道了网络目的范围:
(图:目的地址)
(图:目的地范围)
两者结合的范围为:10.120.174.0(可变部分全为0)~ 10.120.175.255(可变部分全为1),总共512个目的地址(IP)。
也就是所有这些目的IP地址在这个范围内的,在选择路由时,都匹配这条路由记录。
那这条记录是这么说的:当匹配到这条记录时,中转站不需要(gateway为0),只管把报文往eth0这个门扔出去就行了(Iface为eth0)。
这是什么意思呢?就是这个IP范围的大家都在一个小的局域网络里面,你喊一声,大家都能知道,不需要中转。
再看最后一条路由记录 目的地 中转站 目的地范围, 哪个门出发 172.17.0.0 0.0.0.0 255.255.0.0 docker0这条记录跟上面一条基本一样含义,目的地址 & 目的地范围,结合后得出:
目标地址为 172.17.0.0~172.17.255.255的报文只管往网卡docker0上面扔就是了。
最后看第一条路由记录
目的地 中转站 目的地范围, 哪个门出发 0.0.0.0 10.120.174.1 0.0.0.0 eth0这里目的地址为0,表示default默认路由,意思是:当你的目的地址实在是找不到其他能够匹配的路由记录时,就用这一条吧。
而这一条默认的规则的意思是:往eth0网卡丢,先送到中转站 10.120.174.1。 后面的事情你不用管了(意思是让中转站去解决后面的路由)
比如我想要:
# ping 10.184.43.7
的时侯,这个目的IP,明显即不符合中间那条记录的范围,也不符合最后一条记录的范围。怎么只能使用这一条默认记录了。
再来细看这条默认路由记录:
这条记录说:当匹配到这条记录时,中转站要设置为10.120.174.1,并且报文要往eth0这个门扔出去(Iface为eth0)。
这里隐含的表示了,中转站你必须能到达,否则网络会不通。
报文如何导到中转站
好了,那我们来看看报文是怎么与中转站通的。 这里中转站IP为10.120.174.1,要想把报文送到这里去,我们应该怎么走?
咦,又是路怎么走的问题,这不是上面刚学的嘛。
来,跟我一起匹配,第三条行不行?不行。
第二条行不行,行!
刚好是第二条路由记录的范围(10.120.174.0~10.120.175.255),那就用第二条路由指定的方式发送(报文从eth0扔出去就行了)。
很明显的是在递归查找路由表。同时,这也说明中转站就在同一个局域网内嘛。
即报文送到网关,也是要查找路由表的。
小结通过把所有的路由表都匹配一遍,你会发现,任意的目的IP,都能匹配到路由表中的一条(因为你有一个default规则)。
匹配的过程你就当做是“人工”一个一个的查。如果你连路怎么走都没有设置好,网络又怎么能通呢?
三、本机IP地址对路由的影响先看一下本机的IP信息: