Linux入门真经-042以太网帧与交换机转发原理基础

2024-03-04 17:48

本文主要是介绍Linux入门真经-042以太网帧与交换机转发原理基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前两节简述了网络整体的样貌以及分层模型,大致属于纲领性的文章,很多细节并没有详说。

本节给大家介绍的是以太网帧的转发方式与交换机的简要工作原理。

 

我们在前面的小节讲过,交换机可以在同一个广播域里交换数据,从OSI七层模型的角度看,它工作在第二层数据链路层,数据流最多被解封至数据帧,只用做在局域网内的选路,至于IP、运输层、应用层的内容,交换机默认统统都看不到。数据链路层使用MAC地址来进行寻址。还记得MAC地址么?MAC地址由48位二进制数组成,常用12位的16进制数字来表示

 

一、帧转发方式

 

局域网内的帧主要通过三个方式发送:单播、广播、组播。

 

单播

单播是一对一的转发,从单一的源发往单一的目的地

单播帧的源MAC地址的第8个位如果为0,则表示这是一个单播帧。只有真正的目的主机才会接收并处理这个数据帧,其他主机接收后发现目的MAC与本机MAC不一致,则会直接将这个数据帧丢弃,不会做进一步的处理。

 

 

广播

广播是一对多的转发。数据从单个源发送给局域网内的所有主机。广播帧的目的MAC为全1,即FF:FF:FF:FF:FF:FF,所有收到这个帧的主机都会处理这个帧的数据。

当局域网里的所有主机都要接收相同的数据并处理的情况下,会用到广播方式。广播方式会产生大量的流量,严重时甚至可能产生网络拥塞,前面也讲过,路由器可以分割广播域。

 

组播

源MAC的第8位为1,表示这是一个组播帧。组播帧从单一源发往局域网内侦听该组播地址的主机。某些协议会用到组播这一技术,这里我们可以不做过多的了解。

 

二、交换网络原理

 

交换机是工作在数据链路层的设备。单播、广播、组播无非是数据帧的种类,他们都会由交换机去传递。

交换机的转发行为大致可分为三种:泛洪、转发、丢弃

我们前面也提到过,交换机里有一个CAM表,记录了MAC地址和交换机端口的映射关系。交换机对于数据帧的处理机制可以概括如下:

1、进入交换机的是单播帧,交换机会在CAM表中查找去往该MAC应该从哪个端口转发:

如果在CAM表里找不到该MAC的相关信息,交换机会执行泛洪操作。(注意,泛洪和广播是两码事,泛洪也能传播单播数据帧)

如果能找到,则对比一下,该mac对应的端口是不是接收该数据帧的端口,如果不是,就从这个端口转发,如果是,则丢弃。

2、如果进入交换机的是广播帧,则不查表,直接泛洪。

3、如果是组播帧。。此处不讨论,不在基础范围内了。

 

交换机的工作原理就是这么简单。当然,这只是最基础最基础的内容,也是你必须知道的东西。现实生活中还会运用到更多的交换技术。比如,可以隔离广播域的vlan、防止交换机环路产生广播风暴的stp等等。这些大多数是给专攻网络的网络工程师去操心的。感兴趣的朋友可以去看《CCNA学习指南》,看完这本书后掌握的网络知识就足够使用了。这本书还会向你介绍如何配置思科的路由器和交换机,如果你不是网络工程师,可以只看原理不看配置。因为不同厂商的路由交换设备,设备特性和配置方式都会有所不同。这也是搞网络的工程师头疼点之一。所幸的是,这些设备正常工作所遵循的TCP/IP协议族是相同的,厂商也会提供详尽的配置手册和技术支持。网络也是IT行业的一个方向,博大精深。我认为,如果主攻系统运维/数据库/云计算方向,CCNA的知识就绰绰有余了。如果工作有特殊需要,按需学习即可。

这篇关于Linux入门真经-042以太网帧与交换机转发原理基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/773963

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键