最近RustでDNSリゾルバを自作する記事を読んだので、勉強がてらGo言語で書き換えることにしました。 本記事ではまずDNSのプロトコルについてバイナリレベルで解説します。次回の記事でGo言語を使用して実際にDNSパケットのパーサーを作成します。 DNSとは DNSはドメイン名をIPアドレスに名前解決するために使用される通信プロトコルです。 通常、DNSパケットはUDPトランスポートを使用して送信され、512バイトに制限されています。 ただし、TCPで送信することも可能で、eDNSを仕様することでパケットサイズを拡張することもできます。 本記事では従来のUDPによるDNSパケットの送信について解説します。 UDPにおけるDNSパケットの最大長が512バイトである理由 IPv4の仕様では最小パケットサイズとして576バイトと定義されています。 この値は、64バイトのヘッダーと512バイトのデ