Not completely necessary. If the attacker is using [ARP spoofing][1]ARP spoofing1, he can be sitting anywhere in the chain of communication2. For example, if he's connecting to the same ISP node as you are (physically near you), then he can sniff all the plaintext data of everyone connecting to the ISP in that subnet. He doesn't need to know your IP for this, however he will find out who sent the HTTP request. So he doesn't need to find out your exact IP or do random shots-in-the-dark until he does find it; he can very easily just fetch all packets from your subnet and sift through those.
Note that an attacker can choose to ARP spoof only you, if he does know your IP. This is much more convenient a there's less unwanted noise on the line, but he can just as well spoof everyone on the subnet and proceed.
The way this works is that the TCP/IP protocol (well, the ARP protocol) is inherently insecure. When data needs to be sent to a certain IP, the computer with that IP is asked to identify itself. It's an easy matter to pretend to be that computer and accept the packets, and then forward them on to the real recipient.
For this, the attacker needs to be on the same subnetwork as a node which is transmitting the data. This node could be you, an intermediate ISP node, or the web server.
1. This is not the only way to MITM, see Adnan's answer for more. All three of those methods can work without knowing the exact IP.
2. It is very unlikely that an attacker is sitting between two intermediate nodes. It is very easy for an attacker to be sitting on the you-(your)ISP connection and not too unlikely for the web host-(their)ISP connection. Anything else is very improbable. [1]: https://en.wikipedia.org/wiki/ARP_spoofing