TCP/UDPとポート番号

目次
今回の記事は、TCP/UDPとポート番号についてです。

TCP/UDPとポート番号は前回の記事「前回の記事「OSI参照モデル」で学んだレイヤー4「トランスポート層」で使われるものです。

アプリケーションの開発ではもしかするとあまり意識しないかもしれませんが、インフラエンジニアおよびネットワークエンジニアでは重要な知識になります。

TCPおよびUDP、ポート番号を理解しないことには、ネットワーク設計・セキュリティ設計はできません。

それほど重要なものになりますのできちんと学習していきましょう。

TCP/UDPとは?

トランスポート層では、主にTCP(Transmission Control Protocol)UDP(User Datagram Protocol)という2つのプロトコルが使用されます。

この2つは比較すると以下のような特徴があります。
特徴 TCP UDP
接続タイプ 信頼性の高い接続型 非接続型
接続確立 通信前に接続確立(3ウェイハンドシェイク)を行う 接続確立のプロセスがない
データの順序保証 あり なし
データ転送速度 (UDPと比較して)遅い (TCPと比較して)速い
再送機能 あり(データ損失を防ぐ) なし
重視する特性 信頼性 速度

TCPは信頼性が重視されており、データ損失がないように厳密に通信の確立や再送を行います。

TCPの通信の信頼性として有名な特徴で、通信を始めるまでに「3way ハンドシェイク」と呼ばれる通信開始の前処理があります。
これは、通信を始める時に3つの確認を行います。

3way ハンドシェイク
これだけしっかりと確認を行うため、通信速度がUDPと比較すると遅い傾向にあります。

代わってUDPは、速度は速いですがデータを相手に投げつけるだけで受け取っているかどうか等は気にしないという信頼性が低い特性があります。

■TCPのイメージ
TCPのイメージ
■UDPのイメージ
UDPのイメージ
例えば、Webブラウジング(HTTP/HTTPS)やメール送信(SMTP)等ではデータの欠損が許容できないのでTCPが使用されます。

ストリーミング動画やオンラインゲームなどではデータ欠損よりもリアルタイムでのデータのやり取りが重視されるためUDPが使用されることが多いです。

ポート番号とは?

TCPやUDPというプロトコルと組み合わせて、ポート番号というものを使用します。
ポート番号は0〜65535の範囲の数値で、アプリケーション毎に使用するポート番号が決まっているため、サーバー上で動作するさまざまなサービスやアプリケーションを識別することが可能です。

ポート番号は以下のように分類されています。
種類 範囲 説明
ウェルノウンポート 0〜1023 特権ポート。一般的なサービス(HTTP、HTTPS、SSH、FTPなど)に使用される
登録済みポート 1024〜49151 IANAに登録されたアプリケーションで使用される
動的/プライベートポート 49152〜65535 一時的な接続やプライベートな用途に使用される

また、よく使用されるポート番号の例を挙げます。
プロトコル ポート番号 用途
HTTP TCP:80 Webサービス
HTTPS TCP:443 SSL/TLSによるセキュアなWebサービス
SSH TCP:22 セキュアシェル
FTP TCP:20, TCP:21 20: データ転送、21: 制御
SMTP TCP:25 メール送信
DNS TCP:53/UDP:53 ドメイン名解決

これらのポート番号を理解することで、どのようなサービスが通信を行っているかを把握できます。

例えば、IPアドレス「192.168.1.5」のポート番号「TCP:80」に通信を行うとします。
この情報だけで、「192.168.1.5」のWebサービスにアクセスしようとしているのだということまでわかります。

このようにIPアドレスとポート番号がわかると「どのサーバ」の「どのアプリケーション(機能)」へ通信しようとしているかの判別が付くことがポート番号の効果です。
この判別は、ファイアウォールの設定において、許可または拒否によるアクセス制御にとても役立つことになります。

ポートのイメージ

ポート番号の注意点は、送信ポートと受信ポートがあることです。
例えば、サーバーがWebサービスを提供しているとします。

サーバ側のポートは上記の説明でも記載したようにTCP:80のポートが使われます。
では、サーバにアクセスする側の機器ではどうでしょうか?

実は、アクセスする側の機器では、「動的/プライベートポート」の中からランダムで使用します。

ポートのイメージ
上記の図で言うとWebサービスにアクセスする側の10.0.1.100の機器(=クライアントと呼びます。)はポートはTCP:49152を使って、アクセスを行います。

サーバ側の192.168.1.5の機器はTCP:80のポートで受信しています。

このようにクライアント側とサーバ側では使用するポートが異なる点を覚えておきましょう。
動的/プライベートポートとリッスンポート
クライアント側は「動的/プライベートポート」という毎回ランダムなポートを使用して、アクセスを行います。
このようなランダムに選択している理由はセキュリティのためです。

ポート番号は外部との通信に使用する扉のようなものです。
通信を行うためにポートを開くと、外部からもウイルス等の侵入のリスクが高まってしまうのです。

なので、わかりづらいように毎回ランダムで開いて、使い終わったらすぐにポートは閉じるようになっているのです。
逆にサーバ側はWebサービスとしてTCP:80を常時開けっ放しにしております。
このようなポートをリッスンポートといいます。

外部にサービスを提供するために常時開けておく必要がありますが、その分ウイルス侵入のリスクは高まりますので、ウイルス対策ソフトを導入するなどの対策が必要になります。

よく使われるポート番号一覧

TCPの代表的なポート

以下の表は主に使用されるTCPのポート番号です。

実業務でよく使うようなものをピックアップしてリスト化しました。

以下の一覧程度を覚えておけば、困らないと思います。

ポート番号 サービス名 用途
20 FTP-DATA FTP(File Transfer Protocol)のデータ転送用チャネル。ファイル転送時のデータストリームに使用されます。
21 FTP FTPのコントロールチャネル。コマンドやレスポンスの送受信に使用されます。
22 SSH Secure Shell。暗号化されたリモートログインや安全なファイル転送のためのプロトコル。
23 Telnet 暗号化されていないリモートログインサービス。セキュリティ上の理由から現在はあまり使用されません。
25 SMTP Simple Mail Transfer Protocol。メール送信に使用されるプロトコル。
53 DNS Domain Name System。ドメイン名とIPアドレスの変換に使用されます。UDPも使用されますが、大きなレスポンスや完全なゾーン転送にはTCPが使用されます。
80 HTTP HyperText Transfer Protocol。Webページの転送に使用される標準プロトコル。
110 POP3 Post Office Protocol version 3。メールサーバーからメールを受信するために使用されるプロトコル。
119 NNTP Network News Transfer Protocol。ニュースグループの記事の読み書きに使用されるプロトコル。
123 NTP Network Time Protocol。コンピュータの時刻同期に使用されるプロトコル。主にUDPが使用されますが、一部の実装ではTCPも使用されます。
143 IMAP Internet Message Access Protocol。POP3より高機能なメール受信プロトコル。メールサーバー上でメールを管理できます。
161 SNMP Simple Network Management Protocol。ネットワーク機器の監視・管理に使用されるプロトコル。主にUDPが使用されますが、一部の操作ではTCPも使用されます。
194 IRC Internet Relay Chat。リアルタイムのテキストチャットシステム。
389 LDAP Lightweight Directory Access Protocol。ディレクトリサービスへのアクセスに使用されるプロトコル。
443 HTTPS HTTP over SSL/TLS。HTTPの暗号化バージョンで、安全なWebページの転送に使用されます。
465 SMTPS SMTP over SSL。暗号化されたメール送信に使用されます(現在はポート587のSTARTTLSが推奨されています)。
587 Submission メール送信(SMTP)のためのポート。クライアントからメールサーバーへの送信に使用され、通常STARTTLSによる暗号化をサポートしています。
993 IMAPS IMAP over SSL/TLS。暗号化されたメール受信に使用されます。
995 POP3S POP3 over SSL/TLS。暗号化されたメール受信に使用されます。
3306 MySQL MySQLデータベースサーバーへのアクセスに使用されるポート。
3389 RDP Remote Desktop Protocol。Windowsのリモートデスクトップ接続に使用されます。

UDPの代表的なポート

UDPも同様に実業務の中でよく使うようなものを一覧で示します。

ポート番号 サービス名 用途
53 DNS Domain Name System。ドメイン名とIPアドレスの変換に使用されます。通常の名前解決クエリはUDPを使用し、大きなレスポンスにはTCPが使用されます。
67/68 DHCP Dynamic Host Configuration Protocol。ネットワーク上のデバイスにIPアドレスを動的に割り当てるために使用されます。67はサーバー、68はクライアント用です。
69 TFTP Trivial File Transfer Protocol。FTPより単純なファイル転送プロトコルで、ブートイメージなどの転送に使用されます。
123 NTP Network Time Protocol。コンピュータの時刻同期に使用されるプロトコル。主にUDPが使用されます。
137 NetBIOS-NS NetBIOS Name Service。Windowsネットワークでのコンピュータ名の解決に使用されます。
138 NetBIOS-DGM NetBIOS Datagram Service。Windowsネットワークでのデータグラム送信に使用されます。
161 SNMP Simple Network Management Protocol。ネットワーク機器の監視・管理に使用されるプロトコル。通常はUDPが使用されます。
162 SNMPTRAP SNMP Trap。ネットワーク機器から管理ステーションへのイベント通知に使用されます。
500 IKE Internet Key Exchange。IPsec VPNでの鍵交換と認証に使用されるプロトコル。
514 Syslog システムログメッセージの転送に使用されるプロトコル。ネットワーク機器やサーバーからログサーバーへのログ転送に使用されます。
520 RIP Routing Information Protocol。小規模ネットワークで使用される古いルーティングプロトコル。
1194 OpenVPN OpenVPNのデフォルトポート。VPN接続の確立に使用されます。
1434 SQL Server Browser Microsoft SQL Serverのインスタンスの検出に使用されるサービス。
1701 L2TP Layer 2 Tunneling Protocol。VPN接続で使用されるトンネリングプロトコル。
1900 SSDP Simple Service Discovery Protocol。UPnPデバイスの検出に使用されます。
3478 STUN Session Traversal Utilities for NAT。NATの背後にあるデバイスがパブリックIPアドレスを発見するために使用されます。WebRTCなどのアプリケーションで使用されます。
4500 IPsec NAT-T IPsec NAT Traversal。NATデバイスを通過するIPsec VPNトラフィックに使用されます。
5353 mDNS Multicast DNS。ローカルネットワーク上でのDNS解決に使用され、Bonjour/Zeroconfの一部として機能します。
5355 LLMNR Link-Local Multicast Name Resolution。ローカルネットワーク上でのホスト名解決に使用されます。主にWindowsで使用されます。

ICMPとは?

利用用途

TCPやUDPと類するプロトコルとして、ICMP(Internet Control Message Protocol)というものがあります。

ICMPはネットワーク通信の問題を診断するために使用されます。

よく通信の診断で使う「ping」コマンドが、このICMPを利用したものになります。

OSI参照モデルのレイヤー

ICMPは、TCPやUDPに類するプロトコルと記載しましたが、実はTCPやUDPとは異なり、レイヤー3の「ネットワーク層」で動作するものです。

つまり、ネットワーク層のIPアドレスレベルのことしか処理することができないという意味になります。

ここがよく誤りがちなポイントなのですが、pingコマンドはIPアドレスによる通信の診断を目的としており、TCPやUDPに関するポート番号の通信確認には使用できないことを覚えておきましょう。

TypeとCodeについて

ICMPもTCPやUDPと同じように、ポート番号のような概念を持っています。

それが、「Type」と「Code」です。
「Type」と「Code」の一覧も載せておきますが、ここについてはあまり覚える必要はありません。

ファイアウォールなどでは、ICMPの特定タイプのみを許可するようなルールを作成することも可能で、セキュリティ的に使用できるICMPを限定している環境もあるため、TypeやCodeというものがあることは知っておくべきです。

pingやtracerouteで使用しているものだけ、なんとなく覚えておけば大丈夫です。

Type Code 説明
0 0 エコー応答 (Echo Reply) ※Ping応答として使用
3 0 ネットワーク到達不能 (Destination Network Unreachable)
1 ホスト到達不能 (Destination Host Unreachable)
2 プロトコル到達不能 (Destination Protocol Unreachable)
3 ポート到達不能 (Destination Port Unreachable)
4 フラグメンテーション必要だがDFフラグセット (Fragmentation Needed and Don't Fragment was Set)
5 ソースルート失敗 (Source Route Failed)
6 送信先ネットワーク不明 (Destination Network Unknown)
7 送信先ホスト不明 (Destination Host Unknown)
8 ソースホスト分離 (Source Host Isolated)
9 送信先ネットワークへの通信管理上禁止 (Network Administratively Prohibited)
10 送信先ホストへの通信管理上禁止 (Host Administratively Prohibited)
11 要求されたサービス品質のネットワーク到達不能 (Network Unreachable for TOS)
12 要求されたサービス品質のホスト到達不能 (Host Unreachable for TOS)
13 通信管理上フィルタリング (Communication Administratively Prohibited)
14 ホスト優先度違反 (Host Precedence Violation)
15 優先度カットオフ実行中 (Precedence Cutoff in Effect)
4 0 ソースクエンチ (Source Quench) - 輻輳制御 ※廃止予定
5 0 ネットワークリダイレクト (Redirect Datagram for the Network)
1 ホストリダイレクト (Redirect Datagram for the Host)
2 TOSとネットワークのリダイレクト (Redirect Datagram for the TOS and Network)
3 TOSとホストのリダイレクト (Redirect Datagram for the TOS and Host)
8 0 エコー要求 (Echo Request) ※Ping要求として使用
9 0 ルータ広告 (Router Advertisement)
10 0 ルータ要請 (Router Solicitation)
11 0 TTL超過転送中 (Time to Live Exceeded in Transit) ※Tracerouteとして使用
1 フラグメント再構築時間超過 (Fragment Reassembly Time Exceeded)
12 0 IPヘッダ不正 (Bad IP Header)
1 必須オプション不足 (Required Option Missing)
13 0 タイムスタンプ要求 (Timestamp)
14 0 タイムスタンプ応答 (Timestamp Reply)
15 0 情報要求 (Information Request) - 廃止
16 0 情報応答 (Information Reply) - 廃止
40 0 Photuris認証失敗 (Photuris, Security failures)
41 0 ICMP実験用 (ICMP for experimental mobility protocols)
42 0 拡張エコー要求 (Extended Echo Request)
43 0 拡張エコー応答 (Extended Echo Reply)

まとめ

この記事では、インフラエンジニアを目指す初学者の方に向けて、TCP/UCP、ICMP、ポート番号について解説しました。

今回の内容はインフラエンジニアにおいて、基本となる知識です。

実業務においても本当によく使うことになるため、TCPとUDPの違い、ポート番号毎のサービス等はきちんと学習しておきましょう。

これらの知識があることによりシステム設計やトラブルシューティングを行うことができるようになります。
この記事が皆さんのネットワーク学習の出発点となれば幸いです。