ネットワークプログラミングの基礎知識
TOP >> ネットワークプログラミングの基礎知識
ここではIPアドレスやポート番号、クライアントとサーバの役割などを説明し、
perl・C言語・Java などでソケット (Socket) を使った HTTP クライアントや
POP3 クライアント、簡単なサーバを作成してみます。
要はネットワークプログラミングをやってみよう、ということです。
このページのサンプルプログラムは、RFC などの規格に準拠した﹁正しい﹂プログラムではありません。
また、全体的にエラー処理が不十分です (今後改善する予定です)。
あくまでも概要を理解するためのサンプルととらえてください。
もし本気でしっかりとしたクライアントやサーバを書きたいなら、このページを読んだ上で、
さらに RFC を熟読し、そして wget・Apache・ftp コマンドなどのソースを参考にしてください。
このページに間違いを見付けたら、掲示板 で教えていただけると幸いです。
基本的に FreeBSD・Linux などの UNIX 系OSを使っている人を対象として書きましたが、
Windows ユーザにも理解できるように補足を入れたつもりです。
基礎編
●IPアドレスとホスト名
●クライアントとサーバの概念
●ポート番号
●クライアントを作るにあたっての注意点 RFC について
●HTTP クライアントを作ってみよう(1)
●HTTP クライアントを作ってみよう(2)
●HTTP クライアントを作ってみよう(3) 改良版 HTTP クライアント
●HTTP クライアントを作ってみよう(4) POSTメソッド・URLエンコードなど
●HTTP クライアントを作ってみよう(5) - Basic 認証編 -
●HTTP クライアントを作ってみよう(6) - Digest 認証編 -
●POP3 クライアントを作ってみよう(1) POP3 プロトコルの概略
●POP3 クライアントを作ってみよう(2) POP3 クライアントサンプル
●POP3 クライアントを作ってみよう(3) APOP・行頭の . について
●echo サーバを作ってみよう (1) echo プロトコルとは
●echo サーバを作ってみよう (2) echo サーバサンプル
●echo サーバを作ってみよう (3) fork を使ったマルチスレッドサーバ
●echo サーバを作ってみよう (4) select を使ったマルチスレッドサーバ
●FTP クライアントを作ってみよう (1) FTP プロトコルの概略
●FTP クライアントを作ってみよう (2) 機能限定版 FTP クライアントサンプル
●FTP クライアントを作ってみよう (3)OSにポートを選択させる・Passive モード
●FTP クライアントを作ってみよう (4) FTP プロトコルの解説
●FTP クライアントを作ってみよう (5) ファイル転送プログラム ftptrans
モジュール編
●モジュールを使ってみよう (1) IO::Socket モジュールで echo クライアントを作る
●モジュールを使ってみよう (2) IO::Socket モジュールで echo サーバを作る
●モジュールを使ってみよう (3) IO::Select モジュール
●HTTP の並行アクセス IO::Socket・IO::Select モジュール
●HTTP proxy サーバを作ってみよう
●モジュールをインストールしよう
●モジュールを使って POP3 クライアントを作ってみよう Net::POP3 と Mail::POP3Client
UDP 編
●UDP を使ってみよう (1) UDP と TCP の比較
●UDP を使ってみよう (2) UDP の﹁信頼性のなさ﹂を実感しよう
●UDP を使ってみよう (3) どうして信頼性がない?
●UDP を使ってみよう (4) netstat -s でデータ損失状況を調べる (未稿)
●UDP を使ってみよう (5) 非ストリーム指向
●DNS クライアントを作ってみよう (1)
●DNS クライアントを作ってみよう (2)
●DNS クライアントを作ってみよう (3)
C言語編
●低水準ファイル入出力関数を使おう
●C言語で HTTP クライアントを作ってみよう (1) read/write 編
●C言語で HTTP クライアントを作ってみよう (2) fgets/fprintf 編
●C言語で echo サーバを作ってみよう (1)
●C言語で echo サーバを作ってみよう (2) select でタイムアウト機能を実装する
●C言語で ftp クライアントを作ってみよう (1)
●*BSD で kqueue・kevent を使ってみよう
TCP/IP エラー処理
●TCP/IP エラー処理 connect 編
Java 編
●Java で HTTP クライアントを作ってみよう (1) Socket クラス編
●Java で HTTP クライアントを作ってみよう (2) HttpURLConnection クラス編
●Java で HTTP クライアントを作ってみよう (3) HttpURLConnection での認証・Proxy・SSL/TLS
暗号化編
●暗号化のお話 (1) 共通鍵暗号方式
●暗号化のお話 (2) 公開鍵暗号方式
●暗号化のお話 (3) 署名
●暗号化のお話 (4) 証明書
●暗号化のお話 (5) まとめ
●SSL/TLS の導入 (1) 秘密鍵・CSRの作成 & 証明書作成
●SSL/TLS の導入 (2) Apache への SSL/TLS の導入
●SSL/TLS の導入 (3) ルート証明書
●SSL/TLS の導入 (4) 証明書購入 下調べ編
●SSL/TLS の導入 (5) 証明書購入 実践編
●SSL/TLS の導入 (6) 認証局の運営
●SSL/TLS の導入 (7) クライアント認証
●SSL/TLS でアクセスしてみよう (1) HTTPS クライアントの作成
●SSL/TLS でアクセスしてみよう (2) サーバ認証 (書きかけです)
●RSA で暗号化してみよう (1) OpenSSL に頼りきった RSA の実装
●RSA で暗号化してみよう (2) OpenSSL にそれほど頼らない RSA の実装
その他編
●inetdとは
●inetdを利用してechoサーバを作ってみよう
●telnet の際の注意点
●tcpdumpでプロトコルを解析してみよう
●TCP/IP と OSI 参照モデル
●サンプルが perl5 専用なワケ
●関数一覧
●リンク集・参考書籍
ソース一覧
以下のサンプルプログラムは、各項で解説したものをまとめたものです。
サンプルプログラムの動作チェックは、FreeBSD 5.2.1-RELEASE・perl-5.8.2・J2SE SDK 1.4.2_07 上で行い、
プロトコルのチェックは apache-2.0.52・qpopper-2.53・FreeBSD 標準の ftpd に対して行いました。
実行環境を持っていないので、Windows でのプログラムの動作確認は行っていません
●perl: HTTP クライアント
●perl: HTTP クライアント改良版
●perl: HTTP クライアント Digest 認証 手抜き版
●perl: POP3 クライアント
●perl: echo サーバ
●perl: echo サーバ・マルチスレッド版 (fork)
●perl: echo サーバ・マルチスレッド版 (select)
●perl: FTP クライアント
●perl: FTP クライアントOSにポートを選ばせる版
●perl: ファイル転送プログラム ftptrans
●perl+IO::Socket echo クライアント
●perl+IO::Socket echo サーバ
●perl+IO::Socket echo サーバ・マルチスレッド版 (fork)
●perl+IO::Socket+IO::Select マルチスレッド echo サーバ
●perl+Net::POP3 POP3 クライアント
●perl+IO::Socket+IO::Select HTTP クライアント - 並行アクセス
●perl+IO::Socket+IO::Select HTTP proxy サーバ
●perl: UDP クライアント
●perl: UDP サーバ
●perl: UDP クライアントと同機能の TCP 版
●perl: UDP サーバと同機能の TCP 版
●perl: DNS クライアント
●C言語: 低水準関数を使ったファイル入出力
●C言語: HTTP クライアント (read/write)
●C言語: HTTP クライアント (fgets/fprintf)
●C言語: echo サーバ
●C言語: echo サーバ (select によるマルチスレッド+タイムアウト機能付き)
●C言語: echo サーバ (kqueue・kevent 版。*BSD のみ)
●C言語: connect(2) とシグナルの実験
●C言語: ftp クライアント
●C言語: https クライアント
●C言語: https クライアント サーバ認証版
●C言語: RSA 暗号化 ライブラリに頼りきり版
●C言語: RSA 暗号化 あまりライブラリに頼らない版
●SSL: root CA 証明書
●perl: inetd 経由で起動される echo サーバ
●perl: tcpdump の出力を整形する perl スクリプト
●Java: Socket クラスを使った HTTP クライアント
●Java: HttpURLConnection クラスを使った HTTP クライアント
●Java: HttpURLConnection クラス使った認証機能付き HTTP クライアント
ToDo
今後の予定。予定は未定。
●数論・整数論
●暗号いろいろ
●エラー処理。特に EINTR・EAGAIN などのシグナル。
●暗号化機能付 IP Messenger を実装する
●LWP モジュールを使って HTTP クライアントを作ってみよう。
●HTTP/1.1 など
●UNIX ドメインソケット
●ping・traceroute を作成
●IPv6
●PHP
●ruby。特にマルチスレッドの実現が簡単みたい。
●こまごまと (処理別)
●名前解決
●connect
●ノンブロッキング
●accept
●read
●write
●EPIPE
●一度で write しきれない場合。戻り値チェック。select
●戻り値 0 はありえない
●ブロックの可能性
●close
●shutdown
●この辺を例題に。ftp-client.c をさっさと直すこと。
●こまごまと (ポイント別)
●EINTR
●システムコールを呼んでいるなら自分でリトライ。ライブラリにまかせるならそれでよし。
●ENOBUF
●RST 受信時は SIGPIPE と EPIPE が同時に発生
●ブロック
TOP >> ネットワークプログラミングの基礎知識
$Id: index.html,v 1.49 2017/03/20 16:06:06 68user Exp $