6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ネットワーク|TCP/IP

Last updated at Posted at 2019-10-09

#TCP/IPとは
TCP/IP(Transmission Control Protocol/Internet Protocol)は、現在のインターネット通信およびイントラネット通信において最も利用されている通信プロトコル。TCP/IPは複数のプロトコルから成田、中心的な役割を果たすのがTCPとIPであることからTCP/IPと呼ばれている。
※IP通信で使用するプロトコル郡|IP, ICMP, TCP, UDP, HTTP, SMTP, SSH, TELNETなど

##TCP/IPの階層モデル
TCP/IPにおける階層モデルは4階層から構成されている。
アプリケーション層、トランスポート層、インターネット層、ネットワークインターフェイス層からなる。

スクリーンショット 2019-10-09 10.16.01.png

TCP/IPプロトコルスタック 各層の役割
アプリケーション層 主にアプリケーションごとの固有の規定。この層ではHTTP,FTP,SMTP,SSHなどのアプリケーション層のプロトコルにより、通信アプリケーションの機能が実現される。
トランスポート層 主にノード間のデータ転送の信頼性を確保するための規定。この層では、TCPまたはUDPのプロトコルを使用する。TCPを使用する場合、信頼性の高い通信を実現する。UDPを使用する場合、信頼性ではなく効率重視のデータ転送を実現する。
インターネット層 主にネットワーク間のEnd-to-Endの通信のための規定。この層では、IPが代表的なプロトコルになる。IPにより、ネットワーク上のノードに対し自分の位置情報となる論理アドレス(IPアドレス)を割り当てられるのでEnd-to-Endの通信を実現する。
ネットワークインターフェイス層 主に直接的に接続されたノード間の通信のための規定。この層ではLANプロトコルはイーサネット、WANプロトコルはPPPが代表的なプロトコル。イーサネットでは、セグメント上のノードに対して、自分の位置情報となる物理アドレス(MACアドレス)を割り当てることができるので、ローカルでのノード間通信を実現することができる。

コンピュータ間で通信する場合、以下のように送信側でカプセル化、受信側で非カプセル化を行なっている。また下位層ではアプリケーション側のプロトコルがHTTPであろうと、FTPであろうとただのデータとしてしか認識しない。
※カプセル化/非カプセル化によるメリットがよくわからないので後ほど調べて記載する。


※参照元
各層でのヘッダとは、各層の制御情報のことを指している。

#IPとは
IP(Internet Protocol)は、OSI参照モデルではネットワーク層で動作するプロトコルであり、TCP/IPの階層モデルにおいてはインターネット層で動作するプロトコル。
IPは論理アドレス(IPアドレス)を各ノードに割り当てることで、各ノードを識別することができる。このIPアドレスの宛先を確認することで、あるノードから別ノードへデータ送信することができる。IPアドレスの宛先情報についてはIPヘッダに含まれている。

##IPヘッダのフォーマット
IPヘッダは20バイトのサイズ。オプションが追加された場合は最大で60バイトのサイズになる。データはIPヘッダではなくIPペイロードと呼ばれる部分となる。

各フィールド 英語表記 ビット 各フィールドの説明
バージョン version 4bit IPヘッダのバージョン番号の情報。IPv4では「4」の値が入る。
ヘッダ長 IHL 4bit IPヘッダの長さの情報。単位は32ビットであることからオプションを使用しない。IPパケットの場合、「5」の値が入る。32bit×5=160bit=20byte
サービスタイプ Type of Service 8bit IPパケットの優先順位の情報。例えば音声トラフィックとデータトラフィックとでは音声トラフィックのデータを優先して送出することができる。
全長 total length 16bit IPヘッダを含むパケットの全長。
識別番号 identification 16bit 個々のパケットを識別するための情報。パケットが分割された時に分割されたパケットには同じ識別番号にすることで、受信側で複数の分割されたパケットを受信した場合においても、この識別番号に基づき正しく組み立て処理できる。
フラグ Flags 3bit
フラグメントオフセット Flagment Offset 13bit フラグメントされたパケットが元のパケットのどの位置であったかを示す情報
生存時間 time to live(TTL) 8bit パケットの生存時間を示す情報。
プロトコル Protocol 8bit
ヘッダチェックサム Header Checksum 16bit IPヘッダのチェックサムを表す情報。IPヘッダにエラーがないかを確認するために利用。
送信元IPアドレス Source Address 32bit 32bit(4byte)で構成された送信元のIPアドレスの情報
宛先IPアドレス Destination Address 32bit 32bit(4byte)で構成された宛先のIPアドレスの情報
オプション Options 可変長 通常は使用されないが、デバッグやテストを行う際に利用される情報
パティング Padding 可変長 通常は使用されないが、上記のオプションを使用した場合に、IPヘッダ長が32ビットの整数倍にならない場合がある。32ビットの整数倍にするために詰め物として空のデータの0の値を入れることにより調整する。

IPヘッダのフィールドにある「フラグ」の値には以下の3bitの組み合わせが値として入る

ビット 意味
先頭ビット 0 未使用 0
中央ビット 1 パケットのフラグメントを許可する
パケットのフラグメントを許可しない
0
1
最終ビット 1 分割された最後のフラグメントである
分割された途中のフラグメントである
0
1

IPヘッダのフィールドにある「プロトコル」の値

プロトコル番号 略称 プロトコル名
1 ICMP Internet Control Message Protocol
6 TCP Transmission Control Protocol
17 UDP User Datagram Protocol
88 EIGRP Enhanced Interior Gateway Routing Protocol
89 OSPF Open Shortest Path First

##IPプロトコルの特徴
IPプロトコルには特筆すべき3つの特徴がある。IPプロトコル自体には信頼性のあるものではない。信頼性のある通信にするかは上位層に任せてあり、TCPを使用すれば信頼性の高いTCP/IPの通信となる。UDPを使用した場合は、効率性の高いUDP/IPの通信となる。

IPプロトコルの特徴 説明
コネクションレス型通信 ネットワーク通信に際して、事前にネットワーク間でコネクションを確立しないでいきなりデータ伝送をはじめる通信のこと。ただし、上位層プロトコルにTCPを使用した場合、コンピュータ間の通信で見ればコネクション型の通信となる。
ベストエフォート型通信 ネットワーク通信に際して、最善の努力は尽くすが、必ずしも十分な品質は保証しない通信のことを指す。しかし、上位層プロトコルにTCPを使用することで、IPを使用した通信でもパケット損失がないように見せることができる。
階層型アドレッシング IPプロトコルにより割り当てられる論理アドレス(IPアドレス)はコンピュータが所属しているグループ(ネットワーク部)と、そのネットワークに接続されているコンピュータを識別する(ホスト部)のこれら2階層により構成されている。

#TCPとは
TCP(Transmission Control Protocol)はトランスポート層で動作するプロトコル。
TCPの特徴は、信頼性の高い通信を実現するために3way handshake、確認応答、順序制御、再送制御、ウィンドウ制御、フロー制御などの機能を利用している。

##TCPのヘッダのフォーマット

各フィールド ビット数 各フィールドの説明
送信元ポート番号 16bit 送信元のポート番号の値
宛先ポート番号 16bit 宛先のポート番号の値
シーケンス番号 32bit 送信したデータの順序を示す値
確認応答番号 32bit 確認応答番号の値
データオフセット 4bit TCPヘッダの長さを示す値
予約 6bit 全ビット「0」が入る
コントロールフラグ 6bit URG, ACK, PSH, RST, SYN, FINの6ビットで構成される。これらのビットは「1」の値が入る場合に意味をなす
ウィンドウサイズ 16bit 受信側が一度に受信することができるデータ量を送信側に通知するために使用される。送信側は、この値のデータ量を超えて送信することはできない
チェックサム 16bit TCPヘッダとデータ部分のエラーチェックを行うために使用される値が入る
緊急ポインタ 16bit コントロールフラグのURGの値が「1」である場合にのみ使用されるフィールド。緊急データの開始位置を示す情報が入る
オプション 可変長 TCP通信において、性能を向上させるために利用する。例えば、TCPコネクションの際に、MSSを決定するために使用される。
パディング 可変長 TCPヘッダの長さを32ビットの整数にするために詰め物として空のデータの「0」の値を入れることにより調整する
  • コントロールフラグの詳細
ビット 値が「1」である時の意味
URG(Urgent) 緊急に処理すべきデータが含まれていることを意味する
ACK(Acknowledgement) 確認応答番号のフィールドが有効であることを意味する。コネクション確立以外は値が「1」
PSH(Push) 受信したデータをバッファリングせずに、即座にアプリケーションに渡すことを意味する
RST(Reset) コネクションが強制的に切断されることを意味する。何らかの異常を検出した場合に送信される
SYN(Synchronize) コネクションの確率を要求することを意味する
FIN(Fin) コネクションの正常な終了を要求することを意味する

バッファリングとは?

##ポート番号とは
コンピュータが通信を行うために通信先のアプリケーションプロセスを特定するための番号。コンピュータ間の通信で通信する宛先のIPアドレスが分かれば、そのIPアドレスにデータを送信できるが、そのデータを受信したコンピュータが、どのアプリケーションでデータを受信するか判断する上で必要となる。

ポート番号は「0〜65535」の範囲で割り当てられている。このポート番号は3つに分類できる。

ポート番号のタイプ ポート番号の範囲 説明
well-knownポート番号 0〜1023 IANAで管理。サーバーのアプリケーションに割り当てられるポート番号
登録済みポート番号 1024〜49151 IANAで管理。独自に作成したアプリケーションに割り当てられるポート番号。
Dynamicポート番号 49152〜65535 クライアント側のアプリケーションに自動的に割り当てられるポート番号

#UDPとは
UDP(User Datagram Protocol)は、トランスポート層で動作するプロトコル。
UDPの特徴は、TCPのように3way handshake、確認応答、順序制御、再送制御、ウィンドウ制御、フロー制御などの機能はなく、ほとんど何もしない。何もしないため信頼性は高くないが、速さやリアルタイム性を求める通信に利用される。

##UDPのヘッダのフォーマット

各フィールド ビット数 各フィールドの説明
送信元ポート番号 16bit 送信元のポート番号の値
宛先ポート番号 16bit 宛先のポート番号の値
パケット長 16bit 「UDPヘッダ」の長さと「UDPデータ」の長さの合計サイズ
チェックサム 16bit UDPヘッダとデータ部分のエラーチェックを行うために使用される値

##UDPの用途

  1. 音声や映像などのリアルタイム性のあるデータを転送する場合
  2. 複数の相手に同じデータを同時に転送する場合
  3. 信頼性が必要なく、少量のデータ転送をしたい場合

など

##TCPとUDPの比較

プロトコル TCP UDP
通信方式 コネクション型 コネクションレス型
信頼性 高い 低い
転送速度 低速 高速
上位プロトコル http, telnet, ftp, pop... DNS, NTP, DHCP, SNMP...
主な用途 Webの閲覧、メールの送受信、ファイル転送、共有 音声通話、Videoストリーミング、マルチキャスト通信、ブロードキャスト通信、少量のデータ転送
主な特徴 ・ポート番号を利用した上位プロトコルへのデータ受け渡し
・コネクションの確率(3way hand shake)、維持、切断
・順序制御、再送制御、ウィンドウ制御、フロー制御
・ポート番号を利用した上位プロトコルへのデータ受け渡し
・オーバーヘッドが少ない(ヘッダが8byte)
・信頼性がない(パケットロスしても再送しない)

#ICMPとは?
ICMP(Internet Control Message Protocol)は、IPプロトコルの「エラー通知」や「制御メッセージ」を転送するためのプロトコル。TCP/IPが実装されたコンピュータ間で、通信状態を確認するために使用される。ICMPはインターネット層で動作するプロトコル。

##ICMPのフォーマット

ICMPメッセージは「タイプ」「コード」「チェックサム」「データ」の4つフィールドにより構成される。

各フィールド 英語表記 ビット数 各フィールドの説明
タイプ Type 8bit ICMPメッセージの機能タイプの値が入る。
コード Code 8bit ICMPメッセージの詳細な機能コードの値が入る。
チェックサム Checksum 16bit エラーがないかどうかチェック
データ Data 可変長 ICMPの「タイプ」により長さが異なる

##ICMPの2種類のメッセージ
ICMPメッセージには大きく分類して2種類ある。

  1. 問い合わせ(Querry)のメッセージ
     QUerryにより、あるノードから特定のノードに対する通信状態を確認することができる。(ping, traceroute)
  2. エラー通知(Error)のメッセージ
     ノード間の通信で経路途中でパケットが廃棄された場合に、その原因を送信元のノードにエラー通知する。
  • ICMPメッセージのタイプ一覧

|タイプ|内容意味|種類|
|---|---|---|---|
|0|Echo Reply|エコー応答|Query|
|3|Destination Unreachable|Error|
|5|Redirect|Error|
|8|Echo Request|Query|
|11|Time Exceeded|Error|

  • ICMPメッセージのコード一覧

タイプが「0」= 「Echo Reply」の時

コード 内容 意味 種類
0 Echo Reply エコー応答

タイプが「3」= 「Destination Unreachable」の時

コード 内容 意味 種類
0 Net Unreachable 宛先ネットワークに到達できない Error
1 Host Unreachable 宛先ホストに到達できない
2 Protocol Unreachable プロトコルに到達できない Error
3 Port Unreachable ポートに到達できない Error
4 Fragment Needed and DF was Set パケットの分割が必要であるが分割禁止フラグ(DF)が立っているので、パケットを破棄 Error
5 Source Route Failed ソースルーティングが失敗 Error
6 Destination Network Unknown 宛先ホストが不明 Error
7 Source Host Unknown 送信元ホストが使用されていない Error
8 Source Host Isolated 送信元ホストが使用されていない Error
9 Communication with Destination Network is Administratively Prohibited 宛先ネットワークとの通信が管理上禁止されている Error
10 Communication with Destination Host is Administratively Prohibited 宛先ホストとの通信が管理上禁止されている Error
11 Destination Network Unreachable for ToS 指定された優先制御値では、宛先ネットワークに到達できない Error
12 Destination Host Unreachable for ToS 指定された優先制御値では、宛先ホストに到達できない
13 Communication Administratively Prohibited 通信が管理上禁止されている Error
14 Host Precedence Violation ホストの優先度が違反している Error
15 Precedence cutoff in effect 優先制御が事実上切断された Error

タイプが「5」= 「Redirect」の時

コード 内容 意味 種類
0 Redirect Datagram for the Network ネットワークへの最適経路変更を通知 Error
1 Redirect Datagram for the Host ホストへの最適経路変更を通知 Error
2 Redirect Datagram for the ToS and Network 優先制御でネットワークへの最適経路を通知 Error
3 Redirect Datagram for the ToS and Host 優先制御でホストへの最適経路を通知 Error

タイプが「8」= 「Echo Request」の時

コード 内容 意味 種類
0 Echo Request エコー要求 Query

タイプが「11」= 「Time Exceeded」の時

コード 内容 意味 種類
0 Time to Live exceeded in Transit 転送中にTTLの値が超過した Error
1 Fragment Reassemly Time Exceeded 分割パケットを組み立て中に時間が超過した Error

#ヘッダ比較

TCPヘッダ

UDPヘッダ

ICMPフォーマット

6
11
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
6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?