2022.07.01
まとめ
この記事を読んだ人へのオススメ
-
2022.02.17
-
2021.10.14
-
2022.04.18
-
2020.04.23
Twilioブログ
2022.07.01
インターネットを利用する中で、一度は「TCP/IP」という単語を聞いたことがあるかと思います。しかしそれがどのようなものなのか、改めて説明できるか自信がない……という方も多いのではないでしょうか。
この記事ではインターネットに詳しくない初心者の方にも分かりやすいように、TCP/IPの特徴や概念、考え方について整理して解説します。
TCP/IP(Transmission Control Protocol/Internet Protocol)は、インターネットにおいて広く標準的に利用されている通信プロトコルです。TCPとIPの2つを組み合わせたもので、私たちがパソコンやスマートフォンなどでWebサイトやホームページを見るときにも利用されています。
プロトコルは簡潔に言うと、「通信規約」という意味を持つ言葉です。
コンピューター同士が通信をおこなう場合、それぞれのコンピューターは「どのように通信をおこなうか」を知っていなければなりません。データの形式ややり取りする順番、エラー対処の方法といった規格・手順を、共通認識と把握しておかなくてはならないのです。
通信しあうコンピューター同士が同じ方法で接続しなければ通信はできません。こういった、コンピュータ同士が接続する方法やどのような信号を送るかといった通信の取り決めのことを、通信プロトコルと呼びます。通信プロトコルは誰もが利用できるよう、ISO(国際標準化機構)によって定められています。
TCP/IPの通信では、IPと呼ばれるコンピューター同士の位置情報を使って通信をおこないます。IPアドレスは、インターネット上におけるそのコンピューターの住所のような役割を果たすものです。
送信元のコンピューターは、世界中に広がるインターネットの中から送信相手のIPアドレスを指定してデータを送り出します。また通信に対する返答(レスポンス)にも、送信元のコンピュータのIPアドレスを利用します。つまり通信をおこなうためには、互いのコンピューターが互いのIPアドレスを把握している必要があります。
TCP/IPはその名の通り、TCPとIPの2つを組み合わせたプロトコルです。データの転送に集中し、信頼できるネットワークを確保するために、極めてシンプルな構造になっています。また仕様がインターネット上で公開されているため、誰でも無料で参照・利用できます。
TCPの大きな特徴としては、通信をおこなうコンピューター同士が互いのやり取りを都度確認しあうことが挙げられます。データの破損や紛失がないか、送ったデータはすべて届いているか、細かく確認しあいながら通信をおこなうのです。これにより、TCPは信頼性の高い通信を実現できます。
そしてIPは、IPアドレスを元に通信先を指定し、データをIPパケットにして届けるためのプロトコルです。基本的にTCPとセットで使われています。
TCP/IPは、まずIPがネットワーク経由でデータを細かく分割したパケットを受け取り、その後TCPがパケットの内容をチェックしながら正しい順番にデータを組み立て直す仕組みとなっています。
TCP/IPでは、高度な処理をなるべくコンピューター端末でおこなわせ、ネットワーク内部には最低限の機能のみを持たせる「エンドツーエンド」の原理を採用しています。これによりシステムの拡張性・柔軟性を高め、大規模なインターネットを構築することが可能となっています。
そのためエンドツーエンド通信でデータをやり取りする際、送信するデータが暗号化されていないと、第三者の介入によってデータを盗み見られる……といった被害に遭ってしまう恐れがあります。
データ転送以外の機能(セキュリティやエラー検知など)は通信をおこなうコンピューター端末同士で実装する必要がある、という点には留意しておきましょう。
TCPプロトコルでは、データを送受信するコンピューター同士が互いに転送されたデータの中身をチェックすることで、データを正しく送受信しています。
この機能を実現するため、TCPプロトコルの通信にはパケットごとに「TCPヘッダー」と呼ばれるデータ情報が付与されます。
通信をおこなうコンピューター同士はこれらの情報を利用して、データがすべて届いていることや正しく送られていることを相互に確認しています。
TCP/IPでは、通信プロトコルを「TCP/IPの4階層モデル」と呼ばれる4つの階層に分割して定義しています。それぞれの階層には専用のプロトコルが存在しており、それらを組み合わせることでさまざまなインターネット通信が実現できます。
それぞれの階層について見ていきましょう。
ネットワークインターフェース層では、同一のネットワーク内でデータを送受信するための転送方式を定義しています。
主なプロトコルには、次のようなものがあります。
プロトコルの総称 |
具体的な名称の例 |
使用する通信回線 |
Ethernet(イーサネット) |
1000Base-X 10GBase-W |
有線LANケーブルで構築された通信回線 |
Wi-Fi |
IEEE802.11ac IEEE802.11g |
無線LAN |
PPP (Point to Point Protocol ) |
- |
シリアルインターフェースと呼ばれる、電話回線などで利用される通信回線 |
EthernetやWi-Fiのように、同一ネットワークを構築する際に利用されるかどうかは、「データの転送速度」「中継せずにデータ転送ができる距離」「無線LANの場合の転送速度の違い」などによって細分化されます。
複数の異なるネットワーク間で通信するためのプロトコルを定義しているのがインターネット層です。TCP/IPの4階層モデルではIPプロトコルを利用しており、現在ではIPv4とIPv6と呼ばれる2種類のプロトコルが主に活用されています。
複数のネットワークを接続し、相互にデータ転送をおこなうためには、ネットワーク同士をつなぐための中継器(ルーター)が必要です。
ルーターは送信されてきたパケットのヘッダーから、宛先のIPアドレスやポート番号などの情報を参照し、パケットの転送先を判断してデータを転送します。ルーターによるネットワーク間のデータ転送処理を「ルーティング」と呼びます。
インターネット上には膨大な数の機器が接続されています。異なるプログラムやネットワーク同士の通信の中で、データを宛先まで正しく届けるための重要な役割を担うプロトコルを定義しているのがトランスポート層です。
トランスポート層で利用される主なプロトコルは「TCPプロトコル」と「UDPプロトコル」の2種類です。この2つの詳しい違いについては後述します。
実際に通信をおこなうアプリケーションが活用するプロトコルを定義しているのがアプリケーション層です。
アプリケーション層の代表的なプロトコルとしては、パソコンやスマートフォンなどからWebサイトを閲覧するときに利用する「HTTP」や「HTTPS」、メールの送信に使われる「SMTP」などが挙げられます。
多くの場合、通信をおこなう各アプリケーションは、文字や画像・映像など人が目で見て認識できるデータを扱っています。これらのデータを転送するために、データの中で使われている文字コードや画像の形式、送信するデータ形式などを細かく取り決めているのです。
またデータの暗号化など、セキュリティを意識した仕組みも、アプリケーション層で定義されています。
コンピュータが通信をおこなうための規格は、TCP/IP 4階層モデルの他にも、「OSI参照モデル」と呼ばれる7つの階層に分割された通信モデルを利用して表せます。
OSI参照モデルは、TCP/IP 4階層モデルよりも後から作成された考え方で、公式には関連性はありません。しかし取り扱う範囲が似ていることから、次のように対応づけて比較できます。
OSI参照モデル |
OSI参照モデルの階層内容 |
TCP/IP 4階層モデル |
(7層) アプリケーション層 |
具体的な通信サービスの提供。(HTTPやFTPなど) |
(4層)アプリケーション層 |
(6層)プレゼンテーション層 |
データの表現方法(ファイル変換) |
|
(5層)セッション層 |
通信プログラム間の通信における、初めから終わりまでの手順 |
|
(4層)トランスポート層 |
ネットワークの始まりから終わりまでの通信管理(エラー訂正や再送制御など) |
(3層)トランスポート層 |
(3層)ネットワーク層 |
ネットワーク上の通信経路の選択(ルーティング) |
(2層)インターネット層 |
(2層)データリンク層 |
直接的・隣接的に接続される通信機器間の通信 |
(1層)ネットワークインターフェース層 |
(1層)物理層 |
コネクタのピンの数や、コネクタ形状の規定など、物理的な接続 |
TCPと同じトランスポート層で利用されるプロトコルに、「UDP」と呼ばれるものがあります。TCPとUDPはその特徴の違いから、用途によってどちらを活用するかが分かれます。
TCPとUDPの違いについて、大きく5つの特徴に分けてみてみましょう。
|
TCP |
UDP |
通信方式 |
コネクション型通信 |
コネクションレス型通信 (データグラム型通信) |
重視されているポイント |
確実性 |
即時性 |
信頼性 |
高い |
低い |
利用速度 |
遅い |
速い |
利用例 |
Webサイトの閲覧 メールの送受信 など |
VoIPなどによる音声通話 動画配信 など |
TCPを利用した通信では、データが正しく転送されたのを確認するため、送信側と受信側のコンピューター同士が綿密に連携する「コネクション型」と呼ばれる通信方式を採用しています。それぞれのコンピューターが事前にタイミングを合わせ、パケットを1つずつ確実に転送する方式です。
これに対し、UDPの通信は、送信側のコンピューターから受信側のコンピューターへ一方的にデータを送り続ける方式です。事前にコネクションをおこなわず、相手の状況に関係なくデータを送信するため、「コネクションレス型」もしくは「データグラム型」と呼ばれています。
TCPは確実にデータを届けることを重用視して設計されています。そのため送受信をおこなうコンピューター同士は、コネクションを張って綿密にやりとりをおこない、途中で破損したデータがないことや紛失してしまったデータがないことを常にチェックしています。
一方でUDPは、データをできるだけリアルタイムに届けることを重視しています。このためTCPのようにコネクションを張ったり、データのチェックをおこなったりはしません。送信元のコンピューターから、受信側のコンピューターに対してデータを送り続けるのが特徴です。
前述の通り、TCPの通信はコネクションを張ったり、データの誤りを検知して再送信をおこなったりするなどの機能が充実しています。そのため届けられたデータの信頼性は高く、安心して利用できます。
しかしUDPでは、データを即時送信し、いち早く届けることに重点を置いているため、送信されたデータのチェックなどの仕組みがありません。このため、TCPと比べると送付されたデータの信頼性は低くなります。
TCPを利用した通信は、コネクションを張ったりデータの正しさを確認しあったりと、データ転送以外の通信が頻繁に発生するのが特徴です。信頼性を高めるための通信が増えるため、全体的なデータの転送速度は遅くなる傾向があります。
しかしUDPの通信はデータの送信に注力しているため、余分な通信が発生せず、利用速度はTCPに比べて速くなります。
TCPはWebサイトの閲覧やメールの送受信など、一般的なインターネットを利用する通信で多く採用されています。
一方でUDPは、VoIPによるインターネットを活用した音声通話や動画配信など、リアルタイムにデータを送受信する必要のある場面で数多く採用されています。
音声通話や動画配信では、データの一部が失われたとしても、画像や音声の乱れに繋がるだけで大きな影響はありません。このようにUDPは、データが完全な状態でなくても問題ないケースで多く採用されています。
コンピューター内では、Webサイトの閲覧やメールの送受信など、それぞれの目的にあった複数のアプリケーションが動いています。TCP/IPの通信では、コンピュータ自身が複数の通信を使い分ける必要があるため、ポート番号と呼ばれる数値によってアプリケーションを分類しています。
ここでは、コンピューターがアプリケーションを分類するための、ポート番号について解説しましょう。
ポート番号は、16ビットの2進数で表現されます。人が理解しやすい10進数で表すと、0から65535までの数値を利用可能です。
ポート番号はトランスポート層のプロトコルと組み合わせて利用され、TCPとUDPで別々に用意されています。このため、利用用途を明確にするために「TCP/80」や「UDP/53」のように、利用するプロトコルと合わせて記述されることもあります。
ポート番号の中でも、1023番以下のポートは「ウェルノウン(well-known)ポート」と呼ばれる代表的なものです。インターネット上で頻繁に利用される用途や、コンピュータシステムが利用するために予約されています。ただし新しく開発されたプロトコルなどでは、ウェルノウンポート以外を活用する事例も増えてきています。
ウェルノウンポートとして定義されている代表的な利用用途には、次のようなものがあります。
プロトコル |
ポート番号 |
利用用途 |
TCP |
80 |
Webサービスで使われるHTTP |
TCP |
443 |
SSLを利用した安全なWebサービスで使われるHTTPS |
TCP/UDP |
25 |
メールの送信に使われるSMTP |
TCP |
110 |
メールの受信に使われるPOP3 |
TCP/UDP |
53 |
ドメインの名前解決に使われるDNS |
TCP/UDP |
123 |
コンピュータの時刻合わせに使われるNTP |
これらのポート番号は、一般的なインターネット通信で広く使われています。HTTPであれば「TCP/80」と、1対1で関連づけて利用されるケースが多いです。
しかしウェルノウンポートは必ず使用しなければならないわけではありません。セキュリティなどの理由から、意図的にポート番号を変更するケースもあります。
「Twilio(トゥイリオ)」は世の中にあるさまざまなコミュニケーションチャネルを、WEB・モバイルアプリケーションと繋ぐクラウドコミュニケーションAPIです。
電話機能やビデオ機能を自社で一から開発するのには多大な工数がかかります。通信の暗号化といったセキュリティ対策など、考慮せねばならない点も多く、そのために実装を諦めてしまう企業も少なくありません。
しかしTwilioと連携すれば、それらの工数をすべてTwilio側が担ってくれます。開発者はただ数行のコードを自社プログラムに書き加えるだけで、さまざまなコミュニケーション機能を簡単に実装できるのです。
まとめ
こちらの記事では、インターネット通信で広く使われる「TCP/IP」の仕組みについて解説しました。
TCP/IPのなかで定義されている代表的なプロトコルや、「TCP/IP 4階層モデル」、「OSI参照モデル」など、インターネットの基本的な概念はしっかりと押えておきましょう。
普段からこうした概念を意識する場面は少ないかと思いますが、今回ご紹介したプロトコルが使われていることをイメージしながら、インターネットを利用してみてください。
KDDIウェブコミュニケーションズは、日本初のTwilioパートナーとして常に「開発者目線」を大切にしており、ブログ記事がお役に立てれば幸いでございます。
Twitter:https://twitter.com/twilioforkwc
2022.02.17
2021.12.21
2022.04.18
2022.02.07
2021.10.14
2022.05.18
2021.03.05
2022.07.15
2022.07.07
2022.07.01
2022.06.16
2022.06.08