【OSI 参照モデル レイヤ6 プレゼンテーション層】MIME とは

OSI 参照モデル

本記事は、全7回に渡る OSI 参照モデルの解説のうち、レイヤ6のプレゼンテーション層に関する記事です。

その他のレイヤの解説については以下の記事をご確認ください。

スポンサーリンク

プレゼンテーション層

プレゼンテーション層とは、データを適切な形式に変換(ファイルを圧縮したり、文字コードを変換したり)する層です。

TCP/IP には対応する層が存在せず、アプリケーション層で実装されることが多いです。

OSI 参照モデルのプレゼンテーション層に相当する規格として、HTTP や電子メール(SMTP 等)のデータ転送で利用する MIME(Multipurpose Internet Mail Extensions)と呼ばれる規格があります。

スポンサーリンク

MIME とは

MIME とは、電子メールで日本語や絵文字やバイナリデータ(画像や音楽ファイル)等を扱えるようにする拡張仕様です。
一部機能は HTTP に流用されており、ファイルの形式(画像、音楽、動画等)を指定するために利用されています。

当初、電子メールでは、ASCII コード(英数字といくつかの記号)しか利用できませんでした。MIME は、電子メールで UTF-8 (日本語や絵文字)等の文字コードを指定可能としました。

また、電子メールは文字データを送信する前提の作りでしたが、MIME でバイナリデータ(画像や音楽ファイル)を許容する仕様が追加されました。

MIME で利用するヘッダ

ここでは、電子メールで利用する MIME ヘッダについて説明を行います。HTTP で利用する MIME タイプとは仕様が異なる場合があります。

MIME-Version

MIME-Version は、MIME のバージョンを表します。
現在は Version 1.0 しかないので気にする必要はありません。

Content-Type

Content-Type は、以下の書式でデータの種類を指定を表します。

Content-Type: type/subtype; parameter

Content-Type は HTTP でも利用されており、代表的な種類に以下のようなものがあります。

Content-Type説明
text/html; charset=UTF-8文字コードはUTF-8 の html 形式の text
image/jpeg; name="<ファイル名>"jpeg の画像ファイル
multipart/mixed;色々なタイプのデータが混ざっている
multipart/alternative;HTML 形式と plan テキストの2種類がデータに存在

HTTP における Content-Type の一覧は以下のとおりです。

MIME タイプ (IANA メディアタイプ) - HTTP | MDN
メディアタイプ (別名 Multipurpose Internet Mail Extensions または MIME タイプ) は、文書、ファイル、またはバイト列の性質や形式を示す標準です。

Content-Transfer-Encoding

Content-Transfer-Encoding は、エンコード方式を指定します。

Content-Transfer-Encoding では、主に以下の項目が指定されます。

Content-Transfer-Encoding説明
7bit7bit の文字列 ASCII コード など
8bit8bit の文字列 UTF-8 など
binaryバイナリデータ
base64base64(ASCII コードしか使えない場合、バイナリデータを ASCII 文字列に変換するために利用)

MIME マルチパート

MIME マルチパートは、複数のデータ形式(html、通常テキスト、画像など)を持つ電子メールを、データ形式ごとに複数のパートに分ける方法です。
パートは boundary と呼ばれる区切り文字を利用します。

実際にメールを送信し、MIME のデータを確認してみましょう。

添付ファイル:1_l.jpeg
本文:「本文です」

gmail で上記のメールの「メッセージのソースを表示」を選択すると以下のように表示されます。

Content-Type: multipart/mixed; boundary="0000000000004553ed05ca6294d8"
# multipart/mixed; から文字やバイナリ(画像)が混ざっていることがわかります。
# また区切り文字が「0000000000004553ed05ca6294d8」であることもわかります。
--0000000000004553ed05ca6294d8
Content-Type: multipart/alternative; boundary="0000000000004553e905ca6294d6"
# multipart/mixed; 用の区切り文字から開始
# HTML と プレーンテキストが混ざっていることがわかります。
# multipart/alternative;用の区切り文字は"0000000000004553e905ca6294d6"です。

--0000000000004553e905ca6294d6
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64

5pys5paH44Gn44GZ44CCDQo=
# multipart/alternative;用の区切り文字から text/plain を開始
# プレーンテキストで文字コードは UTF-8, エンコードは base64 であることがわかります。
# 以下のコマンドより、base64 でエンコードされた「5pys5paH44Gn44GZ44CCDQo=」は
#「本文です。」ということがわかります。
# $ echo 5pys5paH44Gn44GZ44CCDQo=|base64 -d
# 本文です。

--0000000000004553e905ca6294d6
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64

PGRpdiBkaXI9Imx0ciI+5pys5paH44Gn44GZ44CCPGJyPjwvZGl2Pg0K
# multipart/alternative;用の区切り文字から text/html を開始
# html 版のテキストです。
# 以下のコマンドより、base64 でエンコードされた内容は
#「<div dir="ltr">本文です。<br></div>」ということがわかります。
# $ echo PGRpdiBkaXI9Imx0ciI+5pys5paH44Gn44GZ44CCPGJyPjwvZGl2Pg0K|base64 -d
# <div dir="ltr">本文です。<br></div>

--0000000000004553e905ca6294d6--
# multipart/alternative;用の区切り文字終了(語尾が「--」のため)
--0000000000004553ed05ca6294d8
Content-Type: image/jpeg; name="1_l.jpg"
Content-Disposition: attachment; filename="1_l.jpg"
Content-Transfer-Encoding: base64
# multipart/mixed; 用の区切り文字開始
# データは jpeg の画像でファイル名は"1_l.jpg"であることがわかります。
# エンコード方式は base64 であることがわかります。

--0000000000004553ed05ca6294d8--
# multipart/mixed; 用の区切り文字終了
スポンサーリンク

次のレイヤについて

OSI 参照モデル レイヤ6のプレゼンテーション層に関する説明は以上となります。

次のレイヤに関する説明は以下の記事をご覧ください。

参考資料

以下のサイトや書籍を参考にしました。

Multipurpose Internet Mail Extensions - Wikipedia
3 Minutes Networking
ネットワークエンジニアとして
ネットワークエンジニアに必要なネットワーク技術とCisco・Juniper・F5製品の技術解説。NWエンジニアの仕事内容や年収を紹介。ネットワークスペシャリスト、CCNA/CCNP/CCIEの情報発信。
0

コメント