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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他