网络分层模型
说到各种网络设备的区别,首先应该重新复习下OSI开放系统互联参考模型七层协议,它描述了主机之间发送网络数据的封包/解包流程,当然实际的实践中,通常我们参考TCP/IP五层模型分析即可。 应用层通常是我们使用的应用程序,以特定的应用层协议来封装数据,例如想要使用HTTP协议进行网络传输,那么发送端需要封装请求头/请求体这些按照HTTP协议规定的格式数据,这样接收端才能根据协议理解其中的内容
当数据自应用层来到传输层,对应传输层的协议是TCP协议,TCP协议头部包含了源/目的端口。 端口即是一台主机中的进程对应的“大门”,也就是说,数据来到了你的电脑,只有根据端口号,才能知道数据是对应你的哪个应用程序的,这样,有了端口信息,就可以实现源和目的主机端口对端口之间的通信。
传输层下边是网络层,网络层IP协议头部标识了源/目的IP地址,IP地址是网络世界里边的唯一位置标识,例如,快递上写明浙江省杭州市余杭区文一西路88号-阿里巴巴西溪园区4号楼,就可以准确无误的让快递公司知道包裹的目的地,“浙江省杭州市余杭区文一西路88号” 可以类比IP,而“阿里巴巴西溪园区4号楼” 可以类比端口。
有了源/目的 IP和端口就可以实现网络通信,而数据链路层会在数据包中添加MAC报头,MAC报头包含了源/目的网卡MAC地址,MAC地址是网卡厂商在生产网卡时保证的全球唯一的网卡唯一标识,类似于你的身份证。
可能这里会有疑问,有了IP地址,不就能确定源/目的主机了嘛,为什么还需要MAC地址呢?首先,IP地址是一个逻辑地址,可以是动态的,而MAC地址是一“出生”就固定下来的,类似你可以随意搬家,你的地址会变,但是你的身份证号不会随之改变。按照这种比喻,你应该想到,寄快递除了要写明地址门牌号,还要写接收人才行。
其实更深层次的原因有如下几种
- IP地址有限,不能无限申请,不能为每个网卡都分配一个IP地址
- MAC地址全球固定而且唯一的,有了MAC地址就能准确的找到你的计算机
- 如果IP层抢了第二层的饭碗,你就不得不考虑第二层的很多东西了,这就让IP层的实现变得十分困难。
数据链路层说完了就到了物理层,物理层是网络数据传输的物理介质,例如网线或者光纤,这里只简要概括一下。
好了熟悉了分层协议,我们可以看到每一个层级都负责一类逻辑抽象,有了良好的抽象,就可以屏蔽下层的细节而专注于上层实现,例如我们写一个HTTP请求,从来都不考虑数据包是经过哪些网络节点分发出去的。
说了这么多,其实是为了说明各种网络设备做铺垫,接下来进入主题。
HUB的概念
集线器英文名称又叫hub,即中心的意思。hub这个单词,作为从事程序开发的工作者一定不会陌生,像全球最大的同性交友网站GitHub,镜像仓库DockerHub等,都有着某某中心的概念,那么集线器自然也包含中心的意思。
集线器
假设,你和弟弟想要联机打CS,在不借助网络的情况下,仅仅依靠物理设备连接,可以实现吗,答案是可以,借助一根网线将两台电脑相连,就可以实现联机(这里省略游戏里边需要创建房间等步骤)。
后来家里又来了两个朋友,这个时候,如果你们都带着电脑想要联机,仅仅依赖网线已经实现不了需求了,因为一个电脑就一个网络端口。
而这个时候,你们需要一个集线器,将每个人的电脑,通过网线连接到集线器,这样就形成了以集线器为中心(Hub)的拓扑关系。 集线器工作在物理层,它会将收到的数据包无脑转发到其他端口上,然后各个端口对应的网络设备根据目的MAC地址判断是否是发送给自己的,如果不是则抛弃。
知道了它的工作方式,可以发现它这种广播的发送方式很耗费网络资源,很没有效率,既然只有一个固定目的MAC地址对应的网络设备会接收数据包,那可不可以有目的的进行分发呢?
刚刚说到,集线器工作在物理层,而根据MAC地址分发需要工作在数据链路层,而交换机,就是工作在数据链路层上的网络设备。
交换机
交换机,根据内部的路由表可以将数据包转发到指定的端口上。大致的工作过程如下:接收到数据包,解析到目标MAC地址,由于路由表上还没有数据,所以,会进行一次广播,目标主机接受到数据包后会给出应答,于是路由表上有了两条记录,存储源和目的主机的MAC地址和端口之间的对应关系。
但是交换机的端口也是有限的,如果有上百台机器需要连接呢,其实通过交换机再连接一个交换机,可以实现拓展,这是交换机工作方式抽象实现带来的方便,可以类比JAVA的递归方法,生活中可以类比插排接插排。
但是还有问题,假设两个交换机通过网线进行连接,那么它们的路由表除了需要记录自己端口上的对应关系,还需要把另一个交换机上的端口对应MAC地址与连接出口关系记录下来,所以通过交换机+交换机的方式,不能一劳永逸的解决。
根本原因是MAC地址数量庞大,缺少分类机制,所以如果依赖MAC地址分发,势必需要记录映射关系,那么还能通过怎样的方式找到目标设备呢?
现实中,我们参考快递的分发方式,那就是解析地址信息,确定包裹目的地的精确位置。而对应网络中就是IP地址。
路由器
路由器,工作在网络层,根据IP地址分发到对应的端口。IP地址和MAC地址不同的地方,就是IP有子网概念,也就是同一个网段内的主机,可以连接在一个网口上。
路由器还有一个特点就是它的每个网口都具有MAC地址,我们通过上边了解到,数据一定会到达一个目的MAC地址,而路由器网口本身是可以作为一个目的地址的,所以它不但具有分发功能,也可以通过判断是不是自己的数据包来进行选择性接收。
通常交换机所处的网络连接规模不会很大,几千台的规模,而路由器工作在互联网,所以对于路由表中获取不到的映射关系的数据包不会广播而是直接丢弃。
光猫
不管是交换机还是路由器,前面都是提到网口输入的是电信号。但现在流行的是光纤传输,传输的是光信号。
而光猫(modem),是一种调制解调器,其实就是用于光电信号转换的设备。
接收数据时,可以将光纤里的光信号转化为电信号,发给路由器,路由器内部再转成数字信号,并在此基础上做各种处理。
相反,也会把路由器传来的电信号转为光信号,发到光纤,并进入互联网。
总结
两台电脑可以通过一根网线直接连接,进行通信。
机器一多,可以把网线都接到集线器(物理层)上,但是集线器会不管三七二十一进行广播。
不想广播,可以用(二层)交换机(数据链路层),又叫多端口网桥,它比较聪明,会自我学习生产MAC地址表,知道消息发到哪,那就不需要广播啦
互联网电脑这么多,交换机MAC地址表总不能全放下吧。改用路由器(网络层),也叫三层交换机,通过网段的方式定位要把消息转发到哪,就不需要像交换机那样苦哈哈一条条记录MAC地址啦。
路由器和光猫之间是好搭档,光猫负责把光纤里的光信号转换成电信号给路由器。
现在一般情况下,家里已经不用集线器和交换机了,大部分路由器也支持交换机的功能。所以可以看到,家里的台式机电脑一般就连到一个路由器,再连个光猫就够能快乐上网了。
参考 如果让你来设计网络 硬核图解!30张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别?
|