Я понял, что сокеты UDP полностью идентифицируются по IP-адресу назначения и порту назначения. IP-адреса находятся в заголовке IP-дейтаграммы, да, но когда дейтаграмма прибывает в место назначения, в протокол верхнего уровня отправляется только полезная нагрузка. Если два хоста отправляют сегмент UDP на хост с одним и тем же IP-адресом и портом, как сокет узнает, на какой IP-адрес отправить ответ, поскольку полезная нагрузка не содержит IP-адрес источника, а сокет не идентифицируется с IP-адресом источника?
Пакеты TCP должны быть обернуты в IP так же, как дейтаграммы UDP. У обоих есть номера портов, но нет адресов для доставки.
Для UDP / IP или TCP / IP вам понадобится 5-кортеж для идентификации соединения:
Плохая аналогия: подумайте об отправке нескольких физических пакетов. Один только UDP мог бы просто написать чей-то номер квартиры без какого-либо почтового адреса, что, конечно, не работает. Добавление IP означало бы написание адресов назначения и возврата, а также добавление почтовых расходов, чтобы его можно было отправить. (TCP будет означать более привлекательный почтовый тариф, который позволяет отслеживать посылки для обеспечения доставки и пронумеровать посылки, чтобы их порядок был известен).