シーケンス番号とは?なぜ必要なのかを身近な例えで理解する

シーケンス番号とは?

「シーケンス番号」という言葉を見て、なんとなく難しそうだと感じていませんか。じつは仕組みそのものは、私たちが普段使っている身近なものとよく似ています。この記事では、専門用語をできるだけ避け、宅配便や本のページ番号といった例えを使いながら、シーケンス番号の意味と「なぜ必要なのか」をやさしく解説します。

シーケンス番号とは?まずはざっくりイメージ

一言でいえば「順番を示す番号」

シーケンス番号(sequence number)とは、データに振られた「これは何番目ですよ」という順番の目印のことです。シーケンス(sequence)は英語で「連続」「順序」という意味で、その名のとおり、ものごとの並び順を管理するために使われます。

本に「1ページ」「2ページ」と番号が振ってあるのと同じだと考えてください。ページ番号があるから、ページが抜けていてもすぐ気づけますし、バラバラに落ちても元の順に戻せます。シーケンス番号は、これをデータの世界でやっているものだと考えると分かりやすいです。

身近な例え:分割で届く宅配便

大きな荷物を送るとき、宅配便で「3個口のうち1個目」「2個目」「3個目」と分けて送ることがあります。受け取る側は、箱に書かれた番号を見れば、全部そろっているか、どれかが届いていないかをすぐ判断できます。

ポイント

シーケンス番号は、この宅配便の「○個口のうち□個目」というラベルとそっくりです。データを分割して送るとき、それぞれに番号を付けておくことで、受け取った側が正しく組み立て直せるようにしているのです。

なぜシーケンス番号が必要なのか

データは「バラバラに届く」のが前提

インターネットでは、大きなデータをそのまま一気に送るのではなく、小さな「パケット」という単位に分割して送ります。そしてこのパケットは、必ずしも送った順番どおりに相手へ届くとは限りません。ネットワークの混み具合や経路の違いによって、後から送ったものが先に着いてしまうこともあります。

つまり、データが順不同で届くことが前提の世界なのです。だからこそ、「これは何番目のデータか」を示す目印が欠かせません。

順番が狂うと意味が崩れる

たとえば「おはよう」という文字を3つに分けて送ったとします。受け取った側に「よ・お・う」の順で届いてしまったら、意味が通じません。シーケンス番号があれば、届いた順番がバラバラでも、番号どおりに並べ直して「おはよう」に復元できます。

抜け落ちを見つけて取り戻せる

シーケンス番号のもう一つの大事な役割が、データの欠落の検知です。1番・2番・4番と届いて3番が来なければ、「3番が抜けている」とすぐ分かります。気づければ、相手に「3番をもう一度送って」と頼めます。これが、後ほど説明する再送の仕組みにつながります。

TCP通信でのシーケンス番号の仕組み

シーケンス番号がもっとも代表的に使われるのが、インターネット通信を支える「TCP」という仕組みの中です。ここからは少しだけ専門的になりますが、ここまでの宅配便の例えを思い出しながら読めば大丈夫です。

バイト単位で番号が振られる

TCPのシーケンス番号は、パケット1個ごとではなく、送るデータのバイト(情報量の最小単位)ごとに番号が振られるのが特徴です。「ここから送るデータは、全体の何バイト目から始まりますよ」という位置を示しています。これにより、どれだけ細かく分割されても、受け取り側はデータを正確な位置に戻せます。

確認応答番号(ACK)とセットで動く

TCPでは、データを受け取った側が「ここまで確かに受け取りました」と返事をします。このときに使われるのが確認応答番号(ACK番号)です。送り手のシーケンス番号と、受け手のACK番号がペアで会話することで、お互いに「どこまで届いたか」を確認し合っています。

会話のイメージ

送信側「100番目から送りますね」→ 受信側「150番目まで受け取りました。次は150番目からお願いします」。このやり取りを高速で繰り返すことで、抜けや重複のない通信が実現します。

通信開始時に初期値が決まる

シーケンス番号は、必ずしも0や1から始まるわけではありません。通信を始めるときの最初のやり取り(3ウェイハンドシェイクと呼ばれます)で、お互いがランダムな初期値を決めて伝え合います。ランダムにするのは、第三者に番号を予測されて通信に割り込まれるのを防ぐ、セキュリティ上の理由もあります。

シーケンス番号の動きを具体例で追ってみよう

言葉だけだとイメージしにくいので、実際に番号がどう動くのかを数字で追ってみましょう。ここでは分かりやすくするため、最初のシーケンス番号を「100」として、合計300バイトのデータを100バイトずつ3回に分けて送る場面を考えます。

送信の回 シーケンス番号 送るデータ量 受信側のACK番号(次に欲しい位置)
1回目 100 100バイト 200
2回目 200 100バイト 300
3回目 300 100バイト 400

注目したいのは、シーケンス番号が「100 → 200 → 300」と、送ったデータ量のぶんだけ増えていく点です。そして受信側のACK番号は、いつも「次に受け取りたい位置」を指しています。1回目で100バイト受け取ったら「次は200から」、2回目で受け取ったら「次は300から」というぐあいです。この番号の足し算が、ズレなく続いていることが正常な通信の証拠になります。

もし2回目が届かなかったら?

受信側は3回目(番号300)が先に届いても、「自分はまだ200までしか受け取っていない」と分かっています。そこで「次は200からお願い」とACKを返し続けます。送信側はこの返事を見て「200番が届いていないな」と気づき、もう一度200から送り直します。番号があるからこそ、どこを再送すればいいかをピンポイントで判断できるのです。

シーケンス番号と確認応答番号の違い

混同されやすい二つの番号を、表で整理しておきます。

項目 シーケンス番号 確認応答番号(ACK)
送るのは誰 データを送る側 データを受け取る側
意味 送ったデータの位置(何バイト目か) 次に受け取りたいデータの位置
役割 順番の管理・並べ直し 受信完了の通知・続きの要求
例えると 荷物に貼る通し番号 「ここまで届いたよ」の返事

二つは別々ではなく、たがいに支え合って正確な通信を成り立たせている、と理解しておけば十分です。

TCP以外で使われるシーケンス番号

シーケンス番号は通信だけの用語ではありません。「連番」という素朴な意味で、さまざまな場面に登場します。

データベースの連番(シーケンス)

データベースでは、データを1件追加するたびに自動で「1、2、3…」と重複しない番号を割り当てる仕組みがあり、これもシーケンスと呼ばれます。会員番号や注文番号のように、一つひとつを確実に区別したいときに使われます。

帳票・伝票の管理番号

請求書や伝票に振られた通し番号も、広い意味でのシーケンス番号です。発行漏れや二重発行を防ぎ、後から特定の1枚を探し出せるようにする役割を持っています。エンジニアでなくても、日常業務で目にしている身近な存在です。

知っておくと面白いシーケンス番号の豆知識

番号には上限があり、一周して0に戻る

シーケンス番号は無限に増え続けられるわけではなく、扱える桁数に上限があります。上限まで達すると、メーターが一周するようにまた0付近へ戻ります。これを「ラップアラウンド」と呼びます。大量のデータを送り続けても破綻しないよう、こうした仕組みであらかじめ備えられています。

整理番号の「呼び出し」とよく似ている

窓口でもらう整理番号も、身近なシーケンス番号の一種です。番号順に呼び出すことで、誰がどの順番かを公平に管理できます。「次は201番の方」という呼び出しは、TCPの「次は200から欲しい」というACKの考え方とそっくりです。順番を番号で管理するという発想は、私たちの生活のいたるところに根づいています。

ここまでのまとめ

シーケンス番号は「送ったぶんだけ増える位置の目印」、ACK番号は「次に欲しい位置のリクエスト」。この二つがピタッと噛み合っているときが、正常な通信です。ズレが起きたら、その番号を手がかりに必要な部分だけを送り直す。これがシーケンス番号の働きの核心です。

よくある質問(Q&A)

シーケンス番号は必ず1から始まりますか?

用途によります。データベースの連番は1から始まる設定が一般的ですが、TCPのシーケンス番号は安全のためにランダムな初期値から始まります。

パケットとシーケンス番号は同じものですか?

違います。パケットは「分割されたデータの箱」、シーケンス番号は「その箱の中身が何番目かを示すラベル」だと考えてください。

シーケンス番号がないとどうなりますか?

バラバラに届いたデータを正しい順に戻せず、抜け落ちにも気づけません。結果として、表示が崩れたり通信がやり直しになったりします。

まとめ

シーケンス番号は、データに振られた「何番目か」を示す順番の目印です。インターネットではデータがバラバラの順で届くため、正しく並べ直し、抜け落ちを見つけ、取り戻すために欠かせません。

難しそうに見えても、本のページ番号や宅配便の通し番号と同じ発想だと分かれば、ぐっと身近に感じられるはずです。TCP通信からデータベースの連番、伝票管理まで、姿を変えながらいたるところで私たちのデータを支えている。それがシーケンス番号です。