[[プログラミングスレまとめ in VIP]]

* プログラマ的ネットワーク適当講座 [#rd3008d3]

** インターネットとは [#yf96905a]
インターネットとは世界中の何十億というコンピュータが接続されている巨大なネットワークのことです.

インターネットはアメリカの軍事ネットワークが起源です.来るべき核戦争時代に備えていくつかの通信設備が破壊されても通信が続けられるような強固なネットワークを目指して開発されました.インターネットはこの特徴を受け継いでいます.

**OSI参照モデル [#z39b25ca]
インターネットは実際にはかなり複雑な仕組みで運用されています.が,実際にインターネットを楽しんだり,簡単なプログラミングをするなら深いことを知らなくても使えるようになっています.OSI参照モデルの項目を見てください.通信をする際にはお世話になるプロトコルはかなりたくさんありますが,インターネットを利用するならTCP/IPというものだけを知っていれば何とかなります.あとは下位のプロトコルやライブラリが補ってくれるので楽できるというわけです.

[[OSI参照モデル - Wikipedia>http://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB]]

**TCP/IPとは [#g58e78c4]
''TCP/IP''ってのはプロトコル(コンピュータ同士の通信の決まり)の一つです.
つまり通信するときの約束事インターネットもこれ使ってるので家庭内LANなんかもだいたいこれ.
ネットワークがからむ通信するならこれの知識が必要です.

**IPアドレス [#qb29a4f2]
まずはネットワークに繋がったコンピュータと通信するには相手を特定する必要があります.そのためのネットワーク上の住所が''IPアドレス''です.
IPアドレスは32bit長で255.255.255.255のような形式で表されます.
IPアドレスはユニークな番号です(つまり重複がない)~
自分のIPアドレスが何か知りたいなら[[確認君>http://www.ugtop.com/spill.shtml]]を使ってみましょう・

**ドメインネーム [#ydb7bb10]
さてIPアドレスは数字で人間には覚えにくいものです.
そこで数字の代わりに文字でアクセスできるような仕組みを考えました それが''ドメインネーム''です.
2ch.netとかgoogle.comとか.

このドメイン名は申請をすれば安いもので1000円/年くらいで取得できます.
将来的になにかのWebサイトを立ち上げたりするときは取得を考えてもいいでしょう.

**ポート [#tcac0788]
IPアドレスでパソコンまで特定できました.
しかし今のコンピュータではネットワークを使うプログラムは同時にたくさん動いてます.
あなたの知らないところでも.

コンピューターが一つの穴からいろんな情報を出し入れしてては,どのプログラムがどの情報を出し入れしているか混乱してしまいます.
そこで偉い人は''ポート''というものを作って通信をわけようと考えました.
ポートは0から65535までの番号が使えます 若い番号はだいたい何に使うのか決まっていて.
80番はhttp(hypertext transfer protocol)つまりHTML(webコンテンツ)の送受信があてられています.

例として
[[ポート番号 #代表的な例 -Wikipedia>http://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7#.E4.BB.A3.E8.A1.A8.E7.9A.84.E3.81.AA.E4.BE.8B]] などがあります.

自分で使うときは適当に15356とか指定するといいと思います.
IPアドレスとポート番号を一緒に書くと.
188.234.211.17:15356~
となります.

http通信をするならアドレスとして~
http:///188.234.211.17:15356/~
を指定すればいいことになります.

**ローカルループバックアドレス [#ycdc9daf]
さてプログラミング中はしょっちゅうテストしたくなります~
ネットワーク系のプログラミングなら必然的にサーバを立てる事も多いでしょう.
でもバグだらけのプログラムを公開されている鯖に上げてテストするのは気がひけます.
できれば自分のPCで鯖もクライアントも実行できたらデバッグも楽でいいですね.

そこで自分のアドレスをいちいち調べてやるのもいいですが実は特別なアドレスが用意されています.
それが127.0.0.1で''ローカルループバックアドレス''とか仰々しい名前が付いていますが.
要するに常に自分自身を表します.
これでいちいち自分のアドレスを調べなくてもいいのでちょっち楽できますね.
ちなみにlocalhostといれても同じになります.


** 6 プライベートアドレスとグローバルアドレス [#i9737362]
IPアドレスを調べる方法は確認君の他にもう一つあります~
コマンドライン(Dos窓・コマンドプロンプト)でipconfig(windows)を実行してみてください.
たぶん確認君とipconfigではアドレスが違う人がいるはずです.
それは''グローバルアドレス''と''プライベートアドレス''の違いからくるものです.

なぜこんな不思議な事になっているかというと.
IPアドレスは32bitでした.つまり最大43億くらいしか表現できません.
人口60億時代にこれは少ないわけです.

しかもうちの大学は駅弁のクセにクラスBのアドレスもらってます(つまり6万個くらいとってる.しかもほとんど使ってない).

案の定足りなくなりました なんだかY2K問題思い出しますね.
そこでおめえら「節約しろバカ」ってことでプライベートアドレスってのが誕生しました.

192.168.*.*というのがプライベートアドレスです.
他にもあるけどあんまつかわんし省略.
家庭内・企業内からインターネットにつながる直前まで通用するアドレスです.逆にいうとインターネットでは通用しません.
だから192.168.24.1というアドレスは実はこの世に沢山存在します.

使用例:192.168.24.1は俺のアドレスだから使うなよ.

さて一家にたくさんPCがある今では沢山のアドレスを必要とします.一台もパソコンのない家庭なんて俺ん家くらいでしょう.
そこで家のPCにはプライベートアドレスを設定します.

プライベートアドレスではインターネットに繋げないので,グローバルIPをプロバイダさんに一個だけもらってみんなで使い回します.
そうすると家に何台PCがあってもグローバルIPは一個で済みます.

ipconfigではプライベートアドレスが表示されます.確認君ではグローバルアドレスが表示されたため違うアドレスが表示されたんですね

詳しくは本でもって読んでもらった方がいいと思います.

**DNS [#q2ee685a]
ドメイン名とIPアドレスが対応していると話しましたが,これはどうやって調べているのでしょうか.

実はドメイン名をIPアドレスが対応した電話帳のようなものを持っているサーバがあります.それが''DNS''です.ドメイン名を入れるとDNSに問い合わせをします.そうするとDNSがIPアドレスを返してきます.

ドメイン名からIPアドレスを探すのを''正引き''といい.IPアドレスからドメイン名を探すのを''逆引き''といいます.


*** 参考リンク [#zb383463]
-[[ネットワークプログラミングの基礎知識:http://x68000.q-e-d.net/~68user/net/]]
-[[Studying HTTP:http://www.studyinghttp.net/]]
// -[[IPA ISEC セキュア・プログラミング講座 > WEBプログラマコース:http://www.ipa.go.jp/security/awareness/vendor/programming/a00_main.html]]
-[[WIDE University:http://www.soi.wide.ad.jp/contents.html]]~
ネットワーク関係の授業が多数公開されている、オススメ~
-[[RFC日本語版リスト:http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html]]~

***参考の参考リンク [#xdf7c97c]
-[[IPA ISEC セキュア・プログラミング講座:Webアプリケーション編:http://www.ipa.go.jp/security/awareness/vendor/programmingv2/web.html]]
-[[「新しいセキュア・プログラミング講座」@水無月ばけらのえび日記:http://bakera.jp/ebi/topic/2931]]~
>フレーム使うなよ!
-[[はてなブックマーク - HiromitsuTakagiのブックマーク / 2006年11月19日:http://b.hatena.ne.jp/HiromitsuTakagi/20061119#bookmark-862419]]~
9-2. 入力値チェックの手法 ― IPAセキュアプログラミング講座~
> 日本版サニタイズ脳の元凶(旧講座宛て)
-[[はてなブックマーク - HiromitsuTakagiのブックマーク / 2006年11月19日:http://b.hatena.ne.jp/HiromitsuTakagi/20061119#bookmark-3276771]]~
1-5. hiddenは危険(セッション変数を利用しよう) ― IPAセキュアプログラミング講座~
> 冒頭の「重要な情報はhiddenフィールドに入れてはならない」は完全に誤り。(旧講座宛て)

// この参考の参考リンクは余計かな…とりあえずおいて置きます。
-[[基礎情報処理 — KYOTO-U OCW:http://ocw.kyoto-u.ac.jp/faculty-of-engineering-jp/information-processing-basics]]~
9回目の講義ノート~
-[[基礎知識 インターネットって何?:http://www.soumu.go.jp/main_sosiki/joho_tsusin/security/kiso/k01.htm]]~
総務省のホームページ、なにがなにやらさっぱりという人はここから~

-[[ネットワーク技術者養成講座:http://www.wakasato.jp/learn/nepc/index.html]]~
TCP/IP、OSI、各種サーバー解説・構築(DNS,MTA,www,proxy,DHCP,etc…)~
結構しっかりしている