Shoeisha Technology Media

資格Zine(しかくジン)

記事種別から探す

はじめてのTCP/IP その2 ~ トランスポート層とアプリケーション層のプロトコル

  • LINEで送る
  • このエントリーをはてなブックマークに追加
Gene[著]
2016/01/25 14:00

 シスコシステムズの認定資格「CCENT」の合格に向け、ゼロからネットワークの学習を始めるという方のための連載第3回です。今回は「TCP/IP」解説の2回目です。前回はTCP/IPの「IP」を取り上げましたが、今回はもう一方の「TCP」を取り上げます。また、TCPの兄弟分といえるプロコトル「UDP」や、WebブラウザでWebサイトを閲覧するのに必要ないくつかのプロトコルも解説します。今回解説することをイメージできるようになると、コンピュータネットワークの仕組みが見えてきます。

TCP/IP

一言でいうと

TCP/IPはコンピュータネットワークの共通言語

CCENT試験でのポイント

  • OSI参照モデルとTCP/IPの階層の対応付けを把握しておきましょう。
  • 代表的なプロトコルの特徴と仕組みを説明できるようにしましょう。

トランスポート層のプロトコル

ポート番号

ポート番号とは、TCP/IPのアプリケーションを識別するための識別番号で、このあと解説するTCPまたはUDPヘッダに記述されています。ポート番号によって、どのアプリケーションのデータであるかを識別して、適切なアプリケーションへデータを振り分けます。

図1:ポート番号とアプリケーションへのデータの振り分け
図1:ポート番号とアプリケーションへのデータの振り分け

ポート番号は16ビットの数値であるため、取り得る範囲は0~65535です。また、表1のように範囲で意味が決められています。

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

ウェルノウンポート番号

特に重要なのがウェルノウンポート番号です[1]。ウェルノウンポート番号は、あらかじめ決められています。サーバアプリケーションを起動すると、ウェルノウンポート番号でクライアントアプリケーションからの要求を待ち受けます。たとえば、Webサーバアプリケーションは、アプリケーションプロトコルとしてHTTPを利用します。HTTPのウェルノウンポート番号は80なので、Webサーバアプリケーションはポート番号80で、Webブラウザからの要求を待ち受けることになります[2]

主なアプリケーションプロトコルのウェルノウンポート番号は、表2のようになります。

表2:主なウェルノウンポート番号
プロトコル TCP UDP
HTTP 80 -
HTTPS 443 -
SMTP 25 -
POP3 110 -
IMAP4 143 -
DNS 53 53
FTP 20/21 -
DHCP - 67/68
Telnet 23 -

[1]: CCENT/CCNA試験ではウェルノウンポート番号はとても重要です。表2に掲げた主なウェルノウンポート番号は、しっかりと覚えておいてください。

[2]: サーバアプリケーションの設定で待ち受けるポート番号を、ウェルノウンポート番号以外にすることも可能です。ただし、そのような設定を行うことは稀です。

登録済みポートは、ウェルノウンポート番号以外でよく利用されるサーバアプリケーションを識別するためのポート番号です。登録済みポートもあらかじめ決められています。たとえば、リモートからPCなどの操作を行うリモートデスクトップは、ポート番号3389を利用します。

ダイナミック/プライベートポート

ダイナミック/プライベートポートは、クライアントアプリケーションを識別するためのポート番号です。ウェルノウンポートや登録済みポートと異なり、あらかじめ決められているわけではありません。クライアントアプリケーションが通信するときに、ダイナミックに割り当てられます。また、Webブラウザなら、ブラウザのタブやウィンドウごとに異なるポート番号が自動的に割り当てられます。これにより、Webブラウザのタブやウィンドウを識別できるようにしています。

TCP

TCPは、信頼性のあるアプリケーション間のデータの送受信を行うためのプロトコルです。また、TCPは「TCP/IP」の名前に含まれているように、TCP/IPの数々のプロトコルの中で、IPと並んで最重要プロトコルの1つになっています。

TCPを利用したアプリケーション間のデータの送受信は、次のような手順で行われます。

1. TCPコネクションの確立
まず、データを送受信するアプリケーションの間で正常な通信が可能かどうかを確認します。この確認のプロセスは3ウェイハンドシェイクと呼ばれます。TCPコネクションの確立は、アプリケーション間で仮想的な直通の通信回線を確保しているようなイメージで考えてください。
2. アプリケーション間のデータの送受信
アプリケーションが扱うデータをTCPで送信するためには、アプリケーションのデータにTCPヘッダを付加します。アプリケーションのデータにTCPヘッダを付加したものを、TCPセグメントと表現することがあります。このとき、アプリケーションのデータサイズが大きければ分割して、複数のTCPセグメントとして転送します[3]。どのように分割したかはTCPヘッダに記述にしており、宛先で元のデータに正しく組み立てられるようにしています。
データを受け取ったらその確認を行います。データの受信確認のことをACKと呼んでいます[4]。届いていないデータがあると分かれば、そのデータを再送します。また、ネットワークの混雑を検出すると[5]、データの送信速度を抑えます。このようなデータの転送の仕組みをフロー制御と呼びます。
3. TCPコネクションの切断
アプリケーションのデータの転送がすべて終了すれば、TCPコネクションを切断します。これにより、サーバおよびクライアントホストのCPUやメモリの利用を解放します。
図2:TCPによるアプリケーション間のデータの転送
図2:TCPによるアプリケーション間のデータの転送

[3]: TCPでアプリケーションのデータを分割する単位を「MSS」(Maximum Segment Size)と呼びます。MSSの標準的な値は1460バイトです。

[4]: TCPでは複数のセグメントを一度に送信することで、転送の効率を高めています。一度に受信可能なTCPセグメントのサイズを「ウィンドウサイズ」と呼びます。受信確認のACKを待たずに、ウィンドウサイズ分のTCPセグメントを一括して送信できます。

[5]: TCPでは、TCPセグメントが届かなかったらネットワークが混雑しているとみなします。ネットワークが混雑しているために、途中でTCPセグメントが破棄されてしまい、相手に届かなかったと考えています。

このような手順で、TCPは、アプリケーション間のデータ送受信を確実に行うようにしています。こうした制御を行うために、アプリケーションのデータに付加されているのがTCPヘッダです。TCPヘッダのフォーマットは次図のとおりです。

図3:TCPヘッダフォーマット
図3:TCPヘッダフォーマット

図3で示したTCPヘッダフォーマットのうち、特に重要な情報だけ簡単に補足しておきましょう。最も重要な情報は送信元/宛先ポート番号です。本文で述べたように、TCPではポート番号によって、データを適切なアプリケーションへ振り分けています。そして、データの分割や組み立て、確認に関わっているのがシーケンス番号ACK番号です。また、ウィンドウサイズは一度に受信できるTCPセグメントサイズを表し、フロー制御に利用します。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • Gene(ジーン)

    2000年よりメールマガジン、Webサイト「ネットワークのおべんきょしませんか?」を開設。「ネットワーク技術をわかりやすく解説する」ことを目標に日々更新を続ける。2003年にCCIE Routing and Switchingを取得。2003年8月に独立し、ネットワーク技術に関するフリーのインストラクター、テクニカルライターとして活動中。

バックナンバー

連載:シスコCCENT合格をゼロから目指す人のためのネットワーク超入門

もっと読む

All contents copyright © 2015-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.0