ネットワークやプログラミングに触れていると、「セッション」と「コネクション」という用語をよく耳にするのではないでしょうか。
ここでは両者の違いについて見ていきます。
セッション
セッションは英語で直訳すると「集まり」や「活動期間」となります。
ネットワークの世界では、主にアプリケーションやユーザーがひと続きとみなす通信状態を示す用語として使われます。
この説明だけで何となくわかったような気になるかもしれませんが、この”ひと続き”という表現が結構くせものであったりします。どこからどこまでをひと続きと見なすかは、アプリケーションの種類やユーザーの認識などによって異なるからです。
例えば、Webアクセスを例に考えてみます。
Webサーバーに接続してWebページを開き終えるまでの1回の通信(HTTPメッセージのやりとり)をセッションと呼ぶことがあります。
しかし、もっと広く捉え、ショッピング・サイトなどにアクセスして、自分のユーザーでログインして、買い物を終えて、ログアウトするまでの手続き全体をセッションと呼ぶケースもあります。
後者の場合、途中で何回HTTPメッセージのやりとりをしていようが、とにかくアプリケーションが「これで終わり」と決めない限りセッションは継続しているということになります。
コネクション
セッションと同様の通信状態を指す用語に「コネクション」があります。
英語で直訳すると、コネクションとは「連結」や「接続」という意味になります。
ネットワークの世界では、一般に通信相手との間で仮想的な接続状態を確立している様子を指します。TCPプロトコルを例にとると通信開始前に3ウェイハンドシェークにより、通信相手とコネクションを確立します。そして、そのコネクションを介して、アプリケーションどうしでデータの送受信を行うことになります。
単に、コネクションと言うときは、ほぼ間違いなくTCPを使って相手と通信するための接続状態(TCPコネクション)を示しています。
コネクションには、セッションのような曖昧さがありません。
なぜなら、誰と誰(IPアドレスとポート番号の組)が通信しているのかが明らかで、接続状態を確立する手順や接続状態を解除するための手続きが厳密に定義されているからです。
セッションとコネクションの違い
セッションとコネクションの違いについて、社内LANのパソコンからプロキシサーバー経由でWebアクセスするケースを考えてみます。
- まずパソコンは、Webサーバーではなくプロキシサーバーとの間でコネクションを張る。
- プロキシサーバーは、パソコンとの間だけでなくWebサーバーとの間でもコネクションを張る。
- そして、二つのコネクションに分かれていながら、WebブラウザとWebサーバーの間では一つのセッションとして通信している。
セッション | アプリケーションでひと続きとみなす通信状態 |
---|---|
コネクション | 通信相手との間で仮想的に作る接続状態 |
リンク | 隣接する相手と信号をやり取りできる状態 |
上図のようにTCP/IPプロトコル群で言うところのアプリケーション層(OSI参照モデルでいうセッション層以上)で考えれば「セッション」であり、仮想的な通信路を作成するトランスポート層で考えれば「コネクション」となるということです。