TCPとUDPとは
tl;dr
TCPとUDPはどちらもトランスポート層のプロトコルの一種です
TCPはデータを確実に届けるためのプロトコルでwebやメールなどで使用されます
UDPはデータを速く届けるためのプロトコルでインターネット通話サービスや動画など、途中のデータが欠けても速く届くことが重視されるコンテンツで使用されます (データがかけるとノイズになる)
TCPとUDP
TCP (Transmission Control Protocol)とUDP (User Datagram Protocol)はトランスポート層のプロトコルです
トランスポート層とはTCP/IPモデルの第2層で、ホストからホストへ、アプリケーションから受け取ったデータを適切なアプリケーションに渡す役割を果たします
TCP
TCPはWebやメール、FTP (ファイルのやりとり)などデータを確実に届けたい通信で使用されるプロトコルです
データを確実に届けるため、通信速度の調整や送信失敗の検知などの機能があります
通信開始時、通信終了時
TCPで通信を始めるときは3way ハンドシェイクと呼ばれる方法でコネクションを確立します
3way ハンドシェイクでのコネクションの確立方法および終了方法は下の記事に書いてます
通信速度の調整
クライアント側で受け取ることのできるデータの量に余裕があっても、回線が混雑している場合は通信速度を遅くする (一度に送るデータの量を減らす)必要があります
その場合は以下のようにして混雑していることを検知して通信速度を調整します
step1 インターネット層で混雑を検知
トランスポート層の一つ下の層であるインターネット層で用いられるICMP (Internet Control Message Protocol)と呼ばれるプロトコルで、回線が混雑しているときはそれを伝えるメッセージがパケットから送信します
step2 クライアントから受け取る余裕があるが回線が混雑していることをサーバーへ伝える
クライアントからサーバーへECEというフラグをonにしてメッセージを送ります
これは通信経路が混雑して受信できなくなる恐れがあることを伝えます
step3 サーバーから速度を落とすことを伝える
ECEフラグがonのメッセージを受け取ったサーバーは、CWRフラグがonのメッセージを送ります
これは通信経路が混雑したので、送信量を減らしたことを伝えます
通信失敗の判断
TCPではサーバー、クラアント共にリクエストを受け取るたびに受け取ったことを伝えるACKフラグをonにし、受け取ったデータの量である確認応答番号と一緒に送信元へ確認応答メッセージを送ります
もし通信の途中で一部のパケットが届かなかったり、届いたのに確認応答が返ってこなかったりする場合、一定時間待って最後に確認応答をもらったところからもう一度リクエストを送ります
UDP
UDPはデータを素早く届けたいときに使用されるプロトコルです
音声、映像などの送信ではデータの抜け落ちが発生してもノイズが入るくらいなので主にUDPが使用されています
UDPは相手に届いたことを保証するわけではないのでTCPに比べて非常にシンプル、というかただ送りつけるだけです
最近ではリアルタイム性の高いオンラインゲームでも速度を重視するためUDPを使用しています
ただオンラインゲームでは確実にデータを届ける信頼性も重要であるため、アプリケーション層で回線の混雑対策などを行なっています
参考
これは会社の図書館で見つけた本です
表紙を見たときは流石に初心者向けすぎるかなと思ったんですがイラストが易しいだけで中身は結構しっかりと解説してくれてると思います
僕みたいに情報系のバックグラウンドがない人がネットワーク周りの勉強をするときにはおすすめです