一:PC1和PC2在同一网段,用二层交换机直连

同宿主机两个容器怎么通信_IP


PC1去pingPC2的通信过程

1、PC1的IP、PC2的IP、掩码 进行与运算,查看两个IP地址是否在同一网段。

结果在同一网段。

说明两个概念
1、MAC地址表:MAC和对应的接口
2、ARP表:MAC和IP地址

PC1一开始没有办法封装IP报文,因为缺少目的MAC地址,所以要用ARP寻找,发广播报文。

同宿主机两个容器怎么通信_同宿主机两个容器怎么通信_02


MAC字段中:

源MAC:A

目的MAC:全F(用来广播)

ARP字段中:
源IP:192.168.1.100
目的IP:192.168.1.200
源MAC:A
目的MAC:全0(用来填空)

假设如下图:

同宿主机两个容器怎么通信_http_03

假如有PC3也收到了该报文,也会进行处理:
看到MAC字段中目的MAC为全F,进行解封装
看到ARP字段中目的IP不是自己,丢弃

PC2看到ARP中目的IP是自己,用单播回复,源MAC为自己的MAC地址

交换机收到后,补充自己的MAC地址表,单播发给PC1.

然后PC1可以正常封装IP报文,正常通信。

二:两台PC不在同一网段,用路由器直连

同宿主机两个容器怎么通信_网络协议_04


PC1的IP、PC2的IP、掩码 与运算,发现不在同一网段

1、

同宿主机两个容器怎么通信_同宿主机两个容器怎么通信_02


MAC字段中:

源MAC:A

目的MAC:全F

ARP字段中:

源IP:192.168.1.100

目的IP:192.168.1.1(网关IP)

源MAC:A

目的MAC:全0(请求网关的MAC地址)

左边在ARP时,右边也在ARP

2、路由器以单播的形式,将自己的MAC地址发给PC1

3、再次通信(IP报文形式)

同宿主机两个容器怎么通信_网络_06

MAC字段中:
源MAC:A
目的MAC:网关的MAC地址:C
IP字段中:
源IP:PC1:192.168.1.100
目的IP:PC2:192.168.2.100

路由器收到后,进行与运算,发现不在同一网段。查路由,在对应的接口下进行转发下去,源MAC:D
目的MAC:B
源IP:PC1的IP
目的IP:PC2的IP

也就是在不同网段进行转发时
源目IP 一直不变
源目MAC 在变

三:两台PC不在同一网段,用三层交换机(三层用vlanif)直连
和用路由器实验差不多
区别在于:路由器每个接口都有MAC。交换机只有一个MAC地址