入社前勉強⑤-2 TCP通信、各制御

こんばんわ!SEINANです。前回の続きを記事にしたいと思います。

復習もかねて・・・コネクション確立

コネクションの確立から始まります。TCPヘッダにはシーケンスナンバー(以下SEQ)とアックナンバー(以下ACK)があったと思います。3wayhandshakeで確立するときは中身はありませんが、データサイズを1として扱います。そしてControlBitsのSYN、ACKのフラグを立てます。この時SEQはランダムの番号が入ります。そこから続いていきます。

TCPの各制御

TCPはいろんなことに気を使いながら通信を始めます。順序制御、フロー制御、再送制御、輻輳制御 など言われています。

順序制御
受信側でACKを出します。この時このACKは送信側のSEQとデータサイズを足したものになります。次に送信側はデータサイズが足されたSEQで送信します。このように足していくことで、順序制御が行えます。

スライディング

上図では、データが900でMSSが100、window(受信できるサイズ)が300なので、100のデータを3回送ります。受信側で1回目の処理が終わると4回目の送信準備が始まります。ウィンドウをずらしていきます。すると無駄なく送信を繰り返せます。これをスライディング・ウィンドウといいます。
また、ホストAのSEQは2001なので+データサイズ100ずつ足していき、2101、2201、2301とすることで、通信順序を管理(制御)できます。

再送制御
上図で、セグメントが破損して廃棄されてしまったら、破損の疑いのあるセグメントを再送することができます。

フロー制御
受信側に負荷がかかると、windowサイズを減らしていき(300→200など)、送信量を調整します。受信できない!となったら、windowサイズを0にして送信側に返し、しばし中断します。その後、送信側が受信側の様子を伺い(ウィンドウプローブという確認セグメントを送る)、Windowサイズが復活したことが確認とれたら、通信再開します。これをフロー制御といいます。

輻輳制御
NWが混雑していることを輻輳(ふくそう)といいます。送信側は、このネットワーク上の込み具合がわからないので、最初少ないセグメントを送信します。混んでいない!!となったら徐々に量を増やしていきます。これをスロースタートといい、また混雑してきたらセグメント量を減らしていきます。渋滞回避がうまいんですね!!

まとめ

コネクション確立後、TCP通信ではいろんなことを制御して通信を行います。送信ホストはSEQ(3wayhandshakeの時に決まったSEQからはじまる)とセグメントを送ります。受信ホストで、受信できたらSEQ+データ(MSS)サイズとして、ACKを返します。この返ってきたACKが次の送信ホストのSEQになります。これを順序制御といいます。windowサイズごとにデータを送りますが、windowに空きができたら次のセグメントを効率よく送っていきます。スライディング・ウィンドウといいます。また、セグメントが破棄されたら再送できる、再送制御、NWの混雑を回避するため輻輳制御、受信側の状況で、送信側の送るセグメント量を調整したりするフロー制御を行います。

感想

あれ?おかしい!なんか思ったよりもボリュームがありませんでした。(笑)まあ、ラッキーということで!今日職場で学んだこと、まだ復習できていないのでその時間にあてたいと思いま・・・いや寝ます!明日頑張ります。何か間違っていたらご指摘ください。本日もお疲れさまでした。

この記事が気に入ったらサポートをしてみませんか?