質問: メールヘッダのreceivedの追記について メールヘッダのreceivedのヘッダフィールドについて 分からないことがあります。 端末1が、端末2の電子メールアドレス(xxx@ccc.jpとします) を宛先アドレスとして電子メールを送信したとします。 端末1 smtpサーバ1 smtpサーバ2 smtpサーバ3 yyy@aaa.jp mail.aaa.jp mail.bbb.jp mail.ccc.jp ↓ ↑↓ ↑↓ ↑ ルータa→→→ルータb→→ルータc→ ルータd ↓↑(pop) 端末2xxx@ccc.jp smtpのプロトコルだと、 このメールは端末1と同じドメイン(aaa.jp)のsmtpサーバ1から 宛先と同じドメイン(ccc.jp)のsmtpサーバ3まで転送され、 その間に、経由点上のsmtpサーバのトレース情報を示すreveiveのヘッダフィールドが追記されて行くということが分かりました。 ここで、質問なのですが、 端末1(または、smtpサーバ1?)が、cccのドメインネームサーバに smtpサーバ3のipアドレスを問い合わせて取得し、 そのipアドレスを(メールを記述したtcpパケットの)tcpヘッダに付加してルータaに渡してしまえば、 あとはルータa~dが勝手にsmtpサーバ3まで転送してくれるような気がするのですが、 smtpサーバ1やsmtpサーバ3以外の他の経由点(上の例でいうとsmtpサーバ2 )のトレース情報も追記されることもあり得るのでしょうか。 だとすれば、その理由が分かりません。 smtpサーバ2と繋がっているルータcは、宛先ipアドレスと 自分のルーティングテーブルさえ照合すれば、 tcpよりも上位層のsmtpの処理をするまでもなく(smtpサーバ2に ペイロードを渡す必要なく)、 そのままルータdに転送すればいいとすぐに分かるような気が致します。 tcpのペイロード部に含まれているデータが電子メールの場合、 ルーティング経路上のルータは、smtpサーバに一度渡し、 その結果を受け取ってまた流す、というような 規約になっているのでしょうか。 とすれば、宛先に到達するまでに ものすごい数のreveiveのヘッダフィールドが追加されてしまうような 気がいたします。この理解で合っておりますでしょうか。 つたない説明ですいませんが、どなたか教えてください。
回答: > そのipアドレスを(メールを記述したtcpパケットの)tcpヘッダに付加してルータaに渡してしまえば、 > あとはルータa~dが勝手にsmtpサーバ3まで転送してくれるような気がするのですが、 ipアドレスを格納するのはipデータグラムですが、質問者さんの直感は実際のsmtp転送の仕組みをほぼ正確に言い当てています。 各smtpサーバがインターネットに直接接続している、一般的な設定がされているメールサーバとして、smtpサーバ1は、"xxx@ccc.jp"宛てのメールを端末1から受け取ると、dnsで "@ccc.jp" を担当するメールサーバを探します。見つかると、smtpサーバ1はsmtpサーバ3に直接メールを送信しますので、このとき recievedヘッダにsmtpサーバ2が付加される余地はありません。 では、どういうケースでrecieved行が付加されるかというと、いくつかのパターンが考えられます よく目にするのは以下の3通りでしょうか。 (a) 送信側または受信側のネットワークで、smtpサーバが多段構成になっている場合 (b) メールがメーリングリストサーバを経由して配信されている場合 (c) ゲートウェイ型のウィルスチェックツールを経由している場合 (a) が分かりにくいかもしれませんが、たとえば会社の各部門でメールサーバを使用しているが、インターネット経由で別会社/別組織に送信するためには全社サーバを通さなければいけない、あるいはインターネットからメールを受信するサーバが制限されていて、受信したメールを更に配下のメールサーバに転送する必要がある、などという場合が該当します。 実のところ、大抵の組織のメール環境はsmtpサーバが多段構成になっています