概要
インフラの勉強の基礎となる知識の概要をまとめたものです
対象
インフラ周りの勉強を始めようとしてる業務経験の浅い初心者
目次
- プロトコルの種類
- TCP
- UDP
トランスポート層とは
トランスポート層は一言で言うと、アプリケーション層に正しくデータを送るための階層です。
データの送受信で、どんな風にデータを受送信したり、ミスがないかチェックしたり、正しい宛先まで届けるのかについての部分です。
トランスポート層のプロトコルは何があるのか。
トランスポート層のプロトコルは主に2種類です。
- TCP・・・データの正確性を重視するプロトコル。基本的にはこのプロトコルが採用されている。
- UDP・・・データの高速性・複数性などを重視するプロトコル。電話やライブ配信などで採用されている。
PORT番号とは
送られてくる様々なパケットを適切なアプリケーションに渡さなければなりません。そのための識別に使用されるのがPORT番号です。
PORT番号は0~65535番まであります。
0~1023→ウェルノウンポート
1024~49151→レジスタードポート
49152~65535→ダイナミックポート
上記のように分かれています。
ウェルノウンポート・・・ホスト側のサーバー用のプログラムが、リクエストなどの待ち受けに使用するポート番号です。通信などの処理ごとに固定されています。
ダイナミックポート・・・クライアント側で動的に使用するポート番号。
通信の流れ
①クライアント側のアプリにダイナミックポートを割り当てる
②ホスト側に接続を要求する
③ホスト側と接続できたら、①で割り当てられたダイナミックポートをホスト側に解放する。
ホスト側はなぜ複数の接続を区別できるのか?
ホスト側は、全てのリクエストを同一のPORT番号で受け付けます。(例えばHTTPなら80番)
複数のアクセスをそれぞれ別個に処理できるのは、PORT番号とIPアドレスの組み合わせで端末を区別しているからです。
TCPとは何か
TCPとはトランスポート層で使用されるプロトコルの一種であり、web, FTP, emailなどの確実に正しいデータを届けたいときに使用されます。
TCPヘッダーとは何か
TCPプロトコルにおいては、データはセグメントと呼ばれる分割された単位で送信されます。
各セグメントには、TCPヘッダーと呼ばれるものが付加されます。
TCPヘッダーの構造
TCP/IP - TCP headerより引用
https://www.infraexpert.com/study/tcpip8.html
- シーケンス番号・・・送信ずみのバイト数を表す
- 確認応答番号・・・受信ずみのバイト数を表す
- データオフセット・・・TCPヘッダーのバイト数
- ウィンドウサイズ・・・まとめて送信可能なデータサイズ
- チェックサム・・・データが壊れてないかの情報
- コントロールフラグ・・・データの送信状況を自動で制御するためのフラグ。上の画像にはないフラグもあり、CWRフラグは回線が混雑しているので送信量を減らしたことを示すなど、それぞれのフラグが意味をもつ。
TCPの通信の方法
TCPの通信はコネクションを確執するところから始まる(3ウェイ・ハンドシェイクと呼ばれている)
①クライアント側が、コントロールフラグのSYS(接続を開始する際に使う)をオンにしたデータをホストに転送する
②ホスト側はコントロールフラグのSYSとACK(応答できたことを伝えるフラグ)をオンにしたデータをクライアントに送る
③クライアント側がコントロールフラグのACK(応答できたことを伝えるフラグ)をオンにしたデータをホストに送る
④データのやりとりが始まる
※4月9日Nobu12様の指摘を受け追記
シーケンス番号と確認応答番号
シーケンス番号・・・一連の通信の中で、実際に受け取ったデータ量が全て加算したもの
確認応答番号・・・一連の通信の中で、要求されて送信したデータ量を全て加算したもの
クライアントのシーケンス番号とホストの確認応答番号は基本的に一致する。
逆にクライアントのホスト番号とホストのシーケンス番号も一致する。
通信失敗の際にどう処理されるのか
TCPでは、複数のセグメントが同時に送られます。その中で途中のデータが抜け落ちてしまった場合、複数を同時に送っているためにシーケンス番号と確認応答番号のズレが生じます。
そんな時には、SACKという特定のパケットのみを再送信する事ができるサービスも用意されています。
UDPとは
高速に送ることを重視したプロトコル。データの抜け落ちなどが生じるが、音声サービスや動画サービスなどで用いられる。
UDPヘッダー
第13回 データグラム通信を実現するUDPプロトコル (3/4)より引用
https://www.atmarkit.co.jp/ait/articles/0310/09/news001_3.html
UDPの特徴
・接続の確認なしにデータを送信する
・データグラム(パケット)が欠落しても無視
・バッファから溢れても無視
・ブロードキャストとマルチキャストという一つのパケットを複数へ送信する機能がある(TCPにはない)