helloworlds

We should seek the greatest value of our action. 基礎をコツコツ (文系エンジニア)

TCP/IPまわりについてメモしてみた

プロトコル

まずWikipediaにはこう書かれている。

プロトコル - Wikipedia

もともとは「人間どうしのやりとり」 ITの分野で生まれた言葉ではないようですね、なるほど。

現在では、電子機器が相互に通信する際に用いられる通信規約としてプロトコルという言葉を使用している。

そして通信を行うときには様々なプロトコルを組み合わせる。これをプロトコルという。

インターネットに関するプロトコルとして代表的なのが、以下。

TCP/IP

TCP/IP参照モデルとは、IETF (日本語はこちら)により管理されている、 インターネットで使われる4階層のプロトコル群のこと。 どうやらこのモデルを作成したのは、DARPA(米国国防高等研究計画局)というところみたいだ。

階層 名前 代表プロトコル
第4階層 アプリケーション層 HTTP,SMTP,DNS,FTP,SSH,TELNET...
第3階層 トランスポート層 TCP,UDP
第2階層 インターネット層 IP,ICMP,IGMP
第1階層 リンク層 ARP

アプリケーション層

主に2つのカテゴリがあって、ユーザに直接サービスを提供するユーザプロトコルと、 共通的なシステム機能を提供するサポートプロトコルがある。 どのような形式や手段でデータをやり取りするのかを決めるところと覚えておきます。

トランスポート層

通信を行うプログラムの間でのデータ伝送を実現する。 アプリケーションのためにend-to-endの通信を提供する。

インターネット層

複数のネットワークを相互に接続したインターネットワークで、機器間のデータ伝送を実現する。 ICMPは制御プロトコルであり、IPの上の層に位置するが、インターネット層に属する。

リンク層

ネットワークインターフェースのためのプロトコル。 ネットワークハードウェアが通信を実現するための層で、各種イーサネット無線LANなどがこの層に属する。

このモデルと同様によく出てくるのが、以下。

OSI

OSI参照モデルとは、ISO(国際標準化機構)によって策定された7階層で構成されたプロトコルのモデル。

階層 名前 説明 ネットワーク機器
第7階層 アプリケーション層 具体的な通信ハブ L7/LB
第6階層 プレゼンテーション層 データの表現
第5階層 セッション層 通信プログラム間の通信の開始から終了までの手順
第4階層 トランスポート層 ネットワークの端から端までの通信管理 L4/LB
第3階層 ネットワーク層 ルーティング、データ中継 L3/ルータ
第2階層 データリンク層 直接的に接続されている通信機器間の信号の受け渡し L2/スイッチングハブ,ブリッジ
第1階層 物理層 物理的な接続でコネクタのピンの数など L1/リピータハブ

基本的にTCP/IPOSIの示していることは中身は違えど存在意義は同じですね。 TCP/IPの方が実用性に長けているようです。 似ているのだから1つにすればいい、と思うかもしれませんが、それは歴史を知るといいかもしれません。(ポステルの法則)

一旦はこうした概念がることと、どこの階層でどんなことが行われているのか理解しておけばいいかな〜。

TCP/IP

TCP(Transmission Control Protocol)は、(TCP/IP参照モデルの)トランスポート層に属するコネクション型プロトコル。 Webやメール、FTPなどといったクライアントちサーバ間で双方向通信を行うサービスである。

  • パケットを送信する際、シーケンスナンバーを都度更新し送信、受け取った相手方は送信基に受信確認パケットを返す
  • データが相手に届かないか送信エラーが発生した場合、それを検知してデータの再送を行う
  • 送信したパケットと受信側で受け取るときの順番が異なった場合、順序を入れ替える
  • データが重複して送られた場合、除去を行う

これらは、データがちゃんと相手に届いたか確認するための機能です。

クライアントからサーバにTCP接続要求

3ウェイハンドシェイクを行って、クライアントとサーバ間でSYN(synchronize)とACK(ackowledge)を 投げ合うことでコネクションが確立される。

f:id:o21o21:20180321205945p:plain

TCPコネクションのクローズは、切断要求としてFIN_ACKパケットをサーバに送信。 そうするとサーバからACKパケットが返ってきたのち、FIN_ACKパケットも切断要求として送られてきます。 最後にこちら側からACKパケットを送り返してコネクションがクローズされます。

FIN(= finish),URG(=urgent),PSH(=push),RST(=reset)

TCPヘッダー内

f:id:o21o21:20180321212207p:plain

UDP

UDP(User Datagram Protocol)は、(TCP/IP参照モデルの)トランスポート層コネクションレスプロトコルDNSNTPなどといった応答性の速いサービス、 音声通話や動画などの一部の情報が欠けても問題ないアプリケーションなどで用いられる。

TCPのように相互間のある通信ではなく、一方的に送りつけるようなコネクションです。 低品質だが高速なのがUDPの特徴といっていいでしょう。

IP

IP(Internet Protocol)は、(TCP/IP参照モデルの)インターネット層のプロトコル。 ご存知、「IPアドレス」のIPはこのことですね。

IPv4では、ネットワーク部とホスト部にわけられます。 IPv6では、プレフィックスとインターフェースIDでわけられます。

より詳しく知りたい方はこちらを参考にしてみたらいいかと思います。

  • Subnet mask

Subnet mask( サブネットマスク)は、ネットワーク部とホスト部を区分します。 簡単にいうとネットワークの範囲を知るためのものです。

例えば、192.168.0.1というIPがあったとして、これだけではネットワークの範囲がわかりませんが、 192.168.0.1/24 こうした記述ならわかります。 これはつまり、192.168.0.1/255.255.255.0 = 192.168.0.0〜192.168.0.255 = 256(性格には254)通りのIPが定義できるという意味です。

24という数字は、ホストアドレス長(=24bit)を表している。 

ICMP

ICMP(Internet Control Message Protcol)は、TCP/IPが動作する上で補助的な役割を果たすためのプロトコル(トランスポート層)。 IPの制御メッセージやエラー通知を転送するのに用いられます。

コマンドととして有名なのは、pingなどのEchoReplyや、ルータ間での1回のデータ転送で送信可能なIPパケットの最大値(MTU) の調整などです。

ルータを超えて他のネットワークとの通信をするので、IPよりは上でTCPUDPよりは下の位置付け。

Well known port

Well known portとは特定のプロトコルで使用することが予約されているポート番号のことです。 (例: HTTP=TCP80番ポート、DNS=UDP53番ポートなど) TCP/UDP共に0〜1023ポートです。

Ephemeral port

Ephemeral port(エフェメラルポート、別名ダイナミックポート)とは、OSが空いているポートの中から ランダムに割り当てられるもので、OSによって違うのですが、1024番以降だったり、32768〜61000の範囲だったりする。

ポートフィルタリング

FW(ファイアーウォール)には、ポートフィルタリングと呼ばれる特定のポートの通信のみ許可したり拒否したりする機能があります。 ステートフルインスペクションという機能で、クライアントからサーバに向かう通信をしたあと、 サーバ側からクライアントに向けての通信(待ち受けるポート)を気にしなくても、この機能が勝手に予測し自動的に通過させてくれます。

参考