ネットワーク
TCP/IP モデル
階層 | 説明 | プロトコル |
---|---|---|
アプリケーション層 | メッセージの形式、やりとりの手順 | HTTP, SSH, FTP, SMTP |
トランスポート層 | 接続の確立・パケットの分割 / 組み立て | TCP, UDP |
インターネット層 | IPアドレスで指定された先にパケットを配送 | IP, ICMP |
リンク層 | ハードウェアが通信を実現 | イーサネット(有線LAN)、IEEE802.11(無線LAN) |
TCPは、パケットの分割や届いたパケットを適切な順番でメッセージを組み立てたり、届かなかったパケットの再送をしたりする。 プロセスが接続を待ち受ける時は、IPアドレスとポート番号を指定して、その IPアドレスとポート番号宛のメッセージを受け取る。
基本的なコマンドたち
ping
2つのコンピュータ間で相互にパケットを送受信できることを確認する。 ICMP プロトコルを使って、指定したIPアドレスにパケットを送信、応答を受け取る。
ping < IPアドレス >
traceroute
ping と同じように ICMP プロトコルを使う。 パケットが相手のコンピュータに到達するまでに通過したルータを確認する。
tcmdump
Linux でコンピュータが受け取ったパケットを表示する。
1 -> 2 で ping を打っても通らない場合、
sudo tcpdump -n icmp
2 で tcmdump で確認すると、1 からパケットが到達していることはわかる。 2 は 1 へ応答を返そうとするが 1 へのルーティングが適切じゃないので ping が通っていない。
ss
待ち受けているIPアドレスやポート番号を確認する。
sudo ss -antup
nc
TCP コネクションが確立できるか確認する。 通信がうまくいかないと状況で、アプリケーション層の問題なのかそれ以下の層の問題なのかを切り分ける。
nc -vz <IPアドレス><ポート番号>
通信の待ち受けを行う。
nc -l <IPアドレス><ポート番号>