Čeština / English
Login

Aplikace / Převod doménových jmen pomocí DNS

Autor: Zdeněk Vašíček ()

Abstrakt: Aplikace ukazuje, jakým způsobem lze snadno implementovat protokoly vyšších vrstev.

Update: 20110101

Překlad doménových jmen na IP adresy a zpět je jedním z mechanismů, které usnadňují komunikaci v sítích TCP/IP. Překlad je realizovám pomocí DNS (Domain Name System), což je distribuovaný systém skládající se z hierarchicky spojených DNS serverů.

V základní verzi protokol DNS využívá služeb protokolu UDP a v rozšířené verzi TCP (UDP limituje maximální délku paketu a protože DNS odpověď může tuto délku v určitých případech mnohonásobně přesahovat, používá se TCP kanál). Pro jednoduchost byla zvolena varianta využívající protokol UDP. Pro převod doménového jména na IP adresu lze použít DNS paket typu DNS QUERY, který obsahuje název domény s dalšími parametry a tento paket odeslat na DNS server na port číslo 53. Jakmile obdržíme odpověď, je nutné odpověď vyhodnotit. Odpověď může být positivní či negativní. V případě negativní odpovědi server informuje, že dané doménové jméno neexistuje nebo že je nezná.

1. Popis aplikace

V hlavním programu nakonfigurujeme zařízení tak, aby využívalo služeb DHCP serveru. Pomocí DHCP získámě automaticky IP adresu v lokální síti z DHCP serveru a vyhneme se tak nutnosti ji konfigurovat ručně. Jednou z informací, která je typicky součástí DHCP odpovědi, je adresa DNS serveru, který je schopen překládat doménové jména na IP adresy a naopak.

Následuje volání funkce udp_bind(53800,dns), která zaregistruje callback funkci pojmenovanou jako dns, která bude vyvolána při příchodu UDP paketu s cílovým portem číslo 53800 (číslo cílového portu lze libovolně změnit). V hlavní smyčce je postupně volána funkce ENC28J60_idle() a následně testován stav DHCP pomocí funkce dhcp_ready().

Jakmile máme přiřazenu IP adresu, je možné zadáním příkazu QUERY následovaného kvalifikovaným doménovým jménem do terminálu přeložit doménové jméno na IP adresu. Tento příkaz vyvolá postupně následující sekvenci. Pomocí tx_init(UDP_PROTO) se zinicializuje UDP paket v odesílacím bufferu, poté se zapíše pomocí volání funkce tx_write(&dns_header, DNS_HEADER_LEN) DNS paket s příslušným dotazem do bufferu. Zápis je následován dokončením paketu voláním funkce tx_close() a odesláním UDP paketu na port číslo. Odeslání je realizováno pomocí volání udp_send(53, 53800, get_dns_server()). Funkce get_dns_server() vrací IP adresu DNS serveru, která byla získána z DHCP odpovědi. Při příchodu odpovědi na port číslo 53800 je načtena odpověď do struktury dns_header pomocí volání funkce rx_read() a následuje zjištění, zda-li paket obsahuje informace o našem dotazu či nikoliv. Stav a zjištěná IP adresa jsou vypsány do terminálu.

2. Zprovoznění aplikace

  1. připojte k FITkitu rozšiřující modul Ethernet obsahující ENC28J60 a připojte modul do sítě LAN

  2. přeložte aplikaci

  3. naprogramujte MCU a FPGA a spusťte terminálový program.

  4. jakmile aplikace obdrží odpověď od DHCP serveru, je možné použít příkaz QUERY

Aplikace nevyžaduje ke své činnosti nastavit kromě propojek umožňujících programování další propojky.

Zobrazeno: 1225x Naposledy: 18.11.2017 19:14:28