计算之间如何通信
- 局域网间通信
a. 同一个子网内计算机都连接到同一个 hub 上,hub 会将收到的消息,转发给所有端口(也就是转发给连接到 hub 上的所有计算机)
b. 计算机像某个 ip 发送消息的时候,如果发现是同一个子网内(通过网络号判断),会先通过 ARP 协议,获取 ip 对应的 mac 地址,获取到 mac 地址后,将 mac 地址,ip 地址封装到数据包中,发送给 Hub
c. hub 会转发步骤 b 中的消息 给所有端口,所有计算机都会收到这条消息,根据这条消息的中的 mac 地址,判断是否是自己的消息,如果是自己的消息,就收下来,传给应用层。不是自己的会丢弃。
hub 会转发消息给所有端口,如果连接的机器比较多,性能会很差,交换机可以认为是会学习的 Hub,比如 A 通过端口 1 发送消息给 交换机,交换机就会知道 A 连接在端口 1, 以后有人想法消息给 A 的时候,就只转发给端口 1, 这样就解决了 hub 的性能问题。
交换机,hub 说白了都是广播设备,通过广播将消息发出去,只不过交换机在广播一次后,会把结果记住,通过这种广播的方式达到在局域网中传播消息的目的
通过机器与交换机相连, 交换机与交换机相连就构成了一个局域网,局域网间消息传递本质还是一样的,先通过 ARP 协议获取 mac 地址,在将消息广播出去,目标机器收到消息后,发现mac 地址是自己的,就会收到消息上传到应用层
- 不同局域网通信
a. 多个局域网通过路由器(路由器是三层设备,可以处理 tcp/ip, 交换机只能处理 mac 地址)连接起来就构成了网络
a. 发送给其他子网的信息的时候,根据网络号可以看出不在同一个子网,那么这时候这条消息就会发送给网关(网关地址一般是同一个网络号下的 1 号主机,发送给网关信息的过程也是先通过ARP协议获取网关 mac 地址,在发送给网关),网关根据路由规则发送给下一个路由(网关是路由器的一个端口),直到消息到达目标 ip 所在的路由以后,在根据子网间通信规则一样发给目标机器
因为局域网很多,所以很容易早成 ip 冲突,这样路由器就会找不到正确的 ip, 为了解决 ip 冲突,就需要 ip 唯一,因为 ip 很少,所以就需要共用 ip,共用 ip 的手段是通过 NAT 协议,经过网关的时候通过 NAT 协议,将私有 ip 地址,转换为公网 ip, 通信原理还是一样的。