博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[TCP IP详解:学习笔记]IP选路
阅读量:4948 次
发布时间:2019-06-11

本文共 1182 字,大约阅读时间需要 3 分钟。

       IP选路

 

       选路是IP最重要的功能之一,图1是IP层处理过程的简单流程。

 

图1 IP层工作流程

 

       路由表中包含的信息决定了IP层所做的所有决策。列出了IP搜索路由表的几个步骤:

  1. 搜索匹配的主机地址;
  2. 搜索匹配的网络地址;
  3. 搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为0)。

  IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。选路策略只是一组决定把哪些路由放入路由表的规则。IP执行选路机制,而路由守护程序则提供选路策略。

 

  如果路由表中没有默认项,而又没有找对匹配项时,会发生什么情况?

  如果数据报是由主机产生的,那么就给发送该数据报的应用程序的应用程序返回一个差错,或者是“主机不可达差错”或者是“网络不可达差错”。如果是被转发的数据报,那么就给原始发送端发送一份ICMP主机不可达的差错报文。

 

  只有当主机可以选择路由器发送分组的情况下,才可能看到ICMP重定向差错报文(如图2所示)

  1. 假定主机发送一份IP数据报给R1(R1是该主机的默认路由);
  2. R1收到数据报并且检查它的路由表,发送R2是发送该数据报的下一站。当它把数据报发送给R2时,R1检测到它正在发送的接口与数据报到达端口是相同的(即主机和两个路由器所在的LAN);
  3. R1发送一份ICMP重定向报文给主机,告诉它以后把数据报发送给R2而不是R1。

 

图2 ICMP重定向的例子

 

       ICMP重定向报文的接收者必须查看三个IP地址:

  1. 导致重定向的IP地址(即ICMP重定向报文的数据位于IP数据报的首部);
  2. 发送重定向报文的路由器的IP地址(包含重定向信息的IP数据报中的源地址);
  3. 应该采用的路由器IP地址。

 

  ICMP重定向报文只能由路由器生成,而不能由主机生成。另外,重定向报文是为主机而不是为路由器使用的。

  在4.4 BSD系统中,在生成ICMP重定向报文之前要满足下列条件

  1. 出接口必须等于入接口;
  2. 用于向外传送数据报的路由不能被ICMP重定向报文创建或修改过,而且不能是路由器的默认路由;
  3. 数据报不能用源站选路来转发;
  4. 内核必须配置成可以发送重定向报文。

 

  在4.4 BSD主机收到ICMP重定向报文后,在修改路由表之前要做一些检查

  1. 新的路由器必须直接与网络相连接;
  2. 重定向报文必须来自当前到目的地所选择的路由器;
  3. 重定向报文不能让主机作为路由器;
  4. 被修改的路由必须是一个间接路由。

  需要注意,路由器应该发送的只是对主机的重定向(代码1或3),而不是对网络的重定向。

 

  初始化路由表的方法

  1. 在配置文件中指定静态路由,一般都是用来设置默认路由器;
  2. 利用ICMP路由器通告和请求报文。

 

转载于:https://www.cnblogs.com/life91/archive/2013/04/05/3001009.html

你可能感兴趣的文章
活现被翻转生命
查看>>
POJ 1228
查看>>
SwaggerUI+SpringMVC——构建RestFul API的可视化界面
查看>>
springmvc怎么在启动时自己执行一个线程
查看>>
流操作的规律
查看>>
Python基础学习15--异常的分类与处理
查看>>
javascript运算符的优先级
查看>>
React + Redux 入门(一):抛开 React 学 Redux
查看>>
13位时间戳和时间格式化转换,工具类
查看>>
vue router-link子级返回父级页面
查看>>
C# 通知机制 IObserver<T> 和 IObservable<T>
查看>>
Code of Conduct by jsFoundation
查看>>
div 只显示两行超出部分隐藏
查看>>
C#小练习ⅲ
查看>>
debounce、throttle、requestAnimationFrame
查看>>
linux下的C语言快速学习—进程和文件
查看>>
电源防反接保护电路
查看>>
stm32 堆和栈(stm32 Heap & Stack)
查看>>
SpringMVC从入门到精通之第三章
查看>>
JS基础-dom操作
查看>>