Good way to send/receive UDP packets?

wjoe invalid at example.com
Wed Jul 22 16:14:24 UTC 2020


On Wednesday, 22 July 2020 at 15:26:23 UTC, Dukc wrote:
> On Wednesday, 22 July 2020 at 13:17:11 UTC, wjoe wrote:
>> - Choosing a port which isn't in use right now isn't good 
>> enough because a few minutes later there may be another 
>> program using it, too, and for the same reason.
>
> But doesn't the UDP header include the sender IP address? So 
> together with the magic number, shouldn't it be good enough? I 
> know it definitely is not going to hold against jamming or a 
> man in the middle, but it isn't supposed to, at this stage. 
> It's used only for simulations that have the criticality of a 
> casual Tetris server.
>
> I do acknowledge that the needs may rise later on. And if so, I 
> understand that I'm much better off switching the protocol than 
> trying to hardening the UDP.

No, the UDP header includes the source and destination ports only.
For transmission over the internet the Internet Protocol (IP) is 
used, which contains, among other things, the source and 
destination addresses.

The anatomy looks like this:

[ -------- IP - Datagram ------ ]
[IP-Header][UDP-Header][UDP-Data]
            [ - UDP - Datagram - ]

But keep in mind that the destination address can be a broadcast 
address, like e.g. 255.255.255.255, which you would use to 
announce your server to every PC in the network.
If you send a UDP datagram to a single address, however, it will 
still be delivered to every program on that PC which receives UDP 
datagrams from that port.

Also if you send UDP datagrams to multiple specific addresses, 
you need to send the same packet multiple times losing the major 
benefit of UDP - broadcast.
And packets with a broadcast address sent over the internet are 
dropped, as that would affect every connected PC.

If you are behind a router and send over the internet, your 
router will modify the IP-header, namely the sender address and 
replace that with your public address.
When receiving packets, the IP header contains the destination 
address of your public IP (the router), which it will translate 
to the local address according to the port forwarding setup.
That process is called network address translation (NAT) and is 
not only relevant for UDP.



More information about the Digitalmars-d-learn mailing list