路由器01_工作原理

news2024/12/26 23:43:33

一、回顾交换机工作原理

交换机里面维护了一张MAC地址表,主要记录的是MAC地址和接口的对应关系。

交换机在初始状态下,MAC地址表是空的,当收到一个来自某接口的数据时,首先查看数据帧中的MAC地址表,对照自己的MAC地址表,如果不在表中,将发送方的MAC地址学习并记录到自己的MAC地址表中,并附上对应的接口(Fa0/1),再查看目的MAC地址,如果目标MAC地址也不在MAC地址表中,将数据从除接收接口(Fa0/1)外的其他所有连接接口转发出去(广播方式),此时,目的主机接收到,其他主机也会接收到 ,其他主机接收到后直接丢弃,目的主机接收到后进行回应,回应的过程中数据同样会交由交换机进行转发,目的主机这时候就变成了回应的发送主机,当交换机接收到来自目的主机的回应报文的时候(Fa0/10),同样查看发送方的MAC地址,进行学习记录,并附带对应接口(Fa0/10),再去查看目的MAC,由于已经有记录了,所以直接从记录的接口(Fa0/1)进行转发。

总结:交换机学习源MAC、广播数据帧、接收方回应后,回应使用单播直接进行转发。

二、回顾路由器相关知识

  • 网络层的功能:

路由器是属于三层(网络层)设备,进行逻辑地址(IP地址)寻址,实现不同网络之间的路径选择。

a、不同网络指网络地址不等或者内网和外网的分隔;     

b、内网的IP地址是无法在外网进行路由的;

去查找目的是否可以到达,如果可以到达,选择一条最优的路径,如果不能到达,直接返回给发送方一个消息。

网络层所传输的PDU(传输数据单元)是数据包(IP数据包)。

三、网络层IP数据包的格式

1、IPV4的数据包格式

字段长度含义
版本4bit标识当前使用的IP版本号(IPV4或IPV6)
首部长度4bitIP数据报文首部有一个可选字段,造成首部是可变的,所以需要一个字段去标识首部有多长。
区分服务/服务质量/优先级和服务类型8bit

为了保证更好的服务,主要是在IP层做qos;

只有在使用区分服务时,这个字段才起作用。

总长度16bit主要用来标识整个数据包(首部和数据)的总长度
标识16bitIPv4在存储器中维持了一个计数器,每差生一个数据报,计数器就加1,并将此值赋给标识字段。
标志3bit目前只有两位有意义,最低位为1标识后面还有分片数据报,为0表示已经是最后一个数据片;中间一位为1表示“不能分片”,为0才允许分片。
片位移13bit指出较长的分组在分片后,该片在原分组中的相对位置。
生存时间(TTL值)8bit数据包在路由器转发消耗时间如果小于1秒,TTL值就会减1.
协议8bit标识上层数据是使用何种协议(TCP是6,UDP是17)
首部校验和16bit校验数据报文的首部。数据报每经过一个设备,设备都要重新计算一下首部校验和,若首部未发生变化,则此结果必为0,于是保留这个数据报。该字段只检验数据报的首部,不包括数据部分。
源地址32bit发送方的IP地址
目的地址32bit接收方的IP地址
选项字段(长度可变)0~40字节用来支持排错、测量以及安全等措施,在必要时插入值为0的填充字节。
数据部分可变用来填充报文
IPV4数据报

2、IPV6的数据包格式

IPV6没有标识、标志、片偏移,它是放在了流标签里面

IPV6数据报字段

四、路由器的工作原理

1、路由

  • 从源主机到目标主机的转发过程(跨网络访问)
  • 包含两个内容:
    • 确定最佳路径(手动指定、根据动态路由协商方式)
    • 通过网络传输信息

2、路由器的工作原理

路由器里面维护了一张路由表,路由表中会有对应关系。

(1)直连路由  

R1       192.168.10.0   F0/0         192.168.50.0   F0/1
R2      192.168.100.0   F0/0        192.168.50.0   F0/1

当 192.168.10.1要和 192.168.100.1进行通信,发现目的IP和自己不在一个网络中,它会把数据交给自己直连的网关,R1会解封到第三层查看目的的IP地址是 192.168.100.1发现它的网络是 192.168.100.X网络,然后再去查看自己的路由表,发现 192.168.100.0网络不在自己的路由表中,它会反馈给PC1目标不可达。

此时我们想要它能够访问就需要在路由表中添加一条路由条目。

R1          192.168.100.0 F0/1

然后PC1发送数据过来,R1先解封装到第三层,查看目标IP地址所在网络,然后查看目的IP所在网络是否在自己的路由表中,如果在自己的路由表中,重新进行封装,找到对应接口转发出去。

转发到R2之后,R2同样会解封到第三层,看到源IP是192.168.10.1,目的IP是192.168.100.1,查看自己的路由表,目的IP所在网络在自己的路由表中,重新封装,然后找到对应接口进行转发。

PC2接收到数据库会进行回应,PC2作为发送方发送数据,过程同上。

(2)工作原理

接收数据包

查看目的IP地址

看目的IP地址所处IP地址在不在自己的路由表中

如果在,重新封装数据,然后在路由表中找到对应接口转发出去

如果不在,返回给发送方,目标不可达

(3)路由表

直连路由:当路由器的接口配置好对应的Ip地址并开启接口后自动生成

非直连路由:需要手动配置静态路由或者使用动态路由协议学习到

3、静态路由

  • 由管理员手动配置,不灵活,而且是单向的
  • 特殊的静态路由:默认路由,路由器中找不到 目标网络的路由条目时,再去查看默认路由
    • 使用场景:一般应用于末节(末梢)网络(网络的最末端)(路由器的一端只连接一个网络)

4、动态路由

  • 通过某种动态路由协议自动去建立路由表
  • 常见的动态路由协议:RIP OSPF IS-IS BGP IGRP EIGRP 

五、路由器转发数据包的封装过程

1、案例说明GNS3

GNS3通过

 

 

 

  • 先通过no ip routing 把两台主机的路由功能关闭

     
    PC2#conf t                #进入全局模式
    Enter configuration commands, one per line.  End with CNTL/Z.
    PC2(config)#no ip routing    #关闭c3640的路由模式
    PC2(config)#
  • 全局配置模式下配置PC1的IP、子网掩码和网关(PC2设置方法如是)
    PC1#conf  t
    Enter configuration commands, one per line.  End with CNTL/Z.
    PC1(config)#int f0/0
    PC1(config-if)#ip add 192.168.10.1 255.255.255.0        #设置PC的IP地址和子网掩码
    PC1(config-if)#no shut
    PC1(config-if)#exit
    PC1(config)#
    *Mar  1 00:06:28.811: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
    *Mar  1 00:06:29.811: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
    PC1(config)#ip def
    PC1(config)#ip default-ga
    PC1(config)#ip default-gateway 192.168.10.254            #设置PC的默认网关
    PC1(config)#
    
  •  配置路由器
    路由器R1的两个端口的IP地址、子网掩码并开启路由功能。
     
    R1#conf t
    Enter configuration commands, one per line.  End with CNTL/Z.
    R1(config)#int f0/0
    R1(config-if)#ip add 192.168.10.254 255.255.255.0
    R1(config-if)#no shut
    R1(config-if)#exit
    *Mar  1 00:30:33.163: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
    *Mar  1 00:30:34.163: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
    R1(config-if)#int f1/0
    R1(config-if)#ip add 192.168.50.1 255.255.255.0
    R1(config-if)#no shut
    R1(config-if)#
    *Mar  1 00:31:10.939: %LINK-3-UPDOWN: Interface FastEthernet1/0, changed state to up
    *Mar  1 00:31:11.939: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet1/0, changed state to up
    R1(config-if)#
    

    路由器R2的两个端口的IP地址、子网掩码并开启路由功能

    R2#conf t
    Enter configuration commands, one per line.  End with CNTL/Z.
    R2(config)#int f0/0
    R2(config-if)#ip add 192.168.100.254 255.255.255.0
    R2(config-if)#no shut
    R2(config-if)#exit
    R2(config)#
    *Mar  1 00:35:55.247: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
    *Mar  1 00:35:56.247: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
    R2(config)#int f1/0
    R2(config-if)#ip add 192.168.50.2 255.255.255.0
    R2(config-if)#no shut
    R2(config-if)#exit
    R2(config)#
    *Mar  1 00:36:25.243: %LINK-3-UPDOWN: Interface FastEthernet1/0, changed state to up
    *Mar  1 00:36:26.247: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet1/0, changed state to up
    R2(config)#
    

2、 添加路由

  • 全局模式添加静态路由

(1)第一种方式:指定出口路由器接口

R1#
R1#conf  t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ip route 192.168.100.0 255.255.255.0 fast
R1(config)#ip route 192.168.100.0 255.255.255.0 fastEthernet 1/0
R1(config)#

 (2)第二种方式,指定下一个路由器接口的IP地址

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ip route 192.168.100.0 255.255.255.0 192.168.50.2
R1(config)#

 在R2上配置PC1网段的路由

R2#
R2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R2(config)#ip route 192.168.10.0 255.255.255.0 192.168.50.1
R2(config)#
  • 查看路由表命令(show ip route)

 

(3)ping连通性测试 

PC1连接 PC2设备中默认发送五个数据包
当出现!代表连通,当出现...代表不通。

因为前面配置了路由,会去查找路由,查找路由有个过程,所以前面3个数据包不通

3、路由器转发数据包的封装过程

查看接口的信息并查看PC1的MAC地址

 同样去查看R1路由器、R2路由器以及PC2接口的MAC地址

PC1访问PC2

第一个报文:源IP:PC1的IP 源MAC是PC1的MAC 目的IP:PC2的IP 目的MAC、是路由器R1的MAC

当R1收到数据报文后,会解封到网络层,查看目的是否可到,如果可以到转发到对应接口,重新进行二层封装,源MAC变成R1路由器的 F1/0接口MAC 目的MAC变成R2 的F1/0接口MAC。

当R2收到数据报文后,会将数据交给对应接口,重新进行二层封装,源MAC变成R2路由器的 F0/0接口MAC, 目的MAC是PC2的MAC。

总结:路由器在转发数据包的封装过程:源IP和目的IP始终是没有发生变化的,源MAC地址和目的MAC是一直在变换的,因为路由器会重新进行二层封装。

  • 同网段传输主要是二层转发(不需要进行重新封装)
  • 跨网段传输是三层转发(需要重新进行二层封装)

六、抓包分析

ping是ICMP协议,所以直接看ICMP报文

(1)PC1到R1的报文

(2)R1到R2的报文

从Sequence Number可以看出它们是同一条报文

(3)R2到PC2的报文 

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

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

相关文章

MySQL进阶篇(二) 索引

一、索引概述 1. 介绍 索引(index)是帮助 MySQL 高效获取数据 的 数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数…

React 实现拖放功能

介绍 本篇文章将会使用react实现简单拖放功能。 样例 布局拖放 LayoutResize.js import React, {useState} from "react"; import { Button } from "antd"; import "./LayoutResize.css";export const LayoutResize () > {const [state,…

imgaug库指南(六):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…

海康威视安全接入网关 任意文件读取漏洞复现

0x01 产品简介 海康威视安全接入网关是一种网络安全产品,旨在提供安全、可靠的远程访问和连接解决方案. 0x02 漏洞概述 海康威视安全接入网关使用Jquery-1.7.2 , 该版本存在任意文件读取漏洞,可获取服务器内部敏感信息泄露(安博通应用网关也存在此漏洞) 0x03 复现环境 …

未完成销量任务的智己汽车突发大规模车机故障,竞争压力不小

2024年刚开年,智己汽车便上演了一出“开门黑”。 近日,不少车主在社交平台发帖,反映智己LS6出现大规模车机故障,包括但不限于主驾驶屏幕不显示车速、档位、行驶里程,左右转盲区显示失效,无转向灯、雷达提醒…

04 帧 Frame

文章目录 04 帧 Frame4.1 相机相关信息4.2 特征点提取4.2.1 特征点提取 ExtractORB()4.3 ORB-SLAM2对双目/RGBD特征点的预处理4.3.1 双目视差公式4.3.2 双目图像特征点匹配 ComputeStereoMatches()4.3.3 根据深度信息构造虚拟右目图像:ComputeStereoFromRGBD() 4.4 …

Unity 欧盟UMP用户隐私协议Android接入指南

Unity 欧盟UMP用户协议Android接入指南 官方文档链接开始接入mainTemplate.gradle 中引入CustomUnityPlayerActivity 导入UMP相关的包java类中新增字段初始化UMPSDK方法调用![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d882171b068c46a1b956e80425f3a9cf.png)测…

【STM32】STM32学习笔记-ADC单通道 ADC多通道(22)

00. 目录 文章目录 00. 目录01. ADC简介02. ADC相关API2.1 RCC_ADCCLKConfig2.2 ADC_RegularChannelConfig2.3 ADC_Init2.4 ADC_InitTypeDef2.5 ADC_Cmd2.6 ADC_ResetCalibration2.7 ADC_GetResetCalibrationStatus2.8 ADC_StartCalibration2.9 ADC_GetCalibrationStatus2.10 A…

网络优化篇(一)---------TCP重传性能优化

本文通过一个TCP重传优化的实际问题,详细讲解问题的分析、定位、优化过程。 通过本文你将学到: 如何通过linux命令和/proc文件系统分析TCP性能数据如何通过linux命令和netlink api分析某个具体的TCP连接的性能数据如何通过bcc工具分析TCP性能数据如何通过调整系统参数优化TCP重…

63.接口安全设计(活动管理系统:三)

文章目录 一、参数校验二、统一封装返回值三、做权限控制四、加验证码五、 限流六、加ip白名单七、校验敏感词八、使用https协议九、数据加密十、做风险控制 在日常工作中,开发接口是必不可少的事情,无论是RPC接口还是HTTP接口,我们都应该考虑…

opencv007 图像运算——加减乘除

今天学习图像处理的基础——加减乘除,总体来说比较好理解,不过生成的图片千奇百怪哈哈哈哈 opencv中图像的运算本质是矩阵的运算 加法 做加法之前要求两张图片形状,长宽,通道数完全一致 cv2.add(img1, img2) add的规则是两个图…

【算法笔记】深入理解dfs(两道dp题)

DFS过程的概述 一个一个节点的搜,如果是树状结构的话,先找到最左边那一条分支搜到最后一个节点,这个时候最后一个节点(假设是b)的数据会被更新(具体看题目的要求),然后返回到上一个…

debug mccl 02 —— 环境搭建及初步调试

1, 搭建nccl 调试环境 下载 nccl 源代码 git clone --recursive https://github.com/NVIDIA/nccl.git 只debug host代码,故将设备代码的编译标志改成 -O3 (base) hipperhipper-G21:~/let_debug_nccl/nccl$ git diff diff --git a/makefiles/common.mk b/makefiles/…

TypeScript接口、对象

目录 1、TypeScript 接口 1.1、实例 1.2、联合类型和接口 1.3、接口和数组 1.4、接口和继承 1.5、单继承实例 1.6、多继承实例 2、TypeScript 对象 2.2、对象实例 2.3、TypeScript类型模板 2.4、鸭子类型(Duck typing) 1、TypeScript 接口 接口…

rust sqlx包(数据库相关)使用方法+问题解决

可以操作pgsql、mysql、mssql、sqlite 异步的,性能应该不错,具体使用有几个坑 除了sqlx库,还有对于具体数据库的库,比如postgres库 演示以pgsql为例,更新时间2024.1.6 官方github: sqlx github rust官方文档&#xff1…

C++ Qt开发:Charts与数据库组件联动

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Charts组件与QSql数据库组件的常用方法及灵活…

【深度学习】cv领域中各种loss损失介绍

文章目录 前言一、均方误差二、交叉熵损失三、二元交叉熵损失四、Smooth L1 Loss五、IOU系列的loss 前言 损失函数是度量模型的预测输出与真实标签之间的差异或误差,在深度学习算法中起着重要作用。具体作用: 1、目标优化:损失函数是优化算法…

Unable to connect to Redis server

报错内容: Exception in thread "main" org.redisson.client.RedisConnectionException: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 175.24.186.230/175.24.186.230…

C语言scanf()函数详解

目录 1. scanf()函数简介 1.1 函数原型 1.2 头文件 1.3 返回值 1.4 参数 2.格式说明符 3.输入格式控制 关于‘ * ’的例子 关于width域宽的例子 关于length长度修饰符的说明 4. 其他常见问题说明 4.1 scanf()函数连…

2024年【烟花爆竹经营单位主要负责人】考试题及烟花爆竹经营单位主要负责人考试资料

题库来源:安全生产模拟考试一点通公众号小程序 2024年【烟花爆竹经营单位主要负责人】考试题及烟花爆竹经营单位主要负责人考试资料,包含烟花爆竹经营单位主要负责人考试题答案和解析及烟花爆竹经营单位主要负责人考试资料练习。安全生产模拟考试一点通…