OSI参照モデルの第6層(プレゼンテーション層)は、やりとりするデータの「表し方」をそろえる層です。文字化けや、Webページの圧縮、暗号化の話は、この層の考え方と深く関係しています。
この記事では、プレゼンテーション層の役割を標準の文書にそって説明し、文字コード(UTF-8)、圧縮、暗号化などの身近な例、TCP/IPモデルでの扱い、よくあるトラブルと確かめ方を解説します。

プレゼンテーション層とは?役割をひとことで

コンピューターによって、文字や数値をメモリの中でどう表すかはちがうことがあります。それぞれが自分のやり方のままデータを送ると、受け取った側で正しく読めません。
OSI参照モデルを定めたITU-T X.200(ISO/IEC 7498-1と同じ内容)では、プレゼンテーション層について、アプリどうしがやりとりするデータに共通の表し方を提供し、アプリが「表し方のちがい」を気にしなくてすむようにする(構文からの独立)と説明しています。また、転送中にデータの中身が保たれるようにすることも役割です。
X.200で挙げられている主な働きは次のとおりです。
- 転送のための表し方(転送構文)を決める:お互いが受け入れられる表し方を選び、必要なら話し合い直す
- 表し方を変換する:アプリが使うデータを、選んだ転送の表し方に変換する。X.200は、その例としてデータの圧縮を挙げている
たとえるなら、言葉のちがう人どうしの会話を取り持つ「通訳」のような層です。話の中身(アプリケーション層)は変えずに、伝え方(表し方)だけをそろえます。
プレゼンテーション層の身近な例
| 分類 | 例 | この層との関係 |
|---|---|---|
| 文字コード | UTF-8、Shift_JIS、EUC-JP | 文字を何バイトのどんな値で表すかを決める |
| 圧縮 | gzip(RFC 1952)、Webページの Content-Encoding: gzip | データを小さな形に変換して送り、受け取った側で元に戻す |
| データの形式 | JSON、XML、画像のJPEG・PNG | データをどんな形式で表すか |
| 暗号化 | HTTPSのTLS | データを第三者に読めない形に変換して送る(扱いは下の注意を参照) |
| データの呼び方(PDU) | データ | 第5〜7層では、一般に「データ」と呼ばれる |
文字コードと「文字化け」

コンピューターは、文字を数値(バイト)に置きかえて扱います。どの文字をどの数値で表すかのルールが文字コードです。いまWebでいちばん広く使われているのはUTF-8で、RFC 3629では、UTF-8は文字を1〜4バイトで表し、英数字などのUS-ASCIIの範囲の文字はそのまま1バイトで表すと定められています。
送る側がUTF-8で書いたデータを、受け取る側がShift_JISだと思って読むと、同じバイトの並びが別の文字として表示されます。これが文字化けです。「どの表し方で送ったか」を伝え、受け取る側もそれに合わせることが大切で、これはまさにプレゼンテーション層の考え方です。Webでは、HTTPの Content-Type ヘッダーの charset(RFC 9110)や、HTMLの <meta charset="utf-8"> で文字コードを伝えます。
圧縮(gzipなど)
Webサーバーは、HTMLやCSSなどをgzipなどで圧縮して送ることがあります。ブラウザが「この圧縮方式なら読めます」とリクエストの Accept-Encoding で伝え、サーバーは圧縮した場合に Content-Encoding: gzip のように応答で知らせます(RFC 9110)。ブラウザは受け取ったデータを元に戻してから表示します。中身を変えずに、送るときの表し方だけを変えるので、プレゼンテーション層の役割の典型的な例です。
暗号化(TLS)について
多くの解説書では、暗号化もプレゼンテーション層の例として紹介されています。データを「読めない形に変換して送り、受け取った側で元に戻す」という点で、表し方の変換に近いからです。
ただし、X.200のプレゼンテーション層の説明に暗号化は出てきません。OSIのセキュリティは、X.200の本文で、別の文書(ITU-T X.800、OSIセキュリティアーキテクチャ)で扱うとされています。また、HTTPSで使われるTLS(RFC 8446)は、役割としては第5〜6層に近いと説明されることが多いものの、OSIに合わせて作られたプロトコルではないため、資料によって扱いが異なります。「暗号化=必ず第6層」と決めつけず、「第6層に近い役割」と理解しておくのがおすすめです。
TCP/IPモデルではどこにあたる?
RFC 1122は、TCP/IPのアプリケーション層について「OSI参照モデルの上の2つの層、プレゼンテーション層とアプリケーション層の機能をまとめたもの」と説明しています。つまり、TCP/IPには独立したプレゼンテーション層はなく、文字コードや圧縮の扱いは、HTTPなどのアプリケーション層のプロトコルや、アプリ自身が受け持ちます。HTTPの Content-Type や Content-Encoding は、その代表的な例です。
よくあるトラブルと確かめ方
よくある症状と原因
- 文字化けする:ファイルの文字コードと、表示する側が想定している文字コードがちがう
- CSVをExcelで開くと文字化けする:UTF-8のファイルが、別の文字コードとして読みこまれている
- メールの件名や本文が読めない:送信側と受信側のソフトで、文字コードの扱いが合っていない
- HTTPSのサイトで「この接続は安全ではありません」と出る:証明書の期限切れや、名前の不一致など(TLSの問題)
コマンドで確かめる(Linux・macOSの例)
次のコマンドは、ファイルや通信の情報を表示するだけの確認用です。
file -i memo.txt
ファイルの種類と文字コードの推測結果を表示します(macOSでは file -I)。charset=utf-8 のように表示されます。あくまで推測なので、まちがえることもあります。
iconv -f SHIFT_JIS -t UTF-8 old.txt > new.txt
Shift_JISのファイル old.txt を、UTF-8に変換して new.txt として保存します。元のファイルは残るので、変換結果を確かめてから使いましょう。
curl -sI -H 'Accept-Encoding: gzip' https://example.com/
Webサーバーの応答ヘッダーを表示します。content-type の charset で文字コードを、content-encoding で圧縮の方式を確かめられます。
openssl s_client -connect example.com:443 -servername example.com </dev/null
HTTPSのサイトとTLSの接続を一度だけ行い、使われたTLSのバージョンや証明書の情報を表示します。証明書の期限(NotAfter)や、相手の名前が正しいかを確かめるときに役立ちます。
よくある質問
プレゼンテーション層は何のためにあるの?
コンピューターやアプリによってデータの表し方がちがっても、正しくやりとりできるようにするためです。アプリは、相手のコンピューターの表し方を気にせず、中身だけを考えればよくなります。
UTF-8とShift_JIS、どちらを使えばいい?
新しく作るWebページやファイルでは、UTF-8を選ぶのが一般的です。Shift_JISは、古いシステムとのやりとりで今も使われることがあるので、相手に合わせる必要がある場合だけ使いましょう。
圧縮すると画質や中身が変わる?
gzipのようにデータを元どおりに戻せる圧縮(可逆圧縮)では、中身は変わりません。JPEGのように、元どおりには戻らない圧縮(非可逆圧縮)では、画質が少し変わることがあります。
まとめ
- プレゼンテーション層は、データの「表し方」をそろえる層(X.200)
- 身近な例は、文字コード(UTF-8など)、圧縮(gzipなど)、データの形式。暗号化も一般に例として挙げられるが、X.200の本文には出てこない
- 文字化けは、送る側と受け取る側で文字コードの解釈がずれたときに起きる
- TCP/IPには独立した層がなく、アプリケーション層がこの役割をまとめて受け持つ(RFC 1122)
- 確かめるときは
file -i、curl -sI、openssl s_clientなどを使う
前の層は第5層(セッション層)、次の層は第7層(アプリケーション層)です。どちらもシリーズの記事で解説しています。
OSI参照モデル シリーズ記事
このシリーズでは、OSI参照モデルの全体像と、7つの層を1つずつ解説しています(各記事は順に公開予定です)。
- OSI参照モデルとは?(全体像)
- 第1層 物理層
- 第2層 データリンク層
- 第3層 ネットワーク層
- 第4層 トランスポート層
- 第5層 セッション層
- 第6層 プレゼンテーション層
- 第7層 アプリケーション層
参考資料
- ISO/IEC 7498-1:1994 Information technology — Open Systems Interconnection — Basic Reference Model: The Basic Model
- ITU-T Recommendation X.200 (07/94) Basic Reference Model: The basic model
- RFC 1122: Requirements for Internet Hosts – Communication Layers
- RFC 3629: UTF-8, a transformation format of ISO 10646
- RFC 1952: GZIP file format specification version 4.3
- RFC 9110: HTTP Semantics
- RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3

コメント