基礎から分かるネットワーク入門 Part1での質問

ナイペータです。戸根先生よろしくおねがいします。

今回は、基礎から分かるネットワーク入門から質問です。
この章は、先生が執筆した章ではありませんが教えていただけると
ありがたいです。

1. 質問ですが、P19で「イーサネットは、あるマシンが送ったデータをすべてのマシンに届ける」とありました。私の認識では、NICから出たパケットは、 ArpによってIPアドレスを得て、目的のPCなり通信機器に届きます。その通信パケット自体、すべてのマシンには、届けていないと考えられます。(Arpでは、すべてのマシンにパケットを届けている形にはなっているが・・。)
P19で書かれている内容は、どの状態での話なのでしょうか?

イーサネット上のハブは、自身のポートからデータをばらまきます。(スイッティングハブは別ですが・・。)この、ハブの動きと上記の疑問点は共通しているのでしょうか?
また、これはWindowsマシンの環境での話しなのでしょうか?Unix系でも同じ現象が起こるものと考えていいのでしょうか?P42では、「Unixだけで構成したTCP/IPネットワークの世界では、ブロードキャストによるホスト名の名前解決は存在しない」と書かれています。

2. P9の余白部分の「HTTP」の解説で質問です。
ここでは、「HTTP自体は、コネクションレス型である」とかかれています。
要するにUDPを使用しているということですが、HTTPは、TCPを使用しているものとばかり思っていましたが、やはりUDPを使用しているのでしょうか?

長くなってしまいましたが、よろしくおねがいします。
ナイペータ

名前: 
ナイペータ
日時: 
04/07/11 00:47

コメント

ナイペータさん,こんにちわ。

>「イーサネットは、あるマシンが送ったデータをすべてのマシンに届ける」

これは,信号がすべてのマシンに届くということです。

で,信号を受信したマシンは次のように動きます。
まず,宛先アドレスを調べ,自分が該当するするかどうか判断します。
そして,該当すればパケットを受信しますし,該当しなければ信号を無視します。

これがイーサネットの基本動作で,この考え方に照らし合わせると,
ARPパケットの場合は,宛先アドレスがブロードキャストアドレスですから,
全員が該当するので全員がパケットを受信し,
通常のパケット(ユニキャストパケット)は特定のマシンだけが該当するので,
そのマシンだけがパケットを受信することになります。

信号が届くことと,パケットを受信することは別だと考えればよいでしょう。

> 「HTTP自体は、コネクションレス型である」

HTTPというプロトコルは,
リクエストを送るとレスポンスが返ってくるのが基本動作です。
で,一つリクエストを送って,それに対して一つレスポンスが返ってくるのを
一つのやり取りだということにすると,
その一つ一つのやり取りを独立したものと見なします。
IPがパケットを一つ一つ独立したものと見なすのと同じです。
そのことを指してコネクションレス型だと云ってるんです。

HTTPがコネクションレス型だというのは,
HTTPというプロトコルの特徴を表しているだけで,
HTTPのメッセージをどのような方法で運ぶかということは別問題です。
HTTPがコネクションレス型だということと,
そのメッセージをコネクション型のTCPプロトコルで運ぶということは,
全く別のことだということです。

なお,HTTPプロトコルの仕様には,
メッセージを運ぶプロトコルに関する規定はないはずなので,
理屈の上では,UDPを使ってHTTPメッセージを運んでもかまいません。
ただ,UDPはメッセージ長に制限があり,
リライアブル(エラー回復などを行わないということ)でもないので,
実用的ではありません。
だから,HTTPメッセージはTCPで運ぶわけです。

回答ありがとうございました。

1.としては、信号が届くことと,パケットを受信することは別だと考えればよいということで納得です。

2. のHTTPについてですが、HTTPがプロトコルとしてはコネクションレス型であると書かれていらっしゃいましたが、私自身コネクションレス型とはスリーウェイハンドシェイクを行わずに、送信開始合図なしでパケットを送るという解釈を持っています。HTTPでは、一つ一つのアクセスが独立していることは、分かるのですが、その一つ一つのやり取りを独立したものと見なしますということから、コネクションレス型であるという方向になるのに未だにイメージできないでいます。

何度も恐れ入りますが、よろしくお願いします。

ナイペータ

>コネクションレス型とはスリーウェイハンドシェイクを行わずに、
>送信開始合図なしでパケットを送るという解釈

まさにこの意味でHTTPはコネクションレスなんです。
つまり,HTTPにはコネクションを確立するためのハンドシェークはなく,
いきなりリクエストを送るとレスポンスが返ってくるわけです。
ただTCPでHTTPメッセージを送るときは,
HTTPメッセージを送る前にTCPがハンドシェークを行います。
しかし,そのハンドシェークはTCPプロトコルのものであって,
HTTPのハンドシェークではありません。

要するに,HTTPがコネクションレスかどうかというところは,
TCPとは切り離して考えなければいけないんです。