集线器工作在OSI模型的第一层,即“物理层”。集线器属于纯硬件网络底层设备,本身不能识别目的地址,所以它发送数据时没有针对性,而是通过广播的方式发送。也就是说当它要向网络中某节点发送数据时,不是直接把数据发送到目的节点,而是把数据发送到与集线器相连的所有节点,收到数据包的节点解析数据包头来确定是否接收。
交换机工作在OSI模型的第二层,即“数据链路层”。交换机实现同一网络内的数据传输。交换机可以学习MAC地址,并存放在内部地址表中,在向目的节点发送数据时,若目的节点MAC地址在地址表中,就直接将数据包传送到目的节点。只有当目的节点MAC地址不在地址表时,才向所有端口广播,当接收端口回应后交换机会将新地址记录到地址表中。同时交换机的每个端口独享带宽,将设使用10Mbps的以太网交换机,那么交换机的总流量等于2*10=20Mbps。而若是10Mbps的集线器,则总流量最大也不会超过10Mbps。
路由器工作在OSI模型的第三层,即“网络层“。路由器为不同的网络之间报文寻径并存储转发。路由器中时刻维持着一张路由表,所有报文的发送和转发都通过查找路由表。路由器会根据数据包所要到达的目的地选择最佳路径把数据包发送到可以到达该目的地的下一台路由器处。当下一台路由器接收到该数据包时,也会查看其目标地址,并使用合适的路径继续传送给后面的路由器。
涉及的技术说明:
(1)交换机MAC地址学习
交换机内部有一个地址表,这个地址表标明了MAC地址和交换机端口的对应关系。当交换机从某个端口收到一个数据包,它首先读取包头中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上的,它再去读取包头中的目的MAC地址,并在地址表中查找相应的端口,如果表中有与这目的MAC地址对应的端口,则把数据包直接复制到这端口上,如果在表中找不到相应的端口则把数据包广播到所有端口上,当目的机器对源机器回应时,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。
(2)路由器数据转发流程
路由器内部有一个路由表,这表标明了如果要去某个地方,下一步应该往哪走。路由器从某个端口收到一个数据包,它首先把链路层的包头去掉(拆包),读取目的IP地址,然后查找路由表,若能确定下一步往哪送,则再加上链路层的包头(打包),把该数据包转发出去;如果不能确定下一步的地址,则向源地址返回一个信息,并把这个数据包丢掉。
参考文章:
http://blog.csdn.net/maopig/article/details/6854708
http://net.it168.com/a2012/0409/1334/000001334772_1.shtml