My take on it is this: DIP is the principle that guides us towards DI. Basically, loose coupling is the goal, and there are at least two ways to achieve it.
- Dependency Injection
- Service Locator
However, Service Locator is an anti-pattern and has nothing to do with the DIP. DI, however, is the correct application of the DIP.
The relationship between DI and IoC has been explained before.
BTW, when talking about DI and loose coupling, I find the terminology laid out in Domain-Driven Design the most applicable. Basically, Services are the only kinds of objects subjected to DI.