WebブラウザからのHTTPリクエストと、それに対してのWebサーバーからのHTTPレスポンスを繰り返し行うことでWebサイトを閲覧できるが、これらのやりとりを行うのは**TCP(Transmission Control Protocol)**である。TCPはWebサイト閲覧だけでなく、メールの送受信やファイル転送といったさまざまなデータ転送時に利用されている。
TCPの役割
TCPでは、まずクライアントとサーバーがお互いに通信できる状態なのかを確認し、「コネクション」とよばれる通信経路を確立してからデータのやりとりをする。
コネクションの確率は、次の3回のやりとりにより行われる。
- クライアントからの接続要求(SYN)
クライアントからサーバに対して接続を要求するためのSYNパケットを送る。SYNパケットを受け取ったサーバーはそれに対して応答する。 - クライアントに対して確認応答および、サーバーからの接続要求(SYN+ACK)
TCPでは信頼性を確保するために、データ送信後必ず送信相手からの確認応答を受け取ってデータの送信が完了したと判断する。この確認応答がACKパケットである。
クライアントからの接続要求に対してサーバーがACKパケットを送信することで、接続可能であることを伝える。また、同時にクライアントに対して接続を要求するためにSYNパケットを送信する。 - サーバーに対して確認応答(ACK)
サーバーからの接続要求に対してクライアントはACKパケットを送信する。
お互いにSYNパケットを送りACKパケットで応答することで、双方向で通信が可能なことを確認し、コネクションを確立する。
コネクション確立は3回のやりとりで行われるため、「3ウェイハンドシェイク」と呼ばれる。データの送受信が終了して通信を終了(コネクションの切断)する際は、4回のやりとりが必要になる。
また、信頼性を担保するため、データ転送時に一定時間ACKの応答がなかった場合、データを再送信する「再送制御」や、順序が入れ替わっていた場合に番号通りに組み立てる「順序制御」を行なっている。
さらに、データを送るたびにACKを送るのでなく、複数のデータを受け取ってからACKパケットを送信する。