TCPがデータを届ける仕組み
勉強記録
現在、ネットワークの勉強をしています。
トランスポート層のTCPプロトコルが、どうやってデータを確実に届けるのかについてまとめてみました。
読んでいる技術書はこちら♪イラストが多いので、わかりやすいです!
トランスポート層の役割については前回簡単にまとめています。
programming-kanamama.hatenablog.com
TCPヘッダーとは?
TCPのセグメントは、先ほども言ったようにデータ本体の上にTCPヘッダーがついた構造になっています。
このTCPヘッダーにはデータを送るための様々な情報が含まれており、たとえば・・・
・シーケンス番号(送信済みバイト数)
・確認応答番号(送信済みのバイト数)
・コントロールフラグ
・データオフセット(TCPヘッダーの長さ)
・ウィンドウサイズ(まとめて受信できるデータサイズ)
・チェックサム(データが壊れていないかチェックするための情報)
などが含まれています。
コントロールフラグ
TCPヘッダーの中に含まれるコントロールフラグとは、今の状況を相手に伝えてTCPの通信を制御する働きをします。
(フラグとはオン/オフの2つの状態を持つデータのこと)
フラグには様々な種類があります。
(CWR、ECE、URG、ACK、PSH、RST、SYN、FIN)
その一部を紹介すると
・ECE(通信経路が混雑して受信できなくなるかもしれないから、通信速度を落としてほしいことを伝える)
・ACK(何かを確認したことを伝える。確認応答番号と組み合わせて使われる)
・SYN(接続を開始する際にオンにする)
・FIN(通信を終了したいことを伝える)
などなど・・・
通信の開始から終了までの流れ
TCPで通信する場合、まず「コネクション確立」から始まります。
(「コネクションを張る」と言ったりするようです)
コネクション確立は3ステップで行われるので「3ウェイ・ハンドシェイク」と呼ばれます。
コネクションが確立するとデータ転送ができるようになり、データを送り終えたら「コネクション終了」をします。
コネクション確立
先ほど説明したように、TCPヘッダーのコントロールフラグであるSYNとACKが使われます。
1.クライアントからサーバーへコネクション要求(SYNがオンになります)
2.クライアントからサーバーへのコネクション確立、そしてサーバーからクライアントへコネクション要求(ACKとSYNオンになります)
3.サーバーからクライアントへのコネクション確立(ACKがオン)
このように3ステップでコネクションの確立を行います。
SYNは通信を開始したいときにオンにするフラグで、ACKはちゃんと届いたよーということを表すフラグです。
コネクション終了
コネクション終了にはコントロールフラグのFINを使います。
コネクション確立のときと同じように、今度はSYNではなくFINフラグをオンにします。
シーケンス番号とMSSをすり合わせている
コネクションを確立するときに、シーケンス番号(送信済みのバイト数)と、最大セグメントサイズ(MSS)をすり合わせています。
MSSは1セグメントで転送可能なデータの最大量のことです。
クライアントとサーバーでMSSが違うので、小さいほうのMSSが採用されます。