---
title: "NTPとは？4つの時刻から時計のずれを求める方法【基本情報技術者試験】"
description: "NTPによる時刻合わせを、往復時間・サーバ処理時間・片道遅延・同じ瞬間の時刻比較という順で整理し、PCの時計が進んでいるか遅れているかをFE科目A向けに解説します。"
last_modified_at: "2026-08-14"
canonical_url: "https://stemtazoo.github.io/fe/ntp-time-synchronization/"
section: "fe"
---

## まず結論

NTP（Network Time Protocol）は、**ネットワークを通してコンピュータの時刻を基準となるサーバの時刻に合わせるためのプロトコル**です。

基本情報技術者試験では、4つの時刻から、

1. 往復にかかった時間
2. サーバ内部の処理時間
3. 片道の伝送遅延
4. 同じ瞬間におけるPCとサーバの時刻差

を順に求める問題が出ます。

一番大切なのは、

> **時計の進み・遅れは、同じ瞬間の時刻同士を比べる**

という考え方です。

## 直感的な説明

PCがNTPサーバへ問い合わせを送っても、情報は一瞬では届きません。

```text
PC
↓ 問合せ
NTPサーバ
↓ 応答
PC
```

この間には、

- PCからサーバまでの伝送時間
- サーバ内部で応答を作る時間
- サーバからPCまでの伝送時間

があります。

そのため、

```text
サーバが送信した時刻
```

と

```text
PCが受信した時刻
```

をそのまま引き算しても、時計のずれは分かりません。

サーバからPCへ届くまでの時間を考慮し、

```text
PCが応答を受け取った瞬間
```

のサーバ時刻を推定してから比較する必要があります。

## 定義・仕組み

NTPによる時刻合わせでは、次の4つの時刻を使います。

```text
T1：PCが問合せを送信した時刻
T2：NTPサーバが問合せを受信した時刻
T3：NTPサーバが応答を送信した時刻
T4：PCが応答を受信した時刻
```

図にすると、次のようになります。

```text
PC                              NTPサーバ

T1  問合せ送信
 | ----------------------------> |
                                  T2 問合せ受信
                                  |
                                  | サーバ処理
                                  |
                                  T3 応答送信
 | <---------------------------- |
T4  応答受信
```

FEでは、往路と復路の伝送遅延が同じと仮定して計算する問題がよくあります。

## 科目Aでどう出る？

ここでは、例として次の時刻が与えられたとします。

```text
PCの問合せ送信時刻        1000 μs
NTPサーバの問合せ受信時刻 1300 μs
NTPサーバの応答送信時刻   1500 μs
PCの応答受信時刻          2200 μs
```

なお、往路と復路の伝送遅延は同じものとします。

### ① PC側で見た往復時間を求める

PCでは、

```text
送信 1000
↓
受信 2200
```

なので、

```text
2200 - 1000
= 1200 μs
```

です。

ただし、この1200μsには、サーバが内部で処理していた時間も含まれています。

### ② サーバ内部の処理時間を求める

NTPサーバでは、

```text
受信 1300
↓
送信 1500
```

なので、

```text
1500 - 1300
= 200 μs
```

です。

### ③ 往復の純粋な伝送時間を求める

PC側で見た1200μsから、サーバ内部の処理時間200μsを除きます。

```text
1200 - 200
= 1000 μs
```

これが、問合せと応答を合わせた往復の伝送時間です。

### ④ 片道の伝送遅延を求める

往路と復路の遅延が同じなら、

```text
1000 ÷ 2
= 500 μs
```

です。

つまり、サーバからPCへ応答が届くまでに500μsかかります。

### ⑤ PC受信時点でのサーバ時刻を求める

ここが最も重要です。

サーバが応答を送った瞬間の時刻は、

```text
1500 μs
```

です。

そこからPCへ届くまでに500μsかかるので、PCが受信した瞬間には、サーバの時計も500μs進んでいるはずです。

```text
1500 + 500
= 2000 μs
```

つまり、

```text
PCが受信した瞬間のサーバ時刻
= 2000 μs
```

と推定できます。

### ⑥ 同じ瞬間のPCとサーバの時刻を比較する

PCが応答を受信した瞬間、

```text
PCの時計       2200 μs
サーバの時計   2000 μs
```

です。

したがって、

```text
2200 - 2000
= 200 μs
```

となります。

PCの時計の方が大きな時刻を示しているため、

> **PCの時計はNTPサーバより200μs進んでいる**

と判断します。

## なぜ「進んでいる」と分かる？

ここは計算よりも意味の理解が大切です。

同じ瞬間に、

```text
正しい側の時計  2000
PCの時計        2200
```

を指しているとします。

PCの方が未来の時刻を示しているので、

```text
PCの時計が先に進んでいる
```

という意味になります。

逆に、

```text
サーバ 2000
PC     1800
```

なら、PCは200μs遅れています。

```text
PC > サーバ
→ PCが進んでいる

PC < サーバ
→ PCが遅れている
```

と判断できます。

## どんな場面で使う？

NTPは、複数のコンピュータの時刻をそろえるために使われます。

例えば、

- サーバのログ時刻をそろえる
- 複数システムの処理順序を正しく記録する
- 認証やセキュリティ処理で時刻のずれを防ぐ
- 分散システムでイベント発生時刻をそろえる

などです。

複数の機器で時計がずれていると、

```text
どの処理が先に起きたのか
```

が分からなくなることがあります。

そのため、時刻同期はシステム運用で重要です。

## よくある誤解・混同

### サーバの送信時刻とPCの受信時刻を直接比べればよい？

違います。

```text
サーバ送信
↓ 伝送時間
PC受信
```

なので、この2つは同じ瞬間ではありません。

サーバ送信時刻に伝送遅延を加えて、

```text
PC受信時点のサーバ時刻
```

を求めてから比較します。

### 伝送遅延を補正した結果、PCが進むの？

違います。

伝送遅延の補正は、

> **同じ瞬間の時計同士を比較するため**

に行います。

補正した結果、

```text
PCの表示時刻 > サーバの推定時刻
```

ならPCが進んでいると判断します。

### 往復時間をそのまま2で割ればよい？

必ずしもそうではありません。

往復時間には、NTPサーバ内部で処理していた時間が含まれています。

そのため、

```text
PC側の往復時間
-
サーバ内部の処理時間
```

を先に求めます。

その後、往路と復路の遅延が等しいという条件なら2で割ります。

### 時刻差の符号をどう見る？

同じ瞬間にそろえたあと、

```text
PC時刻 - サーバ時刻
```

を考えます。

```text
正
→ PCが進んでいる

負
→ PCが遅れている
```

と判断できます。

## 確認問題（基本情報技術者試験対策）

NTPによる時刻合わせで、次の4時刻が得られた。

```text
PCの問合せ送信時刻        500 μs
NTPサーバの問合せ受信時刻 800 μs
NTPサーバの応答送信時刻   1000 μs
PCの応答受信時刻          1700 μs
```

問合せと応答の伝送遅延は等しいものとする。

PCの時計はNTPサーバの時計と比べてどのような状態か。

- ア. 100μs進んでいる
- イ. 200μs進んでいる
- ウ. 100μs遅れている
- エ. 200μs遅れている

<details markdown="1">
<summary>▶ クリックして答えと解説を見る（ここを開く）</summary>

**正解：イ**

まず、PC側の往復時間は、

```text
1700 - 500
= 1200 μs
```

です。

サーバ内部の処理時間は、

```text
1000 - 800
= 200 μs
```

なので、往復の伝送時間は、

```text
1200 - 200
= 1000 μs
```

です。

片道の伝送遅延は、

```text
1000 ÷ 2
= 500 μs
```

となります。

サーバが応答を送信した時刻は1000μsなので、PCがその応答を受け取る瞬間のサーバ時刻は、

```text
1000 + 500
= 1500 μs
```

です。

同じ瞬間にPCは1700μsを示しているため、

```text
1700 - 1500
= 200 μs
```

となります。

PCの方が先の時刻を示しているので、**PCの時計は200μs進んでいます。**

</details>

## まとめ（試験直前用）

- NTPはネットワーク経由で時刻を同期するプロトコル
- まずPC側の往復時間を求める
- サーバ内部の処理時間を差し引く
- 往路と復路の遅延が同じなら2で割って片道遅延を求める
- サーバ送信時刻に片道遅延を加えて、PC受信時点のサーバ時刻を求める
- **時計の進み・遅れは、同じ瞬間の時刻同士を比較する**
- PC時刻の方が大きければPCが進んでいる
- PC時刻の方が小さければPCが遅れている
