In an Iterator, the fundamental question is that which party controls the iteration. Is it Iterator or the Collection on which iterator runs.
When a Collection controls the iterator, then it is called External Iteration. When the Iterator controls the iteration then it is called Internal Iteration.
In case of Internal Iteration, the client hands over an operation to Iterator and the Iterator applies the operation to all the elements in aggregate.
Internal Iteration is easier to implement, since the Iterator does not have to store the state of the collection.