路由器01_工作原理

一、回顾交换机工作原理

交换机里面维护了一张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.mzph.cn/news/604510.shtml

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

相关文章

在IDEA中使用git分支进行开发然后合并到Master分支,2022.1.x版本

在实际开发过程中,为了避免因为在开发中出现的问题以及方便发布版本,如果是多版本发布的情况相下,我们通常需要采用分支进行开发,这个时候,我们就需要了解git分支的相关知识点了,本篇博客也是博主在实际公司…

近5年的学习经历总结

2013年迈入工作,到今年2024年,是工作的11个年头。从C语言嵌入式方向进入IT行业,再到云计算行业;最初做了将近3年的嵌入式开发,从STM32单片机开发,到arm-linux驱动,再到学习Centos/redhat系统&am…

【MySQL】MySQL如何查询和筛选存储的JSON数据?

MySQL如何查询和筛选存储的JSON数据? 一、背景介绍二、支持的JSON数据类型三、基础数据3.1 创建表3.2 插入 JSON 数据3.3 查询 JSON 数据 四、操作函数4.1 JSON_OBJECT4.2 JSON_ARRAY4.3 JSON_EXTRACT 一、背景介绍 JSON(JavaScript Object Notation)是一种轻量级的…

LCR 143. 子结构判断

代码与解析 这是我一开始的代码,只过了45/49个测试用例,在测试用例这过不了了,不知道为啥 输入: A [-2,1,-1] B [-2,1,1] 输出 true 预期结果 false /*** Definition for a binary tree node.* public class TreeNode {* int va…

2024 .1.7 Day05_Spark_HomeWork; Spark_SQL

目录 1. 简述Spark SQL与HIVE的对比 2. Spark SQL是什么? 3.代码题 需求1 直接基于DataFrame来处理,完成SparkSQL版的WordCount词频统计。DSL和SQL两种方式都要实现 4.创建Spark DataFrame的几种方式? 5. 创建得到DataFrame的方式有哪些,各自适用场景是怎么…

Nginx(十九) range请求-断点续传/多线程下载

range请求允许服务器只发送请求的一部分响应数据给客户端,通常对大文件传输时,用以实现断点续传、多线程下载等功能。若服务端响应信息头中包含字段 Accept-Ranges:bytes,则表示服务端支持范围请求,且节点范围的单位为字节&#x…

每周一算法:倍增法查找位置

倍增法 倍增法(Binary Lifting),顾名思义,就是利用“以翻倍的速度增长”的思想来解决问题的一类算法,它能够使线性的处理转化为对数级的处理,大大地优化时间复杂度。这个方法在很多算法中均有应用&#xf…

ServiceMesh

服务网格从总体架构上来讲比较简单,由一堆紧挨着各项服务的用户代理,外加一组任务管理流程组成。在服务网格中,代理被称为数据层或数据平面(Data Plane),管理流程被称为控制层或控制平面(Contro…

【IDEA】 解决在idea中连接 Mysql8.0,驱动无法下载问题

本篇继【idea】解决sprintboot项目创建遇到的问题2-CSDN博客 目录 一、Failed to download https://download.jetbrains.com/idea/jdbc-drivers/MySQL/8/LICENSE.txt:Remote host terminated the handshake 二、no dirver files provided com.mysql.cj.jdbc.Driver 三、Serv…

STM32F407ZGT6时钟源配置

1、26M外部时钟源 1、25M外部时钟源

计算机Java项目|基于SpringBoot+Vue的图书个性化推荐系统

项目编号:L-BS-GX-10 一,环境介绍 语言环境:Java: jdk1.8 数据库:Mysql: mysql5.7 应用服务器:Tomcat: tomcat8.5.31 开发工具:IDEA或eclipse 二,项目简介 图片管理系统是一个为学生和…

kotlin take 和 drop

kotlin take的作用 从头开始获取指定数量的元素 val numbers listOf("one", "two", "three", "four", "five", "six") // 取集合的4个集合 Log.d("take", numbers.take(3).toString()) // 打印结果[…

【linux学习】重定向

目录 重定向标准输出、标准输入和标准错误标准输出重定向标准错误重定向将标准输出和标准错误重定向到同一个文件处理不想要的输出标准输入重定向 管道过滤器uniq-报告或者忽略文件中重复的行wc-打印行数、字数和字节数grep-打印匹配行head/tail 打印文件的开头部分/结尾部分te…

基于PGPGPOOL-II部署PostgreSQL高可用环境

PGPOOL-II是一个位于PostgreSQL服务器和 PostgreSQL 数据库客户端之间的中间件,具有以下功能: 1. 连接池:PGPOOL-II可以保持已经连接到 PostgreSQL 服务器的连接,并在使用相同参数(例如:用户名、数据库、协议版本)连接进来时重用它们。这可以减少连接开销,并增加系统的…

nacos与eureka区别

Nacos vs. Eureka: 微服务架构的服务发现之较 随着微服务架构的广泛应用,服务发现成为确保各个微服务之间通信的关键组件。在这个领域,Nacos和Eureka是两个备受关注的解决方案。本文将深入探讨它们的异同,以帮助你在项目中做出明智的选择。 …

C#-程序结构

C# 中的组织结构的关键概念是程序 (program)、命名空间 (namespace)、类型 (type)、成员 (member) 和程序集 (assembly)。 C# 程序由一个或多个源文件组成。 程序中声明类型,类型包含成员,并且可按命名空间进行组织。类和接口就是类型的示例。 字段 (field)、方法、属性和事件…

trino-435:dynamic catalog restful API开发

前置内容 restful API开发所在的位置core->trino-main->metadata模块下。主要实现查看已有catalog、注册catalog实现动态扩展、catalog的删除操作。coordinator和worker节点对该功能接口的实现是有区别的: coordinator节点包含查看已有catalog、注册catalog实现动态扩展…

How can I be sure that I am pulling a trusted image from docker?

1、Error response from daemon: manifest for jenkins:latest not found: manifest unknown: manifest unknown 2、Error response from daemon: pull access denied for nacos, repository does not exist or may require ‘docker login’: denied: requested access to th…

[蓝桥杯学习] ST表

RMQ问题 ST 表 用状态 s[i][j] 记录区间长度为 2^j 的长度的区间的最大值 所以状态转移方程就是 st[i][j] max( st[i][j-1] , st[i(1 << (j-1))][j-1] ) 注意状态转移的方向&#xff0c;保证区间合法性&#xff08;i2^j 不能超过数组大小&#xff09; 写完这些后&am…

Latex论文模板

%!TEX program xelatex \documentclass[12pt,a4paper]{article}% 文档格式 \usepackage{ctex,hyperref}% 输出汉字 \usepackage{times}% 英文使用Times New Roman \setmainfont{TeX Gyre Termes} \title{\fontsize{18pt}{27pt}\selectfont% 小四字号&#xff0c;1.5倍行距 {\h…