网络中各种网络设备对业务数据的转发主要有二层转发和三层转发。二层转发主要由交换机在同一个VLAN内实现,其转发依据是MAC地址表。如果MAC地址表中存在目的MAC地址表项,就从对应接口发出去,否则会从所有接口都发出去寻找接收者,同时,对ARP请求等广播帧也会从所有接口发出去。二层转发的特点导致可能存在环路,需要STP等协议防止二层环路。

三层转发主要由三层交换机或路由器在不同VLAN间或不同网段间实现,其转发依据是路由表。如果路由表中有目标网段的路由表项,就从对应接口或下一跳发出去,否则就把数据包丢弃。同时,三层转发不会在不同网段间转发广播包。

那么,是不是说三层转发没有环路呢?

并不是!我们在《网络工程师(10):让路由告诉你该去哪》一文中曾介绍了静态路由。如果因为静态路由配置错误,依然会造成环路。

如图中,在RTA上配置静态路由,目标网段20.0.0.0/24的下一跳为RTC,RTC上配置目标网段20.0.0.0/24的下一跳为RTB,而RTB上错误地配置的目标网段20.0.0.0/24的下一跳为RTA。

其实,这样并不会有环路!不同的路由来源拥有不同的优先级。20.0.0.0/24网段是RTB的直连路由,拥有最高优先级,即使在RTB上配置了目标网段20.0.0.0/24的静态路由,也不会选择。

那么,如果RTB连接PC的链路故障了呢?

这时,由于RTB上20.0.0.0/24的直连路由消失,所配置的静态路由就起作用了,于是形成了环路:RTA把目的地址为20.0.0.1的数据包发给RTC,RTC发给RTB,RTB又发给RTA,RTA再发给RTC,如此循环下去!

数据包会永远循环下去吗?

事实上,在设计IP协议时就考虑到了这个问题。如果网络中因为配置或其他错误而造成路由环路,由IP协议报文封装中的TTL字段来解决,避免永远循环下去。

IP封装中的TTL字段字面意思是Time to Live包生存时间,实际上和时间没什么关系。路由器在转发数据包之前,会先把TTL字段内容减去1,如果结果大于零,则正常转发给下一跳,如果结果为零,则把数据包丢弃。

所以,三层转发不像二层转发,没有专门的协议来防止路由环路。三层转发的环路一是依靠TTL,二是依靠路由协议本身来考虑。

我们所说的路由表,通常是指IP路由表,也叫全局路由表。每台网络设备只有一个全局路由表,路由器转发数据也是查找全局路由表。

但并不是说路由器只有一个路由表,事实上,除了直连和静态路由,每个动态路由协议都有自己的路由表,如RIP路由表、OSPF路由表、BGP路由表,等等。

所以,为了正确选择路由,不同的路由来源拥有不同的优先级(思科叫管理距离),包括直连、静态及各种动态路由协议。如果目标网段和掩码都相同,会优选优先级最高的路由来源加入全局路由表;如果路由来源相同,则优选开销最小的路由加入全局路由表;如果都相同,那么都加入到全局路由表中,称为多路径等值路由或等价路由,可以实现负载分担。

有了路由表,路由器就可以根据路由表来转发三层数据包了。当路由器收到一个数据包,先遍历整个全局路由表,如果没有找到匹配项,则丢弃数据包,否则在找到的所有匹配项中选择掩码最长的路由表项,查看该表项的下一跳地址是否是路由器的直连路由,如果是直连,把数据包送到对应接口,封装为帧后发给目标电脑。如果不是直连,则解析下一跳的MAC地址,封装为帧后发给下一跳路由器。

网络设备转发数据包的整个流程_网络工程师(33):路由转发工作原理相关推荐

  1. 什么是交换机?描述一下工作过程?交换机基本功能、交换机是如何转发数据包的,什么是三层交换机?和二层交换机有什么区别?三层交换机是否可以代替路由器?为什么?

    ** 14. 什么是交换机?描述一下工作过程? ** 交换机是一种工作在数据链路层对流量进行转发的网络设备.主要应用于延长传输距离,解决冲突域,实现单播等功能. ** 工作过程: **当流量进入交换机 ...

  2. 路由器转发数据包的封装过程

    ** 原理: ** 1.当一个高层的数据包到达传输层,由于telnet使用TCP协议,传输层将上层传过来的数据不变在封装TCP的包头以便目标主机可以正确解包,继续向下层(网络层)传递. 2.网络层同样 ...

  3. 如果某路由器到达目的网络有三种方式:通过RIP;通过静态路由;通过默认路由,那么路由器会根据哪种方式进行转发数据包?( )

    如果某路由器到达目的网络有三种方式:通过RIP;通过静态路由;通过默认路由,那么路由器会根据哪种方式进行转发数据包?( ) A. 通过RIP B. 通过静态路由 C. 通过默认路由 D. 都可以 答案 ...

  4. DPDK 数据包捕获基本流程(十六)

    内核组件架构 rte_eal+libc:内存的统一组织管理者,但是在这它不只是做内存工作. librte_malloc:对外提供分配释放内存的API,分配的内存都是rte_eal中所管理的内存. li ...

  5. Linux网络-数据包的接收流程(基于RTL8139网卡驱动程序)

    本文将介绍Linux系统中,基于RTL8139网卡驱动程序,是如何一步一步将接收到的数据包传送到内核的网络协议栈的. 下图展示了数据包(packet)如何进入内存,并被内核的网络模块开始处理: +-- ...

  6. TCP/IP学习(30)——L2数据链路层的数据包处理详细流程

    原文地址:TCP/IP学习(30)--L2数据链路层的数据包处理详细流程 作者:GFree_Wind 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝 ...

  7. 路由器的工作原理,形成,转发数据包的过程

    一.路由器的工作原理 二.路由表的形成 三.静态路由和默认路由 四.路由器转发数据包的封装过程 五.静态路由和默认路由的配置 概述: 在只有一个网段的网络中,包可以很容易地从源主机到达目标主机,但是如 ...

  8. 交换机与路由器技术:远程管理交换机和路由器工作原理、路由器转发数据包的封装过程

    目录 一.通过远程管理方式连接交换机 1.teInet是应用层协议基于传输层TCP,默认端口号:23 2.ssh是应用层协议基于传输层TCP默认端口号:22 3.思路 3.1.telnet 3.2.s ...

  9. 段路由SR(Segment Routing)是基于源路由理念而设计的在网络上转发数据包的一种技术架构

    一.SR背景 段路由SR(Segment Routing)是基于源路由理念而设计的在网络上转发数据包的一种技术架构. SR-MPLS可以通过多个MPLS形成路径(基于标签转发)     SRv6可以通 ...

最新文章

  1. 正由另一进程使用,因此该进程无法访问此文件。
  2. P1214 等差数列
  3. python flask高级编程之restful_('Python Flask高级编程之RESTFul API前后端分离精讲',),全套视频教程学习资料通过百度云网盘下载...
  4. 劲爆!java的学习网站
  5. Android Apt失效:找不到Apt生成的对应类
  6. Devexpress TreeList控件绑定显示父子节点对像
  7. 编程之美-斐波那契(Fibonacci)数列方法整理
  8. iPad连android热点掉线,苹果终于承认,iOS 13有这个问题,网络断连的原因找到了...
  9. Eclipse下Tomcat服务器配置和使用
  10. nacos未授权访问漏洞【原理扫描】
  11. 适配器模式之观察者模式
  12. 电信无线路由器服务器网站,电信拨号上网连无线路由器的方法
  13. Django-创建一个完整的项目-详细教程
  14. 日知录(七):python之理解pygame飞机大战
  15. 区块链游戏走出一地鸡毛,元宇宙3D国风链游或成最大受益者
  16. 使用Excel获取数据
  17. msi 微星b350 tomahawk主板 刷bios教程
  18. 鸡兔同笼python程序怎么写_【鸡】鸡的功效_鸡图片_食材百科_美食杰
  19. 3.3 典型交易流程
  20. C语言计算一个整数的位数

热门文章

  1. 有趣的Pycharm第三方模块——为正在学习python的可怜孩子找点乐趣
  2. Wamp与IIS同时在Windows7下运行解决方法
  3. verdi显示状态机名字_如何写好状态机(三)
  4. windows server 2008 开机进度条闪过后重启_Windows系统损坏 | 无法进入系统如何正常备份数据?...
  5. 嵌入式linux程序没有任何提示退出,答网友问:嵌入式Linux执行程序提示Not found的解答...
  6. fp格式图片_2020Pamp;I | 适马无反版100-400镜头亮相,fp全幅微单满足不同需求
  7. oracle profile
  8. 燃爆了!天猫联合天一广场搞事情,800万宁波人坐不住了
  9. 11.保存登录状态与注销功能
  10. 访谈 | 杨卫华谈技术人成长,要善用社区提升自身影响力