Can someone explain it clearly. I know that port numbers are used by applications to differentiate which services you have requested, and routing protocols use protocol numbers in TCP header.
The protocol number is used by the the layer-3 protocol (IPv4 or IPv6) to determine to which layer-4 protocol in the network stack it should send the payload of the packet.
A port number is an address for some layer-4 protocols (TCP or UDP). The port number is used by the layer-4 protocol to determine which application gets the payload of the layer-4 datagram.
And routing protocol use protocol number in TCP header.
I believe you are confusing layer-3 and layer-4. The TCP header (layer 4) doesn't have a field for protocol number - the protocol number is in the IP header (layer 3).
You can think of a port as a phone extension, with the computer's IP address being like its phone number. You can call the number (IP address) to talk to the computer, then dial the extension (port) to talk to a specific application. An application needs to be listening on a port in order to communicate.
A protocol is just the language that the two applications on either end of a conversation agree to speak in. If your application is sending streams of bytes to my application, my application needs to know how to interpret those bytes.