Hi C.,
I used to work with kids this age and we saw lots of hitting. Yes, he is at that age and he is testing his limits. This is actually healthy behavior--testing his limits, that is. You can use this time to your advantage. This is a great window of opportunity for you to teach him what is acceptable to you and what is not.
I know, easier said than done. Kids don't realize it, but they do need consistent limits. Their world is very overwhelming if you think of how much a toddler still has to learn in life. They need parents to scale it down and make it more manageable for them. This is where limits come in, and he needs you to be consistent. This goes not only for hitting, but for all negative behavior.
When he hits, get on his level, and firmly say, "hitting hurts. You may not hit." And walk away. Try to notice what happens right before he hits. Try to predict it. When you think it might happen, try not to be within arms reach. But, you need to give him an alternative, acceptable behavior he CAN use when he is mad. Toddlers have strong emotions that they don't yet know how to verbalize, so this can come out as hitting. These strong emotions will not just go away, so you need to teach him something he CAN do when he is angry. If he does have words already, you can teach him a phrase to use when he is angry to tell you. If not, you can decide on the replacement behavior and try to teach that instead. It might be stomping his foot on the floor, or whatever you decide is acceptable and that won't hurt anyone. Even if he can't speak yet, he can likely understand what you tell him, so you can explain to him that he can stomp his foot when he is mad. Then practice. You can even say "I'm angry" together while you practice stomping your feet and really play it up. You may need to remind him of this every time he is mad.
The other thing i wanted to mention, is that kids need to learn that it's ok to be upset, angry, or mad, but not ok to hurt someone. You can validate his feelings and this may help a lot. When he is upset, you can say to him (before he hits) "I understand you are angry. I can't let you have ... but we can .... By saying something like this, you are letting him know that you understand how he feels even when he doesn't hit you and are validating his feelings and putting words to his feelings. You are also focusing on what he CAN do or have instead of what he can't. Like if he wants to go outside right then but can't, plan a time to go out later that day, and then follow through. Finding an alternative or a solution seems more acceptable to a toddler than just saying no to them. This way, he's still not getting everything he wants, but you can find something else that works for you both.
Be sure you don't give in to what he wants by throwing a fit or hitting. Sounds like you are already not doing this, so that's good. I also read that some others suggested spanking him when he hits. Maybe it would teach him not to do it, but I still don't agree with this because it doesn't teach an alternative, acceptable behavior. And, if he is spanked every time he hits, he would likely hit back when another child hits him. Time out was originally meant to be a time to cool down when a child was really upset so that they could come back and deal with the issue calmly. Now, it has been turned into a punishment. It can teach them that what they did was wrong, but again, doesn't teach an alternative behavior. Same goes for taking toys away. Teaches that what they did was wrong, but no real learning takes place if they don't know how to handle it next time.
Hope this helps!
C.