== なにこれ ==
 * MMA部員として最低限知っておきたいネットワークについての基礎的な知識について講習します

== ネットワークとはそもそもなんぞや ==
 * WAN
  * 地理的に離れた広範囲に渡るネットワーク
 * LAN
  * 学校の中、企業の中など狭い範囲に限られるネットワーク

== プロトコルとは何か ==
各々が勝手に自分流で通信はじめたら困るので、複数のコンピュータがやりとりするときに共通の約束事を作る必要がある。<<BR>>
この約束事をプロトコルと呼ぶ。ネットワークのプロトコルを知ることは、ネットワークを知ることの第一歩。

今回はインターネットにまつわるプロトコルについて簡単に紹介します。

== IP ==
=== そもそもインターネットとは何か ===
インターネットは世界中に散財する複数の小さなネットワークを相互に結びつけたものです。<<BR>>
これらの小さなネットワーク同士を通信可能にするために共通のプロトコル、すなわちインターネットのプロトコルが必要になります。<<BR>>
このインターネットのプロトコルがIPです。
インターネットを介して通信するためには事実上IPを使わなければなりません。

IPはコネクションレス型通信です。コネクションレス型通信というのは相手が死んでようがなんだろうがとりあえず送りつける方針の通信のことです。

IPはパケットという単位でデータをやりとりします。<<BR>>
またIPを使うコンピュータはIPアドレスというもので一意に管理されていて、お互いに識別できるようになっています。<<BR>>
IPアドレスはパケットの送り元や送り先を指定するときに使います。<<BR>>
IPを使ってパケットを通信するためには送り先のアドレスなどをパケットに記録しておく必要があります。この記録された情報をヘッダと言います。

== IPアドレス ==
IPアドレスとして現在主流なのはIPv4と呼ばれているものです。IPv4は32bitの2進数でIPアドレスを作る方式です。32bitの2進数なので全部で2^32=4,294,967,296個のアドレスがあります。
32bitの2進数を普通に書くと非常に読みにくいので、8bitずつ区切って10進数にして読みやすくします。たとえば
{{{
10000010→130
10011001→153
00001001→9
00001010→10

→130.153.9.10
}}}

== ネットワークアドレスとホストアドレス ==
インターネットは複数のネットワークを結合したものなので、IPアドレスはまずその各ネットワークを識別して、そのネットワークの中で各コンピュータを識別するような構造をしていれば便利だという気がしますね。<<BR>>
そこでIPアドレスの中で左のほうをネットワーク識別に、右のほうをその中のコンピュータの識別に使うことにします。<<BR>>
左側を'''ネットワークアドレス'''、右側を'''ホストアドレス'''と呼ぶことにします。<<BR>>
同じネットワークアドレスであれば、同じネットワークの中にいるということなので、わざわざ他のネットワークに出ていかなくていいということがアドレスを見るだけでわかります。

== サブネットマスク ==
IPアドレスの中でどこまでがネットワークアドレスで、どこからがホストアドレスなのかの区切り方を教えてくれるのが'''サブネットマスク'''です。<<BR>>
IPアドレスと同じように32bitの2進数で、ネットワークアドレスに当たる場所を1、ホストアドレスに当たる場所を0にして表します。<<BR>>
2進数だとやはり読みにくいのでやっぱりIPアドレスと同じように10進にして書くことが多いです。

== 特別なIPアドレス ==
=== ブロードキャストアドレス ===
ホストアドレスのbitを全て1にしたものを'''ブロードキャストアドレスと'''呼びます。<<BR>>
ブロードキャストアドレスが示すネットワークの全てのコンピュータにパケットが送りつけられる特別なアドレスです。

=== ループバックアドレス ===
ループバックアドレスというのは127.x.x.xで表わされるようなアドレスで、自分自身を表す特殊なアドレスです。

=== ローカルIPアドレス ===
ローカルIPアドレスはあるネットワークの中だけで使用することができるIPアドレスです。ネットワークの外への通信はできないが、ネットワークの中の通信はできるアドレスです。<<BR>>
LANの中でIPアドレスを割り振りたい時はこれを使えばよいことになります。
{{{
10.0.0.0〜10.255.255.255
172.16.0.0〜192.31.255.255
192.168.0.0〜192.168.255.255
}}}
 * ローカルIPアドレスではないIPアドレスをグローバルIPアドレスということもある


== IPアドレスは不足しつつある ==
 * 解決策として提唱されているのが'''IPv6'''

== ドメイン名 ==
インターネットに接続するコンピュータにはたいていわかりやすい「名前」が付けられています。
{{{{
www.uec.ac.jp
www.twitter.com 
}}}
 このようなわかりやすい名前をドメイン名と呼びます。

ドメイン名は階層構造になっています。UNIXのディレクトリの構造と同じです。

== ドメイン名とIPアドレスの変換 ==
ドメイン名は人間にはわかりやすいけど、実際の通信に使うのはIPアドレスなので変換してやる必要があります<<BR>>
この変換のシステムとしてインターネットでは、DNS(Domain Name System)というシステムを使っています。

== TCPとUDP ==
IPは乱暴に言えばとりあえずパケットを送りつけるだけのプロトコルなので、データ通信を確実に行うためには、データ通信の確実性を保証する別のプロトコルが必要です。<<BR>>
またどのアプリケーションとどのアプリケーションが通信しているのかを管理するプロトコルも必要でしょう。このためのプロトコルとしてTCPとUDPがあります。

=== TCPの概要 ===
 * 信頼性がある
  * 確実にパケットは相手に届く
  * 送信した順番のまま相手に届く

=== UDPの概要 ===
 * UDPは信頼性を提供しない
 * そういう制御をしないので、TCPより速い
 * リアルタイムであることに価値のある通信を行うために使う

== ポート番号 ==
ポート番号はTCPやUDPが通信するアプリケーションを区別するために使う番号です。
宛先IPアドレス、送信元IPアドレス、宛先ポート番号、送信元ポート番号、TCPかUDPかその他のプロトコルか、<<BR>>
という情報でどのアプリケーションとどのアプリケーションが通信しているのかを区別します。

== TCPのWell-known Port ==
 * 20, 21……FTP
 * 22……SSH
 * 23……telnet
 * 25……SMTP
 * 53……DNS
 * 80……http
 * 110……POP3
 * 143……IMAP
 * 443……HTTPS
 * 993……IMAP over TLS/SSL