路由
路由概念
路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
路由表
路由器负责不同网络之间的通信,它是当今网络中的重要设备,可以说没有路由器就没有当今的互联网。在路由器中也有一张表,这张表叫路由表,记录着到不同网段的信息。
路由表中的信息分为直连路由和非直连路由。
直连路由:是直接连接在路由器接口的网段,由路由器自动生成。
非直连路由:不是直接连接在路由器接口上的网段,此记录需要手动添加或者是使用动态路由。
路由表中记录的条目有的需要手动添加(称为静态路由),有的则是动态获取的(称为动态路由)。直连路由属于静态路由。
路由器是工作在网络层的,在网络层可以识别逻辑地址。当路由器的某个接口收到一个包时,路由器会读取包中相应的目标的逻辑地址的网络部分,然后在路由表中进行查找。如果在路由表中找到由条目,那么,如果路由配置默认路由,就按着默认路由的配置转发到路由器的相应接口;如果没有配置默认路由,则将该包丢弃,并返回不可到达的信息。这就是数据路由的过程。
如下图:详细介绍路由器的工作原理
1)HostA在网络层将来自上层的报文封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB,HostA发现目标地址与本机不是同一网段,因此发送HostB的数据包需要经过网关路由A的转发。
2)HostA通过ARP请求获取网关路由A的E0口的MAC地址,并在链路层将路由器E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己。
3)路由器A从E0可接收到数据帧,把数据链路层的封装去掉,并检查路由表中是否有目标IP地址网段(即192.168.2.2的网段)相匹配的的项,根据路由表中记录到192.168.2.0网段的数据请发送给下一跳地址10.1.1.2,因此数据在路由器A的E1口重新封装,此时,源MAC地址是路由器A的E1接口的MAC地址,封装的目标MAC地址则是路由器2的E1接口的MAC地址。
4)路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。
5)此时HostB才会收到来自HostA发送的数据。
总结:路由表负责记录一个网络到另一个网络的路径,因此路由器是根据路由表工作的。
路由工作包含两个基本的动作:
1、通过网络传输信息
2、确定最佳路径
metric是路由算法用以确定到达目的地的最佳路径的计量标准,如路径长度。为了帮助选路,路由算法初始化并维护包含路径信息的路由表,路径信息根据使用的路由算法不同而不同
如有两条路由信息
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.116.0 0.0.0.0 255.255.255.0 U 2 0 0 eth0
192.168.116.0 0.0.0.0 255.255.255.0 U 3 0 0 eth3
当我们发出数据包时就会由 metric值低的发出 我们添加网卡信息时也会metric值低的排在路由表前边
路由的分类
通常情况下,指导 IP 转发的路由信息可以通过如下三种不同的途径来获得:
静态路由:
由系统管理员手动配置的到目标网络的唯一路径,当网络结构发生变化时也必须由系统管理员手动的修改配置。但合理的使用静态路由可以改进网络的性能,为重要的应用保存带宽。
缺省路由:
由系统管理员手动配置的一种特殊路由,可以将所有找不到匹配路由的报文转发到指定的缺省网关。
动态路由:
由动态路由协议从其他路由器学到的到达目标网络的发送路径,可以根据网络结构的变化动态地更新路由信息
路由表
所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径
如何查看当前由内核维护的路由表
1.路由如何产生? 静态添加 route add -net 192.168.116.0 netmask 255.255.255.0 dev eth3 metric 1
2.没有路由会有什么结果? 会造成网络不可达错误
[root@station040 ~]# ping 192.168.0.149
connect: Network is unreachable
可能错误:1.网关没有设置 2.网络连接--硬件 3.包括网线,水晶头等连接的物理问题。
如何解决?
添加到192.168.0.0网段的路由
[root@station040 ~]# route del -net 192.168.0.0/24 dev eth0
[root@station040 ~]# route add -net 192.168.0.0/24 dev eth0
路由表中若有相同条目:
*掩码长度一样,路由表中谁在上面用谁
*掩码长度不一样,哪个掩码长用谁
*内核自动维护
# ifconfig eth0:0 192.168.1.1/24 //(临时修改IP)产生路由
# ifconfig eth0:0 192.168.1.1/32 //不产生路由
# route del -net 192.168.0.0/24 dev eth0 //删除192.168.0.网段的路由
# route add -net 192.168.0.0/24 dev eth0 //添加路由
路由原理:
情况1:同一个网络的主机A和主机B是如何通信的
1. A要发arp广播:询问B的IP,你的MAC地址是什么? 我的ip是。。。。
只有B会回应自己的MAC地址给A
B发arp广播:询问A的ip 你的MAC地址是多少? 我的ip是。。。。。
A回应B的请求
2. A和B发收数据
3. A<---->B
情况2:不同网络的主机A和主机F是如何通信的
1. 当A发现不能与F通信时,A发广播问网关GW的MAC地址,网关的另一个ip询问Fmac
2. A给F发数据Data
3. F再按原路返回:回应
SIP和DIP在整个路由过程中保持不变
SMAC和DMAC一直在变(如快递员送信的过程)
Linux主机做网关
=========================================================
A F
192.168.0.51 ------------------- gateway --------------------192.168.2.7
192.168.0.1 192.168.2.1
Linux做gateway,需要打开ip_forward路由转发功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward
++++++++++++++++如何让 ip_forward功能永久生效++++++++++++++++++++++
[root@station086 network-scripts]# vim /etc/sysctl.conf
[root@station086 network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
192.168.0.51 指定网关:
# route add default gw 192.168.0.1 //添加默认路由(网关)
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.2.7 指定网关:
# route add default gw 192.168.2.1
删除网关的命令是:
# route del default
++++++++++++++++如何让网关功能永久生效+++++++