《深入理解Linux网络技术内幕》阅读笔记(二十八)
2015-10-14 01:39
806 查看
假设需要执行以下两个策略:
1.从校园网1到校园网3的流量要通过路由器RT1,从校园网2到校园网3的流量要通过RT2。
2.从校园网1到因特网的流量要经过DG1(默认网关1),从校园网2到因特网的流量要通过DG2.
注:因为eth0和eth1各自只连了一个局域网,所以不需要指定下一跳地址,只需指定出口设备即可。
因为在每次路由查找时,都可能要检查多个条件,所以主机维护多张独立的路由表,根据特定的条件选择正确的路由表,可以更快查找出路由。
当使用策略路由时,为目的地查找路由可分为两个步骤:
1.根据配置策略选择要用的路由表,这个额外任务不可避免地增加了路由查找时间。
2.从选择的路由表中查找路由。
当然,内核执行这两步骤之前,总是先在路由缓存内查找。
内核可以基于以下参数作为在选择路由表时所用的策略:
1.源IP地址与/或目的IP地址。
2.入口设备。
3.TOS。与基于流量的源地址和目的地址参数相比,TOS参数有助于划分流量类型。
4.Fwmark。Linux防火墙威力的一个特性。
选择下一跳,可以用加权循环算法实现:内核定义循环预算为所有下一跳的总和,每个下一跳的预算初始值为它的权值。在每个循环,内核在0到总循环预算之间生成一个随机数。然后它遍历下一跳列表,直到找到某个下一跳的预算大于或等于该值。在一个下一跳被选择后,将循环预算和被选中下一跳的预算都递减。
给定一条多路径路由,对于与该路由项匹配的流量,在下一跳之间分配时可以基于流,基于连接或者封包:
1.基于流 Per flow:根据每个源IP地址和目的IP地址的唯一组合选择下一跳。
2.基于连接 Per connection:每当启动一个新连接时选择一个下一跳(标识元素包含了端口号)。
3.基于封包 Per packet:根据每个封包来选择下一跳。
在流量控制子系统可用的许多分类器中,有一种称为基于路由表的分类器,它能够给予realm来讲路由分配。Realm是可以在策略和路由上指定的数字标签(该标签会被流量控制子系统使用)。
如上图所示,假设该路由器收到一个来自主机10.0.1.100(Realm A)且目的地址为10.0.2.200(Realm B)的封包。其路由标签计算过程如下:
1.路由查找返回的是路由R2和策略P1.因为在路由R2上没有配置Realm,所有使用策略P1上的源Realm A。//也就是说此时R2的源Realm为Realm A.
2.因为没有初始化目的Realm,内核计算从10.0.2.200到10.0.1.100的反向路由。这一次路由查找返回的是路由R1和策略P2.在匹配的路由R1上还是没有配置Realm,所以内核依赖于策略Realm,即Realm B。但是因为这是在反向查找的时候发现的,所以反向路径上的源Realm B被用作转发路径上的目的Realm。
最终,路由标签被初始化为源Realm A和目的Realm B。当流量通过QoS层时,QoS层可以使用这两个realm来将封包正确地分类。
流程可参考下图:
一个IP主机永远不会对不属于本地配置子网的IP地址发送ARP请求。但是这种行为其实是有可能的,因为在路由缓存中包含有重定向路由的话,就可以绕过路由表。虽然主机A和主机B都连到同一个共享介质,并且因此能够在链路层相互通信,但是从IP层来看是不可能的。
注:上图源地址应该为10.0.1.150.
Linux的默认行为认为非对称路由是可疑的,因而将根据理由表丢弃那些源IP地址通过接收接口为不可到达的封包。上图a中,Linux检测出了这种企图,并将这种封包丢弃,而b中则没有。
相关文章推荐
- [网络流最大流经典][uva 11082][矩阵解压]
- [网络流最大流经典][uva 11082][矩阵解压]
- 如何解决在Azure上部署Sqlserver网络访问不了
- 承接游戏UI美术外包【厦门巨游网络科技有限公司】
- TCP/IP协议、Http协议、ftp协议
- HttpClient(转载)
- TCP带外数据读写
- Ubuntu中启用关闭Network-manager网络设置问题!
- http必知必会
- 常用java web容器http长连接超时设置
- Linux网络编程-----Socket地址API
- TCP协议三次握手过程分析
- Easyui datagrid行内【添加】、【编辑】、【上移】、【下移】(转自http://www.cnblogs.com/sword-successful/p/3386861.html,感谢分享)
- iOS 最新https遇到的问题
- TCP/IP和Socket的关系
- 居中未知元素(翻译https://css-tricks.com/centering-in-the-unknown/)
- 黑马程序员——网络编程(Socket编程)下
- iOS开发网络篇之文件下载、大文件下载、断点下载
- Coursera_Stanford_ML_ex4_神经网络训练 作业记录
- 黑马程序员——网络编程