集线器(Hub) —— 工作在物理层
信号在线路中传播会进行衰减,集线器的作用就是对信号进行再生放大,从而扩大了网络的传输距离。从功能就可以看出,集线器是工作在物理层的。而且从下图中可以看出,使用集线器的网络是总线型网络,那么当一台计算机发送消息时,所有的计算机都会收到消息。而且有一个问题就是有可能多台主机同时发送消息,那么这些信号在总线上相遇就会发生冲突,所以就需要使用"载波监听多点接入/碰撞检测(CSMA/CD)"。
使用集线器的网络叫做共享式网络,该网络的所有主机都属于同一个冲突域,即一台计算机发送消息,其它的计算机都能够收到。而且同一时刻只能够有一台计算机发送消息(为了防止冲突)。
虽然说在共享式网络中其它计算机也能够收到不是发给自己的信息,但是计算机会识别该信息是不是发送给自己的,如果不是那么就会丢弃。
交换机(Switch) —— 工作在数据链路层
前言——交换机转发的消息叫做帧。
集线器的信道利用率太低了,所以就出现了交换机。交换机很很多个端口,每个端口都能够连接一台计算机,当计算机A向计算机B发送信息时,会在内部建立起一条临时性的数据传输通道,如果有多台计算机同时通信,那么就会维护多条通道。那么可以看出交换机的每个端口就是一个冲突域,如果该端口只连接了一台计算机,那么就相当于没有冲突。
每台计算机都有一个网卡适配器,每个网卡适配器都有一个MAC地址,该地址是全球唯一的。
当计算机A向计算B发送帧时,就会根据帧首部包含的目的主机MAC地址,将帧从合适的端口转发出去。那么交换机怎么知道从哪个端口把帧转发出去呢?
交换机会在内部维护一个MAC地址表,其中包含了每个端口对应的主机的MAC地址。交换机在转发帧时,就会查找该MAC地址表,然后将帧从合适的端口转发出去。
那么交换机是如何得到这个MAC地址表的呢?
静态MAC地址表:当把一台计算机连接上交换机时,由管理员填写该表,从而形成MAC地址表。
动态MAC地址表:当把一台计算机B连接上交换机时,什么事都不用做,当有计算机A向计算机B发送帧时,如果交换机不能够在MAC地址表中找到帧首部的目的MAC地址对应的是哪个端口,那么就会向所有的端口(除了发送帧的那个端口除外)发送该消息,然后只要计算机B回应了帧,交换机就知道哪个端口连接了计算机B,那么交换机就会在MAC地址表中记录下来。
路由器(Router) —— 工作在网络层
前言——路由器转发的消息叫做IP数据报。
交换机是工作在数据链路层的,也即交换机只能转发局域网内的帧。如果网络A的主机想要发消息给网络B的主机就需要路由器了。
如果网络A的主机1想要想网络B的主机2发送消息,那么主机1必须在IP数据报的首部加上源IP地址和目标IP地址,那么路由器A会根据目标IP地址将IP数据报转发到路由器B。路由器B接收到该IP数据报后,会将该IP数据报封装成帧,然后在帧的首部加上主机B的MAC地址作为目的地址,然后把该消息转发给主机B,或者转发给交换机,由交换机转发给主机B。
那么路由器A怎么知道把IP数据包从哪个端口送出去呢?路由器内部维护了一张路由表,它知道把IP数据报从哪个端口发出去。这个就不详细说了,太复杂了。
那么路由器B怎么知道某个IP地址对应了哪个主机,且该主机的MAC地址是什么呢?
路由器内部维护了一张arp表,即地址解析协议表,它知道哪个IP地址对应了哪个MAC地址。
①如果arp表中存在该IP地址所对应的表项,那么根据该表项,直接将IP数据包加上相应的首部封装成帧。
②如果arp表中不存在该IP地址所对应的表项,那么路由器发送一个广播帧,将帧首部的目的MAC地址设为FFFFFFFFFFFF,交换机收到该帧后,发现其目的MAC地址是FFFFFFFFFFFF,就会将该帧从所有的端口(除了发送该帧的端口除外)转发出去,当计算机收到该帧后,就会把自己的IP地址和MAC地址都发送给路由器,这样路由器就生成了arp表了。然后再根据该表转发IP数据报。
注:计算机接收的帧只有两种,①帧首部的目的MAC地址和自己的MAC地址一致;②帧首部的目的MAC地址是广播地址FFFFFFFFFFFF。(这里不考虑组播的情况)