資格道場 › レッスン一覧 › ネットワーク
ネットワーク・6/11・12分

TCP と UDP、ポート番号の役割

ゴール

TCPとUDPの違い、ポート番号の役割(アプリの識別・戻りパケットでの入れ替え・TCPコネクションの4つ組)、FTPの2つのポート、URLの読み方を押さえ、このレッスンの過去問を自力で解けるようになる。

「TCPかUDPか」「ポート番号は何を識別するか」は、ネットワーク分野で毎年のように形を変えて出ます。普段使っているURLの「:8080」や、Webサーバの「80番」が何を意味しているのかも分かるようになります。

このレッスンで稽古する(用語チェック・過去問)

結論:TCPは確実さ、UDPは速さ

TCPは確実に届けるために手間をかける方式で、UDPは手間を省いて速く送る方式です。どちらもIPの上にあるトランスポート層(アプリとネットワークの間で、データの届け方を決める層)のプロトコルです。試験では「信頼性ならTCP、リアルタイム性ならUDP」がそのまま問われます。

たとえるなら、TCPは書留郵便(受け取りの確認があり、届かなければ送り直す)です。UDPはポストへの投函(出したら終わりで、届いたかは確かめない)です。

比較項目 TCP UDP
接続方式 コネクション型(最初に相手と接続を確立する) コネクションレス(接続せずにいきなり送る)
確認応答(受け取りの返事) あり なし
再送制御(届かなければ送り直す) あり なし
順序制御(届いた順番を並べ直す) あり なし
速さ・負荷 手間が多いぶん遅め 手間が少なく速い
向いている用途 Web閲覧・メール・ファイル転送など、欠けたら困るもの 音声通話・動画配信・時刻合わせ・名前解決など、速さ優先や短いやり取り

ひっかけの定番は、選択肢にHTTP・IP・ICMP・PPPなど層の違うものを混ぜることです。「トランスポート層のプロトコル」と書かれていたら、候補はTCPとUDPの2つだけと覚えてください。

TCP(書留郵便)送信側受信側① 接続を確立する② データ③ 確認応答(届いたよ)④ データ(途中で消える)×⑤ 送り直す(再送)⑥ 確認応答UDP(ポストへ投函)送信側受信側データデータデータ(消えても送り直さない)×接続の確立も確認応答もない
TCPは接続を確立し、確認応答をもらい、消えたデータは送り直す。UDPは送りっぱなしで、消えても送り直さない。

どのアプリがTCP/UDPを使うか(主なポート番号つき)

欠けると困るものはTCP、短いやり取りや速さ優先はUDPと考えると当てやすくなります。時刻合わせのNTPは、UDPを使う代表として出題されています。

プロトコル 用途 使う方式 ポート番号
HTTP Web閲覧 TCP 80
HTTPS 暗号化したWeb閲覧 TCP 443
FTP ファイル転送 TCP 20(データ転送用)と21(制御用)
SMTP メール送信 TCP 25
POP3 メール受信 TCP 110
TELNET 遠隔ログイン(暗号化なし) TCP 23
NTP 時刻合わせ UDP 123
DNS ドメイン名からIPアドレスを調べる 主にUDP 53
SNMP ネットワーク機器の監視 UDP 161
DHCP IPアドレスの自動割当て UDP 67/68

DNSは普段の問合せはUDPですが、大きな応答などではTCPも使います。試験では「UDPを使うものはどれか」でNTP・DNSが正解になると押さえておけば十分です。

FTPだけは、命令をやり取りする「制御用(21番)」と、ファイル本体を流す「データ転送用(20番)」でポートが分かれています。「データ転送用と制御用に異なるウェルノウンポート」と聞かれたらFTPです。POP3・SMTP・SNMPは1つのポートだけを使います。

FTPは道が2本あるクライアント21番制御用20番データ転送用命令のやり取りファイル本体FTPサーバSMTP・POP3・SNMPはポート1つだけ
FTPは、命令をやり取りする制御用の21番と、ファイル本体を流すデータ転送用の20番の2本の道を使う。

ポート番号は「アプリの内線番号」

ポート番号は、1台のコンピュータの中で、どのアプリ(サービス)宛ての通信かを見分ける番号です。IPアドレスが会社の代表電話番号だとすると、ポート番号は内線番号です。代表番号(IPアドレス)でビルまでは届き、内線番号(ポート番号)で担当者(Webサーバのプログラム、メールのプログラムなど)につながります。

ポート番号には2種類あります。サーバ側のサービスにはウェルノウンポート(0〜1023番。HTTPなら80番のように決まっている番号)を使います。クライアント側は、通信のたびにOSが空いている番号を動的に割り当てます(例:50001番)。

試験では、似た「番号」「アドレス」との区別が問われます。

識別子 どの層・どこにあるか 何を見分けるか
MACアドレス データリンク層 同じネットワーク内の機器(前のレッスンのARPで調べたもの)
IPアドレス ネットワーク層(IPヘッダ) ネットワーク上のコンピュータ
プロトコル番号 ネットワーク層(IPヘッダ) IPの上に載っているプロトコル(TCPなのかUDPなのか)
ポート番号 トランスポート層(TCP/UDPヘッダ) 通信相手のアプリ(サービス)
シーケンス番号 トランスポート層(TCPヘッダ) データの順番(順序制御に使う)

「通信相手のアプリケーションを識別する」とあれば答えはポート番号です。プロトコル番号は「IPより上位の層」を識別するもので、「下位の層」ではありません。IPアドレスはIPヘッダに入っていて、TCP/UDPヘッダには入っていません。

IPアドレスで建物へ、ポート番号で部屋へ宛先IPアドレス+ポート80サーバ(IPアドレス)80番Web(HTTP)25番メール送信123番時刻合わせ
IPアドレス(代表番号)でサーバまで届き、ポート番号(内線番号)で中のどのプログラムに渡すかが決まる。

戻りパケットでは送信元と宛先が入れ替わる

**返事のパケットでは、送信元と宛先がそっくり入れ替わります。**手紙の返信で「差出人」と「宛先」が逆になるのと同じです。サーバが返事用に新しい番号を割り当てることはありません。

flowchart LR
  PC["PC(ポート50001・動的割当て)"] -->|"往路:送信元50001 → 宛先80"| SV["Webサーバ(ポート80)"]
  SV -->|"復路:送信元80 → 宛先50001"| PC

この入れ替えができるのは、往路のパケットに送信元ポート50001が書いてあるからです。サーバはそれを見て、「50001番宛てに返せばよい」と分かります。

TCPコネクションはIPアドレスとポート番号の4つ組で決まる

**TCPコネクション(1本の接続)は、送信元IPアドレス・宛先IPアドレス・送信元ポート番号・宛先ポート番号の4つで識別します。**同じPCから同じWebサーバに2本つないでも、PC側のポート番号が違うので別の接続として区別できます。

**MACアドレスは含めません。**MACアドレスはルータを越えるたびに書き換わるので(前のレッスンの内容です)、端から端までの接続を見分ける材料になりません。「セションID」もTCPの識別には使いません。

同じPC→同じサーバでも2本を区別PC5000150002Webサーバ80接続A接続B送信元IP宛先IP送信元ポート宛先ポート接続APCのIPサーバのIP5000180接続BPCのIPサーバのIP5000280MACアドレスは含めない(途中で変わる)違うのは送信元ポートだけ→別の接続
同じPCから同じWebサーバへ2本つないでも、送信元ポート番号が違うので4つ組で別の接続と分かる。MACアドレスは含めない。

URLの読み方

URLは「スキーム:// ホスト名 : ポート番号 / パス」の順に並んでいます。例:http://host.example.co.jp:8080/file

部分 例 意味
スキーム http: 使うプロトコル(HTTPで接続する)
ホスト名 host.example.co.jp 接続先サーバの名前(DNSでIPアドレスに変換される)
ポート番号 :8080 接続先のポート。省略するとHTTPなら80番
パス /file サーバ内のどのリソースか

ひっかけは「:8080はプロキシ経由の意味」「fileはHTMLファイルの意味」「.jpだからサーバは日本国内」です。どれも誤りで、:8080は単にポート番号、パス名から形式は決まらず、.jpはドメイン名でありサーバの所在地を保証しません。

試験での問われ方

  • 「信頼性よりリアルタイム性」「コネクションレス」「確認応答・順序制御をもたない」 → UDP。選択肢にHTTP(アプリケーション層)・IP(ネットワーク層)・ICMP・PPPを混ぜてくる
  • 「UDPを使うものはどれか」 → NTP(またはDNS)。FTP・POP3・TELNET・SMTP・HTTPはTCP
  • 「通信相手のアプリケーションを識別」 → ポート番号。MACアドレス・プロトコル番号・シーケンス番号が並ぶ
  • 戻りパケットのポート番号 → 往路を入れ替えるだけ。「サーバ側で別の番号を割り当てる」は誤り
  • TCPコネクションの識別 → IPアドレス2つ+ポート番号2つ。MACアドレスを含めた「全部○」の選択肢に注意
  • データ転送用と制御用でポートが別 → FTP(20と21)
例題 1

戻りパケットのポート番号を決める

PC と Web サーバが HTTP で通信している。PC から Web サーバ宛てのパケットでは,送信元ポート番号は PC 側で割り当てた 50001,宛先ポート番号は 80 であった。Web サーバから PC への戻りのパケットでのポート番号の組合せはどれか。
選択肢は表
送信元(Web サーバ)のポート番号宛先(PC)のポート番号
ア8050001
イ5000180
ウ80 と 50001 以外からサーバ側で割り当てた番号80
エ80 と 50001 以外からサーバ側で割り当てた番号50001

ア 送信元(Web サーバ)のポート番号: 80,宛先(PC)のポート番号: 50001
イ 送信元(Web サーバ)のポート番号: 50001,宛先(PC)のポート番号: 80
ウ 送信元(Web サーバ)のポート番号: 80 と 50001 以外からサーバ側で割り当てた番号,宛先(PC)のポート番号: 80
エ 送信元(Web サーバ)のポート番号: 80 と 50001 以外からサーバ側で割り当てた番号,宛先(PC)のポート番号: 50001

出典:平成31年度 春期 基本情報技術者試験 午前 問34

解き方と答えを見る
  1. 往路のパケットを書き出す:送信元ポート=50001(PC側で動的に割り当てた番号)、宛先ポート=80(WebサーバのHTTP用ウェルノウンポート)。
  2. 戻りはWebサーバ→PCなので、送信元と宛先を入れ替える。送信元ポート=往路の宛先=80、宛先ポート=往路の送信元=50001。
  3. サーバ側が別のポートを新しく割り当てることはないので、ウ・エは誤り。往路と同じ向きのイも誤り。
  4. 表で「送信元(Webサーバ)80、宛先(PC)50001」の行を選ぶ。

答え:ア(送信元80、宛先50001)

例題 2

TCPコネクションの識別に必要な情報を選ぶ

TCP/IP のネットワークにおいて,TCP のコネクションを識別するために必要な情報の組合せはどれか。ここで,必要な情報は“○”で表し,不要な情報は“×”で表す。
宛先MACアドレス送信元MACアドレス宛先IPアドレス送信元IPアドレス宛先TCPポート番号送信元TCPポート番号
ア××○×○×
イ××○○××
ウ××○○○○
エ○○○○○○

ア 宛先MAC ×,送信元MAC ×,宛先IP ○,送信元IP ×,宛先TCPポート ○,送信元TCPポート ×
イ 宛先MAC ×,送信元MAC ×,宛先IP ○,送信元IP ○,宛先TCPポート ×,送信元TCPポート ×
ウ 宛先MAC ×,送信元MAC ×,宛先IP ○,送信元IP ○,宛先TCPポート ○,送信元TCPポート ○
エ 宛先MAC ○,送信元MAC ○,宛先IP ○,送信元IP ○,宛先TCPポート ○,送信元TCPポート ○

出典:平成25年度 春期 基本情報技術者試験 午前 問35

解き方と答えを見る
  1. TCPコネクションは「送信元IPアドレス・宛先IPアドレス・送信元ポート番号・宛先ポート番号」の4つ組で識別する、と思い出す。
  2. IPアドレスは2つとも○、TCPポート番号も2つとも○になる行を探す。片側だけ○のア・イは、同じサーバへの複数の接続を見分けられないので×。
  3. MACアドレスはルータを越えるたびに変わり、端から端までの接続の識別には使わない。MACアドレスまで○のエは×。
  4. 条件を満たすのは「MAC×・×、IP○・○、ポート○・○」の行。

答え:ウ

要点(試験直前に読む)

  • TCP=コネクション型・確認応答/再送/順序制御あり=信頼性。UDP=コネクションレス・それらなし=速さ・リアルタイム性。
  • UDPを使う代表はNTP(123)・DNS(53)。FTP・POP3・SMTP・TELNET・HTTPはTCP。
  • ポート番号は通信相手のアプリを識別する。サーバはウェルノウンポート(HTTP=80)、クライアントは動的に割り当てた番号。
  • 戻りパケットは送信元と宛先を入れ替えるだけ(往路が50001→80なら、復路は80→50001)。
  • TCPコネクションは送信元・宛先のIPアドレスとポート番号の4つ組で識別する。MACアドレスは使わない。
  • FTPは制御用21番とデータ転送用20番の2つ。URLの「:8080」はポート番号。

ひっかけ

  • 「トランスポート層」と書いてあるのにHTTP・IP・ICMP・PPPが選択肢に並ぶ → 層が違うものは除外し、TCPかUDPの二択にする。
  • アプリの識別に「MACアドレス」「プロトコル番号」「シーケンス番号」を混ぜる → アプリはポート番号、TCPかUDPかはプロトコル番号、順番はシーケンス番号。
  • 戻りパケットで「サーバ側で新しい番号を割り当てる」 → 割り当てない。往路の送信元と宛先を入れ替えるだけ。
  • TCPコネクションの識別で、MACアドレスまで全部○の選択肢 → MACアドレスはルータごとに変わるので不要。IP2つとポート2つで足りる。
  • 「送信元ポートはプログラムに固有の番号」「IPアドレスはTCPヘッダ内にある」「:8080はプロキシ」「.jpは国内サーバ」 → どれも誤り。

用語(17)

トランスポート層 とらんすぽーとそう
IPの上でアプリ同士のデータの届け方(確実さや速さ)を受け持つ層で、TCPとUDPがここに属する。
⚠ IPはネットワーク層、HTTPはアプリケーション層。「トランスポート層のプロトコル」ならTCPかUDPだけ。
TCP Transmission Control Protocol
接続を確立し、確認応答・再送・順序制御でデータを確実に届けるコネクション型のプロトコル。
⚠ UDP:信頼性の機能をもたず速い。「信頼性重視」ならTCP。
UDP User Datagram Protocol
接続をせずにデータを送りっぱなしにする、軽くて速いコネクションレス型のプロトコル。
⚠ TCP:確認応答・順序制御あり。「リアルタイム性重視」「確認応答をもたない」ならUDP。
コネクション型/コネクションレス こねくしょんがた/こねくしょんれす
送る前に相手と接続を確立するのがコネクション型、確立せずにいきなり送るのがコネクションレス。
⚠ TCPがコネクション型、UDPがコネクションレス。
確認応答 かくにんおうとう(ACK:Acknowledgement)
受け取った側が「届いた」と送り返す返事のことで、TCPはこれで届いたかどうかを確かめる。
再送制御 さいそうせいぎょ
確認応答が返ってこないデータを送り直す仕組みで、TCPがもつ。
順序制御 じゅんじょせいぎょ
バラバラの順に届いたデータを、シーケンス番号を使って元の順に並べ直す仕組みで、TCPがもつ。
シーケンス番号 しーけんすばんごう
TCPでデータの並び順を示す番号で、順序制御や再送に使う。
⚠ ポート番号:アプリを識別する番号。シーケンス番号はアプリの識別には使わない。
ポート番号 ぽーとばんごう
1台のコンピュータの中で、通信相手のアプリ(サービス)を見分けるためにTCP/UDPが使う番号。
⚠ MACアドレス(機器を識別・データリンク層)やプロトコル番号(TCPかUDPかを識別・IPヘッダ)と区別する。
ウェルノウンポート Well-known port
0〜1023番の、HTTP=80のように主なサービス用にあらかじめ決められたポート番号。
⚠ クライアント側は通信ごとに動的に割り当てた番号(例:50001)を使う。プログラムごとに決まった固有の番号ではない。
プロトコル番号 ぷろとこるばんごう
IPヘッダの中にあり、IPの上に載っているプロトコル(TCPかUDPかなど)を示す番号。
⚠ 示すのは「IPより上位」のプロトコル。アプリの識別はポート番号。
NTP Network Time Protocol
ネットワーク経由で機器の時刻を合わせるプロトコルで、UDPを使う。
⚠ FTP・POP3・TELNETはTCP。「UDPを使うもの」ならNTPやDNS。
DNS Domain Name System
ドメイン名からIPアドレスを調べる仕組みで、普段の問合せはUDPの53番を使う。
FTP File Transfer Protocol
ファイル転送のプロトコルで、TCPの21番(制御用)と20番(データ転送用)の2つのポートを使う。
⚠ POP3(110)・SMTP(25)・SNMP(161)は1つのポートだけ。
TCPコネクションの4つ組 よっつぐみ
送信元IPアドレス・宛先IPアドレス・送信元ポート番号・宛先ポート番号の組合せで、1本のTCP接続を識別するもの。
⚠ MACアドレスやセションIDは含まない。
URL Uniform Resource Locator
「スキーム://ホスト名:ポート番号/パス」の形で、Web上の資源の場所と取得方法を示す文字列。
⚠ :8080はポート番号であってプロキシの指定ではない。.jpはドメイン名でサーバの所在地ではない。
スキーム すきーむ
URLの先頭(http: など)で、どのプロトコルで接続するかを示す部分。

このレッスンの過去問

このレッスンで稽古する