30代専業主婦の独学エンジニア挑戦ブログ

実務未経験の30歳の専業主婦が独学でエンジニアを目指すブログです

TCPがデータを届ける仕組み

勉強記録

現在、ネットワークの勉強をしています。
トランスポート層TCPプロトコルが、どうやってデータを確実に届けるのかについてまとめてみました。

読んでいる技術書はこちら♪イラストが多いので、わかりやすいです!

トランスポート層の役割については前回簡単にまとめています。
programming-kanamama.hatenablog.com

TCPの役割

TCPトランスポート層プロトコルの一種で、Webやメールなど確実にデータを届けたいときに使われるプロトコルです。

TCPではデータをセグメントに分割します。
TCPのセグメントは、データとTCPヘッダーという構造になっています。

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が採用されます。