Closed4

TCPについて知らないところを調べてまとめる

nasanasa

分からんところ

  • 輻輳とは?
  • フロー制御とは
  • ウィンドウ制御とは
  • 輻輳制御とは
  • 再送制御どうやってるか分かってない

参考文献:
TCP技術入門

nasanasa

輻輳とは

https://ja.wikipedia.org/wiki/輻輳

輻輳(ふくそう)とは、物が1か所に集中し混雑する様態をいう。医学、生物学領域では「輻湊」と表記する例もある。

ふむ。なるほど。

ネットワークだと通信パケット過多により通信できなくなる(パケットが破損する)ことを輻輳と呼ぶようですね。

次のような例があるようです。

  • ルーターのバッファを超える量のデータを受け取る
  • 複数のルーターから同時にデータを受信したとき一部のデータが破損する(コリジョン)
nasanasa

TCP/UDPの違い

あんま分かってなかったところをまとめる。

TCPだとユニキャスト(1対1の通信)
UDPだとユニキャスト、マルチキャスト、ブロードキャストが出来る。

TCPはストリーム型と呼ばれるらしい。上のレイヤー(httpなど)が送信したいデータをTCP側で分割して送信する。
UDPはデータグラム型を呼ばれ、上のレイヤーのデータをそのまま送信する。

通信の信頼性云々はまあ知っているので省略

nasanasa

再送制御

キモはどのようにデータの消失を判定するかということ。

1つ目の方法は再送タイマー。
TCPは送信後にACKが帰ってくるまでの時間を計測している(RRT, Round Trip Timeというらしい)
このRRTより大きい時間を再送タイムアウトとして算出しておき、これを超過した場合にはデータが消失したと判定して再送している。

2つ目は送信後に返ってくるACKを利用する方法。
受信側のACKは「次は〇〇をよこせ!」というメッセージになっている。(次に受け取るべきシーケンス番号を返す)
途中のデータが消失した場合には受信側は抜けているシーケンス番号でACKを返すため、送信側には複数回抜けているシーケンス番号が届くことになる。
3回同じシーケンス番号を送信側が受け取った時にデータが消失したと判定して再送している。

他にも色々アルゴリズムがあるらしいがこの2つでイメージつかめた気がする。

このスクラップは2023/01/28にクローズされました