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

转自即时通讯网:http://www.52im.net/

本文引用了知乎网友“薛定谔不在家”的部分文字内容,感谢原作者的分享。

1、前言

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

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

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

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

 

2、系列文章

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

  • 《网络编程懒人入门(一):快速理解网络通信协议(上篇)》
  • 《网络编程懒人入门(二):快速理解网络通信协议(下篇)》
  • 《网络编程懒人入门(三):快速理解TCP协议一篇就够》
  • 《网络编程懒人入门(四):快速理解TCP和UDP的差异》
  • 《网络编程懒人入门(五):快速理解为什么说UDP有时比TCP更有优势》
  • 《网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门》(本文
  • 《网络编程懒人入门(七):深入浅出,全面理解HTTP协议》
  • 《网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接》


本站的《脑残式网络编程入门》也适合入门学习,本系列大纲如下:

  • 《脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手》
  • 《脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?》
  • 《脑残式网络编程入门(三):HTTP协议必知必会的一些知识》
  • 《脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)》


如果您觉得本系列文章过于基础,您可直接阅读《不为人知的网络编程》系列文章,该系列目录如下:

  • 《不为人知的网络编程(一):浅析TCP协议中的疑难杂症(上篇)》
  • 《不为人知的网络编程(二):浅析TCP协议中的疑难杂症(下篇)》
  • 《不为人知的网络编程(三):关闭TCP连接时为什么会TIME_WAIT、CLOSE_WAIT》
  • 《不为人知的网络编程(四):深入研究分析TCP的异常关闭》
  • 《不为人知的网络编程(五):UDP的连接性和负载均衡》
  • 《不为人知的网络编程(六):深入地理解UDP协议并用好它》


关于移动端网络特性及优化手段的总结性文章请见:

  • 《现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障》
  • 《移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”》
  • 《移动端IM开发者必读(二):史上最全移动弱网络优化方法总结》

 

3、帝国时代

我相信我们都玩过一款特别火的游戏:帝国时代。小时候想要玩帝国时代,需要到软件城购买盗版光盘安装,大概3块钱一张左右的样子,当时已经觉得很便宜了,谁想到现在有了网络之后是免费。
小A是一个帝国时代大神,他打通了游戏的所有关卡,可以一个人单挑8个疯狂的电脑玩家。渐渐地他觉得无聊了,想要找小伙伴一起PK。
但是两个电脑需要互联才行,如何实现两台设备的互联呢?
小A很聪明,他发明了一个类似于USB口一样的可以传输数据的端口,他将其命名为网口。小A通过一根网线将自己的电脑与小B的网口相连,实现了两台电脑间的互连(如下图)。
 

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

 

4、集线器(Hub)

两个小伙伴很开心,联机玩了起来,这时被路过的小C看见了,小C也要加入进来。
但是我们知道,每台电脑只有一个网口,无法实现三台电脑的相互连接,那要要怎么办呢?

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

这时候小B出了一个主意:咱们再找一台计算机,给他多设计几个网口,我们每个人都连到这台计算机的网口上,不也实现咱们哥几个之间的互连了吗。
说干就干,于是他们设计出了一款微型计算机,他本身具备多个网口,专门实现多台计算机的互联作用,这个微型计算机就是集线器(HUB)。
顾名思义,集线器起到了一个将网线集结起来的作用,实现最初级的网络互通。
集线器是通过网线直接传送数据的,我们说他工作在物理层(如下图所示)。

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

 

5、交换机

有了集线器后,越来越多的小伙伴加入到游戏中,小D、小E等人都慕名而来。
然而集线器有一个问题,由于和每台设备相连,他不能分辨出具体信息是发送给谁的,只能广泛地广播出去。
例如小A本来想问小C:你吃了吗?结果小B,小D和小E等所有连接在集线器上的用户都收到了这一信息。
由于处于同一网络,小A说话时其他人不能发言,否则信息间会产生碰撞,引发错误,对这种情况,我们称为各设备处于同一冲突域内。

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

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

这样的设备用户体验极差,于是小伙伴们一起讨论改进措施。
这时聪明的小D发话了:我们给这台设备加入一个指令,让他可以根据网口名称自动寻址传输数据。
比如我把小A的网口命名为macA,将小C的命名为macC,这时如果小A想要将数据传给小C,则设备会根据网口名称macA和macC自动将资料从A的电脑传送到C的电脑中,而不让小B、小D和小E收到。

补充说明: 这里的macA, macB指的就是MAC地址,相当于一个人的身份证,独一无二。
也就是说,这台设备解决了冲突的问题,实现了任意两台电脑间的互联,大大地提升了网络间的传输速度,我们把它叫做交换机。
由于交换机是根据网口地址传送信息,比网线直接传送多了一个步骤,我们也说交换机工作在数据链路层(如下图)。

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

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

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

 

6、路由器

渐渐地,他们在当地有了名气,吸引了越来越多的小伙伴加入到他们的队伍中。有一天,一个外村的小伙突然找上门来,希望能和他们一起互联,实现跨村间的网络对战。
小A说可以呀,于是他们找了一根超长的网线将两个村落的交换机连在了一起。结果发现一件奇怪的事:两个村落间竟然不能相互通信。
怎么回事?原来那边的电脑和他们用的不是一套操作系统,这导致信息间的传送形式的不匹配。在这期间,还有其他村落的人也来找过小A,可是小A发现,每个村子之间用的操作系统都不一样。
这可咋办呐?难道以后只能各自村子玩各自的了吗?为了解决这一问题,各村的小伙伴们坐在一起组织了一场会议,最终得出了一套解决方案:采用同样的信息传送形式(像不像秦始皇统一度量衡?)。
那如何实现呢?小伙伴们规定,不同的村子间先在各自的操作系统上加上一套相同的协议。不同村落通信时,信息经协议加工成统一形式,再经由一个特殊的设备传送出去。这个设备就叫做路由器。
在这套协议中,每个机器都被赋予了一个IP地址,相当于一个门牌号一样。路由器通过IP地址寻址,我们说它工作在计算机的网络层。

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

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

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

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

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

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

 

 

附录:更多网络编程资料

 

  • 《TCP/IP详解 - 第11章·UDP:用户数据报协议》
  • 《TCP/IP详解 - 第17章·TCP:传输控制协议》
  • 《TCP/IP详解 - 第18章·TCP连接的建立与终止》
  • 《TCP/IP详解 - 第21章·TCP的超时与重传》
  • 《技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)》
  • 《通俗易懂-深入理解TCP协议(上):理论基础》
  • 《通俗易懂-深入理解TCP协议(下):RTT、滑动窗口、拥塞处理》
  • 《理论经典:TCP协议的3次握手与4次挥手过程详解》
  • 《理论联系实际:Wireshark抓包分析TCP 3次握手、4次挥手过程》
  • 《计算机网络通讯协议关系图(中文珍藏版)》
  • 《UDP中一个包的大小最大能多大?》
  • 《P2P技术详解(一):NAT详解——详细原理、P2P简介》
  • 《P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解》
  • 《P2P技术详解(三):P2P技术之STUN、TURN、ICE详解》
  • 《通俗易懂:快速理解P2P技术中的NAT穿透原理》
  • 《高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少》
  • 《高性能网络编程(二):上一个10年,著名的C10K并发连接问题》
  • 《高性能网络编程(三):下一个10年,是时候考虑C10M并发问题了》
  • 《高性能网络编程(四):从C10K到C10M高性能网络应用的理论探索》
  • 《技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解》
  • 《让互联网更快:新一代QUIC协议在腾讯的技术实践分享》
  • 《现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障》
  • 《聊聊iOS中网络编程长连接的那些事》
  • 《移端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”》
  • 《移动端IM开发者必读(二):史上最全移动弱网络优化方法总结》
  • 《IPv6技术详解:基本概念、应用现状、技术实践(上篇)》
  • 《IPv6技术详解:基本概念、应用现状、技术实践(下篇)》

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总结JSON.parse()报错VM71:1 Uncaught SyntaxError: Unexpected token u in JSON at position 0等之类的问题

问题场景:在调试前端应用的时候经常出现形如“Uncaught SyntaxError: Unexpected”之类的令人头疼觉得莫名其妙的问题;所以有必要总结整理一下关于JSON.parse()这个API方法的注意事项。以便在以后的开发中出现类似的问题能第一时间想到可能是这个方法的参…

【HDU - 5884】Sort(k叉哈夫曼树,优化tricks,两个队列代替优先队列)

题干: Recently, Bob has just learnt a naive sorting algorithm: merge sort. Now, Bob receives a task from Alice. Alice will give Bob NN sorted sequences, and the ii-th sequence includes aiai elements. Bob need to merge all of these sequences. H…

金额输入框校验和自动校正、支持指定任意位数小数decimal、支持只能输入整数、支持是否允许输入负数等功能

应用场景:开发前端交互页面时,经常遇到金额输入框、指定小数位数的数字输入框,单一的正则表达式无法满足大部分的业务校验需求,下面总结一个实用巧妙而又灵活的把普通输入框变成自动校正输入框的解决方案: 数字&#…

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

转自即时通讯网:http://www.52im.net/ 本文引用了自简书作者“涤生_Woo”的文章,内容有删减,感谢原作者的分享。 1、前言 HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用…

【HDU - 5889】Barricade(最短路+网络流,最小割)

题干: The empire is under attack again. The general of empire is planning to defend his castle. The land can be seen as NN towns and MM roads, and each road has the same length and connects two towns. The town numbered 11 is where generals cast…

SM4国密对称算法源码解析

最近在研究国密算法,主要分为:SM2、SM3、SM4。其中SM2为非对称加密算法,SM3为哈希摘要算法,SM4为对称加密算法。 1.在SM4算法源文件中主要有以下几个函数: void sm4_setkey_enc( sm4_context *ctx, unsigned char ke…

Mac系统容易忽视但很实用的命令整理

001.终端指定用哪个软件打开指定的文件 # open -a 实用哪个软件(软件名有空格需转义) 文件名路径 open -a /Applications/Google\ Chrome.app xx.html # 【tips:】由于先输入"open -a"后tab键自动补全容易卡死终端,所以推荐先输入"/App..."&a…

【HDU 4394】Digital Square(bfs,数位搜索,思维,数学)

题干&#xff1a; Given an integer N,you should come up with the minimum nonnegative integer M.M meets the follow condition: M 2%10 xN (x0,1,2,3....) Input The first line has an integer T( T< 1000), the number of test cases. For each case, each line…

SM4算法原理

前面的文章介绍了SM4算法的C语言实现&#xff0c;源码可见文章&#xff1a;SM4国密对称算法源码解析_10点43的博客-CSDN博客_sm4代码。 本文将会介绍SM4算法原理&#xff0c;这部分可能会比较枯燥&#xff0c;但数学要求也不是太高。 目录 1.概述 2. 参数产生 3. 轮函数 4…

webpack打包前端项目入门

前言&#xff1a;在开发过程中&#xff0c;利用webpack可以帮我们自动把ES6语法编译成低版本浏览器能解析的JavaScript代码。下面给出webpack打包前端项目入门案例。 [终端&#xff1a;进入项目所在目录] 1.初始化项目依赖&#xff1a; npm init -y 2.安装webpack-cli脚手架…

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

转自即时通讯网&#xff1a;http://www.52im.net/ 本文原作者&#xff1a;“水晶虾饺”&#xff0c;原文由“玉刚说”写作平台提供写作赞助&#xff0c;原文版权归“玉刚说”微信公众号所有&#xff0c;即时通讯网收录时有改动。 1、引言 好多小白初次接触即时通讯&#xff…

【HihoCoder - 1502】最大子矩阵(二维前缀和,尺取)

题干&#xff1a; 给定一个NxM的矩阵A和一个整数K&#xff0c;小Hi希望你能求出其中最大&#xff08;元素数目最多&#xff09;的子矩阵&#xff0c;并且该子矩阵中所有元素的和不超过K。 Input 第一行包含三个整数N、M和K。 以下N行每行包含M个整数&#xff0c;表示A。 对…

Idea Spring Boot配置文件.yaml或.properties不能自动提示的有效解决办法

SpringBoot项目的配置文件.yaml/.yml/.properties文件编写的时候没有自动提示&#xff0c;网上的解决办法五花八门&#xff0c;不一定适合具体个人的IDE环境&#xff0c;下面总结一套能解决绝大部分情况的方案&#xff1a; 先给出能自动识别的图样&#xff1a; 步骤1&#xff…

[通俗易懂]深入理解TCP协议(上):理论基础

转自即时通讯网&#xff1a;http://www.52im.net/ 前言 TCP是一个巨复杂的协议&#xff0c;因为他要解决很多问题&#xff0c;而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程&#xff0c;但对于学习的过程却能让人有很多收获。关于TCP这个协议的细…

【POJ - 3616】Milking Time (贪心+dp)

题干&#xff1a; Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that she decides to schedule her next N (1 ≤ N ≤ 1,000,000) hours (conveniently labeled 0..N-1) so that she produces as much milk as possible. …

Thymeleaf模板引擎处理日期输入框回显问题type=“date“类型的坑 和 单选按钮、复选框的回显

type"date"类型的日期输入框的默认格式为"yyyy/MM/dd"&#xff0c;但是如果使用Thymeleaf的日期格式化工具类的时候使用"yyyy/MM/dd"就无法回显数据&#xff0c;必需使用类似于"yyyy-MM-dd"这种格式才能回显。 <!--emp.birth为Dat…

SM3密码杂凑算法源码解析

1.在SM3算法源文件中主要有以下几个函数&#xff1a; void sm3_starts( sm3_context *ctx ); void sm3_update( sm3_context *ctx, unsigned char *input, int ilen ); void sm3_finish( sm3_context *ctx, unsigned char output[32] ); void sm3( unsigned char *input, int …

【HDU - 5418】Victor and World(tsp旅行商问题,状压dp,floyd最短路,图论)

题干&#xff1a; After trying hard for many years, Victor has finally received a pilot license. To have a celebration, he intends to buy himself an airplane and fly around the world. There are nn countries on the earth, which are numbered from 11 to nn. T…

Anaconda中软件库更新

今天在Anaconda运行Visualization of MLP weights on MNIST源码时出现了如图错误&#xff1a; 提示无法导入fetch_openml&#xff0c;查了一下是对应的sklearn软件包版本过低&#xff0c;为0.17版。需要更新到0.20版。 1.打开Anaconda Prompt命令行 输入 conda list 命令 查看…

Mac安装mysql8.x最简洁的步骤,避免采坑

1.下载mysql8的.dmg安装包&#xff08;官网下载需要Oracle账号&#xff0c;推荐网上搜索一个8系列的版本即可&#xff09; 2.双击.dmg安装包&#xff0c;不断点击下一步。但是需要注意以下两点&#xff1a; &#xff08;1&#xff09;密码认证方式都选第二个&#xff08;不是…