ネットワークプログラミングの基礎


インターネットの仕組みに関しては, はい ぱーワークブック「ネットワークシステム」でも説明されているが,不十 分だと思われるので,ここで説明する.

インターネット上の多くのサービスは,サーバクライアントモデルで作られ ている.要求を出すのがクライアント,それにしたがってサービスを提供する のがサーバである.一般的に一対多の通信をする場合は,一の方がサーバ,多 がクライアントと思って良い.以下に,各種のサービスについてのサーバ,ク ライアントの例をあげる.

インターネット上の通信する場合の通信相手は,32ビットのIPアドレス,16 ビットのポート番号,通信の種類で指定する.これらの組合わせが 電話番号のようなものだと思ってよい.
IPアドレス
インターネットにつながったマシン(ネットワークインタフェースと言っ た方が近い)に一つづつついた 32ビットのアドレス.「133.11.171.98」のよう に8ビットづつ10進数で並べてあらわす.「http://133.11.171.98/index.html」 のようにURLの中でも使えるが通常は「dell.tanaka.ecc.u-tokyo.ac.jp」とい う覚えやすいホスト名の方を使う.IP アドレスとホスト名の変換には DNS(Domain Name System)サーバと通信しておこなう(これまたサーバクライアント モデルで動く).

32ビットでは,42億のアドレスしか表現できないので,現在128ビットのアドレス を使うIPv6(Internet Protocol version 6)が策定,テストされている.

ポート番号
提供するサービスによって区別される番号.Unixでは標準的なポート 番号は/etc/servicesに書かれている.1023以下の番号は特権ポートといって, スーパーユーザ以外は使うことができない.それ以外のポート番号は,早い者 勝ちで使うことができる.
通信プロトコルの種類
ストリーム型通信のTCP,パケット型通信のUDPの2種類があるが,TCPの方 がプログラミングがやさしく,また多くのサービスが TCP で提供されてるので, この授業では TCP だけを扱うことにする.

手でサーバと通信してみる

TCPのサービスをおこなうサーバとは,telnetを使って手で通信してみることが できる.telnetは,通常は
telnet ホスト名
で,遠隔ログインするために使うコマンドだが(in.telnetdと通信),
telnet ホスト名 ポート番号
とやると,他のサーバと通信することができる.たとえば,WWWサーバと通信して みよう.
dell% telnet dell.tanaka.ecc.u-tokyo.ac.jp 80
Trying 133.11.171.98...
Connected to dell.tanaka.ecc.u-tokyo.ac.jp.
Escape character is '^]'.
GET /~ktanaka/index.html
<html>
<HEAD>
<TITLE>TANAKA Tetsuro</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=ISO-2022-JP">
 <LINK REV=MADE HREF="mailto:ktanaka@XXX.tanaka.u-tokyo.ac.jp"> 
</HEAD>

<BODY>
<H1><IMG SRC="tanaka1.jpg" ALT="photo of tanaka">TANAKA Tetsuro</H1>

<A HREF="index-j.html">Japanese version is here</A>.

<DL>
<DT><IMG SRC="icons/yellowball.gif" ALT=""><STRONG>Name</STRONG>
<DD>TANAKA Tetsuro
<DT><IMG SRC="icons/yellowball.gif" ALT=""><STRONG>Birthday</STRONG>
<DD>February 19, 1965
<DT><IMG SRC="icons/yellowball.gif" ALT=""><STRONG>Club</STRONG>
<DD><a href="http://www.utmc.or.jp"><I>University of Tokyo Micro Comuputer Club</I> (UTMC)</A>
<DT><IMG SRC="icons/yellowball.gif" ALT=""><STRONG>Interests</STRONG>
<DD>
<A HREF="min-30.ps">Kanji Skeleton Font</A> to see a sample file),
Lisp Implementation,
Parallel Functional Programming language
<DT> <IMG SRC="icons/yellowball.gif" ALT=""><STRONG><A HREF="papers.html">Papers</A></STRONG>
</DL>
<HR>
<A HREF="/ecc/staff.html"><IMG SRC="icons/back.xbm" alt="back"></A> Back to ECC staffs page
<A HREF="/index-e.html"><IMG SRC="icons/back.xbm" alt="back"></A> Back to ECC home page

<HR>
<ADDRESS> TANAKA Tetsuro (ktanaka@XXX.ecc.u-tokyo.ac.jp) </ADDRESS>
</html>
Connection closed by foreign host.
こちらからどのような,コマンドを入れれば良いかというサーバごとの通信 手段はプロトコルと呼ばれる.たとえば,WWWサーバとの通信で使われるプロ トコルはHTTP(HyperText Transfer Protocol)と呼ばれる.これらのプロトコ ルのうち,標準的なものはRFC(Request for Comments)という形で文書化され ている.RFCはいろいろなところに置かれているが,東大内では ftp://ftp.u-tokyo.ac.jp/pub/RFC/以下にある.RFCを捜すには, rfc-index.txt という目次を見て,対応する番号のファイルを開く.たとえば,HTTPに対応するRFCは 1945 2068 番である.
簡単なクライアントプログラム