データの仕分けをしているトランスポート層
勉強記録
現在リモートワーク中です。
リモートワーク初日、仕事に取り掛かろうとしたところDBサーバーに接続できない・・・というアクシデントが。
結局すぐ解決したのですが、自分のネットワークに関する知識のなさを痛感しました。
サーバーに繋がらなかったときに、ネットワークの仕組みが分かっていればいろいろな観点から原因を考えることができたなと・・・
なので途中まで読みかけていた「スラスラわかるネットワーク&TCP/IPのきほん」を隙間時間に読み進めています!
イラストが多くて視覚的にもネットワークの仕組みがわかりやすいのでおすすめです。
今日はこの本をもとに学んだことを「トランスポート層」のことを中心にまとめます。
前回ネットワークの階層モデルについて書いています
programming-kanamama.hatenablog.com
トランスポート層は何をしているのか
トランスポート層はアプリケーション層とインターネット層の間に位置する。
PCから送られてきたデータを仕分けして、ポート番号を頼りに適切なアプリケーション層のプログラムへと渡している。
トランスポート層の代表的なプロトコルはTCPとUDPの2つ。
TCPはWebや電子メールなど確実にデータを届けたいときに使われる通信方法。
データが確実に届くように相手の環境に合わせてデータサイズやまとめて送る数を調整している。
また、届かなかったパケットがあれば再送を行う。
逆にUDPはVoIPやビデオ配信など速度を重視した通信方法。
TCPのように送信速度の調整やデータの再送を行わないので、その分高速な通信を行うことができる。
ポート番号
トランスポート層にはインターネット層から様々な種類のパケットが届けられる。
それらをアプリケーション層の適切なプロトコルに渡さなければならない。
どのプロトコルに渡せばいいのかはパケットの「ポート番号」を見て判断している。
ポート番号の範囲
ポート番号は0~65535番の数値を利用しており、「ウェルノウンポート(0~1023番)」「レジスタードポート(1024~49151番)」「ダイナミックポート(49152~65535番)」の3つに分かれている。
ウェルノウンポートはサーバープログラムが待ち受けに利用するポート。
主なウェルノウンポートとしては
20番のFTP、22番のSSH、80番のHTTPなど・・・
このようにサーバー側が使うポート番号は最初から決められている。
レジスタードポートはメーカーが割り当てを受けて利用するポート。
ダイナミックポートはクライアントプログラムが利用するポート。
クライアントが利用するポート番号は、ダイナミックポートの範囲からそのとき空いてるポート番号を自動的に割り当てる。(なので何番のポートを使うかはあらかじめ決まっていない)
クライアントとサーバーの接続するまでの流れとは?
クライアントとサーバーが接続するとき、まずはクライアントが利用するポート番号を割り当ててもらう。
その後目的のWebサーバーのポートに対して接続を要求する。(例えばHTTPなら80番ポート)
Webサーバーが接続を受け入れると通信可能となる。
クライアント側は通信が終わったらポートを開放する。
サーバー側はどうやってクライアントを区別しているのか?
サーバー側のポート番号は固定なので、複数のクライアントからの通信が同じポート番号に届くことになる。
サーバー側はクライアント側のIPアドレスとポート番号を組み合わせてまとめて記憶しているので、誰と通信をしているのか区別することができる。