IP路由选择过程

1.1路由选择基础

路由选择是指将分组从一个设备通过互联网络发往位于不同网络上的另一个设备的操作。路由器不关注网络中的主机,而只关注互联起来的网络以及通往各个网络的最佳路径。

目标主机的逻辑网络地址用来获取通过可路由网络传送到指定网络中的分组,主机的硬件地址用来分组从路由器投递到正确的目标主机上。

如果网络中没有使用路由器,那么自然也就不需要路由选择。路由器可以在互联网络中将用户数据路由到所有网络中。要实现对分组的路由,路由器至少必须了解以下内容:

  • 目的地址
  • 借以获取远程网络信息的相邻路由器;
  • 到达所有远程网络的可能路由;
  • 到达每个远程网络的最佳路由;
  • 维护并验证路由选择信息的方式。

路由器从相邻的路由器或管理员那里了解有关远程网络的信息,然后建立一个描述如何查找远程网络的路由选择表(即互联网络的一张地图)。如果某个网络与路由器是直接互联的,那么路由器自然就知道如何到达这个网络。

如果某个网络没有与路由器直接相连,那么路由器就必须通过以下两种方式了解如何到达这个远程网络:

  • 静态的路由选择
  • 动态的路由选择

1.2 IP路由选择过程

  1. 因特网控制报文协议(ICMP)将创建一个回应请求的数据包(此数据包的数据域种只包含字母)。
  2. ICMP会将这一有效负荷递交给因特网协议(IP),IP协议会用它创建一个分组。至少,源IP地址、目标IP地址和值为01h的协议字段将被封装到此分组中。当此分组到达目的方时,这些内容就会告诉接收方主机应该将这个有效负荷交付给哪个协议来处理。
  3. 一旦这个分组被创建,IP协议就需要判断目标IP地址的位置,判断此目的方位于本地网络还是某个远程网络。
  4. 由于IP协议判定这是一个远程的跨网络请求,而要将这一分组路由到远程网络,就必须将他发送给默认网关。(我们可以打开windows中的注册表查找已配置的默认网关)
  5. 要将这一分组发送给此默认网关,就必须要知道路由器Ethernet0接口的硬件地址。因为知道了接口的硬件地址,分组才可以向下递交给数据链路层,并在那里完成帧的组建,然后再将帧发送给与网络地址网络相连接的路由器接口。在本地局域网上,主机只能通过硬件地址完成通信,因此两个主机之间通信,就必须首先使用本地网络中默认网关的MAC地址将分组发送给网关。(MAC地址永远只能作用于本地LAN网络,不可能绕过或通过路由器。)
  6. 这一步,需要检查主机的ARP 缓存,查看此默认网关的IP地址是否已被解析为一个硬件地址。

    ····如果已被解析,此分组就可被传送到数据链路层已组建成帧。(目的方的硬件地址也将随分组一起下传到数据链路层)。要查看主机上的ARP缓存,可以输入以下命令:

    ​·····如果在主机的ARP缓存中没有被解析的硬件地址,那么用于查找路由器端口的硬件地址的ARP广播将被发送到本地网络上,这时路由器会响应这个请求,并提供端口的硬件地址,此后主机会接收并缓存这个地址。 

  7. 一旦分组和目的方的硬件地址被交付给数据链路层,局域网驱动程序负责选用适合所采局域网类型的介质访问方式。通过将控制信息封装到此分组上帧就被创建了。在这个帧中,附加有目的发硬件地址和源硬件地址,以及以太网类型字段,这个字段用于描绘给数据链路层交付帧中分组的网路层协议。在帧的尾部是FCS(Frame Check Sequence,帧校验序列)字段,这个部分装载了CRC(循环冗余校验)的计算结果。

    目标MAC

    源MAC以太网类型字段分组FCS(CRC

  8. 一旦帧创建完成,这个帧将被交付给物理层,物理层会以一次一比特的方式将帧发送到物理介质上。
  9. 这时,此冲突域中的每台设备都会接收这些比特,并将它们重新组建成帧。每个设备都会对接收到的内容进行CRC运算,并与帧中的FCS字段的内容进行比对。如果值不匹配,接收到的帧将被丢弃。

    如果这个CRC计算机结果与帧中的FCS字段的内容匹配,接着将检查的目的方的硬件地址与自己是否匹配。

    如果匹配,则接下来查看以太网类型字段,以获悉完成数据后续处理的网络层协议。

  10. 将分组从帧中取出,并将其他部分丢弃。然后,分组被递交给以太网类型字段中列出的协议。
  11. IP将接收这个分组,并检查它的IP目的地址。由于分组的目的地址与配置到此接收路由器上的各个地址均不匹配,此路由器会在其路由选择表中查找目的方的IP网络的地址。
  12. 在此路由选择表中需要包含网络地址的相关表项,否则路由器会立即将收到的分组丢弃,并同时向发送数据的源方设备回送一个携带有目标网络不可达信息的ICMP报文
  13. 如果路由器在路由选择表中查找到了关于木地方网络的内容,则分组将被交换到指定的输出端口。
  14. 路由器将此分组交换到对应的接口的缓冲区内。
  15. 此接口的缓冲需要获得目的方主机的硬件地址,因此会首先查看ARP缓存。
  16. 数据链路层将使用目标硬件地址和源硬件地址、以太网类型字段及帧尾部的FCS字段创建帧。随后这个帧将被递交到物理层,并由物理层以逐比特发送的方式发送到物理介质上。
  17. 接收方主机将接受此帧,并立即运行CRC。如果运算的结果与FCS字段中的内容匹配,则检查帧中的目标硬件地址。如果主机认定地址也是匹配的,则检查帧中以太网类型字段的值,判断将分组向上递交的网路层协议。
  18. 在网络层中,IP会接收这个分组,并对IP报头运行CRC。如果校验通过,IP随后将检查分组中目标地址。由于它们最终是匹配的,接下来要检查的就是分组的协议字段,并据此了解分组有效负荷的交付对象。
  19. 此有效负荷将被递交给ICMP,后者知道这是一个回应请求数据。ICMP将负责应答这个请求,它首相立即丢弃这个接收到的分组,然后产生一个新的有效负荷作为回应应答数据。
  20. 这样一个包含有源方地址、目的方地址、协议字段和有效负荷的一个新分组就被创建出来了。
  21. 在递交给IP后,它将对这个目的方IP地址的位置进行判断,判断这一地址指向的是一个本地局域网中的设备,还是一个位于远程网络上的设备。
  22. 默认网关的IP地址可以在Windows主机的注册表中找到。此外,为了实现IP地址到硬件的解析还需要查看ARP的缓存。
  23. 一旦找到默认网关的硬件地址,则目的方的硬件地址会随分组一起被递交给数据链路层,已完成帧的创建。
  24. 数据链路层会将收到的分组内容封装起来,并在帧头中包含下列内容:

    硬件地址和源方的硬件地址;

    值为0x0800(IP)的以太网类型字段;

    值为CRC运算结果的FCS字段。

  25. 之后,帧将向下递交给物理层,以逐比特的方式发送到网络介质上。
  26. 路由器的接口将接收这些比特位,并将它们重新组建为帧。然后进行CRC运算,帧中的FCS字段被用于验证计算结果是否匹配。
  27. 当CRC通过后,路由器将检查帧中携带的硬件目的地址。由于路由器的接口地址与这一地址是匹配的,于是帧中封装的分组将被取出,随后路由器会查看帧的以太网类型字段,以确定应接收此数据包的网络层协议。
  28. 由于以太网类型字段中指定的是IP,于是分组被递交给了网络层的IP。IP将首先对其IP报文头运行CRC,然后检查帧中的目的方IP地址。
  29. 路由器是知道如何到达网路地址的,用于输出的接口就算0口,于是分组被交换到0口上。
  30. 路由器将检查ARP缓存,以确定主机的硬件地址是否已经被解析。
  31. 由于在完成将分组发送给接收主机的过程中,主机的硬件地址已经被缓存起来,因此这一硬件地址将随分组一起被递交给数据链路层。
  32. 数据链路层将使用这个目的方的硬件地址和源方的硬件地址以及类型为IP的以太网类型字段完成帧的创建。随后对这个帧进行CRC运算,并将运算结果放入FCS字段中。
  33. 接下来这个帧就被交给物理层,以逐比特的方式发送到本地网络中。
  34. 目标主机将会接收接收这个帧,然后运行CRC,验证目的方的硬件地址,并查看以太网类型字段中的内容,以认定处理这个分组的上层协议。
  35. IP是指定的接收者,随后这个分组将被递交网络层的IP,它将检查帧中的协议字段,以确定下一步的操作。IP发现需要将此有效负荷交给ICMP,之后ICMP将确定此分组是一个ICMP应答回复。
  36. ICMP通过向用户界面发送一个惊叹号(!)表明已经接收到一个回复。随后,ICMP将尝试继续发送后续的4个应答请求给目的方的主机。

注明:当(如果)分组是在返回源主机的途中被丢弃,由于这是一个未知原因的错误,我们通常看到的会是请求超时这样的信息。如果出现的错误是由某种已知原因导致的,比如在前往目的主机的途中,某路由器的路由选择表里没有可用的路由,这时得到的信息将会是目标主机不可达一类的信息。根据这些提示内容,可以判断问题是发生在前往目的主机的途中,还是出现在返回主机的过程中。

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

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

相关文章

基于Java的万年历(课设)

基于Java的万年历 资源链接:基于Java的万年历(课设) 文章目录 基于Java的万年历1 绪论2 需求分析3 概要设计3.1 类间组合框架3.2 布局结构示意3.3 对各个类的概述 4运行环境5 开发工具和编辑语言6 详细设计6.1 NiceCaelendar类6.2 NiceFram…

软考高级系统架构设计师(九) 作文模板-企业应用集成

目录 作文模板 例子-企业应用集成 摘要 项目相关背景及主要功能 你的岗位及主要职责 论文主体内容的总概 项目最终的实施效果或你的总结和感悟等 正文 项目背景介绍 相关问题回应 主体内容 论文结论 例子-类似方向- 作文模板 例子-企业应用集成 2021系统架构设计…

使用英特尔 oneAPI AI 工具分析包实现AI应用程序的调试与改进

目录 1.什么是英特尔 oneAPI AI? 关于英特尔 oneAPI AI 工具分析包 2.使用英特尔 oneAPI AI 工具分析包实现AI数据分析 准备工作 数据准备 编写AI应用程序 性能分析 并行性优化 内存和线程错误分析 优化AI算法 性能验证与调试 性能优化迭代 3.总结 1.什…

【④MySQL函数】:让你的数据库操作更高效(一)

前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL字符串函数和数学函数的讲解✨ 目录 前言一、字符串函数二、数学函数三、总结 一、字符串函数 函数作用UPPER(列|字符串)将字符串每个字符转为大写LOWER(列|字符串)将字符串每个字符转为小写CONCAT(str1,str2,…

【问题记录】如何使用 pip 在 linux 上安装 pytorch

一、进入 pytorch 官网 pytorch 官网:https://pytorch.org/ 二、在页面选择环境 三、复制官网弹出的命令并运行即可 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

JavaScript 内置对象 数据类型

目录 JavaScript 内置对象 1.内置对象 2.查文档 2.1MDN 2.2 如何学习对象中的方法 3.Math对象 3.1Math 概述 3.2随机数方法 random() 4. 日期对象 4.1Date 概述 4.2Date() 方法的使用 4.3 日期格式化 4.4获取毫秒的总的毫秒形式 5.数组对象 5.1数组对象的创建 5…

互联网编程之基于 TCP 的单线程文件收发程序(CS架构)

目录 需求 服务端实现 客户端实现 测试 需求 可试着根据java编程课所学到的java socket编程技术,尝试编写一个基于 TCP 的单线程文件收发程序,需满足: 服务端程序预先定义好需要发送的文件并等待客户端的连接。 客户端连接成功后&…

CSS之平面转换

简介 作用:为元素添加动态效果,一般与过渡配合使用 概念:改变盒子在平面内的形态(位移、旋转、缩放、倾斜) 平面转换也叫 2D 转换,属性是 transform 平移 transform: translate(X轴移动距离, Y轴移动距…

项目中遇到的问题总结(四)

GateWay和Nginx的相同点和不同点在哪里? Gateway 和 Nginx 都是常见的反向代理服务器,它们的相同点和不同点如下: 相同点: 都可以作为反向代理服务器,接收来自客户端的请求并转发到后端服务器进行处理。 都支持负载均…

Android:设计模式

文章参考来源1 文章参考来源2 文章参考来源3 MVC Model 数据来源,管理业务数据逻辑,读取数据等 View 视图 Controller 单例模式,处理业务逻辑,负责改变Model和View 经典的MVC架构是 用户点击View,View将用户输入转…

搭建自己的 new bing网站----nginx反代(群晖,全docker版)

文章目录 1.前言:2. 部署过程:2.1.部署go-proxy-bing 项目:2.1.部署nginx反代:这两步完成实际上就可以访问了, 3.部署聊天服务器:代表链接成功! 1.前言: 本篇教程全萌新向&#xff…

12-代码实战——服务器版表白墙

目录 1.版本一:将数据存到内存中 ①约定前后端交互接口 a.添加表白信息: b.查询表白列表: ②在webapp包下创建message-wall.html前端文件 ③在java包下创建AddMessageServlet后端类 ④在java包下创建MessageListServlet后端类 2.版本…