局域网内发送消息给百度
如果数据包的目的地是我的办公室的主机,IP地址为192.168.2.12,那么会同时符合两个目的网段,0.0.0.0/0和192.168.2.0/24,但是路由器会优先匹配更精确的规则,所以数据包通过tun0网卡转发给网关192.168.10.12。
数据包发送到办公室
3.2网络数据包的长距离传输:网络数据包长距离传输的过程中,会经过一个个的路由器,我们拿局域网内一台主机和百度的通讯举个例子,假设局域网内一台主机192.168.0.4/24要访问公网上的百度主机39.156.69.79。主机查询自己的路由表,把数据包发送给谁呢?
主机查询自己的路由表,把数据包发送给默认网关192.168.0.1(路由器LAN端IP地址)。路由器收到数据包后,继续发送给更上级的默认网关(运营商的路由器),经过多个路由的传递,最终百度主机就会收到信息了。
我们在centos系统中,可以使用traceroute -n http://baidu.com的命令查看中途经过了哪些路由器。我们很清晰地看到,第一个经历的路由器就是我们自己的路由器192.168.0.1,第二个路由器是运营商的路由器,27.19.176.1,中间的路由器都是城市路由的节点。
到百度主机经历的路由器
3.3.路由规则的获得路由器如何获得路由规则?
路由器想要实现路由功能,首先路由器本身得知道数据应该向哪里传。路由器得知这些信息的方式大致有3种,第一种方式是直连路由;第二种是通过手动添加路由规则,也就是静态路由。第三种是通过动态路由协议获得的路由,一般在城市或大型企业网络运用比较多,家庭网络甚至小型企业根本用不上,我们主要了解一下前两种方法。
第一种方式是直连路由。
当主机正确配置好一个IP地址后,会自动生成一条目的地址为该子网的路由。例如树莓派的网卡eth0通过dhcp获得192.168.0.4/24的ip地址,那么会自动产生一条目的地址为网段192.168.0.0/24的路由。如果我在网卡tun0上手动设置IP地址为192.168.10.4/24,也会增加192.168.10.0/24的路由。
第二种方式是手动添加静态路由。
例如我添加目的地址为我办公室的子网192.168.2.0/24,网关地址为192.168.10.12,因为树莓派本机根本不知道192.168.2.0/24的子网在哪里,所以必须手动设置。再例如,在mac系统中,手动配置IP地址时,填写的网关或路由,会生成路由表中的默认路由。