コンテンツにスキップ

L4@OSI参照モデル

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. トランスポート層 (L4)

トランスポート層とは

アプリケーション層のプロトコルを適切なアプリケーションに振り分けるプロトコル (例:TCP、UDPなど) を処理する層である。


トランスポート層の仕組み

▼ 全体像

クライアントからのリクエスト時に、ネットワーク層から渡されたパケットのポート番号情報を元に、アプリケーション層の特定のプロセスにパケットを渡す。

また反対に、レスポンス時にアプリケーション層のプロセスから出力されたパケットに情報を付加し、ネットワーク層に渡す。

この時、各アプリケーションはプロセスとして稼働していることに留意する。

トランスポート層からアプリケーション層へのパケットの移動

▼ クライアントからのリクエスト時 (図の 『➡︎』 )

(1)

ネットワーク層でプライベートIPアドレスを使用して、リクエスト先のパソコンを識別する。

(2)

トランスポート層で、ポート番号を元にして、アプリケーション層のプロセスにパケットを送信する。

*例*

インバウンド通信を待ち受けるポート番号を8080と設定した場合、リクエスト時に以下の様にポート番号を指定すると、nginxプロセスにリクエストを送信できる。

GET http://127.0.0.1:8080

▼ クライアントへのレスポンス時 (図の 『⬅︎』 )

(1)

パケットの通過したポート番号をヘッダー情報として追加する。

(2)

ネットワーク層へ送信する。


02. TCP

TCPスリーウェイハンドシェイク

リクエストとレスポンスの送受信の前後に行われるTCPコネクションの確立のこと。


03. ソケット

ソケットとは

トランスポート層に存在し、受信した通信をアプリケーション層の各プロセスに振り分ける受け口をソケットという。

送信元のサーバーが宛先に対して、『192.168.1.1:50001 (送信元IPアドレス:送信ポート) 』『10.0.0.1:80 (宛先IPアドレス:宛先ポート) 』といったように、IPアドレスとポート番号の組合せで指定する。


ソケット接続とは

ソケット間のネットワーク接続をソケット接続という。


Unixドメインソケット

▼ Unixドメインソケットとは

Unixで使用されるソケットのこと。

ソケットファイルを経由して、同じOS上のプロセス間でパケットを送受信する。

unix-domain-socket

▼ 通信方法

プロトコルを『unix:』としてパケットを送受信する。

unix://./etc/foo.sock

ソケットファイル (.sockファイル) 自体にファイルとしての実体はなく、エンドポイントのように働く。

同じOS上で稼働するコンテナのプロセス間の通信でも使用できる。


04. プロセス間メッセージキュー

プロセス間メッセージキュー

同じOS上のプロセス間でメッセージを仲介する。

異なるOS間のメッセージを仲介する時は、ミドルウェアとしてのメッセージキューを経由する。


posixメッセージキュー

記入中...


05. L4ロードバランサー

L4ロードバランサーとは

通信のL4プロトコル (例:UDP、TCP) やツール固有のプロトコル (例:MySQL、Memcachedなど) のヘッダー情報に基づいて、通信をロードバランシングする。

L7プロトコルのヘッダー情報をもつ通信であっても、L4プロトコルの情報のみを使用してロードバランシングすることもできる (例えば、HTTPのバージョンの影響を回避できるといったメリットがある) 。

L7プロトコル (例:HTTP、HTTPS、SMTP、DNS、POP3など) のヘッダー情報を失うわけではなく、あくまでパケットのL4ヘッダー情報をロードバランシングに使用するだけである。

そのため、HTTPSで受信したリクエストをロードバランシングする時は、決して通信が平文になっているわけではなく、L7のペイロードは暗号化されたままである。

L4プロトコルは、ヘッダーに宛先の情報 (例:IPアドレス、ポート番号) をもっている。

L4ロードバランサーは、これらの情報に基づいて通信を待ち受けるサーバーに、通信をロードバランシングする。