L4@OSI参照モデル¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. トランスポート層 (L4)¶
トランスポート層とは¶
アプリケーション層のプロトコルを適切なアプリケーションに振り分けるプロトコル (例:TCP、UDP など) を処理する層である。
トランスポート層の仕組み¶
▼ 全体像¶
クライアントからのリクエスト時に、ネットワーク層から渡されたパケットのポート番号情報を元に、アプリケーション層の特定のプロセスにパケットを渡す。
また反対に、レスポンス時にアプリケーション層のプロセスから出力されたパケットに情報を付加し、ネットワーク層に渡す。
このとき、各アプリケーションはプロセスとして稼働していることに留意する。
▼ クライアントからのリクエスト時 (図の 『➡️』 )¶
(1)-
ネットワーク層でプライベート IP アドレスを使用して、リクエスト先のパソコンを識別する。
(2)-
トランスポート層で、ポート番号を元にして、アプリケーション層のプロセスにパケットを送信する。
*例*
インバウンド通信を待ち受けるポート番号を 8080 と設定した場合、リクエスト時に以下のようにポート番号を指定すると、nginx プロセスにリクエストを送信できる。
GET http://127.0.0.1:8080
▼ クライアントへのレスポンス時 (図の 『⬅︎』 )¶
(1)-
パケットの通過したポート番号をヘッダー情報として追加する。
(2)-
ネットワーク層へ送信する。
02. リクエスト/レスポンス方式のプロトコル¶
TCP¶
記入中...
UDP¶
記入中...
独自プロコトル¶
▼ DB接続系¶
L7 のプロトコルに属する独自プロトコルもある (例:MySQL など) 。
- Redis
04. ソケット¶
ソケットとは¶
トランスポート層に存在し、受信した通信をアプリケーション層の各プロセスに振り分ける受け口をソケットという。
送信元のサーバーが宛先に対して、『192.168.1.1:50001 (送信元 IP アドレス:送信ポート) 』『10.0.0.1:80 (宛先 IP アドレス:宛先ポート) 』といったように、IP アドレスとポート番号の組合せで指定する。
ソケット接続とは¶
ソケット間のネットワーク接続をソケット接続という。
Unixドメインソケット¶
▼ Unixドメインソケットとは¶
Unix で使用されるソケットのこと。
ソケットファイルを経由して、同じ OS 上のプロセス間でパケットを送受信する。

▼ 通信方法¶
プロトコルを『unix:』としてパケットを送受信する。
unix://./etc/foo.sock
ソケットファイル (.sock ファイル) 自体にファイルとしての実体はなく、エンドポイントのように働く。
同じ OS 上で稼働するコンテナのプロセス間の通信でも使用できる。
05. プロセス間メッセージキュー¶
プロセス間メッセージキュー¶
同じ OS 上のプロセス間でメッセージを中継する。
異なる OS 間のメッセージを中継するときは、ミドルウェアとしてのメッセージキューを経由する。
posixメッセージキュー¶
記入中...
06. L4 ロードバランサー¶
L4 ロードバランサーとは¶
通信の L4 プロトコル (例:UDP、TCP) やツール固有のプロトコル (例:MySQL、Memcached など) のヘッダー情報に基づいて、通信をロードバランシングする。
L7 プロトコルのヘッダー情報を持つ通信であっても、L4 プロトコルの情報のみを使用してロードバランシングできる (例えば、HTTP プロトコルのバージョンの影響を回避できるといったメリットがある) 。
L7 プロトコル (例:HTTP、HTTPS、SMTP、DNS、POP3 など) のヘッダー情報を失うわけではなく、あくまでパケットの L4 ヘッダー情報をロードバランシングに使用するだけである。
そのため、HTTPS で受信したリクエストをロードバランシングするときは、決して通信が平文になっているわけではなく、L7 のパケットペイロードは暗号化されたままである。
L4 プロトコルは、ヘッダーに宛先の情報 (例:IP アドレス、ポート番号) をもっている。
L4 ロードバランサーは、これらの情報に基づいて通信を待ち受けるサーバーに、通信をロードバランシングする。