For my target domain e.g. www.domain.com I find the ip address with ping command but if I browse directly the ip address I obtain an error page. How is it possible? I know that problably the service is deployed in Virtual Private Server but I do not understand how the two things are exactly correlated.
Your hoster uses a thing called "Server Name Indication". That means http requests may contain the hostname of the webpage you want to see in the http-header
Your hoster decides by this information which page to deliver. If you don't supply the host the server has no way to know what to deliver when there is more than one domain hosted.
This is because a web-server that serves multiple sites relies on on the "Host:" header in the HTTP request to identify which site to serve up. If your web-browser doesn't know the domain-name - because you supplied an IP-address instead - it cant tell the web-server which site to serve up.
Packet data captured using Wireshark, "follow TCP-stream":
Request using domain name
GET / HTTP/1.1 Host: redgrittybrick.org ...
HTTP/1.1 200 OK Date: Wed, 18 Oct 2017 14:27:19 GMT ...
Request using IP address
GET / HTTP/1.1 Host: 126.96.36.199 ...
HTTP/1.1 404 Not Found Date: Wed, 18 Oct 2017 14:28:44 GMT ...
The IP is the address of the server however there may be nothing set up on said server to deal with requests directly to the IP. This is pretty common.
Take Apache or Nginx for example, both these servers require you to set up vhosts to actually deal with requests to the server via a domain name.
You may have 1 physical machine with multiple domains. For each domain you set up a vhost to tell the server where to root that request.
If there is no vhost set up to deal with requests directly to the IP then you will get no response.