ネットワークプログラミング最速入門
ネットワークプログラミングを最速入門してみる。
TCP/IPの本とか読み漁ってみたけど、実際に実装はしたこと無いし、
ソケットAPIとかも全く知らない私が取った勉強方法をまとめます。
まずは図が多用してあって事前知識ゼロでもざっくりとわかった気になれる資料を探しました。
いろいろググってたら、信州大学のネットワークプログラミングの講義資料が超絶わかりやすすぎた。
ざっくり実装はできそうだなーという感覚が得られればこのサイトの役目は終了。
特に、 3. ソケットプログラミングの基礎 と、 5. プロセス管理とソケット管理 にエッセンスが詰まってる。
順番的に自分としては5→3の順番で勉強するといいと思う。
「5 プロセス管理とソケット管理」で学ぶこと
「プロセスとはなんぞや」って部分が初心者にもわかりやすいように解説されているので非常に有益でした。
プログラムをざっくり写経してみて、適宜printfを突っ込みつつマルチプロセスなプログラムの挙動を理解すればいいだけ。
ここでの肝は、fork()とsignal()とwait()というAPI。
* fork()について
子プロセスを作ります。
子プロセスでは返り値が0、親プロセスでは返り値が子プロセスのプロセスID。
fork()を呼んだ時点で親プロセスメモリがコピーされて子プロセスが生成されます。
fork以下のコードパスは、親子どちらのプロセスも通ります。
fork()の返り値は親子で違うのでif文で分けるのが定石っぽいです。
* wait()について
子プロセスよりも親プロセスが先に終了すると、子プロセスがゾンビプロセスとして残っちゃうらしい。
親プロセスが子プロセスより先に終了しないために、子プロセスの状態変化を待つためのしくみがwait()、待つからwait。
* signal()について
"あるプロセスがシグナルを受信すると、そのプロセスが現在実行している処理を一旦中断しそのシグナルに対応した処理"シグナルハンドラ"を実行します。" ← 完全に引用。
「3 ソケットプログラミングの基礎」で学ぶこと
クライアント側とサーバー側で実装が異なるので、違いを抑える。
システムコールの流れを覚える。
ソケットAPIの挙動を説明できるレベルで理解する。
通信フロー図を書いてみる。
サンプルソースを読み込む。
手を動かさないと覚えられないと思うので、
Virtual Box上でubuntuが動く環境を以下のサイトを参考にして作成。http://www.ubuntulinux.jp/download/ja-remix-vhd
掘り下げてTCP/IPの基礎的なプロトコルを理解したい人は、
”ネットワーク技術&設計入門”という本を読めばいいと思う。
結構最近(2014年2月現在)出た本なので、まぁ古すぎて使えないってことはないでしょう。
というかこういった下回りのプロトコルって将来的にもあまり変わらないだろうし、
古典的な名著にあたっても問題は少なさそう。
TCP/IPの本とか読み漁ってみたけど、実際に実装はしたこと無いし、
ソケットAPIとかも全く知らない私が取った勉強方法をまとめます。
まずは図が多用してあって事前知識ゼロでもざっくりとわかった気になれる資料を探しました。
いろいろググってたら、信州大学のネットワークプログラミングの講義資料が超絶わかりやすすぎた。
ざっくり実装はできそうだなーという感覚が得られればこのサイトの役目は終了。
特に、 3. ソケットプログラミングの基礎 と、 5. プロセス管理とソケット管理 にエッセンスが詰まってる。
順番的に自分としては5→3の順番で勉強するといいと思う。
「5 プロセス管理とソケット管理」で学ぶこと
「プロセスとはなんぞや」って部分が初心者にもわかりやすいように解説されているので非常に有益でした。
プログラムをざっくり写経してみて、適宜printfを突っ込みつつマルチプロセスなプログラムの挙動を理解すればいいだけ。
ここでの肝は、fork()とsignal()とwait()というAPI。
子プロセスを作ります。
子プロセスでは返り値が0、親プロセスでは返り値が子プロセスのプロセスID。
fork()を呼んだ時点で親プロセスメモリがコピーされて子プロセスが生成されます。
fork以下のコードパスは、親子どちらのプロセスも通ります。
fork()の返り値は親子で違うのでif文で分けるのが定石っぽいです。
* wait()について
子プロセスよりも親プロセスが先に終了すると、子プロセスがゾンビプロセスとして残っちゃうらしい。
親プロセスが子プロセスより先に終了しないために、子プロセスの状態変化を待つためのしくみがwait()、待つからwait。
* signal()について
"あるプロセスがシグナルを受信すると、そのプロセスが現在実行している処理を一旦中断しそのシグナルに対応した処理"シグナルハンドラ"を実行します。" ← 完全に引用。
「3 ソケットプログラミングの基礎」で学ぶこと
クライアント側とサーバー側で実装が異なるので、違いを抑える。
システムコールの流れを覚える。
ソケットAPIの挙動を説明できるレベルで理解する。
通信フロー図を書いてみる。
サンプルソースを読み込む。
手を動かさないと覚えられないと思うので、
Virtual Box上でubuntuが動く環境を以下のサイトを参考にして作成。http://www.ubuntulinux.jp/download/ja-remix-vhd
掘り下げてTCP/IPの基礎的なプロトコルを理解したい人は、
”ネットワーク技術&設計入門”という本を読めばいいと思う。
結構最近(2014年2月現在)出た本なので、まぁ古すぎて使えないってことはないでしょう。
というかこういった下回りのプロトコルって将来的にもあまり変わらないだろうし、
古典的な名著にあたっても問題は少なさそう。
コメント
コメントを投稿