If they are on separate machines then the common scenario using Microsoft technologies would be:
User Interface (UI) implemented by ASP.NET
Business Layer (BLL) implemented by C# or VB .NET as bunch of DLLs
Data Access Layer (DAL) as a relational database i.e. a SQL database with it's tables, stored procedures... plus classes (Some DLLs) to access database. Best practice is using ORMs i.e.Entity Framework to handle Data Access Layer and Data Layer.
Your layers in common scenario will communicate to each other this way:
- Your
UI will communicate to BLL commonly using Web Services.
- Your
BLL will communicate to DAL commonly using Web Services.
- Your
DAL will communicate to Database commonly using TCP/IP.
Although n-Tier design is the best practice, it doesn't mean each layer should be hosted on different machine (consider it more a logical separation than physical). For example if you keep all 3 layers on the same machine and just host your database on a different server then you don't need implementing web-services for BLL and DAL which results in less complexity and time-to-implement plus other benefits i.e. higher communication speed and security.