《TCP/IP详解》学习笔记(五):IP选路、动态选路

静态 IP 选路

1一个简单的路由表


选路是 IP 层最重要的功能之一。前面的部分已经简单的讲过路由器是如何根据 IP 数据包的 IP 地址来选择路由的。 这里就不重复了。

首先来看看一个简单的系统路由表:

《TCP/IP详解》学习笔记(五):IP选路、动态选路_QQ20160321-0.png 

对于一个给定的路由器,可以打印出五种不同的 flag:
 

  •  U 表明该路由可用。
  •  G 表明该路由是到一个网关。如果没有这个标志,说明和 Destination 是直连的,而相应的 Gateway 应该直接给出 Destination的地址。
  • H 表明该路由是到一个主机,如果没有该标志,说明 Destination 是一个网络,换句话说 Destination 就应该写成一个网络号和子网号的组合,而不包括主机号(主机号码处为0),例如 192.168.11.0
  •  D 表明该路由是为重定向报文创建的
  • M 该路由已经被重定向报文修改


U 没啥可说的,G 说明这是一个网关,如果你要发数据给 Destination,IP 头应该写 Destination 的 IP 地址,而数据链路层的 MAC地址就应该是 GateWay 的 Mac 地址了;反之,如果没有 G 标志,那么数据链路层和 IP 层的地址应该是对应的。H 说明了 Destination 的 性质,如果是 H 的,则说明该地址是一个完整的地址,既有网络号又有主机号,那么再匹配的时候就既要匹配网络号,又要匹配主机号;反 之,Destination 就代表一个网络,在匹配的时候只要匹配一下网络号就可以了。

这样,IP 选路的方式就可以更加具体化了。如下:
 

  • 首先用IP地址来匹配那些带H标志的DestinationIP地址。
  • 如果1失败就匹配那些网络地址。
  • 如果2失败就发送到Default网关


顺便提一下那个 GenMask(还记得子网掩码么),它指定了目的地址的子网号,例如第一条的子网就是11。
 

2其他有关路由表的知识


一般,我们在配置好一个网络接口的时候,一个路由就被直接创建好了。当然我们也可以手动添加路由。用 route add 命令就可以了。而当一个 IP 包在某一个路由器的时候发现没有路由可走,那么该路由器就会给源主机发送“主机不可达”或者“网络不可达”的 ICMP包来报错。

注意,一般的操作系统默认是没有路由功能的,这需要自己配置。这些历史原因就不细说了。
 

3ICMP 的 IP 重定向报文和路由发现报文


当 IP 包在某一个地方转向的时候,都回给发送 IP 报的源主机一个 ICMP 重定向报文,而源主机就可以利用这个信息来更新自己的路由表,这样,随着网络通信的逐渐增多,路由表也就越来越完备,数据转发的速度也会越来越快。我们需要注意的是:
 

  • 重定向报文只能由路由器发出。
  • 重定向报文为主机所用,而不是为路由器所用。


在主机引导的时候,一般会发送在网内广播一个路由请求的 ICMP 报文,而多个路由器则会回应一个路由通告报文。而且,路由其本身不定期的在网络内发 布路由通告报文,这样,根据这些报文,每一个主机都会有机会建立自己的路由表而实现网络通信。路由 器在一份通告报文中可以通告多个地址,并且给出每一个地 址的优先等级,这个优先等级是该 IP 作为默认路由的等级,至于怎么算 的就不深究了。

路由器一般会在450-600秒的时间间隔内发布一次通告,而一个给定的通告报文的寿命是30分钟。而主机在引导的时候会每三秒发 送一次请求报文,一旦接受到一个有效的通告报文,就停止发送请求报文。在 TCP/IP 详解编写的时候,只有 Solaris2.x 支持这两种报文,大多数系统还不支持这两种报文。(后面还会讲到一些有用的路由 报文)

动态选路协议


前面的选路方法叫做静态选路,简要地说就是在配置接口的时候,以默认的方式生成路由表项。并通过 route 来增加表项,或者 通过 ICMP 报文来更新表项(通常在默认方式出错的情况下)。 而如果上述三种方法都不能满足,那么我们就使用动态选路。

动态选路协议是用于动态选路的重要组成部分,但是他们只是使用在路由器之间,相邻路由器之间互相通信。系统(路有选择程 序)选择比较合适的路由放到核心路由表中,然后系统就可以根据这个核心路由表找到最合适的网路。也就是说,动态选路是在系统核心网络外部进行的,它只是用一些选路的策略影响路由表,而不会影响到最后通过路由表选择路由的那一部分。选路协议有一大类常用的叫做内部网关协议(IGP),而在 IGP 中,RIP 就是其中最重要的协议。一种新 的 IGP 协议叫做开放最短路经优先(OSPF)协议,其意在取代 RIP。另一种最早用在网路骨干网上的 IGP 协议--HELLO现在已经不用了。如今,任何支持动态选路的路由器都必须同时支持 OSPF 和 RIP,还可以选择性的支持其他的 IGP 协议。
 

1Unix 选路程序


Unix 系统上面通常都有路由守护程序--routed。还有一个叫做 gate。gate 所支持的协议要比 routed 多,routed 只是支持 RIPv1
版本。而 gate 则支持 RIPv1、v2,BGPv1 等等。
 

2RIP:选路信息协议


它的定义可以在 RFC1058内找到,这种协议使用 UDP 作为载体(也就是 UDP 的上层协议)。我们最关心的就是 RIP 其中的一个段,叫做度量的段,这是一个以 hop 作为计数器(就是以走过多少路由为计数器)的段(IP 协议里面也有一个 TTL 不是么)。这个度 量段将最终影响到路由表的建立。

参考图:

《TCP/IP详解》学习笔记(五):IP选路、动态选路_QQ20160321-1.png 

一般说来 routed 要承担如下的工作:
 

  • 给每一个已知的路由器发送 rip 请求报文,要求其他路由器给出完整的路由表。这种报文的命令字段为1,地址字段为0,度量 地段为16(相当于无穷大)。
  • 接受请求,如果接收到刚才的那个请求,就把自己的完整的路由表交给请求者。如果没有,就处理 IP 请求表项,把表项中自 己有的部分添上跳数,没有的部分添上16。然后发给请求者。
  • 接受回应。更新自己的路由表。使用 hop 数小的规则。
  • 定期更新路由表,一般是30s(真频繁)给相邻的路有启发一次自己的路由表。这种形式可以使广播形式的。


这个协议看起来会工作的很好,但是,这里面其实有很多隐藏的忧患,比如说 RIP 没有子网的概念,比如说环路的危险。而且 hop数的上限也限制了网络的大小。因此,出现了很多 RIPv1的替代品,比如说 RIPv2,比如说 OSPF。他们都是通过某种策略来影响路由表,所以就不说了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode刷题实战(43):Multiply Strings

题目描述: 43Multiply Strings28.7%Medium Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string. Example 1: Input: num1 "2", num2 "3" Output…

13.Data Leakage

本教程是ML系列的一部分。在此步骤中,你将学习什么是data leakage及如何预防它。 What is Data Leakage 数据泄漏是数据科学家需要理解的最重要问题之一。 如果您不知道如何防止它,则会频繁出现泄漏,并且会以最微妙和危险的方式破坏您的模…

Apollo自动驾驶入门课程第②讲 — 高精地图

目录 1. 高精地图与传统地图 2. 高精地图与定位、感知规划的关系 2.1 高精地图用于定位 2.2 高精地图用于感知 2.3 高精地图用于规划 3. Apollo高精度地图与构建 3.1 Apollo高精地图 3.2 Apollo高精地图的构建 本文转自微信公众号: Apollo开发者社区 原创&a…

项目总结2:ionic3开发跨平台App如何设置和替换应用图标及启动图

前言: 和原生开发一样,ionic官方提供的设置方式也很简单,只不过多了一个步骤:基于ionic命令的方式自动修改全局的配置文件config.xml。 设置或替换应用图标和应用启动图: 把UI提供的图标拿过来改成特定的名称"i…

LeetCode刷题实战(13):Roman to Integer

题目描述: 13 Roman to Integer 49.5%Easy Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D …

1.Intro to Deep Learning and Computer Vision

Intro 这是Kaggle深度学习教育课程的第一课。 在本课程结束后,您将了解卷积。 卷积是计算机视觉(以及许多其他应用程序)中深度学习模型的基本构建块。 之后,我们将很快开始使用世界一流的深度学习模型。 Lesson [1] from IPy…

SpringMVC常用的视图接口分类及实现类

SpringMVC中常用的视图接口分类及对应的实现类: URL资源视图:InternalResourceView、JstlView 文档视图:AbstractExcelView、AbstractPdfView 报表视图:ConfigurableJsperReportsView等JasperReports报表技术的视图 JSON视图&…

Apollo自动驾驶入门课程第③讲 — 定位

目录 1. 定位的概述 2. 定位方法介绍 2.1 GNSS RTK 2.2 惯性导航 2.3 激光雷达定位 2.4 视觉定位 2.5 Apollo定位 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 8月17日 上周我们发布了 Apollo入门课堂第②讲—高精地图&…

Linux与Bash 编程——Linux文件处理命令-L1

目录: linux系统与shell环境准备 Linux系统简介操作系统简史Linux的发行版:Linux与Windows比较:Linux安装安装包下载Linux的访问方式远程登录方式远程登录软件:mobaxterm的使用:使用电脑命令行连接:sshd的…

网络编程懒人入门(一):快速理解网络通信协议(上篇)

转自即时通讯网:http://www.52im.net/ 原作者:阮一峰(ruanyifeng.com),本文由即时通讯网重新整理发布,感谢原作者的无私分享。 1、写在前面 论坛和群里常会有技术同行打算自已开发IM或者消息推送系统,很…

PCA算法中样本方差和协方差的无偏估计与n-1的由来

原文出处: http://blog.sina.com.cn/s/blog_c96053d60101n24f.html 在PCA算法中的方差协方差计算公式中除数为什么是n-1? 假设X为独立同分布的一组随机变量,总体为M,随机抽取N个随机变量构成一个样本,和是总体的均值和方差, 是常…

Apollo自动驾驶入门课程第④讲 — 感知(上)

目录 1. 感知的概述 2. 计算机视觉 3. 摄像头图像 4. LiDAR图像 5. 机器学习 6. 神经网络 7. 反向滤波法 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 8月23日 上一篇文章中,我们发布了无人驾驶技术的 定位篇…

网络编程懒人入门(二):快速理解网络通信协议(下篇)

转自即时通讯网:http://www.52im.net/ 原作者:阮一峰(ruanyifeng.com),本文由即时通讯网重新整理发布,感谢原作者的无私分享。 1、前言 本文上篇《网络编程懒人入门(一):快速理解网络通信协议&#xff0…

为什么说逻辑回归LR是线性分类器?

问题描述:为什么说逻辑回归LR是非常典型的线性分类器? 首先,我们要弄明白区分线性与非线性分类器的标准是什么?是决策边界(Decision Boundary) 以二分类(LR可以用于多分类)为例进行…

朴素贝叶斯算法注意事项(有待完善)

1.朴素贝叶斯算法的优缺点总结: 优点: 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率;分类速度快,准确度高;对缺失数据不太敏感,算法简单,常用于文本分类(如新闻…

网络编程懒人入门(三):快速理解TCP协议一篇就够

转自即时通讯网:http://www.52im.net/ 原作者:阮一峰(ruanyifeng.com),本文由即时通讯网重新整理发布,感谢原作者的无私分享。 1、前言 本系列文章的前两篇《网络编程懒人入门(一):快速理解网络通信协议…

分类问题的模型评估指标总结

在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四中不同的组合,构成混淆矩阵(可适用于多分类),通常有这几种主要模型评估指标:精确率(查的准)、召回率(查的全对正样本的区分能力)、F1值(反映模型…

nltk安装punkt等语料库时报SSL错误完美解决方案及离线安装方法

nltk是NLP领域中一个比较通用的国际分词工具,但是使用时往往依赖语料库数据包,需要安装到本地,以下介绍在线安装和离线安装两种方式: (ps:对NLP感兴趣的朋友可以相互学习,我的微信号&#xff1…

7. Deep Learning From Scratch

Intro 这是深度学习第7课。 到目前为止,您构建的模型依赖于预先训练的模型。 但它们不是许多用例的理想解决方案。 在本课程中,您将学习如何构建全新的模型。 Lesson [1] from IPython.display import YouTubeVideo YouTubeVideo(YbNE3zhtsoo, widt…

最实用的Git命令总结:新建本地分支、远程分支、关联和取消关联分支、清除本地和远程分支、合并分支、版本还原、tag命令、中文乱码解决方案、如何fork一个分支和修改后发起合并请求

1.常用命令git、tag整理 1、新建分支本地分支 git branch <branch-name>远程分支 git push origin <branch-name>:<new-branch-name> 2、删除分支本地分支 git branch -d <branch-name> 或 git branch -D <branch-name>远程分支 git push o…