連載第4回
TCP/IPアレルギー撲滅ドリル【下位レイヤ編】

ウィンドウは主導権と良心のはざまで

福永勇二
インタラクティブリサーチ
2004/4/27


素朴な疑問
もー、やってらんない!なってときは
  1. やってもやっても仕事が片付きません
忙しさを伝えて無理難題から逃れる
  1. いつでも受信できるとは限りません!
  2. 腐らせないためにはどうすればいいでしょうか?
  3. 忙しさを知らせる方法を教えてください
  4. 駐車場(ウィンドウ)の大きさが変わる?

渋滞防止に協力する

  1. ほかに原因はないか
  2. 道が込んだらどうしましょう。あきらめる?

渋滞を防ぐ2つの秘策

  1. 手立ては1つだけ?
  2. 送信量の減らし方は?
  3. 送信量を増やすときのポイントは?
  4. 2つの仕組みがごっちゃになりそうですが……
 もー、やってらんない!なっ
 てときは

 前回「分かるスライディングウィンドウ、見えるEhtereal」では、TCPの仕組みを本来のTCP用語で説明してみました。「連続送り」をキーワードに、独自スタ イルでの説明を試みる「TCPの迷宮をさまよってみませんか? 」とぜひ一緒にご覧ください。今回は、手が回らずに受け取りきれそうにないとき、TCPがどう対処するのかについてお伝えします。

やってもやっても仕事が片付きません

 サボっているわけじゃないのに、いくらやっても片付かない。手元の仕事だけであっぷあっぷしているのに、さらに新しい仕事がやって来る。そんなとき、あなたならどうしますか? 仕事を出す側の気の利いた調整に期待? そんなの無理だってことは、誰しも承知しています。

 そんなときは「いま、対応できません。ちょっと待ってください」と、仕事を出す側にはっきり伝える必要があります。仕事を出す側は、仕事を受ける側の状況を知りません。そこで、仕事を受ける側が、自分の現在の状況に応じて仕事を出す側に調節を依頼する。そういう考え方です(現実には、そう伝えても仕事がやって来ることが多いのは、皆さんご承知のとおりですが)。

 実は、確実な通信がモットーのTCPでも、これと同様なことが行われています。こうすることで、受信側が手に負い切れない状況の発生を防いでいるのです。処理できないといっているのに、無理やり仕事を押し付けてくる困った上司はいないので安心してください。今回はこの辺りの話をしたいと思います。

 忙しさを伝えて無理難題から逃れる

いつでも受信できるとは限りません!

 これまでの説明では、荷物を受け取る側に駐車場を用意して、その広さいっぱいまで、送り主がトラックを送り出せるという話をしました。でも、ちょっと考えてみてください。いくら駐車場が広いからといって、棚卸しでスタッフが全員出払っているときに、アルバイト学生1人が駐車場にあるトラック1000台の荷物の検収ができるでしょうか?

 多くのトラックが、想定を超えた長時間、ひたすら駐車場で待たされることになり、食料品などは腐って使い物にならないかもしれません。

図1 検収し切れないのに広い駐車場にトラックがたまる

腐らせないためにはどうすればいいでしょうか?

 こんな事態が予想されるのであれば、荷物を受け取る側は、荷物の発送元に「しばらく受け取れそうにありません」と通知しておくのが親切というものです(図2)。これを聞いた発送元は、トラックを出発させませんから、駐車場でみすみす荷物を腐らせずに済みます。

図2 手が回りそうにないときは「受け取れない」と通知する

 これは冒頭に書いた話に通じます。荷物を受け取る側が、自分の現在の状況を伝えることで、荷物をスムーズに、かつ漏れなく受け取ることができる仕組みだからです。

忙しさを知らせる方法を教えてください

 TCPでは例のウィンドウの仕組みを使って忙しさを知らせます。TCPを知るのにウィンドウをパスできないのは、ここからも垣間見ることができます。

 ウィンドウの仕組みを使って、どうやって忙しさを伝え、さらに受け取る情報量をコントロールするのでしょうか。これは意外と簡単です。1000台入る広い駐車場があっても、20台しか入らないとアナウンスすればいいのです(図3)。

図3 実際の駐車場の広さ(ウィンドウサイズ)より小さく知らせる

 発送元は、受け取り確認が来るまでの間、最大で駐車場の広さ分までしかトラックを出発させません。たとえ本当は1000台分のスペースがあるとしても、駐車場スペースが20台分だと知らせておけば、ある瞬間に到着しているトラックは最大でも20台を超えることはありません。この程度なら、学生アルバイト1名でも検収できる量でしょう。

駐車場(ウィンドウ)の大きさが変わる?

 ウィンドウ(駐車場)の大きさは、通信が始まる冒頭で相手に知らせます。しかしこれだけだと、受け取る荷物の量を調節できません。そこでTCPでは、このほかに受け取り確認(ACK)と一緒に最新のウィンドウサイズを発送元に知らせるルールになっています(図4)。このとき知らせるウィンドウサイズ(駐車場容量)を小さくしておけば、送信元から送り付けられる荷物の数は少なくなります。

図4 受け取り確認にウィンドウサイズが入っている

 このように、受信側が自分の状態を相手に知らせ、それに基づいて送信側が送信を控えたり、再開したりすることで、取りこぼしが起きないようにすることを「フロー制御(流量制御)」といいます。フロー制御をすれば、受信側が過負荷状態などになっても、取りこぼしのない確実な通信を行うことができます。

 

TCP/IPアレルギー撲滅ドリル【下位レイヤ編】(4)目次
1  もー、やってらんない!なってときは
 忙しさを伝えて無理難題から逃れる
2  渋滞防止に協力する
 渋滞を防ぐ2つの秘策

関連リンク
  連載:TCP/IPアレルギー撲滅ドリル【超実践編】(上位レイヤ編)
連載:インターネット・プロトコル詳説

連載:ルータの仕組みを学ぼう
ホストのネット接続は正しく行われているか? 〜netstatによるネットワーク設定の確認〜

「Master of IP Network総合インデックス」


Master of IP Network フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Master of IP Network 記事ランキング

本日 月間