
■ スリーウェイ・ハンドシェイク ■
前回はWEBページを見る時にサーバーとクライアント間でやり
取りされる文字列について説明しました。
クライアントパソコンがサーバーに対して「WEBページ見せて。」
という意味の文字列「GET / HTTP/1.0」を送信し、その後サー
バーからWEBページのデータが送られてくるのでした。
この様に、Yahoo!等のWEBページを見る時には、クライアント
とサーバーの間で文字列のやり取りが行われます。
ところでサーバーはいきなり「GET / HTTP1.0/」等の文字列を
送られてきて対応する事が出来るのでしょうか?
答えは「NO」です。
いきなりそのような文字列を送られてきてもサーバーは対応す
ることが出来ません。
何故対応できないかというと、「GET / HTTP1.0/」のような文
字列を受け入れる準備が出来ていないからです。
「文字列を受け入れる準備」というのは、具体的には文字列を
処理するプログラムを動作させたり、文字列を格納するバッフ
ァを確保したり、という事です。
では、サーバーに「文字列を受け入れる準備」をしてもらうに
はどうすれば良いのでしょうか?
それには、クライアントパソコン(依頼する側)からサーバー
(サービスする側)に対して「準備は良いですか?」と確認を
してあげる必要があります。
┌──────┐「準備は良いですか?」 ┌─────┐
│クライアント├─────────────→│WEB │
│パソコン │ │サ−バ− │
└──────┘ └─────┘
IE等でWEBページ YAHOO等のWEBページを作成、
を見たい人 管理している会社や個人
上の図で、クライアントからサーバーに送出されているデータ
の事を「SYN」といいます。
「SYN」というのは、クライアントとサーバーが協調(Synch
ronize)して動作する為に送られるデータです。
サーバーはこの確認要求を受け取ると、「準備は良いですよ。
あなたの方も準備良いですか?」と返事を返してきてくれます。
┌──────┐「準備は良いですよ」 ┌─────┐
│クライアント│←─────────────┤WEB │
│パソコン │「あなたも準備良いですか?」│サ−バ− │
└──────┘ └─────┘
IE等でWEBページ YAHOO等のWEBページを作成、
を見たい人 管理している会社や個人
上の図のサーバーからクライアントに送出されているデータで、
「準備は良いですよ」と言っている部分を「ACK」といいま
す。
「ACK」というのは、応答(Acknowledgement)という意味で
す。
クライアントからの準備確認に対して返事を返してあげている
のです。
また、「あなたも準備良いですか?」と言っている部分があり
ます。
これは、「サーバーからクライアントに対しての」準備確認の
要求です。
これも先ほどと同じ「SYN」といいます。
サーバーからクライアントに対して送られている「ACK」と
「SYN」ですが、意味が2つあるからと言って、データが2
回送られる事はなく、1つのデータとしてまとめて1回で送ら
れます。
クライアント側はこのサーバーからの応答(ACK)を受けて、
サーバーの準備が出来ているのだという事を認識します。
それとともに、自分は準備出来てるのかと問い合わせ(SYN)
を受けたわけですから、その返事を返してあげます。
┌──────┐「準備は良いですよ」 ┌─────┐
│クライアント├─────────────→│WEB │
│パソコン │ │サ−バ− │
└──────┘ └─────┘
IE等でWEBページ YAHOO等のWEBページを作成、
を見たい人 管理している会社や個人
上の図で、クライアントからサーバーに送出されているデータ
の事を「ACK」といいます。
「ACK」というのは、応答(Acknowledgement)という意味で
す。
サーバーからの準備確認に対して返事を返してあげているので
す。
サーバーはこの応答を受けてクライアントの準備が出来ている
のだという事を認識します。
この一連のやりとりを見ていると、クライアントとサーバーが
お互いに「協調して動作しましょうね。」と言い合っているの
が分かります。
サーバーはこのやりとりを経て、文字列を処理する為のプログ
ラムを動作させたり、文字列を格納するバッファを確保したり
します。
つまりこれにより実際にデータを送受信する為の準備が整った
という事になるので、「呼が確立された」と言う事になります。
以上の一連のやり取りをまとめます。
1.クライアントからサーバーへ準備の確認(SYN)
┌──────┐「準備は良いですか?」 ┌─────┐
│クライアント├─────────────→│WEB │
│パソコン │ │サ−バ− │
└──────┘ └─────┘
IE等でWEBページ YAHOO等のWEBページを作成、
を見たい人 管理している会社や個人
2.サーバーからクライアントへ応答&クライアントの準備の
確認(ACK/SYN)
┌──────┐「準備は良いですよ」 ┌─────┐
│クライアント│←─────────────┤WEB │
│パソコン │「あなたも準備良いですか?」│サ−バ− │
└──────┘ └─────┘
IE等でWEBページ YAHOO等のWEBページを作成、
を見たい人 管理している会社や個人
3.クライアントからサーバーへ応答(ACK)
┌──────┐「準備は良いですよ」 ┌─────┐
│クライアント├─────────────→│WEB │
│パソコン │ │サ−バ− │
└──────┘ └─────┘
IE等でWEBページ YAHOO等のWEBページを作成、
を見たい人 管理している会社や個人
3回データのやり取りが行なわれています。
このサーバーとクライアントのやり取りの事を、まとめて
「スリーウェイ・ハンドシェイク」(3 way handshake)
と呼びます。
さて、この「スリーウェイ・ハンドシェイク」ですが、WEBペ
ージを見る為だけに行なわれるわけではありません。
実は他のサービスにおいても、このやり取りが行なわれていま
す。
メールを送る時にも、受信する時にも、FTPでファイル転送を
行なう時にも。
大方のサービスにおいて、です。
さて、ここでサーバーに注目してみましょう。
例えば、1台のサーバー上でメールサービスとWEBサービスを
2つ行なっているとします。
(WEBサービスというと、.NETのXML WEBサービスを思い浮かべ
る方がいらっしゃると思いますが、ここでは単に「WEBページ
を見る為のサービス」という意味で使っています。)
以下にその図を示します。
┌──────────────────┐
│ サーバー │
│┌───────┐┌───────┐│
││メールサービス││WEBサービス││
│└───────┘└───────┘│
│ │
└──────────────────┘
ここに先ほどの、スリーウェイ・ハンドシェイクを行なう為の
データが来たとします。
┌──────────────────┐
│ サーバー │
│┌───────┐┌───────┐│
││メールサービス││WEBサービス││
│└───────┘└───────┘│
│ ↑ │
└─────────────┼────┘
│
──────────────┘
SYNデータ
このSYNデータですが、メールとWEBの2つのサービスが
行なわれているにも関わらず、WEBサービスの方へ届いてい
ます。
何故WEBサービスの方へ届いたのでしょうか?
大体想像が付く方もいらっしゃるかと思いますが、答えは次回
に行ないます。