追記していく
TCP(Transmission Control Protocol)
品質重視の通信プロトコル。
送ったデータが相手側にきちんと届いたか、その都度確認しながら通信するため、信頼性は高いが通信速度は低いという特徴がある。
理解のポイント
- トランスポート層に属するプロトコルでインターネットなどに利用
- データ転送時に欠けがある場合でも、シーケンス番号とACK(確認応答)を用いた再送制御 (リトランスミッション)という仕組みがある
- 例を挙げると会話のキャッチボール↓
送り手は相手から「受け取った」と返事がくれば安心する。
もし、返事が来なければきちんと届いてないんだな。
もう一度送ろう(再送制御)という流れになる。
UDP(User Datagram Protocol)
速度重視の通信プロトコル。
送ったデータを相手に届いたかを確認しないで通信するやり方。確認作業(ACK)を省略するので、転送速度は高いが信頼性が低いという特徴がある。
理解のポイント
- 接続の確立なし(コネクションレス)で即データを送信
- 相手の受信確認(ASK)を取らない、投げっぱなしの通信
- データが欠けても再送せずに次に進む
- 音声通話、動画配信、オンラインゲームなどリアルタイム通信に向いている
データが多少欠けても音や映像が一瞬飛ぶだけなので許容される
もしTCPとUDPがなかったら?
データ通信のルールがなくなる
TCPとUDPはどちらもどのようにデータを運ぶのかを決めるプロトコル。
これがないと、
- 誰に向けて送るのかも決めれない
- 一度にどれだけ送る目安もない
- データが壊れたかどうかもわからない
- 順番がバラバラになっても修正されない
インターネットが成り立たないレベルの問題
OSIモデルの第4層が崩壊
トランスポート層がなくなるとアプリケーション自体がデータの分割・順序管理・再送・エラー処理などの転送処理をすべて担うことになる。
処理内容 | 本来の担当 | トランスポート層がない場合 |
---|---|---|
データの分割 | TCPがやる | アプリが自前で分割 |
パケット順の管理 | TCPのシーケンス番号 | アプリが順番を記録・並べ替える |
欠損検知 | TCPのACKで確認 | アプリが送信・受信のログを比較 |
再送処理 | TCPの再送制御 | アプリが「届いてない」と判断し再送 |
エラー検出 | TCPヘッダのチェックサム | アプリが自前で整合性確認 |
TCPやUDPがあるから、アプリは本来の機能(UIや処理)に集中できる