ACK 【ACKnowledgement】 肯定応答 / 確認応答
概要
ACK(ACKnowledgement)とは、二者間の通信で、相手方に何らかの肯定的な応答を返す際に送られる信号やデータ、パケットなどのこと。「接続要求を受理した」「データが正しく受信できた」といった内容を伝達するために用いられる。大型コンピュータの端末などで用いられた制御コード(制御文字)の一種で、ASCII文字コードでは6番の制御文字がACKを表している。現在ではACK文字以外にも、通信規格やプロトコル(通信規約)などで定められた、要求やデータなどの受け手が送り手に肯定的な返事を返すためのフレームやパケットなどのことを広くACKと呼んでいる。
通信方式によってはACK以外に部分的な成功や肯定を表す「Selective ACK」、失敗や拒否など否定的応答を表す「NAK」(Negative ACK)あるいは「NACK」などが用いられることもある。
ACKパケット (ACK packet)
IPネットワークで標準的に用いられるTCP(Transmission Control Protocol)で伝送制御に用いられるパケットの種類の一つで、相手に何らかの応答をするときに送られるもの。広義にはヘッダ中のACKフラグが1になっているものすべてを含む。
TCPで接続を確立するスリーウェイハンドシェイクでは、接続したい側がSYNパケットを送り、接続される側がSYN+ACKパケットを返信し、接続したい側が再度ACKパケットを送るという3段階で接続を行う。
ACK番号
TCPには伝送途上のパケットの欠落を検知して自動的に送りなおす再送制御の機能がある。送信側は一連のデータをパケットに分割する際にシーケンス番号という通し番号を割り振って送信する。受信側では受領したパケットのシーケンス番号に受信済みバイト数を加算した「ACK番号」を送信側に送り返す。
順調に受信が進んでいるうちは、送信側が受け取る受領確認パケットのACK番号は増大していくが、どこかでパケットが欠落すると受信側は受信済みバイト数が増えなくなるため同じACK番号を繰り返し送り返すことになる。3回続けて同じACK番号が届いたら、直前のパケットが脱落したとみなして同じものを再送する。