What is the proper UDP port for mavlink

In my continuing challenge trying to send mavlink messages to my drone I noticed in Wireshark that the drone is sending message from port 40891 to port 14550. I can receive and decode the messages in my test app. The odd part is QGroundControl appears to be sending data (heartbeat etc.) from port 14550 to port 40891 and not to port 14550 which I would expect.

Is there an initial handshake that takes place before sending messages? Should all messages be sent to 14550 or some other port? This seems like a fairly basic issue but I do not see any documentation about this


The ports are not symmetrical! QGC listens on local port 14550 and sends UDP packets back to wherever messages came from.

Now the question is what you’re trying to do?