As I understand it, ICANN gives each ISP a range of ip addresses, and they do two things with them: (1) they assign each one to a customer, who effectively rents it (2) they maintain an internal database of which customer rents which ip address.
Suppose Alice uses ISP A and Bob uses ISP B. If Alice wants to send a message to Bob, she sends a query to her own ISP -- ISP A -- containing Bob's ip address. ISP A looks at the first part of the ip address, which identifies ISP B, so ISP A forwards the query to ISP B through wires, radio waves, or both.
Once ISP B has the message, they use their internal database to look up which of their customers rents that IP address to, and forward the message to them in a similar manner (wires, radio waves, or both).
Due to this structure, ICANN cannot block a particular ip address, because ISPs don't query ICANN when resolving a particular ip address. They just look up what range it is in and then forward it to the ISP responsible for that range.
An ISP *could* block a particular IP address, however, by just refusing to provide further service to whatever customer rents that ip address. Thankfully, at least at the present time, it is easy to rent an IP address without KYC, so ISPs do not have identity information on all of their users, making it hard to censor them in this manner. An ISP might block a particular IP address, but you can easily just rent another one, even from the same provider, because they don't have your identity info.