差分

移動先: 案内検索

TCP/IP

5,283 バイト追加, 2014年1月9日 (木) 16:35
/* Internet Protocol Suite */
一般にTCP/IPのようなプロトコルが重ねられている構造のことをプロトコルスタック ( Protocol Stack ) と呼びます。
そして各々のプロトコルのメカニズムあるいは実装のことを、その層のスタック、たとえばTCPであればTCPスタック、IPであればIPスタックと呼びます。意味は、TCPの層だけではなく、その下層も含めたメカニズムあるいは実装をさしています。
 
== GNU/Linux での TCP/IP ==
 
まずEthernetを前提に基本的な部分を説明したいと思います。
GNU/LinuxではEthernetのデバイスは基本的にeth0から順番に割り当てられます。
むかしはNIC (Network Interface Card)に対応するデバイスファイル /dev/eth0 というのがあったのですが、今ではそれが存在せず内部的にeth0、eth1という仮想的なネットワークデバイスになっています。
慣用的にloはローカルホスト、eth0はEternet、wlan0は無線LANの仮想ネットワークデバイスとして命名されていますが、これは任意な名前であり、たとえば、新たにPPP (シリアル経由でpoint-to-point接続するプロトコル)で接続を作る時はppp0や、 easytether (AndroidをUSBで接続しテザリングをするツールを利用)など仮想ネットワークデバイスは自由度の高い名前をつけることができます。同種類のデバイスが増えるたびに番数が増えます(eth0, eth1, ... )。
 
* lo ローカルホストのための仮想ネットワークデバイス
* eth0 Ethernetのための仮想ネットワークデバイス
* wlan0 無線LANのための仮想ネットワークデバイス
 
その仮想ネットワークデバイスにIPアドレスを設定しTCP/IPで利用する形にします。
 
=== ifconfig ===
 
仮想ネットワークデバイスにTCP/IPに必要なパラメータを設定するのはifconfigコマンドです。これはバークレー大学でBSDに組み込んだTCP/IPの実装が作られた時に、IPアドレスやネットマスクなどのパラメータを設定する、あるいは参照するのに作られたコマンドですが、そのまま今もスタイルを変えず使われています。グラフィカルインタフェース〜といっても項目をリストアップする程度のものですが〜を使って設定するツールは存在しますが、システムがブートする段階でIPの制御を行うのがifconfigです。
 
低いレベルでコントロールする方法を理解したい、あるいはツールを作成したいと思った時は netdevice のオンラインマニュアルにヒントがあります。
 
/sbin/ifconfigをオプションなしに実行すると、現在のeth0やloが表示されます。
 
$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:15:c5:41:95:a0
inet addr:192.168.100.18 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::215:c5ff:fe41:95a0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:350974 errors:0 dropped:0 overruns:0 frame:0
TX packets:291913 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:329347998 (329.3 MB) TX bytes:36362966 (36.3 MB)
Interrupt:18
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:340 (340.0 B) TX bytes:340 (340.0 B)
 
仮想ネットワークデバイスeth0はEthernetに接続され、IPアドレス192.168.100.18が設定されています。
 
loはローカルホストです。これは127.0.0.1が割り当てられます。127.0.0.1は特殊なアドレスでこれは自分自身のマシンを指します。
ホスト名はlocalhostとなっています。
 
 
ブート時にはIPアドレスの設定などifconfigコマンドを使っています。デスクトップやノートパソコン、特にモバイルのように色々なネットワーク上で動作させるようなコンピュータはDHCP
<ref>
ISC DHCP
https://www.isc.org/downloads/dhcp/
ここにDHCPのリファレンス実装があります。
</ref>
を使ってそのネットワーク上で自動割り当てされるのが一般的ですが、ここではまず固定IPの話から進めましょう。
 
# ifconfig eth0 up
 
これはeth0のインタフェースを利用可能にします。
 
# ifconfig eth0 192.168.201.3/24
 
こう実行することによってeth0にはIPアドレス192.168.1.3、ブロードキャスト:192.168.1.255、マスク:255.255.255.0が設定されます。
 
ここではeth0に設定していますが物理的に1つのNICに複数のIPアドレスを付与できます。
むかしならNIC(network interface card)に1つのIPアドレスしか付加できませんでしたが、
複数のIPアドレスが設定する場合、eth0:1、eth0:2といった形でMACアドレスが同じである
eth0のインタフェースが作られます。
 
$ sudo ifconfig eth0:1 192.168.100.99/24
$ ifconfig eth0:1
ifconfig eth0:1
eth0:1 Link encap:イーサネット ハードウェアアドレス 14:da:e9:71:cd:35
inetアドレス:192.168.100.99 ブロードキャスト:192.168.100.255 マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
割り込み:47 ベースアドレス:0xc000
== 脚注 ==
匿名利用者