Think about banking system. In early days, banking system is a single application which handles all the authentication, transformation, data storage and any other methods it needs. After increase usage of information system, try to differentiate different features into different modules which serve to create a single system. For example, In Bank Fixed deposit, transaction, database application. So the entire system is divided into separate modules. And each modules is connected with each other. When connecting these different system to each other, it is hard to maintain if the users increases. In case users increase, we need lot of servers to store the data. Then all these servers need to connect to each other system as well. Complexity will increase. And also when Fixed deposit system connect to transaction system they need to know the protocol they are using. Like that each system need to maintain every protocols to connect each other...
Consider a sample system it has different modules which has been written different languages and technologies. It has .net , J2EE, SOAP, REST different kind of modules. When try to connect these system, hard to maintain, when one system has issue then it will affect the all other systems, scalability problem, troubleshooting problem.
So… ESB act as central application which connect all the other systems. Then .net , J2EE, SOAP, REST are connected to ESB so that they can talk to each other.
In ESB, consider JMS client application, HTTP system, JSON, SAP are connected through the ESB. When HTTP calling JMS service, It only needs to know HTTP protocol not need to know JMS protocol then HTTP connect to the ESB and ESB connect JMS system through JMS protocol.So here to connect with different system only need to know the protocol they are using.