网络架构分析(什么是网络拓扑结构,有什么优缺点)

:暂无数据 2026-04-03 21:20:01 0
在深入了解网络架构分析的路上,什么是网络拓扑结构,有什么优缺点就像一道绕不开的坎。别担心,本篇攻略将助你轻松跨越。

本文目录

什么是网络拓扑结构,有什么优缺点

网络拓扑结构是指计算机网络中各个节点之间的连接方式。它决定了数据在网络中的传输方式,对网络的性能、可靠性和扩展性有着重要影响。常见的网络拓扑结构主要有星型结构、总线型结构、环形结构和网状结构等。
- 总线型拓扑结构:其特点有一条双向通路,便于进行广播式传送信息,属于分布式控制,无需中央处理器,故结构简单;结点的增、删和位置的变动较容易,变动中不影响网络的正常运行,系统扩充性能好;结点的接口通常采用无源线路,系统可靠性高;设备少、价格低、安装使用方便。但缺点是由于电气信息延迟时间不确定,故障隔离和检测困难。
- 星型拓扑结构:在星型结构中,使用中央交换单元以放射状连接到网中的各个结点。中央单元采用电路交换方式以建立所希望通信的两结点间专用的路径。这种结构的优点是维护管理容易,重新配置灵活,故障隔离和检测容易;网络延迟时间短。但缺点是电缆长度和安装工作量可观;中央节点负担较重,形成瓶颈;各站点的分布处理能力较低。
- 环形拓扑结构:各结点通过中继器连接到一个闭合环路上,环中的数据沿着一个方向传输,由目的结点接收。优点是数据传输安全,消除了端用户通信时对中心系统的依赖性;速度快。

什么是分层网络体系结构分层的含义是什么

指的是将系统的组件分隔到不同的层中,每一层中的组件应保持内聚性,并且应大致在同一抽象级别;每一层都应与它下面的各层保持松散耦合。

分层架构的优点

1、开发人员的专业分工,专注理解某一层。由于某一层仅仅调用其相邻下一层所提供的程序接口,只需要本层的接口和相邻下一层的接口定义清晰完整,开发人员在开发某一层时就可以像关注集中于这一层所用的功能和技术。

2、可以很容易用新的实现来替换原有层次的实现。 只要前后提供的服务(接口)相同,即可替换。系统开发过程中,功能需求不断变化,我们可以替换现有的层次以满足新的需求变化。

3、降低了系统间的依赖。 比如业务逻辑层中的业务发生变化, 其他两层即表现层以及数据访问层程序也不需要变化。这大大降低了系统各层之间的依赖。

4、有利于复用。充分利用现有的功能程序组件,将已经辨识的具有相对独立功能的层应用于新系统的开发,保证新系统开发的过程中,能够将重点集中于辨识和实现应用系统特有的业务功能,最终缩短系统开发周期,提高系统的质量。

分层思想

分层是基于面向对象上的,是更高层次上的设计理念。在软件开发技术的发展过程中,出现了很多优秀的思想与模式。这些思想和模式凝结了无数程序设计人员的实践经验和智慧,是软件开发领域的精华。这其中有很多思想对分层架构设计有着重要的指导作用。

分层架构的弊端

1、级联修改问题。一些复杂的业务中,由于业务流程发生变化,为了这个变化所有层都需要修改。

2、性能问题。本来是直接简单的操作,需要在整个系统中层层传递,势必造成性能的下降,同时也加大的开发的复杂度。

从上面的分析可以看出, 分层架构设计有许多优点同样存在不足,在实际使用过程中,我们应该权衡利弊关系,选择一种符合实际项目的最佳方案。

简述网络的几种主要拓扑结构,并分析其优缺点

计算机网络的拓扑结构主要有:总线型拓扑、星型拓扑、环型拓扑、树型拓扑和混合型拓扑。

1、星型网路拓扑结构:

优点:控制简单;故障诊断和隔离容易;方便服务;

缺点:电缆长度和安装工作量可观;中央节点负担较重,形成瓶颈;各站点的分布处理能力较低。

2、总线型网络拓扑结构:

优点:总线结构所需电缆数量少;结构简单又是无源工作,有较高的可靠性;易于扩充,增减用户方便。

缺点:传输距离有限,通信范围受到限制;故障诊断和隔离困难;分布式协议不保证信息及时传送,不具实时功能。站点必须是智能的,要有媒体访问控制功能,增加站点软件和硬件的开销。

网络拓扑结构形成过程中

首先假定某平面中布置着许多个节点,同时存在着一个均匀走动的离散的时钟,通过这个时钟将每个节点进入网络的时间记录下来,记录下来的时间都是随机分布的。每一个节点在进入网络时刻的前后所要采取的行为就是接收信息或者消息和发送对已收信息的响应。这些收发信息中设置了优先度和传达范围,它们将对信息的辐射范围产生着最为直接的影响。

以上内容参考:百度百科-拓扑结构

几种经典的网络服务器架构模型的分析与比较

相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。 关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于源代码的陈列与分析,而侧重模型的介绍和比较。使用 libev 事件驱动库的服务器模型将给出实现代码。 本文涉及到线程 / 时间图例,只为表明线程在各个 IO 上确实存在阻塞时延,但并不保证时延比例的正确性和 IO 执行先后的正确性;另外,本文所提及到的接口也只是笔者熟悉的 Unix/Linux 接口,并未推荐 Windows 接口,读者可以自行查阅对应的 Windows 接口。阻塞型的网络编程接口几乎所有的程序员第一次接触到的网络编程都是从 listen()、send()、recv()等接口开始的。使用这些接口可以很方便的构建服务器 /客户机的模型。我们假设希望建立一个简单的服务器程序,实现向单个客户机提供类似于“一问一答”的内容服务。图1. 简单的一问一答的服务器 /客户机模型我们注意到,大部分的 socket接口都是阻塞型的。所谓阻塞型接口是指系统调用(一般是 IO接口)不返回调用结果并让当前线程一直阻塞,只有当该系统调用获得结果或者超时出错时才返回。实际上,除非特别指定,几乎所有的 IO接口 (包括 socket 接口 )都是阻塞型的。这给网络编程带来了一个很大的问题,如在调用 send()的同时,线程将被阻塞,在此期间,线程将无法执行任何运算或响应任何的网络请求。这给多客户机、多业务逻辑的网络编程带来了挑战。这时,很多程序员可能会选择多线程的方式来解决这个问题。多线程服务器程序 应对多客户机的网络应用,最简单的解决方式是在服务器端使用多线程(或多进程)。多线程(或多进程)的目的是让每个连接都拥有独立的线程(或进程),这样任何一个连接的阻塞都不会影响其他的连接。 具体使用多进程还是多线程,并没有一个特定的模式。传统意义上,进程的开销要远远大于线程,所以,如果需要同时为较多的客户机提供服务,则不推荐使用多进程;如果单个服务执行体需要消耗较多的 CPU 资源,譬如需要进行大规模或长时间的数据运算或文件访问,则进程较为安全。通常,使用 pthread_create () 创建新线程,fork() 创建新进程。 我们假设对上述的服务器 / 客户机模型,提出更高的要求,即让服务器同时为多个客户机提供一问一答的服务。于是有了如下的模型。图2. 多线程服务器模型 在上述的线程 / 时间图例中,主线程持续等待客户端的连接请求,如果有连接,则创建新线程,并在新线程中提供为前例同样的问答服务。 很多初学者可能不明白为何一个 socket 可以 accept 多次。实际上,socket 的设计者可能特意为多客户机的情况留下了伏笔,让 accept() 能够返回一个新的 socket。下面是 accept 接口的原型: int accept(int s, struct sockaddr *addr, socklen_t *addrlen); 输入参数 s 是从 socket(),bind() 和 listen() 中沿用下来的 socket 句柄值。执行完 bind() 和 listen() 后,操作系统已经开始在指定的端口处**所有的连接请求,如果有请求,则将该连接请求加入请求队列。调用 accept() 接口正是从 socket s 的请求队列抽取第一个连接信息,创建一个与 s 同类的新的 socket 返回句柄。新的 socket 句柄即是后续 read() 和 recv() 的输入参数。如果请求队列当前没有请求,则 accept() 将进入阻塞状态直到有请求进入队列。 上述多线程的服务器模型似乎完美的解决了为多个客户机提供问答服务的要求,但其实并不尽然。如果要同时响应成百上千路的连接请求,则无论多线程还是多进程都会严重占据系统资源,降低系统对外界响应效率,而线程与进程本身也更容易进入假死状态。 很多程序员可能会考虑使用“线程池”或“连接池”。“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲的线程重新承担新的执行任务。“连接池”维持连接的缓存池,尽量重用已有的连接、减少创建和关闭连接的频率。这两种技术都可以很好的降低系统开销,都被广泛应用很多大型系统,如 websphere、tomcat 和各种数据库等。 但是,“线程池”和“连接池”技术也只是在一定程度上缓解了频繁调用 IO 接口带来的资源占用。而且,所谓“池”始终有其上限,当请求大大超过上限时,“池”构成的系统对外界的响应并不比没有池的时候效果好多少。所以使用“池”必须考虑其面临的响应规模,并根据响应规模调整“池”的大小。 对应上例中的所面临的可能同时出现的上千甚至上万次的客户端请求,“线程池”或“连接池”或许可以缓解部分压力,但是不能解决所有问题。 总之,多线程模型可以方便高效的解决小规模的服务请求,但面对大规模的服务请求,多线程模型并不是最佳方案。下一章我们将讨论用非阻塞接口来尝试解决这个问题。使用select()接口的基于事件驱动的服务器模型 大部分 Unix/Linux 都支持 select 函数,该函数用于探测多个文件句柄的状态变化。下面给出 select 接口的原型: FD_ZERO(int fd, fd_set* fds) FD_SET(int fd, fd_set* fds) FD_ISSET(int fd, fd_set* fds) FD_CLR(int fd, fd_set* fds) int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) 这里,fd_set 类型可以简单的理解为按 bit 位标记句柄的队列,例如要在某 fd_set 中标记一个值为 16 的句柄,则该 fd_set 的第 16 个 bit 位被标记为 1。具体的置位、验证可使用 FD_SET、FD_ISSET 等宏实现。在 select() 函数中,readfds、writefds 和 exceptfds 同时作为输入参数和输出参数。如果输入的 readfds 标记了 16 号句柄,则 select() 将检测 16 号句柄是否可读。在 select() 返回后,可以通过检查 readfds 有否标记 16 号句柄,来判断该“可读”事件是否发生。另外,用户可以设置 timeout 时间。 下面将重新模拟上例中从多个客户端接收数据的模型。图4.使用select()的接收数据模型 上述模型只是描述了使用 select() 接口同时从多个客户端接收数据的过程;由于 select() 接口可以同时对多个句柄进行读状态、写状态和错误状态的探测,所以可以很容易构建为多个客户端提供独立问答服务的服务器系统。图5.使用select()接口的基于事件驱动的服务器模型 这里需要指出的是,客户端的一个 connect() 操作,将在服务器端激发一个“可读事件”,所以 select() 也能探测来自客户端的 connect() 行为。 上述模型中,最关键的地方是如何动态维护 select() 的三个参数 readfds、writefds 和 exceptfds。作为输入参数,readfds 应该标记所有的需要探测的“可读事件”的句柄,其中永远包括那个探测 connect() 的那个“母”句柄;同时,writefds 和 exceptfds 应该标记所有需要探测的“可写事件”和“错误事件”的句柄 ( 使用 FD_SET() 标记 )。 作为输出参数,readfds、writefds 和 exceptfds 中的保存了 select() 捕捉到的所有事件的句柄值。程序员需要检查的所有的标记位 ( 使用 FD_ISSET() 检查 ),以确定到底哪些句柄发生了事件。 上述模型主要模拟的是“一问一答”的服务流程,所以,如果 select() 发现某句柄捕捉到了“可读事件”,服务器程序应及时做 recv() 操作,并根据接收到的数据准备好待发送数据,并将对应的句柄值加入 writefds,准备下一次的“可写事件”的 select() 探测。同样,如果 select() 发现某句柄捕捉到“可写事件”,则程序应及时做 send() 操作,并准备好下一次的“可读事件”探测准备。下图描述的是上述模型中的一个执行周期。图6. 一个执行周期 这种模型的特征在于每一个执行周期都会探测一次或一组事件,一个特定的事件会触发某个特定的响应。我们可以将这种模型归类为“事件驱动模型”。 相比其他模型,使用 select() 的事件驱动模型只用单线程(进程)执行,占用资源少,不消耗太多 CPU,同时能够为多客户端提供服务。如果试图建立一个简单的事件驱动的服务器程序,这个模型有一定的参考价值。 但这个模型依旧有着很多问题。 首先,select() 接口并不是实现“事件驱动”的最好选择。因为当需要探测的句柄值较大时,select() 接口本身需要消耗大量时间去轮询各个句柄。很多操作系统提供了更为高效的接口,如 linux 提供了 epoll,BSD 提供了 kqueue,Solaris 提供了 /dev/poll …。如果需要实现更高效的服务器程序,类似 epoll 这样的接口更被推荐。遗憾的是不同的操作系统特供的 epoll 接口有很大差异,所以使用类似于 epoll 的接口实现具有较好跨平台能力的服务器会比较困难。 其次,该模型将事件探测和事件响应夹杂在一起,一旦事件响应的执行体庞大,则对整个模型是灾难性的。如下例,庞大的执行体 1 的将直接导致响应事件 2 的执行体迟迟得不到执行,并在很大程度上降低了事件探测的及时性。图7. 庞大的执行体对使用select()的事件驱动模型的影响 幸运的是,有很多高效的事件驱动库可以屏蔽上述的困难,常见的事件驱动库有 libevent 库,还有作为 libevent 替代者的 libev 库。这些库会根据操作系统的特点选择最合适的事件探测接口,并且加入了信号 (signal) 等技术以支持异步响应,这使得这些库成为构建事件驱动模型的不二选择。下章将介绍如何使用 libev 库替换 select 或 epoll 接口,实现高效稳定的服务器模型。使用事件驱动库libev的服务器模型 Libev 是一种高性能事件循环 / 事件驱动库。作为 libevent 的替代作品,其第一个版本发布与 2007 年 11 月。Libev 的设计者声称 libev 拥有更快的速度,更小的体积,更多功能等优势,这些优势在很多测评中得到了证明。正因为其良好的性能,很多系统开始使用 libev 库。本章将介绍如何使用 Libev 实现提供问答服务的服务器。 (事实上,现存的事件循环 / 事件驱动库有很多,作者也无意推荐读者一定使用 libev 库,而只是为了说明事件驱动模型给网络服务器编程带来的便利和好处。大部分的事件驱动库都有着与 libev 库相类似的接口,只要明白大致的原理,即可灵活挑选合适的库。) 与前章的模型类似,libev 同样需要循环探测事件是否产生。Libev 的循环体用 ev_loop 结构来表达,并用 ev_loop( ) 来启动。 void ev_loop( ev_loop* loop, int flags ) Libev 支持八种事件类型,其中包括 IO 事件。一个 IO 事件用 ev_io 来表征,并用 ev_io_init() 函数来初始化: void ev_io_init(ev_io *io, callback, int fd, int events) 初始化内容包括回调函数 callback,被探测的句柄 fd 和需要探测的事件,EV_READ 表“可读事件”,EV_WRITE 表“可写事件”。 现在,用户需要做的仅仅是在合适的时候,将某些 ev_io 从 ev_loop 加入或剔除。一旦加入,下个循环即会检查 ev_io 所指定的事件有否发生;如果该事件被探测到,则 ev_loop 会自动执行 ev_io 的回调函数 callback();如果 ev_io 被注销,则不再检测对应事件。 无论某 ev_loop 启动与否,都可以对其添加或删除一个或多个 ev_io,添加删除的接口是 ev_io_start() 和 ev_io_stop()。 void ev_io_start( ev_loop *loop, ev_io* io ) void ev_io_stop( EV_A_* ) 由此,我们可以容易得出如下的“一问一答”的服务器模型。由于没有考虑服务器端主动终止连接机制,所以各个连接可以维持任意时间,客户端可以自由选择退出时机。图8. 使用libev库的服务器模型 上述模型可以接受任意多个连接,且为各个连接提供完全独立的问答服务。借助 libev 提供的事件循环 / 事件驱动接口,上述模型有机会具备其他模型不能提供的高效率、低资源占用、稳定性好和编写简单等特点。 由于传统的 web 服务器,ftp 服务器及其他网络应用程序都具有“一问一答”的通讯逻辑,所以上述使用 libev 库的“一问一答”模型对构建类似的服务器程序具有参考价值;另外,对于需要实现远程监视或远程遥控的应用程序,上述模型同样提供了一个可行的实现方案。 总结 本文围绕如何构建一个提供“一问一答”的服务器程序,先后讨论了用阻塞型的 socket 接口实现的模型,使用多线程的模型,使用 select() 接口的基于事件驱动的服务器模型,直到使用 libev 事件驱动库的服务器模型。文章对各种模型的优缺点都做了比较,从比较中得出结论,即使用“事件驱动模型”可以的实现更为高效稳定的服务器程序。文中描述的多种模型可以为读者的网络编程提供参考价值。

综上所述,网络架构分析是一个涉及多方面知识的领域,其中什么是网络拓扑结构,有什么优缺点是一个基础且重要的概念。理解两者有助于构建完整的知识框架。
本文编辑:admin

更多文章:


德州网站推广:小型企业如何快速出效果

德州网站推广:小型企业如何快速出效果

你有没有发现,现在做德州网站推广,好多小型企业都感觉挺迷茫的?说实话,我之前也是这样,花了不少冤枉钱。但后来慢慢摸索,总算找到点门道。今天就来跟你唠唠,德州小型企业做网站推广,到底该咋整。 小型企业网站推广:为啥要搞? 做网站推广,说白了就

2026年4月4日 00:30

广告投放形式有哪些(如何广告投放)

广告投放形式有哪些(如何广告投放)

当大家谈论广告投放形式有哪些时,总免不了提及如何广告投放。它们之间究竟有何玄机?读完本文你便了然于胸。本文目录如何广告投放广告投放类型广告投放有哪几种模式广告投放形式有哪些如何广告投放广告投放的方式包括:利用报纸;利用广播;利用街道、广场;

2026年4月4日 00:30

潍坊网站优化:小型网站如何有效提升排名

潍坊网站优化:小型网站如何有效提升排名

小型网站优化,到底该从哪儿开始? 优化网站,就像给自家店铺装修一样,得让人一进门就觉得舒服、有用。对于小型网站来说,咱们资源可能没大公司那么多,但方法用对,照样能玩得转。 1. 关键词研究要到位 选对关键词,就像是找对门牌号,别人才能找到你

2026年4月4日 00:20

中国大陆禁止访问app(苹果商店显示在国家不支持app怎么办)

中国大陆禁止访问app(苹果商店显示在国家不支持app怎么办)

您是否正在为搞不清中国大陆禁止访问app和苹果商店显示在国家不支持app怎么办的关系而烦恼?恭喜,这篇干货就是您的“及时雨”。本文目录苹果商店显示在国家不支持app怎么办whatsapp国内能用吗60款APP被工信部通报下架,它们侵犯了用户

2026年4月4日 00:20

广州海珠区核酸检测点(南海金融公园便民核酸采样点(海珠区南洲街核酸检测点))

广州海珠区核酸检测点(南海金融公园便民核酸采样点(海珠区南洲街核酸检测点))

最新数据显示,关注广州海珠区核酸检测点的人中,超过70%都对南海金融公园便民核酸采样点(海珠区南洲街核酸检测点)抱有浓厚兴趣。本文将满足这一核心需求。本文目录南海金融公园便民核酸采样点(海珠区南洲街核酸检测点)广州哪里有24小时核酸检测,广

2026年4月4日 00:10

成都小程序开发价格明细,成都小程序开发价格明细怎么算?

成都小程序开发价格明细,成都小程序开发价格明细怎么算?

你有没有想过,为啥成都小程序开发价格五花八门?其实啊,这背后门道多着呢!别急,今天咱就好好聊聊这个话题,希望能帮到你。 小程序开发价格受啥影响? 说实话,小程序开发价格不是一成不变的,它受好几个因素影响。咱们得先搞明白,才能更好地做预算。

2026年4月4日 00:00

毛坯房110平装修预算(毛坯房110平装修预算)

毛坯房110平装修预算(毛坯房110平装修预算)

本篇内容旨在成为您理解毛坯房110平装修预算的实用手册,其中毛坯房110平装修预算将是我们要重点打磨的章节。本文目录毛坯房110平装修预算121平米毛坯房装修预算110平米毛坯房装修多少钱毛坯房100平装修预算要多少毛坯房简单装修报价预算与

2026年4月4日 00:00

重庆建网站公司,如何为外贸企业选择合适的网站建设伙伴?

重庆建网站公司,如何为外贸企业选择合适的网站建设伙伴?

你有没有想过,为什么有些外贸企业的网站能在国际市场上脱颖而出,而有些却显得平平无奇?其实,关键在于找对了合适的网站建设公司。今天,我们就来聊聊,在重庆,如何为外贸企业挑选一家靠谱的网站建设公司。 一、为什么外贸网站建设需要特别关注? 外贸网

2026年4月3日 23:50

产品彩页设计(广告宣传彩页怎么设计)

产品彩页设计(广告宣传彩页怎么设计)

今天给各位分享广告宣传彩页怎么设计的知识,其中也会对广告宣传彩页怎么设计进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录广告宣传彩页怎么设计宣传彩页怎么设计彩页设计海报-如何才能设计出好的广告彩页如何设计产品宣

2026年4月3日 23:50

室内设计网络课程(室内设计网上课程)

室内设计网络课程(室内设计网上课程)

你是否好奇,为什么人人都在谈室内设计网络课程?它和室内设计网上课程之间究竟存在着怎样微妙的联系?答案就在下文。本文目录室内设计网上课程学室内设计都学习些什么课程呢天琥教育学习室内设计有什么课程学室内设计需要学哪些课程室内设计要学哪些课程室内

2026年4月3日 23:40

最近更新

热门文章

东莞网页设计制作流程是怎样的?
2026-03-31 19:40:17 浏览:4
标签列表