IP Routing
Posted by 付辉 on Saturday, August 4, 2018 共734字假设你在跟小米公司对接服务,那你有没有好奇过:自家的服务器是如何找到小米公司的服务器的。为了安全,公司的服务器可都是在内网的,用户是无法直接访问到的。好好了解一下Ip Routing,它可以给你部分答案。
概述
当主机IP(Network)层收到一个datagram后,它首先会检查datagram的目标主机是不是自己。如果是,那么它会将datagram发送给其他协议处理。如果不是,它便检查自己是否被配置作为一个路由。如果是,它将按照规则将datagram继续传递。否则,默默的把datagram丢掉。
所有routing提供的IP地址,都假设下一个hop是离目标地址最近的。在datagram传递的过程中,我们会修改link-layer的地址为下一个hop的地址,而Destination IP一般是不做修改的。
Routing Table
在命令行执行 netstat -rn,查看系统的routing table。
# 展示结果做了修改,非真实值
neojos@BJ ~ $ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
140.168.0.0 10.3.206.240 255.255.0.0 UG 0 0 0 eth0
了解Falgs参数:
U表示当前路由是在使用的G表示路由到一个gateway。如果没有设置该flag,则表示跟Destination是直接连接的。H表示路由到一个主机地址。如果没有设置该flag,则Destination是一个网络地址。D表示路由是通过ICMP Redirect设置的。一般来说,Redirect设置的route都是主机地址。
路由查询的顺序:
- 查找匹配的主机地址
- 查找匹配的网络地址
- 查找
default的路由。
Host unreachable
当route没有找到destination时,Destination Host Unreachable的错误会返回给源主机。你可以通过ping路由表中配置错误的destination host address来查看。