OSI参照モデルの第6層(プレゼンテーション層)とは?役割と身近な例

OSI参照モデルの第6層(プレゼンテーション層)のアイキャッチ画像

OSI参照モデルの第6層(プレゼンテーション層)は、やりとりするデータの「表し方」をそろえる層です。文字化けや、Webページの圧縮、暗号化の話は、この層の考え方と深く関係しています。

この記事では、プレゼンテーション層の役割を標準の文書にそって説明し、文字コード(UTF-8)、圧縮、暗号化などの身近な例、TCP/IPモデルでの扱い、よくあるトラブルと確かめ方を解説します。

OSI参照モデルの第6層プレゼンテーション層を強調した7層図。身近な例は文字コード・圧縮(暗号化を含める説明もある)
目次

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

送る側と受け取る側で表し方がちがっても、プレゼンテーション層が文字コードや圧縮で共通の形にそろえて受けわたすイメージ図

コンピューターによって、文字や数値をメモリの中でどう表すかはちがうことがあります。それぞれが自分のやり方のままデータを送ると、受け取った側で正しく読めません。

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層では、一般に「データ」と呼ばれる

文字コードと「文字化け」

同じバイトの並びをUTF-8として読むと正しく表示され、Shift_JISとして読むと文字化けすることを示した図

コンピューターは、文字を数値(バイト)に置きかえて扱います。どの文字をどの数値で表すかのルールが文字コードです。いま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つずつ解説しています(各記事は順に公開予定です)。

参考資料

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次