Получение ответа через UDP

Вы, вероятно, не собираетесь иметь много забавы, пишущий Ваш собственный синтаксический анализатор MIME. Причина Вы находите "чрезмерно развитые почтовые пакеты обработки", состоит в том, потому что MIME является действительно сложным набором правил/форматов/кодировки. Части MIME могут быть рекурсивными, который является частью забавы. Я думаю, что Ваш лучший выбор состоит в том, чтобы записать лучший обработчик MIME Вы, проанализировать сообщение, может выбросить все, что это не текст/плоскость или текст/HTML, и затем вынудите команду во входящей строке быть снабженной префиксом КОМАНДУ: или что-то подобное так, чтобы можно было найти его в навозе. Если Вы запускаете с правил как этот, у Вас есть достойный шанс обработки новых поставщиков, но необходимо быть готовы настроить, если новый поставщик приезжает (или heck, если текущий поставщик принимает решение изменить их архитектуру обмена сообщениями).

7
задан Neo_b 29 November 2009 в 08:40
поделиться

3 ответа

What port a response is assigned is up to the application. UDP is completely stateless, so after firing off a packet the only way an application can expect a response is if it knows the other end is going to send one. Depending on the UDP application, I'd expect that the response would come on the same port for simplicity -- this is not the case for protocols like TCP, which have an intentionally random (and high) source port.

To answer your second question, many routers, even inexpensive home routers, do stateful packet inspection (SPI). Something like this likely happens, but I'm up for being corrected if I'm off:

[Set stage with client, router, Internet, server.]

  1. Client emits UDP packet.
  2. Router passes UDP packet to the Internet.
  3. Router remembers that client sent a UDP packet to server, and establishes a mapping in its memory.
  4. Server sends a UDP packet, probably on the same port.
  5. Router receives packet, and checks mapping to find client talked to server recently.
  6. Router passes packet to client.

How this is implemented is specific to the router, I'd imagine, but that's my understanding of how it works.

10
ответ дан 6 December 2019 в 14:05
поделиться

If I send a message to a UDP port on another machine, whichever port I send the message from, no matter how it is selected, will appear in the UDP datagram. I would have thought that the remote end would send any response to that datagram to that source port.

I suppose the same applies even if ports are changed by firewall or NAT device, the remote end sees a datagram from a particular port and sends the reply back, the firewall/NAT device then translates that port to the original source port.

3
ответ дан 6 December 2019 в 14:05
поделиться

When you create the UDP socket, you must bind it to a port number. If you dont, the operating system will assign an ephemeral port.

The application on the other side must know of this port. When replies are sent back, your router might not know how to route. There are 2 ways to resolve this problem

  1. You can explicitly configure a route to your computer on a particular port.
  2. You can configure your router to track the UDP connection by automatically opening a route to your computer when a particular packet is sent. UPNP protocol is based on this concept.
2
ответ дан 6 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: