2-1.IPアドレスとDNS、ポート番号

2019年8月3日

IPアドレス

インターネットは世界中の情報にアクセスでき、人や端末とも簡単に通信ができる非常に便利なシステムです。IoTはインターネットに接続して多種多様なサービスを実現しますので、インターネットの仕組みを把握している必要があります。
インターネット通信は「データパケット」や「パケット」と呼ばれる小さなデータに宛先をつけて相手に送ることで通信を実現しています。つまり「パケット」は小さなデータの固まりのことで、具体的には1500Byte以下(通常利用されるイーサネットの場合)のデータの固まりです。画像のような何Mbyteもある大きなデータも全て1500Byte以下のデータに区切られ何個も送信され受信側で組み立てられることで通信を実現しています。分割されたパケットも全て宛先をつけて送られ全てのパケットは宛先を見て送信されます。

インターネット上の住所はIPアドレスで表されます。実社会の住所や電話システムでは電話番号のようなもので個人や端末を特定でき、住所である宛先に向かってパケットが送られます。パケットは日本語で小包という意味でその名前の通り小さな郵送物に宛先がついていると同じです。住所の書いた郵便物のように宛先に送られるという考え方は同じですが電気や光信号を使って送られるため瞬時に相手に届けることができます。
現在、IPアドレスを表す方法はIPv4アドレスとIPv6アドレスの2種類があります。IPv4アドレスは32ビットで約43億個(2の32乗)利用できますがインターネットの普及によりIPアドレスが枯渇してきたため、IPv6アドレスでは約340澗個(2の128乗)利用できるように拡張され各通信会社が順次導入している状況です。当面は2つの種類が混在した環境になると思われます。
基本的な通信の仕組みにIPv4とIPv6に代わりがないため、IPv4で通信の仕組みを説明していきます。

IPアドレス表記方法

IPv4アドレスの表記方法ですが以下のように32bitを8Bitづつ区切って0〜255までの4つの数字で表示されます。8Bitは右のBitから1,2,4,8,16,32,64,128を表していて1表示のところを足して数値になります。例えば、1010の場合は右から2つ目(2)と4つ目(8)が1となるので8+2なので10になります。同様に8Bit毎に数字表示し「.」でつなげて「10.11.100.101」のように表示します。また、参考ですがIPv6アドレスは4Bit毎に0〜15(f)までの数値で表されて「2001:db8:0:0:3456::1234」のような表記になります。

DNS(Domain Name System)

インターネットの住所はIPアドレスで表記されると説明しましたが通常インターネットを利用する場合は「https://www.google.com」のように「URL:Uniform Resource Locator」という文字列でアクセスしています。URLの中の「google.com」はドメインと呼ばれており人が覚えやすく操作しやいように文字列で表記したものです。
ドメインはIPアドレスと同じでインターネット上の住所を表しています。このため、ドメインは全てIPアドレスに変換することができ、その変換する仕組みをDNS(Domain Name System)と言います。
Webアクセス時の動作例を以下に示します。Webブラウザで「https://www.google.com」を入力するとDNSサーバに問い合わせ(①)てIPアドレスを取得(②)し、そのIPアドレスのWebサーバにアクセス(③)しています。

IPアドレスとポート番号

インターネット通信についてIPアドレスとポート番号があります。IPアドレスは上記で説明した通り端末自体を示しますがポート番号が端末内のアプリや処理を表しています。
具体的には、インターネットでIPアドレスを元にスマホにデータが届きますが、スマホの中で多くのアプリや処理が動いていますので、メールアプリなのか地図アプリなのか、どのアプリが利用するのかを特定する必要があります。このアプリや処理を識別するのにポート番号を利用しています。

サーバ側のIPアドレスはDNSで取得しますがポート番号はわからないと端末から送信できません。このため、インターネットに関連する番号などを管理組織のIANA(Internet Assigned Numbers Authority)はHTTP「80」、HTTPS「443」などプロトコルによりポート番号を決めています。
Webブラウザでhttp://xxxx.jpでアクセスしますが、この場合にWeb(HTTP)サーバのポート番号は必ず「80」に向けて送信されます。
(httpsの場合、サーバのポート番号は必ず443に向けて送信されます。)