During handshake, both parties send their version message. They can cross since the communication is duplex.
step me node
1 version -->
2 <-- version
Then the other node received 1) and replied with verack. You did the same with your verack.
3 <-- verack
4 verack -->
Now that you have handshaked, the communication is in the normal phase. The other node is continuously broadcasting some of its state. So you should expect to receive inv, addr, tx, at any time. In addition, the other node can also send you a command like 'ping'.
The protocol isn't request/response. It is closer to a publish/subscribe. By connecting, you have subscribed to relay transactions and blocks and the other node will send you messages for that.
In short, you'll have an easier time if you organize your node around a message handler because messages can be unsolicited (at least not directly), or you can have a message with multiple responses (getblocks). Basically, be ready to receive anything and throw away the stuff you don't handle or need. If you want something, request it explicitly.