技術記事ノック #24~#30
ポート番号
- イメージとしては建物の各部屋の番号
- データの種類によってどの番号を通るかを予め定めている
- インターネット80番 FTPは20番など
- TCPやUDPで通信を行う際、プログラム単位 = プロセス単位 で通信が行われる。そのため、プロセス同士で正しく受け渡しをする必要がある。
- この時にプロセスにポート番号が割り振られる。
- この番号はこのお部屋にいってねーみたいな感じ
- ホテルで部屋番号付きの鍵を渡されてその部屋に入るイメージ
- 全部で0~65535ある
- 0~1023 「ウェルノウンポート番号」
- 1024~49151 「レジスタードポート番号」
- 特定のアプリケーションなどに使用される
- 49152~65535 「その他のポート番号」
- ユーザが自由に取り扱える
- 各PC(プライベートアドレス)などはここに当てはまっていく
- ポートの開放とセキュリティはセットで考える
3ウェイハンドシェイク
TCPにおけるデータ転送を行う前のコネクションの確立
- A ➜ B 接続を開始していい?
- A ⬅ B OK + こちらからも接続を開始していい?
- A ➜ B OK
ポイント
- 3ウェインハンドシェイクの場合の開始シーケンス番号はランダム
- SYN番号 = シーケンス番号
- 最初はランダム(どの数字から始まるよりもどういう数字の流れになるかのほうが重要)
- 次からは「相手から受信したACK番号」
- ACK番号 = 確認応答番号
- 「相手から受信したSYN番号」 + 「1」 を加算した値
- 1 SYN番号 = 0 (ランダムな値) ACK番号(存在しない)
- 2 SYN番号 = 0 ACK番号 = 1 ( SYN + 1 )
- 3 SYN番号 = 1 ACK番号 = 1 ( 2のSYN(0) + 1)
データのやり取りが終了して通信を終了(コネクションの切断)する時
- A ➜ B 切断していい?
- A ⬅ B OK
- A ➜ B こちらからも切断していい?
- A ⬅ B OK
ポイント
- 切断時は4回のやり取りが必要
- 切断する時に発生するパケット = FiN
- 切断していい?と確認する時に +1 となる。
実際にデータをやりとりする場合
ポイント
- 3ウェイハンドシェイク後のSYN番号とACK番号の値が引き続き使用される
- やりとりする場合のSYN番号
- 「相手から受信したACK番号」
- やりとりする場合のACK番号
- 「相手から受信したSYN番号」 + 「受け取ったデータサイズの値」
Memo
- ネットワークアドレス / サブネットマスク
- 大体の理解はあるけどもっと理解する必要がある