LoginSignup
1
3

More than 3 years have passed since last update.

【アーキテクチャ】【Network】TCP/IPの通信

Posted at

紀元

メーカー間で通信できない問題を解決するために誕生した、通信に対するプロトコル(決まりごと)。
RFCという文書にまとめられ、IETF(Internet Engineering Task Force)のサイトで確認できる。
1981年に通信の確立を担うTCP(Transmission Control Protocol, RFC 793)と、データの転送を担うIP(Internet Protocol, RFC 791)。
この後もHTTPを含むプロトコルが作られ、通信にまつわるプロトコル群を「TCP/IP」もしくは、「インターネット・プロトコル・スイート」と呼ぶ

OSI参照モデル

TCP/IPと同時期に策定された通信に対するプトロコルだが、普及しなかった。
OSI参照モデルは、通信の仕組みを学ぶ上でとても役立つ。OSI参照モデルに示される階層ごとの役割は、TCP/IPにどういった機能が備えられているのかを知る助けとなる。

OSI参照モデルでは、通信に必要な機能を7階層に分けて考えた。

階層 名前 役割
第7層 アプリケーション層 アプリケーションごとに規定
第6層 プレゼンテーション層 文字コードなど、データの表現形式の違いを吸収
第5層 セッション層 接続の確率・開始・復帰・終了
第4層 トランスポート層 データを漏れなく転送
第3層 ネットワーク層 機器を中継してデータを転送
第2層 データリンク層 隣接する機器間でのデータ転送
第1層 物理層 物理的な接続方式を規定

これらの各階層それぞれに対応するプロトコルを策定しようというのがOSI参照モデルの考え方。

TCP/IPでのレイヤ構造は、OSI参照モデルと異なり4階層。

OSI参照モデル TCP/IPの階層モデル
第7層 アプリケーション層 アプリケーション層
(HTTP、FTP、SMTP)
第6層 プレゼンテーション層
第5層 セッション層
第4層 トランスポート層 トランスポート層
(TCP、UDP)
第3層 ネットワーク層 インターネット層
(IP)
第2層 データリンク層 ネットワークインタフェース層
(Ethernet、PPPoE、IEEE 802.11)
第1層 物理層

機能ごとに階層を分け、階層独立性を持たせる利点

  • 他の階層の仕様に影響されないからプロトコルの策定が容易になること
  • 新たな階層を増やしたり不要な階層を減らしたりしても通信が成立する点

IP

送信元から受信先にデータを運ぶ方法を定める。
郵便は集荷所など各地の住所や、配達ルートを決める方法について定める必要があり、IPはその役割を担っている。

IPアドレス

IPにおいて送信元や受信先などを示す番号。IPv4の場合全32ビットで、それを8ビットごとに分けて表記する。
例)192.168.0.1(10進数表記)
例)11000000.10101000.00000000.00000001(ビット表記(2進数))

image.png

ネットワーク部:ネットワーク固有の番号が入る
ホスト部:個々のコンピュータを表す番号が入る。基本的に自由に割振れる(全て0または1を除く)

プライベートIPアドレス・グローバルIPアドレス

192.168.0.1はプライベートIPアドレスの一種。
以下は、LAN(Local Area Network)状の機器どうしのみがアクセスできるプライベートIPアドレスに指定できる範囲。グローバルIPアドレスとして使うことはできない。

  • 10.0.0.0〜10.255.255.255
  • 172.16.0.0〜172.31.255.255
  • 192.168.0.0〜192.168.255.255

ローカルループバックアドレス

ループバックとは「自分自身にデータを送る」=ローカルループバックアドレスは、自分自身を参照するためのアドレス。特別なIPアドレス。
このアドレスを使うことで、ローカルにあるデータをまるでインターネット状にあるデータのように見ることができ、Web開発の現場ではとても重宝する

  • 127.0.0.1〜127.255.255.254

127.0.0.0のようなホスト部のビットが全て0のアドレスは「未指定アドレス」(アドレスを割り当てられていないホストが持つアドレス)、127.255.255.255のようなホスト部のビットがすべて1のアドレスは「ブロードキャストアドレス」(同じネットワークの機器全てに信号を送る際に使用するアドレス)にあたるため使用できない。

ネットワークアドレスとホストアドレス

32ビットで構成されるIPv4のIPアドレスは、ネットワークアドレスの部分とホストアドレスの部分に分けられる。
イネターネットを利用するためにはインターネットサービスプロバイダを通しての契約が必要。これはインターネットサービスプロバイダや教育期間などの組織が、イネターネットの一部文のネットワークを管理しているため。
インターネットの一部を「サブネット」と呼ぶ。ネットワークアドレスはサブネットどうしを識別するためのアドレスで、ホストアドレスはサブネット内の機器どうしを識別するためのアドレス。ネットワークアドレスの長さは可変で、CIDRやサブネットマスクによって示される。

CIDR

プライベートIPアドレスの範囲を以下、プライベートIPアドレスとして割り当てられていると言い換えれる。
スラッシュで区切られた右側の数値は、ネットワークアドレスの桁数で表記するCIDR(Classless Inter-Domain Routing)(サイダーと読む)表記。
桁数は2進数で考えた時のもので、10.0.0.0をビット表記すると、00001010.00000000.00000000.00000000の32桁。「10.0.0.0/8」はこの左8桁がネットワークアドレスであることを示し、それより残りの右側24桁がホストアドレスであることもわかる。

  • 10.0.0.0〜10.255.255.255 = 10.0.0.0/8
  • 172.16.0.0〜172.31.255.255 = 172.16.0.0/12
  • 192.168.0.0〜192.168.255.255 = 192.168.0.0/16

サブネットマスク

CIDR表記と同様に、ネットワークアドレスの桁数を表現する仕組み。

image.png

ICMP

  • エラーレポート
    • 何かの理由でIPパケットを破棄したら、破棄した機器がICMPによって破棄したIPパケットの送信元にエラーレポートを送る。=到達不能メッセージ
  • 診断機能
    • IPのエンドツーエンド通信ができるかどうかの確認。よく利用するコマンドにpingコマンドがある。

image.png

  1. 宛先:ホスト2、送信元:ホスト1
  2. 何かの理由でホスト1からホスト2宛のIPパケットを破棄
  3. 宛先:ホスト1、送信元:R2
    ICMP到達不能メッセージでのIPパケットを破棄した理由を送信元のホスト1へ通知

ping

PINGコマンドで、ICMPエコー要求/応答メッセージを送受信することで、指定したIPアドレスとの間で通信ができるかどうか確認できる。

image.png

  1. pingコマンド実行(ping 192.168.1.100)
  2. ICMPヘッダにエコー要求メッセージであることを記述している「送ったデータをそのまま送り返してください」
  3. ICMPヘッダにエコー応答メッセージであることを記述している「送ってくれたデータです」

ARP

役割:PCやサーバなどのインタフェースはMACアドレスで識別している。TCP/IPのIPアドレスとインタフェースを識別するためのMACアドレスを対応づける。

image.png

IPアドレスとMACアドレスを対応づけることをアドレス解決と呼ぶ。

ARPのアドレス解決の範囲は同じネットワーク内のIPアドレス。イーサネットインタフェースで接続されているPCなどの機器がIPパケットを送信するために宛先IPアドレスを指定した時に、自動的にARPが行われる。

image.png

  1. ARPリクエストでIPアドレスに対応するMACアドレスを問い合わせる
  2. 問い合わされたIPアドレスを持つホストがARPリプライでMACアドレスを教える
  3. アドレス解決したIPアドレスとMACアドレスの対応をARPにキャッシュに保存する
  4. ARPリクエストを受信しても破棄する

TCP

データが確実に相手に届くことを保証するためのプロトコル。セッション(通信の開始・終了)の管理や、データの欠損がないかのチェックについて定めている。
IPはセッションの管理がなく、相手に届いたかの確認ができない。データを小さな単位であるパケットの順番のチェックなどもしないから、相手に届くデータが送るデータと同一かは保証されない。

TCPによるデータ転送の流れ
1. TCPコネクションの確立
2. アプリケーション間のデータの送受信
3. TCPコネクションの切断

ipconfig

TCP/IPの設定を表示。

確認出来る項目

  • IPアドレス
  • サブネットマスク
  • デフォルトゲートウェイ
  • DNS

パケット

各層が通信に必要な情報を追加/削除してデータを届ける

image.png

  1. 受信側のDBMSへ届けたいデータ/送信側から受け取ったデータ
  2. TCPのヘッダがつくことでTCPセグメントが作られる/TCPヘッダを削除してDBMSへデータを渡す
  3. TCPセグメントの前にIPヘッダがつくことでIPパケットが作られる/IPヘッダを削除してTCPへTCPセグメントを渡す
  4. IPパケットの前後にデータがついてイーサネットのフレームになり、電気信号として外に出る/電気信号として入ってきたパケット(フレーム)は前後のデータを削除し、IPへIPパケットを渡す
  • TCP/IPと階層とデータの呼び方
    • アプリケーション層:メッセージ
    • トランスポート層:セグメントまたはデータグラム
    • インターネット層:おアジェットアタはデータグラム
    • ネットワークインターフェイス層:フレーム

image.png

コネクション型

データ転送の前に接続(コネクション)の確立を要求する「コネクション型」のプロトコル。
TCPが接続の確立を行うために取る手法を「Three-Way Handshake」。

image.png

  1. 接続を要求する側は、接続の確立を行ってよいか相手のサーバに要求の信号を送る(SYNを送る)
  2. 受け取った相手は、OKなら許可の信号を送る(受け取ったことを示すACKとSYNを送る)
  3. 許可の信号を受け取ったら、接続を開始する合図の信号を送る(受け取ったことを示すACKを送る)

IPのように接続の確立を行わず通信を始めるのを「コネクションレス型」のプロトコルという。

ネットワーク到達性

TCPはデータの欠損を起こさないためにシーケンス番号を使う。送信側は送るデータの1Byteごとに連続したシーケンス番号を付け、あるシーケンス番号のところまでデータを送った後は、受信側が次のシーケンス番号(データの続き)を要求してくるのをまつ。

一定時間待っても要求が戻ってこない場合や要求してくるシーケンス番号が誤っている場合は、データが正しく届かなかったと判断してもう一度送った部分を送り直す。再送処理によって、TCPはデータの同一性を保証している。

ポート番号

TCPは、同時に複数の通信を可能にするためにポート番号を使用する。
ポートはデータを渡す窓口となる部分で、アプリケーションプロトコルに応じて使うポートが番号が定められている。0〜65535まであるが、特に使われるプロトコルのポート番号(ウェルノウンポート番号)は0〜1023に割り当てられる。

名称 ポート番号の範囲 意味
ウェルノウンポート 0〜1023 サーバアプリケーション用に予約されているポート番号
登録済みポート番号 1024〜49151 よく利用されるアプリケーションのサーバ側のポート番号
ダイナミック/プライベート番号 49152〜65535 クライアントアプリケーション用のポート番号

データを要求するクライアントは、相手のサーバのIPアドレスとポート番号を指定し、通信を要求する信号を送る。
要求に応えるサーバは、あらかじめポート番号を解放しておき、要求を受け取ったらデータを送信するなどの処理を開始する。
ポート番号の指定がないと、サーバはどのアプリケーションにデータを渡せばいいかわからない。

サービス アプリケーション層のプロトコル ポート番号 トランスポート層のプロトコル
WWW HTTP 80 TCP/UDP
WWW(セキュリティ付き) HTTPS 443 TCP/UDP
電子メール(送信) SMTP 25 TCP/UDP
電子メール(受信) POP3 110 TCP/UDP
ファイル転送 FTP 20/21 TCP/UDP
遠隔ログイン TELNET 23 TCP/UDP
遠隔ログイン(セキュリティ付き) SSH 22 TCP/UDP
ネットニューズ NNTP 119 TCP/UDP
ネットワーク管理DNS DNS 53 TCP/UDP
ネットワーク管理DHCP 546/547 UDP
ネットワーク管理SNMP SNMP 161/162 UDP

UDP

PCサーバなどに届いたデータを適切なアプリケーションに振り分けるためだけの機能を持っているプロトコル。TCPのような確認は一切しない。
UDPヘッダフォーマットは、TCPヘッダフォーマットに比べると極めてシンプル。
TCPに比べると、余計な処理をしないので、データの転送効率が良いというメリットがある。
大きなサイズのデータを分割する機能もない。

例)

  • IP電話

トラブルシューティング

ping

image.png

  1. 「ping IPアドレス」による確認=IPレイヤとイーサネットレイヤ(物理レイヤ)まではOK
  2. 「ping ホスト名」による確認=名前解決とIPレイヤまではOK
  3. 「ping 他のマシン(目的のネットワーク)」やトレースルートによる確認
  4. 「netstat -a」や「telnet ホスト名 ポート番号」による確認
  5. hostsファイルや nslookupによる名前解決の確認
  6. アプリの設定確認

netstat

OSの統計情報。OSが起動してからの累積値。

コリジョン(collision:衝突):パケットとパケットの電気信号がケーブル上で衝突する現象。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3