1、前言

即时通讯网整理了大量的网络编程类基础文章和资料,包括《TCP/IP协议 卷1》、《[通俗易懂]深入理解TCP协议》系列、《网络编程懒人入门》系列、《不为人知的网络编程》系列、《P2P技术详解》系列、《高性能网络编程》系列、甚至还有图文并貌+实战代码的《NIO框架入门》等,目的是帮助即时通讯类应用的开发者,至少要掌握网络编程最基本的原理,所谓知其然更要知其所以然。尤其现在移动网络大行其道的时代,在网络环境如此复杂的情况下,能写好一套技术精湛、用户体验等俱佳的IM或消息推送系统,显然不是随便用用Netty、MINA、AFNetwoking、okhttp等服务端和客户端框架就能搞定的事。总之,即时通讯技术归根结底还是网络编程技术的应用,只有更深入地了解了网络编程及其相关知识,才能更好地写出优质的应用。

实际上计算机网络编程或者网络通信技术最基本的物理载体,就是集线器、交换机、路由器这些基本设备,了解这些基本设备的工作原理,对于程序员来说是基本素养,总不能什么事都甩锅给网管,何况中小公司根本就没有条件配备专职网管,还是得程序员亲自动手。但技多不压身,何况这些设备和技术总比那些毫无技术含量的插删改查代码撸起来有意思。话不多说,回归正题吧。

本文旨在简单地说明集线器、交换机与路由器的区别,因而忽略了很多细节,三者实际的发展过程和工作原理并非文中所写的这么简单。如果你看完本文能大概了解到三者的异同,本文的目的就达到了。至于更具体的技术问题,欢迎在留言中探讨。

另外,如果您正打算从零开发移动端IM,则建议您从《新手入门一篇就够:从零开发移动端IM》一文开始,此文按照IM开发所需的知识和技能要求,拟定了详尽的学习提纲和建议等。

2、系列文章

本文是系列文章中的第6篇,本系列文章的大纲如下:

  • 《网络编程懒人入门(二):快速理解网络通信协议(下篇)》
  • 《网络编程懒人入门(三):快速理解TCP协议一篇就够》

3、帝国时代

我相信我们都玩过一款特别火的游戏:帝国时代。小时候想要玩帝国时代,需要到软件城购买盗版光盘安装,大概3块钱一张左右的样子,当时已经觉得很便宜了,谁想到现在有了网络之后是免费。

小A是一个帝国时代大神,他打通了游戏的所有关卡,可以一个人单挑8个疯狂的电脑玩家。渐渐地他觉得无聊了,想要找小伙伴一起PK。

但是两个电脑需要互联才行,如何实现两台设备的互联呢?

小A很聪明,他发明了一个类似于USB口一样的可以传输数据的端口,他将其命名为网口。小A通过一根网线将自己的电脑与小B的网口相连,实现了两台电脑间的互连(如下图)。

4、集线器(Hub)

两个小伙伴很开心,联机玩了起来,这时被路过的小C看见了,小C也要加入进来。

但是我们知道,每台电脑只有一个网口,无法实现三台电脑的相互连接,那要要怎么办呢?

这时候小B出了一个主意:咱们再找一台计算机,给他多设计几个网口,我们每个人都连到这台计算机的网口上,不也实现咱们哥几个之间的互连了吗。

说干就干,于是他们设计出了一款微型计算机,他本身具备多个网口,专门实现多台计算机的互联作用,这个微型计算机就是集线器(HUB)。

顾名思义,集线器起到了一个将网线集结起来的作用,实现最初级的网络互通。

集线器是通过网线直接传送数据的,我们说他工作在物理层(如下图所示)。

5、交换机

有了集线器后,越来越多的小伙伴加入到游戏中,小D、小E等人都慕名而来。

然而集线器有一个问题,由于和每台设备相连,他不能分辨出具体信息是发送给谁的,只能广泛地广播出去。

例如小A本来想问小C:你吃了吗?结果小B,小D和小E等所有连接在集线器上的用户都收到了这一信息。

由于处于同一网络,小A说话时其他人不能发言,否则信息间会产生碰撞,引发错误,对这种情况,我们称为各设备处于同一冲突域内。

这样的设备用户体验极差,于是小伙伴们一起讨论改进措施。

这时聪明的小D发话了:我们给这台设备加入一个指令,让他可以根据网口名称自动寻址传输数据。

比如我把小A的网口命名为macA,将小C的命名为macC,这时如果小A想要将数据传给小C,则设备会根据网口名称macA和macC自动将资料从A的电脑传送到C的电脑中,而不让小B、小D和小E收到。

补充说明: 这里的macA, macB指的就是MAC地址,相当于一个人的身份证,独一无二。)

也就是说,这台设备解决了冲突的问题,实现了任意两台电脑间的互联,大大地提升了网络间的传输速度,我们把它叫做交换机。

由于交换机是根据网口地址传送信息,比网线直接传送多了一个步骤,我们也说交换机工作在数据链路层(如下图)。

这回小伙伴们高兴了,他们愉快地玩耍起来。

6、路由器

渐渐地,他们在当地有了名气,吸引了越来越多的小伙伴加入到他们的队伍中。有一天,一个外村的小伙突然找上门来,希望能和他们一起互联,实现跨村间的网络对战。

小A说可以呀,于是他们找了一根超长的网线将两个村落的交换机连在了一起。结果发现一件奇怪的事:两个村落间竟然不能相互通信。

怎么回事?原来那边的电脑和他们用的不是一套操作系统,这导致信息间的传送形式的不匹配。在这期间,还有其他村落的人也来找过小A,可是小A发现,每个村子之间用的操作系统都不一样。

这可咋办呐?难道以后只能各自村子玩各自的了吗?为了解决这一问题,各村的小伙伴们坐在一起组织了一场会议,最终得出了一套解决方案:采用同样的信息传送形式(像不像秦始皇统一度量衡?)。

那如何实现呢?小伙伴们规定,不同的村子间先在各自的操作系统上加上一套相同的协议。不同村落通信时,信息经协议加工成统一形式,再经由一个特殊的设备传送出去。这个设备就叫做路由器。

在这套协议中,每个机器都被赋予了一个IP地址,相当于一个门牌号一样。路由器通过IP地址寻址,我们说它工作在计算机的网络层。

这样,经由如此的一系列改装,小A终于带领村民们实现了整个乡镇的通信。随着越来越多的城里人也加入小A的协议,小A带领村民逐步实现了全市、全国乃至全世界的通信。这一套协议便是TCP/IP协议簇,互联网也便这样形成了(关于TCP/IP改变世界的故事,详见《技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)》)。

然而,即便如今全网络已遍布了全世界,在小A和村里的小伙伴对战帝国时代的时候,也仍然用着交换机。只有和外面更大的世界交流的时候才用到路由器。

其实上图只是为了帮助您更好地理解路由器,一个真实的网络拓扑中,路由器、交换机、集线器是一起分工合作的,正如下图所示:

(如上图所示:Router即路由器、Switch即交换机、Hub即集线器)

网易云信,你身边的即时通讯和音视频技术专家,了解我们,请戳网易云信官网

想要行业洞察和技术干货,请关注网易云信博客

本文转载自52im,作者:JackJiang

网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门相关推荐

  1. 网络编程懒人入门(一):快速理解网络通信协议(上篇)

    1.写在前面 论坛和群里常会有技术同行打算自已开发IM或者消息推送系统,很多时候连基本的网络编程理论(如网络协议等)都不了解,就贸然定方案.写代码,显得非常盲目且充满技术风险. 即时通讯网论坛里精心整 ...

  2. 网络编程懒人入门(七):深入浅出,全面理解HTTP协议

    转自即时通讯网:http://www.52im.net/ 本文引用了自简书作者"涤生_Woo"的文章,内容有删减,感谢原作者的分享. 1.前言 HTTP(全称超文本传输协议,英文全 ...

  3. 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?

    1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...

  4. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...

  5. 网络编程懒人入门系列目录集合

    原文链接:https://yq.aliyun.com/articles/633630 收起 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文 ...

  6. 网络编程懒人入门(十一):一文读懂什么是IPv6

    本文同时发布于"即时通讯技术圈"公众号,链接是:https://mp.weixin.qq.com/s/cS5xB2DrjF52rmz6EGVJ6A. 本文参考了公众号鲜枣课堂的&q ...

  7. 网络编程懒人入门(十二):快速读懂Http/3协议,一篇就够!

    本文中文译文由作者"ably.io"发布于公众号"高可用架构",译文原题:<深入解读HTTP3的原理及应用>.英文原题:<HTTP/3 dee ...

  8. 网络编程懒人入门(三):快速理解TCP协议一篇就够

    1.前言 本系列文章的前两篇<网络编程懒人入门(一):快速理解网络通信协议(上篇)>.<网络编程懒人入门(二):快速理解网络通信协议(下篇)>快速介绍了网络基本通信协议及理论基 ...

  9. 网络编程懒人入门(二):快速理解网络通信协议(下篇)

    1.前言 本文上篇<网络编程懒人入门(一):快速理解网络通信协议(上篇)>分析了互联网的总体构思,从下至上,每一层协议的设计思想.基于知识连贯性的考虑,建议您先看完上篇后再来阅读本文. 本 ...

最新文章

  1. 李彦宏:简单搜索永远没有广告;安全是自动驾驶第一天条
  2. 分子偶极矩大小如何判断_润滑油粘度大小该如何判断你知道吗?
  3. Linux下find命令详情
  4. boot.asm文件注释
  5. STM32F103的11个定时器详解
  6. xftp提示过期的解决方法
  7. zend studio 函数不提醒 小黄图标 小黄标
  8. java desktop和synth_java synth实例
  9. python3.8图片_python3.8.3官方中文文档[PDF][CHM][31.14MB]
  10. 【转】 嵌入式C语言编程中Inline函数的应用
  11. 终于,我读懂了所有Java集合——map篇(多线程)
  12. 三星官方确认:vivo将首发搭载Exynos 1080旗舰芯片
  13. python生成器函数_Python 编写生成器函数
  14. PCIe总线的参考时钟与同步时钟的差异
  15. 误入 GitHub 游戏区,结果意外地收获颇丰
  16. linux下shell命令之hwclock
  17. XJOI 7820 TLE
  18. 怎么区分处理器是第几代的
  19. c++ 进制转换 十六进制转八进制
  20. 数据结构与算法A实验六图论---7-9 最短路径(并查集Dijkstra)

热门文章

  1. 08年哈弗校长Faust给毕业生的演讲
  2. 往写好的html插入标签,写一个可插入自定义标签的 Textarea 组件
  3. C++ pair(对组)用法
  4. 对文本根据特殊字符进行分段代码_如何优雅地配置快应用的代码片段
  5. mysql 创建表_MySQL创建表(十一)
  6. python单例_python 单例模式
  7. 百叶窗设计原理 html5,Html5百叶窗效果的示例代码_html5教程技巧
  8. 一次ajax多次回调结果,Ajax异步的回调函数执行了多遍
  9. 信息源按加工深度划分_铝合金插铣加工切削力分析及成屑弧区划分
  10. Python 网络爬虫笔记11 -- Scrapy 实战