网络通信原理简述
背景:
主机A连接在路由器1上。主机A要与主机B通信(主机A一定是知道主机B的ip地址的,在网络层IP地址是主机的唯一标示)。
注意:我们日常使用的网络都是星型结构,一个局域网所有主机是通过路由器连接的,并没有直接连接。 wifi环境也是如此,每台主机通过分时复用或分频复用等技术分别于路由器相连,相当于每台主机都通过一根网线连在路由器上。
设:
- send(mac1,mac2,ip1,ip2)表示源mac地址为mac1,目标mac地址为mac2,源ip地址为ip1,目标ip地址为ip2的以太网帧
- 主机A:mac地址为mac-A,ip地址为ip-A
- 主机B:mac地址为mac-B,ip地址为ip-B
- 路由器1:mac地址为mac-1,ip地址为ip-1
场景:
- 主机A先通过子网掩码和ip-B做“与”运算判断主机B是否和自己处于同一网段
- 如果是同一网段,则在自己的ARP表中查到路由器1和主机B的mac地址后,会给路由器1发送一个以太网帧send(mac-A,mac-B,ip-A,ip-B)。 路由器收到这个以太网帧后,发现以太网帧的目标mac地址不是自己,则会在自己的mac表中查找mac-B对应的接口, 然后把以太网帧从这个接口转发出去。 这种场景下路由器退化为交换机
- 如果不是同一网段,则在自己的ARP表中查到路由器1的mac地址后,会给路由器1发送一个以太网帧send(mac-A,mac-1,ip-A,ip-B)。 路由器收到这个以太网帧后,发现以太网帧的目标mac地址是自己,则会取出里面的IP数据包,在路由表中查找是否有对应的目标IP地址, 如果有,则会从与目标连接的接口发送一个以太网帧send(mac-1,mac-B,ip-A,ip-B)。
参考
[1] 详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
[2] 网关,路由,局域网内的通信及不同的网络间通信实现的原理剖析
[3] 交换机和路由器的区别
[4] 同一网段内的两台主机通信是否需要路由器?
[5] 无线信号传输是如何做到一对一和多对一传输的?
附:一些基础概念的形式化描述
1. ip地址,mac地址,路由协议,ARP协议
- ip地址相当于邮寄地址,公网地址代表省、市、县、街道、公司/家庭,私网地址代表每个人的房间或工位;
- mac地址相当于每个人的身份证号(或手机号);
- 路由协议相当于快递传输,根据邮寄地址派送到户;
- ARP协议相当于快递发放,快递员会站在门口问:“这是谁的快递,手机尾号4231?”,有人应答后快递员把快递放到他的房间或工位上。
如果每个人的邮寄地址都是唯一且终生不变,那确实就不需要mac地址了,ip地址就可以唯一标示一个人。但是可惜的是,我们的ip尤其是私网ip是频繁变化的,所以不能只凭借ip地址找到一个人。一般情况下,我们都是先找到一个人的公司或家庭,然后再喊他出来。所以ip地址的作用是路由,mac地址的作用是最终确定主机。