IP路由选择过程

news2024/12/23 13:43:46

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.coloradmin.cn/o/686636.html

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

相关文章

(一)CSharp-Socket

一、套接字 Windows Sockets 只支持一个通信域:网际域(AF-INET),这个域被使用网际协议族通信的进程所使用。 TCP/IP 的 Socket 则提供3种类型的套接字 1、流式套接字(SOCK_STREAM) 提供面向连接、可靠的数…

STM32 Proteus仿真闹钟设定万年历系统DS1302北京时间LCD1602蜂鸣器报警-0045

STM32 Proteus仿真闹钟设定万年历系统DS1302北京时间LCD1602蜂鸣器报警-0045 Proteus仿真小实验: STM32 Proteus仿真闹钟设定万年历系统DS1302北京时间LCD1602蜂鸣器报警-0045 功能: Protues版本:8.9 硬件组成:STM32F103R6单…

gif格式怎么转换成mp4? 这两个方法实用方便!

GIF(Graphics Interchange Format)文件是一种常见的动态图像格式,而MP4(MPEG-4 Part 14)则是一种流行的视频文件格式。有时候,您可能想要将GIF文件转换为MP4格式,以便在不同的平台和设备上进行更…

6-js基础-5

JavaScript 基础 - 5 知道对象数据类型的特征,能够利用数组对象渲染页面 对象综合案例数据类型存储 对象 对象(Object):JavaScript里的一种数据类型(引用类型),也是用于存储数据的 好处&#x…

机器学习笔记 - 了解机器学习中的小样本(Few-Shot)学习

一、背景概述 深度学习模型在图像分类、语义分割、对象检测等计算机视觉任务中的成功归功于利用了用于训练网络的大量标记数据——一种称为监督学习的方法。尽管在这个信息技术时代有大量的非结构化数据可用,但注释数据很难获得。 由于这个原因,计算机视觉机器学习项目中数据…

python spider 爬虫 之 urllib系列 urlretrieve下载照片、视频 网页

python 中 集成了 urllib urllib import urllib.request # urlopen 方法 url"url" response urllib.request.urlopen(url)print(type(response )) print(response.read()) # 解码 字节--->字符串 decode 字符串--》字节 encode print(response.read()…

腾讯课堂Python课程哪家强?

腾讯课堂Python课程哪家强? 文章目录 腾讯课堂Python课程哪家强?一、前言二、数据读取和数据预处理1、数据读取2、数据处理 三、有多少人愿意花钱学Python?四、多少价位的课买的人最多?五、哪家机构的课最多?销量最好&…

来评选你心中的TOP1编程语言

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

WEBGIS系统数据库设计

文章目录 系统设备模型设计1 .设备模型结构2. 设备逻辑关系模型系统属性数据库设计1 . 系统属性数据库2 . 实体继承关系1) 电气实体部分2 )土建实体部分3 )其他实体联系 系统采用PostgreS QL 作为属性数据库, PostGIS 作为空间数据库&#xf…

CENTOS上的网络安全工具(二十六)SPARK+NetSA Security Tools容器化部署(2)

〇、抓包与批量转换cap文件 1. Network Monitor 抓包 我们在CENTO OS上的网络安全工具(十七)搭建Cascade的Docker开发环境中捎带脚介绍了以下windows下的抓包软件。大意就是微软又一款不错的抓包分析软件,名曰nmcap,可在Download …

MySQL——备份与恢复

文章目录 MySQL 完全备份物理冷备份与恢复mysqldump 备份与恢复 MySQL 完全恢复MySQL 增量备份与恢复MySQL 增量备份MySQL 增量恢复 MySQL 完全备份 InnoDB存储引擎的数据库在磁盘上存储成三个文件:db.opt(表属性文件)、表名.frm(表结构文件)、表名.ibd(表数据文件…

FPGA解码 4K MIPI 视频 纯vhdl实现 CSI2 RX 采集OV13850,提供工程源码和技术支持

目录 1、前言2、Xilinx官方主推的MIPI解码方案3、本方案的性能及其优越性4、我这里已有的 MIPI 编解码方案5、vivado工程介绍6、上板调试验证7、福利:工程代码的获取 1、前言 FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了,MIPI解…

本地部署开源大模型的完整教程:LangChain + Streamlit+ Llama

在过去的几个月里,大型语言模型(llm)获得了极大的关注,这些模型创造了令人兴奋的前景,特别是对于从事聊天机器人、个人助理和内容创作的开发人员。 大型语言模型(llm)是指能够生成与人类语言非常相似的文本并以自然方式理解提示的机器学习模型…

【FreeRTOS】Arduino开发STM32

0.开发环境(工具) Vscode 、platformio、arduino、STM32F103C8T6、USB-TTL 引脚连接:STM32直接设置为烧录模式即可,烧录完成后会自动运行程序。 1.点灯加串口输出调试 注意事项:每次上传程序前,需要按一下复位键。 #include &…

【Linux】2、文件系统、Rootfs

文章目录 一、文件系统二、Rootfs2.1 各目录约定2.1.1 /bin4.2 /boot4.3 /dev4.4 /etc4.5 /home4.6 /lib4.7 /media4.8 /mnt4.9 /opt4.10 /root4.11 /run4.12 /sbin4.13 /srv4.14 /tmp4.15 /usr4.16 /var 一、文件系统 Linux 的文件系统遵循 HFS 设计,有如下实现&a…

浅谈充电桩监控系统的必要性

关注acrelzxz,了解更多详情 摘要:针对当前电动汽车续航能力严重不足以及不能及时充电的问题,将电力电子变流技术、智能监控技术、REIP无线射频技术及CAN总线技术应用到电动汽车智能充电桩的设计与研究中。开展了无人值守的智能电动车充电桩的…

Android 使用webView打开网页可以实现自动播放音频

使用webview 自动播放音视频,场景如,流媒体自动部分,音视频通话等。会出现如下问题: 解决方案如下: 配置webview 如下,这样可以自动播放音频。 webView.getSettings().setMediaPlaybackRequiresUserGestur…

如何从视频里面提取音频,这4个方法非常好用!

今天,我要介绍4种提取视频中音频的方法,每一种都非常简单方便,让你轻松获取视频中的音频! 1.音视频分离 这是最简单直接的方法之一,你可以使用视频编辑软件将视频导入,并对其进行音频分离,就可…

[Spring Boot Starter系列]Spring Boot自动装配原理

目录 一、介绍 二、Spring Boot实现自动装配的简单流程(基于2.3.5.RELEASE版本) 三、总结 一、介绍 什么是Spring Boot的自动装配? 以下描述部分来自Spring Boot官网: Spring Boot自动配置尝试根据您添加的jar依赖项自动配置您…

《kafka 核心技术与实战》课程学习笔记(八)

无消息丢失配置怎么实现? Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证。 第一个核心要素是“已提交的消息”。 当 Kafka 的若干个 Broker 成功地接收到一条消息并写入到日志文件后,它们会告诉生产者程序…