Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

SYN/ACKパケット(シン・エーケー・パケット)とは | 意味や読み方など丁寧でわかりやすい用語解説

SYN/ACKパケット(シン・エーケー・パケット)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

シンクアクパケット (シンクアックパケット)

英語表記

SYN/ACK packet (シン・エーケー・パケット)

用語解説

SYN/ACKパケットは、Transmission Control Protocol(TCP)を用いたネットワーク通信において、信頼性のある接続を確立する際に不可欠な要素である。このパケットは、クライアントがサーバへの接続を要求した後、サーバがクライアントに対して応答し、自身の接続準備を通知するために送信される。具体的には、TCPの「スリーウェイハンドシェイク」と呼ばれる3段階の接続確立プロセスにおける第2段階で使用される。これにより、両端の通信主体が互いの存在と通信の開始意図を確認し合い、データ転送に必要な初期設定を完了させることができる。

TCPは、インターネットプロトコルスイートの中でも、アプリケーション層が利用するデータを、ネットワーク層のIP(Internet Protocol)が提供する「ベストエフォート型」のサービスを超えて、信頼性の高い形で転送するためのプロトコルである。IPが単にデータを宛先に届けるための住所と経路を提供するのに対し、TCPはデータが途中で失われたり、順序が入れ替わったりすることなく、確実に相手に届くことを保証する役割を担う。この信頼性を確保するための一つが、通信開始時に確立する「コネクション」(論理的な接続)である。このコネクション確立は、お互いが「今から通信しましょう」という合意形成を行うプロセスであり、その中心となるのがスリーウェイハンドシェイクという仕組みである。

スリーウェイハンドシェイクは以下の3つのステップで構成される。 まず、クライアントはサーバに対して、接続の開始を要求する「SYN(Synchronize)パケット」を送信する。このパケットはTCPヘッダ内のSYNフラグが「1」にセットされており、クライアントが通信を開始するために使う「初期シーケンス番号」が含まれている。シーケンス番号は、送信するデータの順序を識別するためのもので、信頼性のあるデータ転送においてデータの欠落や重複を防ぐために重要である。

次に、サーバがクライアントからのSYNパケットを受信すると、サーバはその接続要求を認識し、それに対する確認応答と、自身の接続準備をクライアントに通知する「SYN/ACKパケット」を返信する。これがSYN/ACKパケットの役割である。このパケットは、TCPヘッダ内の「SYNフラグ」と「ACK(Acknowledgement)フラグ」の両方が「1」にセットされているのが特徴である。SYNフラグはサーバ自身の初期シーケンス番号をクライアントに通知するために使用され、ACKフラグはクライアントから受け取ったSYNパケットに対する確認応答を示す。ACKフラグがセットされる際には、「確認応答番号(Acknowledgement Number)」フィールドに、クライアントが送信した初期シーケンス番号に1を加えた値が設定される。これは、「あなたのシーケンス番号のデータはここまで受け取りました。次はこれこれの番号のデータを期待しています」という明確な意思表示となる。このように、SYN/ACKパケットは、サーバがクライアントの接続要求を正しく受信したことを確認しつつ、同時にサーバ自身もクライアントに通信開始を要求するという、双方向の合意形成に向けた一石二鳥の役割を果たす。

最後に、クライアントがサーバからのSYN/ACKパケットを受信すると、その確認応答として「ACKパケット」をサーバに送信する。このACKパケットは、TCPヘッダ内のACKフラグが「1」にセットされ、確認応答番号にはサーバから受け取ったSYN/ACKパケットのシーケンス番号に1を加えた値が設定される。この最後のACKパケットがサーバに到達することで、クライアントとサーバ間のTCPコネクションが正式に確立され、双方向でのデータ転送が可能となる。

SYN/ACKパケットは、このようにスリーウェイハンドシェイクの心臓部を成す。このパケットが正しく交換されることで、両通信主体は互いの初期シーケンス番号を認識し、データ転送の際にデータの順序を保証し、再送要求を管理するための基盤を築くことができる。もしこのSYN/ACKパケットがクライアントに届かなかったり、あるいはサーバが何らかの理由でこのパケットを送信できなかったりした場合、コネクションは確立されず、データ通信は開始されない。また、SYN/ACKパケットが送信された後、サーバがクライアントからの最後のACKを待っている状態は、システムリソースを一時的に消費する。この状態を悪用し、大量の偽のSYNパケットを送信してサーバにSYN/ACKを送信させ、その後のACKを返さないことでサーバのリソースを枯渇させる「SYN Flood攻撃」といったセキュリティ上の問題も存在する。このことからも、SYN/ACKパケットがTCP通信の安定性とセキュリティの両面で極めて重要な役割を担っていることが理解できる。

関連コンテンツ