今回はレイヤ4のトランスポート層についてアウトプットしたいと思います。
復習ですが、トランスポート層は通信における信頼性に関するプロトコル群です。
この代表的なプロトコルはTCPとUDPです。
まず、IPアドレスを使って荷物を運ぶにもどこに運んで良いか分かりません。
これを示すのがポート番号です。IPアドレスが郵便番号だとしたら
ポート番号は住所の詳細のことになります。
つまり、トランスポート層はポートとポート間のプロトコルになります。
ポート番号はアプリケーションを特定するための番号で、
1つのIPアドレスで複数のポート番号を持てることから
セッションの多重化と言います。
ポート番号には3種類あります。
1~1023をウェルノウンポートと言って、予め用途が決まっている番号です。
1024~49151を登録済みポートと言って、サーバーに登録されている番号です。
残りはダイナミックポートで、誰でも利用できるポートです。
大きく分けるとTCPは正確性重視、UDPは速さ重視になります。
TCPはTransmission Control Protocolで
状況を通信し合いながらデータを送信するプロトコルです。
なので、コネクション型と呼ばれ、セグメントを送ります。
セグメントの中身
宛先ポートと送信元ポートで2バイトずつ使います。
セグメントで一番重要なのは制御ビットです。
これはArgument Acknowledge Push Reset Synchronize Finishの6つを
使って通信します。
そしてセッションは通信そのものを指しますが、コネクションはセッションのルートです。
コネクションを接続するための方法が3ウェイハンドシェイクです。
3ウェイハンドシェイク
①まずは送信元から宛先にSYN:1を送ります。
②次に宛先から送信元にACK:1 SYN:1を送ります。
③最後に送信元から宛先にACK:1を送ります。
これによりコネクションの接続が完了します。
TCPセグメンテーション
一度に送ることができるサイズをMSS(Maximum Segment Size)と
言います。MTUとは違い、レイヤ4で使うものになります。
このサイズに合うように分割することをTCPセグメンテーションと言います。
MSSは3ウェイハンドシェイクで決定しますが、基本的にはMTU-40です。
この分割、送信、再構築を順序制御と言います。
シーケンス番号とACK番号
送信元から宛先に送られる再構築の手がかりになる番号を
シーケンス番号と言います。また、宛先から送信元へ送られる確認番号を
ACK番号と言います。
これの初期値は3ウェイハンドシェイクで決められます。
再送制御
ACKが返ってこないと送信元は送信に失敗したとみなしてデータを再送します。
そのことを再送制御と言います。再送に使われる時間は再送タイマーと言って、
3ウェイハンドシェイクで決めれらます。
ウィンドウ制御
ACKが返ってきたらまた送っての繰り返しだと送るのに
時間がかかってしまいます。それを防ぐために宛先にはバッファと呼ばれる
保管場所があります。そのサイズをウィンドウサイズと言います。
その分だけ一度に送ることができます。
確認応答が返ってくるとウィンドウをずらすことができます。
これをスライディングウィンドウと言います。
また、ウィンドウサイズも3ウェイハンドシェイクで決定されます。
フロー制御
受信側のバッファがいっぱいになりそうで、やはり
ウィンドウサイズを減らしたい時は確認応答で知らせます。
これにより送信量を調節することができます。
これをフロー制御と言います。
輻輳制御
1:1の関係だと分かりやすいが、宛先が他のPCと
繋がっている可能性もあります。ですので、バッファがどのくらいいっぱいか
確認することができません。だからスロースタートと言って、1から順に
倍々で送っていきます。それでいっぱいになっていて、確認応答が
返ってこなかった時にまた0からスタートして送ります。
送信側には輻輳ウィンドウをおきます。
コネクションを終了するときは3ウェイハンドシェイクでFINを送り合います。
UDP
UDPはUser Datagram Protocolの略で特徴はコネクションレス型、
ベストエフォート型である。オーバーヘッド(データ以外での処理負荷)が小さいため
処理スピードが高速になります。
最後に
自分のアウトプットとして知識を出していますので、分かりにくい点等があると
思いますが、良ければ見て頂けると幸いです。
勉強中の身ですので、もし不明点や間違った点がありましたら是非コメント下さい。