A motherboard's ports are physical receptacles for physical cables for I/O.
A TCP or UDP port number is just an ID number that acts as a metaphorical receptacle that one of many flows of data packets can be sent to. Each process (app) on your system that wants to receive TCP packets from the network has to request use of a port number from the OS, and from then on if the OS receives a packet addressed to that port number, it passes that packet data along to the process that owns that port number.
Networking is designed as a stack of independent layers, which a different protocol for each layer. Each layer's protocol puts its own header on the front of each packet, and each layer's header has some kind of numeric ID field (often 16-bit unsigned integers) that lets the receiving end know what the next-layer protocol is, so that the packets can be passed to the right code to handle that next protocol.
Traditional "Ethernet-II" style Ethernet headers have an "EtherType" field that says what the next protocol is. EtherType 0x0800 means this Ethernet frame contains an IP datagram.
IP headers have a "Protocol" field that says what transport-layer protocol needs to handle the contents of this IP datagram. A value of 6 means TCP, and a value of 17 means UDP.
TCP and UDP happen to both use the same model of port numbers. They both have a UInt16 source port and UInt16 destination port. TCP and UDP port numbers are flexible and can be mapped to different protocols. But there are some strong conventions, so traffic to or from TCP port 80 is highly likely to be HTTP (or some other protocol trying to disguise itself as HTTP to try to get through proxies and firewalls).
I think you must have had some exposure to some software that conflates IP protocol numbers with TCP/UDP port numbers. Although IP protocol numbers serve a similar purpose at the IP layer as TCP/UDP port numbers serve at the transport layer, they are still separate concepts at different layers and should not be conflated.