#概要
はじめに、この記事はAWS初学者が備忘録として作成しています。
ですが、私のような初学者のために少しでもなればと思い、公開しています。
不適切や、わかりにくい点を見つけた場合はご指摘頂ければ幸いです。
#TCP/IPとは
##IPアドレス
- IPアドレスは、ネットワーク上の通信先を一意に特定するもの
- IPアドレスにはパブリックIPアドレスとプライベートIPアドレスがある。インターネットを通じて通信するにはパブリックIPアドレスが必要。インターネットとは直接通信しないプライベートなネットワークの中で、プライベートIPアドレスを自由に利用できる
- IPアドレスを使った通信は、ルーターがパケットをバケツリレーのように転送することで実現している。パケットを次にどこに渡せば良いかというルーティング情報は、EGPやIGP使って交換する
##ポート番号
- ポート番号を使うことで、一つのIPアドレスで同時に複数のアプリケーションが通信できる。
- WebやDNS、メール送受信向けのSMTPなど、よく使われるサービスは利用するポート番号が決まっており、それをウェルノウンポートと呼ぶ
- Webサーバーは、ウェルノウンポートとしてポート80番を用いる
##DNS
- IPアドレスは数字の羅列で覚えにくいため、一般にブラウザからのアクセスは、ドメイン名を使う。
- ドメイン名を使って通信する際には、ドメイン名がどのパブリックIPアドレスなのかを知る必要がある。ドメイン名とIPアドレスとの相互変換をすることを名前解決という
- 名前解決にはDNSサーバーを用いる
##HTTP
- WebサーバーとWebブラウザは、HTTPを用いてデータをやりとりする
##TCP/IPモデル
これらの一連の処理は、TCP/IPモデルという通信モデルで構成されている。
役割ごとに4つの階層に分けたモデルです。各層には、その層の役割を果たす各プロトコルがありあます。
層 | 役割 | 代表的なプロトコル |
---|---|---|
アプリケーション層 | ソフトウェア同士が会話する | HTTP, SSH, DNS, SMTP |
トランスポート層 | データのやりとりの順番を制御したい、エラー改正したりするなど、信頼性を高めたデータの転送を制御する | TCP, UDP |
インターネット層 | IPアドレスの割り当て、ルーティングをする | IP, ICMP, ARP |
インタフェース層 | ネットワーク上で接続されている機器同士で通信する | Enthernet, PPP |
階層化がされている理由は、各階層を独立させるためです。
上位の階層破壊の階層がなんでも良く、また会の階層は上位の階層の内容は分からなくても良い、という構造になっています。
##データのカプセル化
###名前解決リクエストの作成(アプリケーション層)
webブラウザは、アドレス欄に入力されたURL(http://www.exmaple.co.jp )からドメイン名(www.example.co.jp )を抜き出し、名前解決しようとします。
DNSサーバーに対して名前解決の処理を依頼するため、DNSプロトコルで定められたフォーマットに従い、名前解決のリクエストデータを作成します。
###UDPカプセル化(トランスポート層)
上記のデータを送信するには、そのデータをトランスポート層に渡す必要があります。この時、上記のデータがトランスポート層のプロトコルでカプセル化されます。
カプセル化とは、郵便で言えば封筒に入れるイメージです。郵便の場合、手紙の内容はなんであれ、封筒に入れて宛先を書けば郵便局に処理を頼めます。郵便局は、その封筒の内容を知る必要がありません。
カプセル化もこれと同様に、中身に手を加えずに、さらに下の階層で処理ファできるようにデータを付与します。
トランスポート層のプロトコルは、TCPかUDPのいずれかです。DNSでは、一般にUDPを使う取り決めになっているため、UDPに引き渡します。
この時、送信元のポート番号、宛先番号、データのs長さ、エラーがないかどうかを調べるチェックサムなどの情報が追加されます。
dnsの場合、ウェルノウンポートは53番なので、宛先ポート番号は53が設定されます。
これらをUDPヘッダーと呼びます。
###IPでカプセル化(インターネット層)
次にUDPでカプセル化されたデータをインターネット層に渡します。
インターネット層のプロトコルはIPです。
IPでのカプセル化では、送信元IPアドレス、宛先IPアドレス、データ長、生存時間などの情報が追加されます。これらをIPヘッダーと呼びます。
###Ethernetでカプセル化(インタフェース層)
IPでカプセル化する段階でIPアドレスが付くので、実際にLANや電話回線などの配線上に流すことができます。この時、それぞれの配線の規格に準拠したヘッダーがいくつか付けられます。
たとえばLANは、Ethernetという規格を使っています。
Ethernetでは、先頭に末尾に幾つかのデータが追加されます。これをEthernetフレームと言います。
これには送信元MACアドレスや、宛先MACアドレスなどの情報が含まれます。
###EthernetとTCP/IPの関係
Ethernetで通信するパソコンやサーバー、各種ネットワーク機器などのホストには、雄一無二のMACアドレスと呼ばれる番号がふられています。パソコンやネットワーク機器には、05:0c:ce:d8:1b:a9のような文字列シールが貼られていることがありますが、これがMACアドレスです。
####ARPでIPアドレスを解決する
Ethernetでは、MACアドレスを頼りにデータを送信します。つまり05:0c:ce:d8:1b:a9宛に送信するというように宛先を特定します。
Ethernetのデータ通信では、Ethernetフレームだけを見て、中身のIPまでは見ません(そもそもEthernetでは、Ethernetフレームさえ付いていればどのようなデータも送受信できるので、中身がIPとは限りません)
そうすると、どのMACアドレスを持つホストが、どのIPアドレスに対応しているのかという対応表が必要となります。これをカイケルするのがAPRというプロトコルです。
たとえば、10.0.1.10というIPアドレスにデータを送信したいとします。最初に送信するときは、このIPアドレスを持つホストがどのMACアドレスを持っているのかわかりません。
そこで、10.0.1.10というIPアドレスを持っているホストは誰ですか?と問い合わせます。(ARP要求)
すると、そのIPアドレスを持っているホストは、僕です。macアドレスは05:0c:ce:d8:1b:a9ですという応答を返します。
これによって10.0.1.10と05:0c:ce:d8:1b:a9とが結びつき、対応表を作れます。
以降の通信では、この対応表を使って、もし、10.0.1.10が宛先なら、05:0c:ce:d8:1b:a9に送信するようにします。
##UDPとTCP
###UDPでのデータ通信
UDPはステートレスプロトコルと呼ばれる、状態を保たず、送りっぱなしのプロトコルです。
UDPの構造は単純で送信元ポート番号、宛先ポート番号の他には、データの長さとチェックサム(データの総和を検算することで、データに誤りがないかを調べる仕組み)しかありません。
#tips
- ARPはルーターを超えることができず、ARP要求で調べられMACアドレスとIPアドレスの対応は、自分が所属しているサブネット内に留まる。ルーターを超える場所にデータを転送するときは、そのルーターでまずはEthernetで届けます。
- インターネットに向けて通信する場合、最寄りのルーターとはデフォルトゲートウェイ(IPアドレスが自動設定になっているときは、デフォルトゲートウェイも自動設定されます。)で指定されたものです。
- クライアントが作ったEthernetフレームは、そのままDNSサーバーへ届くわけではなく、届くのは最寄りのルーターまでで、そこから先は、ルーターがEthernetヘッダーを付け替えて、DNSサーバーに向けて送信します。