故事就从一个车轱辘说起吧。先来看一个车轱辘。
辐条从车轱辘边缘,一直汇聚到 中心的轴,这个轴在英文里叫hub。
而我们今天要讲到的集线器,英文里也叫hub。
都叫hub,多少有点关系,看下这面这个图大概能明白,其实两者有点像。
hub的由来
大概想表达的意思是,它是汇聚网线的中心,因此就叫集线器。
所以可以理解,大家常逛的Github,Docker Hub, 还有P**hub,都是为了表达它们是某类资源的中心了吧。
那么集线器是什么呢?那就要从电脑是怎么互联的这个话题说起。
小学的时候,有一种网吧,它其实是不能上外网的。也就是不能打开度娘,不能搜索资料。
不能上网的网吧还能叫网吧?
能。虽然不能上外网,但网吧老板可以把很多台机子连起来,实现网吧内互联,形成一个局域网(LocalAreaNetwork,简称LAN)。
网吧内互联之后,就可以放上各种游戏,比如CS,实现网吧内对线。
这种网吧有种好处,没有那么多键盘侠。
毕竟你不知道什么时候键着键着,对方就顺着网线找过来了。
对战直接从线上转移到线下了。
因此大家打游戏都很和谐,客气,场面十分感人就是了。
那么网吧内的电脑是怎么互联呢?
一根网线互联电脑
从最简单的场景说起,假设网吧内只有两台电脑
两台电脑互联
随便连根网线就能实现互联吗?
当然不是。
还记得网络分层吗?
网络分层
数据如果要进行传输,会从A电脑经过这些网络分层把消息组装好,再到B电脑层层解包。
网线,只是代替了上面的灰色部分,实现物理层上互联。
如果想要两台电脑互联成功,还需要确保每一层所需要的步骤都要做到位,这样数据才能确保正确投送并返回。
我们自顶向下,从细节开始说一下实现互联需要做什么。
应用层
该层的网络功能由应用本身保证。
假设两台电脑是打算用游戏进行联网,那么该应用层的功能由游戏程序保证。
传输层
绝大部分游戏用的传输层协议都是TCP,我们可以看下TCP报头。
TCP报头
这里面我们需要关注的是源和目的端口,这个可以定位到这台电脑上哪个进程在收发数据。
这两个端口信息一般是游戏内部已经填好。
AB两台电脑,其中一台作为服务端启动,比如A,起了个服务器进程。
建立服务器
服务器会开放一个固定的端口,比如27015。这就是目的端口。
这时候A和B都可以搜索到这个服务器。启动一个客户端进程,连接进入A的服务器进程。
而源端口,则由A和B自己生成。
网络层
上图除了端口,我们还看到一个192.168.0.105
,这个就是A的IP地址。
我们看一下IP层的报文头。