With every CLR(Common Language Runtime) of the .Net framework a machine.config file is there. This machine.config file is automatically installed with the .Net framework.
"machine.config", as its name suggests, it provides machine level configuration for the entire machine on which this machine.config file is installed with the .net framework, so it is also called machine level configuration file.
And since it provides setting for the entire machine, so there should be ONLY one machine.config file on a particular machine(computer/server).
This machine.config file is at the highest level in the configuration hierarchy, means, the .net framework will first check the configuration written with the machine.config file, then .net framework can look for any other configuration file.
There is also a web.config file which is also get installed with the .net framework, automatically.
In case of ASP.Net, a web.config file is also there with each Web Application. So when an ASP.Net website is running on a server, its settings will be the combination of the settings mentioned in machine.config file on that particular server, on which this website is running + the settings mentioned with the web.config file of that same server + the settings mentioned with the web.config file of the website's own, which is available into the website's own root directory.