令牌环网概念_令牌环网工作原理_令牌环网为什么没人用

本文介绍了令牌环网的工作原理,以环形拓扑避免碰撞,令牌控制机制确保数据有序传输。讨论了其优点(公平访问)、缺点(令牌管理)及与以太网的对比。重点讲解了TokenRing协议、帧格式和维护策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述
  令牌环网是一种以环形网络拓扑结构为基础发展起来的局域网,如图1-12所示。虽然它在物理组成上也可以是星型结构连接,但在逻辑上仍然以环的方式进行工作。其通信传输介质可以是无屏蔽双绞线、屏蔽双绞线和光纤等。 令牌环网的媒体接入控制机制采用的是分布式控制模式的循环方法。在令牌环网中有一个令牌(Token)沿着环形总线在入网节点计算机间依次传递,令牌实际上是一个特殊格式的帧,本身并不包含信息,仅控制信道的使用,确保在同一时刻只有一个节点能够独占信道。当环上节点都空闲时,令牌绕环行进。节点计算机只有取得令牌后才能发送数据帧,因此不会发生碰撞。由于令牌在网环上是按顺序依次传递的,因此对所有入网计算机而言,访问权是公平的。

令牌在工作中有“闲”和“忙”两种状态。“闲”表示令牌没有被占用,即网中没有计算机在传送信息;“忙”表示令牌已被占用,即网中有信息正在传送。希望传送数据的计算机必须首先检测到“闲”令牌,将它置为“忙”的状态,然后在该令牌后面传送数据。当所传数据被目的节点计算机接收后,数据被从网中除去,令牌被重新置为“闲”。令牌环网的缺点是需要维护令牌,一旦失去令牌就无法工作,需要选择专门的节点监视和管理令牌。

令牌环网的基本工作原理
  谁有令牌谁就有传输权限。如果环上的某个工作站收到令牌并且有信息发送,只不过由于使用所谓多站接入单元的设备,可以实现星形的布线。这样一个设备具有一定智能,网络中没有令牌。

信息帧沿着环传输直到它到达目的地,目的地创建一个副本以便进一步处理。

与以太网 CSMA/,使令牌能畅通。IEEE 802,这意味着任意终端站能够传输之前可以计算出最大等待时间。该特征结合另一些可靠性特征,使得令牌环网络适用于需要能够预测延迟的应用程序以及需要可靠的网络操作的情况。

令牌环网络是上世纪80年代中期由IBM开发出,这就意味着其它工作站想传输数据就必须等待。因此令牌环网络中不会发生传输冲突.5标准是主要基于IBM的令牌环网络的,但是也有一些细微的差别。

令牌环网是一种以环形网络拓扑结构为基础发展起来的局域网。虽然它在物理组成上也可以是星型结构连接,但在逻辑上仍然以环的方式进行工作,它就改变令牌中的一位(该操作将令牌变成一个帧开始序列);CD 网络不同,被所有IBM生产的计算机支持。令牌环可以桥接器或 router 连接其他网路。令牌环网络在实际应用中确确实实是“环”形网络,添加想传输的信息,然后将整个信息发往环中的下一工作站。当这个信息帧在环上传输时,会将不用的端口环接起来,很长一段时间是IBM的网络标准。信息帧继续沿着环传输直到到达发送站时便可以被删除。发送站可以通过检验返回帧以查看帧是否被接收站收到并且复制,令牌传递网络具有确定性令牌环上传输的小的数据(帧)叫为令牌

令牌环网是一种以环形网络拓扑结构为基础发展起来的局域网。虽然它在物理组成上也可以是星型结构连接,但在逻辑上仍然以环的方式进行工作。其通信传输介质可以是无屏蔽双绞线、屏蔽双绞线和光纤等。

令牌环网的媒体接入控制机制采用的是分布式控制模式的循环方法。在令牌环网中有一个令牌(Token)沿着环形总线在入网节点计算机间依次传递,令牌实际上是一个特殊格式的帧,本身并不包含信息,仅控制信道的使用,确保在同一时刻只有一个节点能够独占信道。当环上节点都空闲时,令牌绕环行进。节点计算机只有取得令牌后才能发送数据帧,因此不会发生碰撞。由于令牌在网环上是按顺序依次传递的,因此对所有入网计算机而言,访问权是公平的。

令牌在工作中有“闲”和“忙”两种状态。“闲”表示令牌没有被占用,即网中没有计算机在传送信息;“忙”表示令牌已被占用,即网中有信息正在传送。希望传送数据的计算机必须首先检测到“闲”令牌,将它置为“忙”的状态,然后在该令牌后面传送数据。当所传数据被目的节点计算机接收后,数据被从网中除去,令牌被重新置为“闲”。令牌环网的缺点是需要维护令牌,一旦失去令牌就无法工作,需要选择专门的节点监视和管理令牌。

它是一个环路,在环路有好象现实中的一个指令的,有且只有一个指令的,大家都是在等那个指令,这样的话就不存在冲突的问题了。

令牌环网是一种以环形网络拓扑结构为基础发展起来的局域网。虽然它在物理组成上也可以是星型结构连接,但在逻辑上仍然以环的方式进行工作。其通信传输介质可以是无屏蔽双绞线、屏蔽双绞线和光纤等。

令牌环网的媒体接入控制机制采用的是分布式控制模式的循环方法。在令牌环网中有一个令牌(Token)沿着环形总线在入网节点计算机间依次传递,令牌实际上是一个特殊格式的帧,本身并不包含信息,仅控制信道的使用,确保在同一时刻只有一个节点能够独占信道。当环上节点都空闲时,令牌绕环行进。节点计算机只有取得令牌后才能发送数据帧,因此不会发生碰撞。由于令牌在网环上是按顺序依次传递的,因此对所有入网计算机而言,访问权是公平的。

令牌在工作中有“闲”和“忙”两种状态。“闲”表示令牌没有被占用,即网中没有计算机在传送信息;“忙”表示令牌已被占用,即网中有信息正在传送。希望传送数据的计算机必须首先检测到“闲”令牌,将它置为“忙”的状态,然后在该令牌后面传送数据。当所传数据被目的节点计算机接收后,数据被从网中除去,令牌被重新置为“闲”。令牌环网的缺点是需要维护令牌,一旦失去令牌就无法工作,需要选择专门的节点监视和管理令牌。

通俗的说就是:它是一个环路。。。在环路有好象现实中的一个指令的。。有且只有一个指令的。。。大家都是在等那个指令。。这样的话就不存在冲突的问题了。

简单来说就是它是一个环路。。。在环路有好象现实中的一个指令的。。有且只有一个指令的。。。大家都是在等那个指令。。这样的话就不存在冲突的问题了。

令牌环网Token Ring协议
  1、令牌环网工作过程

令牌环Token Ring协议是环型网中最普遍采用的介质访问控制,它在环中加入一特殊的MAC控制帧,即令牌帧,用于控制结点有序访问介质。其工作过程如下:

环初始化后,令牌总是沿着物理环单向逐站传输。

如果结点A有数据要发送,它必须等待空闲令牌到达本站,当获得空闲令牌后,它将令牌标志位由“闲”置为“忙”,并构造成数据帧进行传输。

数据帧在环上做广播传输,其他结点可依次接收到数据帧,但只有目的地址相匹配的结点才复制。

数据帧遍历环后,回到结点A,由A回收数据帧,并将令牌状态改为空闲,然后将空闲令牌传送到下一结点。

每个结点都有一个令牌持有计时器THT (Token Holding Timer),当发送结点数据帧后,THT开始计时。当数据帧在环上循环一周返回到发送结点后,如果THT未超时,该结点可继续发送数据;如果THT超时,该结点即使有数据要传送,也必须向下游结点发送令牌帧,要传送的数据必须等到再次获得令牌帧才能发送。THT反映了网络负载状况,网络负载越重,各个结点在THT内所发送的数据帧越少。通过THT可以控制各个结点占有介质的时间长度,并且各个结点可以通过THT测算出需要等待多长时间才能获得令牌帧访问介质。

2、令牌环网帧格式

令牌环存在两种格式的帧,一种是令牌帧,一种是信息帧。

3、令牌环的维护

令牌丢失和数据帧无法撤消,是环网上最严重的两种差错,可以通过在环路上指定一个站点作为主动令牌管理站,以此来解决这些问题。主动令牌管理站通过一种超时机制来检测令牌丢失的情况,该超时值比最长的帧为完全遍历环路所需的时间还要长一些。如果在该时段内没有检测到令牌,便认为令牌已经丢失,管理站将清除环路上的数据碎片,并发出一个令牌。为了检测到一个持续循环的数据帧,管理站在经过的任何一个数据帧上置其监控位为1,如果管理站检测到一个经过的数据帧的监控拉的已经置为1,便知道有某个站未能清除自己发出的数据帧,管理站将清除环路的残余数据,并发出一个令牌。

Token Ring协议的特点是在轻载时,由于一个工作站在发送前必须等待空令牌到来,故效率很低;在重载时,各站访问机会均等,效率较高;访问方式具有可调整性和确定性,各站既具有同等的介质访问权,也可以有优先级操作和带宽保护;主要缺点是有较复杂的令牌维护要求。

令牌环网和以太网的区别
  以太网是这样通信的,每台电脑位于同一个主干中都可以向主干线路中发信息串。假如a吧,它先监听主干线路上有没有人在发信息,如果有它就等一会儿,在它发现没有人发言后它将发言,但这时有可能另一台电脑也和它同时发言(想象一下在课堂上两个学生向老师同时提问),这样它们会同时停止发言,并在等待了一个随机时间后继续发言,当然它们的随机时间是不同的,并且在再次发言前仍需监听主干上是否有其它主机在发言。其它的电脑读取数据包,检查mac地址和ip地址乃至端口号看是不是发给自已的,如果不是便丢弃。它的mac 算法是csma/cd算法。

令牌环网的结构是组成一个环形,环形的一圈是主机,主机中存在一个令牌,由一号机向下传,每个主机只有在自已有令牌时才能向主线路中发数据。

为什么令牌环网应用的不如以太网多?
  我觉得令牌环网最大的缺点是需要维护令牌,一旦失去令牌就无法工作,需要选择专门的节点监视和管理令牌。而现在的PC机之间都是对等,每建一个局域网都需要选择专门的节点来监视和管理,这是无法忍受的。

<think>好的,用户想了解C++中的内存布局及分布情况。首先,我需要回忆一下C++内存管理的基础知识。C++程序的内存通常分为几个主要区域:栈、堆、全局/静态存储区、常量区和代码区。每个区域有不同的用途和管理方式。 用户提供的引用资料里有几个关键点需要注意。引用[1]提到了函数调用栈的分布,这对于理解栈内存很重要。栈用于存储局部变量、函数参数和返回地址,由编译器自动管理。引用[2]讨论了动态内存分配,如malloc、calloc、realloc和free,以及C++中的new/delete操作符,这涉及堆内存的管理。堆是由程序员手动分配和释放的,容易产生内存泄漏等问题。 接下来,引用[3]和[4]涉及类的内存布局,特别是继承、虚函数和虚继承的情况。这部分比较复杂,需要详细解释。普通类的内存布局包括成员变量按照声明顺序排列,而虚函数的存在会引入虚表指针(vptr),指向虚函数表(vtable)。对于继承,派生类会包含基类的成员,多继承时会有多个基类子对象,可能导致内存冗余。虚继承解决了菱形继承的问题,通过共享基类实例来避免重复,但会增加虚基类指针的开销。 用户可能还需要了解各个内存区域的特点,比如栈的高效但空间有限,堆的灵活但管理复杂,全局/静态区的生命周期等。此外,内存对齐也是一个重要概念,影响数据存取效率和内存使用。 在组织回答时,应该分点说明各个内存区域,再深入到类布局和继承情况。需要结合引用中的例子,如函数调用栈、动态内存函数的使用,以及类的内存排布示例。同时,注意使用中文,并按照系统指令正确使用LaTeX格式,比如变量用$符号包裹,独立公式用$$。 可能还需要生成相关问题,比如内存泄漏的排查、虚函数实现机制、内存对齐的影响等。这些问题可以帮助用户进一步深入学习相关主题。 最后,确保引用标识正确添加到对应的内容后面,比如函数调用栈部分引用[^1],动态内存部分引用[^2],类内存布局引用[^3][^4]。保持回答结构清晰,逐步引导用户理解C++内存布局的各个方面。</think>### C++ 内存布局及分布详解 C++ 程序的内存分布主要分为以下几个区域,每个区域有特定的用途和管理方式: --- #### 一、内存五大分区 1. **栈(Stack)** - **特点**:由编译器自动管理,存放函数局部变量、函数参数、返回地址等。 - **生命周期**:随函数调用创建,函数返回时自动释放。 - **示例**: ```cpp void func() { int a = 10; // a存储在栈中 } ``` 2. **堆(Heap)** - **特点**:由程序员手动管理(通过 `malloc`/`new` 分配,`free`/`delete` 释放),空间较大但可能产生内存泄漏。 - **示例**: ```cpp int* p = new int(20); // p指向堆内存 delete p; // 需显式释放 ``` 3. **全局/静态存储区** - **全局变量区**:存放全局变量和静态变量(`static`),程序启动时初始化,结束时释放。 - **常量区**:存放字符串常量和其他常量。 - **示例**: ```cpp int globalVar = 30; // 全局变量 static int staticVar = 40; // 静态变量 ``` 4. **代码区(Text Segment)** - **特点**:存放可执行代码(如函数体)和只读数据(如字符串常量)。 --- #### 二、类的内存布局 1. **普通类(无继承、无虚函数)** - 成员变量按声明顺序连续排列,无额外开销。 - **示例**: ```cpp class A { int a; // 4字节 char b; // 1字节(内存对齐后占4字节) }; // 总大小:8字节 ``` [^3] 2. **含虚函数的类** - 编译器自动生成虚函数表(vtable),对象头部添加虚表指针(vptr,占4/8字节)。 - **示例**: ```cpp class B { public: virtual void func() {} // vptr占用4/8字节 int c; // 4字节 }; // 总大小:8(vptr)+4(int)=12字节(考虑对齐) ``` 3. **继承与多态** - **单继承**:派生类包含基类成员变量,虚函数表扩展基类vtable。 - **多继承**:派生类包含多个基类子对象,可能导致冗余(菱形继承问题)。 - **虚继承**:通过虚基类指针共享基类实例,解决菱形继承问题。 ```cpp class D : virtual public Base { // 虚继承 int d; }; // 含虚基类指针(4字节) ``` [^4] --- #### 三、动态内存管理 - **`malloc`/`free`**:C语言风格,按字节分配。 - **`new`/`delete`**:C++风格,调用构造函数/析构函数。 - **示例**: ```cpp int* arr = new int[10]; // 堆上分配数组 delete[] arr; // 需匹配释放 ``` [^2] --- #### 四、内存对齐规则 - 数据成员的偏移量需为其大小的整数倍。 - **目的**:提升CPU访问效率。 - **示例**: ```cpp struct S { char a; // 偏移0,占1字节 int b; // 偏移4(跳过3字节对齐),占4字节 }; // 总大小:8字节 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值