免責事項
この記事は初心者視点でザックリとした説明をしています。正確性に欠ける可能性がございますが、ご了承ください。「明らかに違うよ」ということがありましたら、ご指摘くださると幸いです。
環境
OS:最新版ではないMacOS
VirtualBox:5.2.26
Vagrant:2.2.6
Ubuntu:ubuntu/bionic64 v20181129.0.0
目次
- 通信とは
- 通信をするときのプロトコル(取り決め、約束、ルール)
- 通信をしてみる
1. 通信とは
通信とは、送り手(サーバー)が情報を送り、受け手(クライアント)がその情報を受け取ることです。
手紙、電話やインターネットなどが通信です。
その中でも、電話やインターネットは電気を使って通信するために電気通信と呼ばれます。
通信方法
通信をする方法は2つあります。
- 回線交換方式
...電話 - パケット通信方式
...インターネット
サービスの通信方法
サービスを提供する方法は2つあります。
- Peer to Peer(P2P)
...LINE、Skypeなど - サーバー・クライアント
...メールサーバー、WEBサーバーなど
以上の概念は簡単なので、説明は省略します。
2. 通信をするときのプロトコル(取り決め、約束、ルール)
1. TCP/IP
TCP(Transmission Control Protocol)とIP(Internet Protocol)はインターネット通信をするときの取り決めのことです。
TCPは相手との通信が確立してからデータの転送を行う取り決めです。
IPはインターネットを使う上での取り決めです。
TCPとIPの両方を使って通信を行うことをTCP/IP通信と言います。
※IPアドレスについて
IPアドレスはパソコン、スマートフォンなどでインターネット通信を行う場合に利用されるインターネット上の住所のことです。
インターネットに接続されたコンピュータはすべてIPアドレスを持っています。
2. UDP/IP
UDP(User Datagram Protocol)は相手との通信を確立をせずにデータの通信を行う取り決めです。
オンラインゲームなど、高速でやりとりが行われる場合には、TCPのようにいちいち通信の確立を待っていたら、遅くなってしまうため、UDPが使われます。
UDPとIPの両方を使って通信を行うことをUDP/IP通信と言います。
3. HTTP
HTTP(Hypertext Transfer Protocol)はWebサーバとWebクライアントの間でデータの送受信を行うために使われる取り決めです。
主にWebブラウザを使う際に用いられ、Webページを構成するHTMLファイルやスタイルシート(CSS等)、スクリプト(JavaScript等)、画像、音声、動画などのファイルを、データ形式などのメタ情報を含めてやり取りします。
※HTTPSについて
HTTPS(Hypertext Transfer Protocol Secure)はHTTPをより安全に使えるような取り決めです。HTTPをSSL/TLSプロトコルによって安全にしたものと解釈できます。
4. VoIP
VOIP(Voice over Internet Protocol)はTCP/IP通信を使った音声データを送受信できる仕組みです。取り決めというより技術の仕組みに該当します。
LINEやSkypeなどがその代表使用例です。
5. FTP
FTP(File Transfer Protocol)はサーバーとクライアント間で、ファイルを送受信する際の取り決めです。
例えば、インターネット上にWEBサイトを公開したいときにWEBサーバーにファイルを置かなければなりません。その際に私たちはFTPクライアントソフトというソフトウェアを使用し、ファイルをWEBサーバーに転送します。WEBサーバー側ではFTPサーバーを使用し、そのファイルを受け取ります。
6. SMTP, POP3/IMAP
SMTP(Simple Mail Transfer Protocol)はメールを送信する際に使用する取り決めです。TCPが使用されています。
POP3/IMAP(Post Office Protocol / Internet Message Access Protocol)はメールを受信する際に使用する取り決めです。TCPが使用されています。
3. 通信をしてみる
TCP/IP通信をしてみる
TCP/IP通信のパケットの様子を見ることができるtcpdumpコマンドを使います。
tcpdumpを使うためには、サーバーとクライアントの両方が必要なので、コンソールウィンドウを2つ用意します。片方をサーバー、もう片方をクライアントとします。
sudo tcpdump src 好きなURL -X
今回は、「好きなURL名」から送られてくるパケットを見るという設定です。
・sudoはスーパーユーザ(別のユーザー)としてコマンドを実行することを意味します。なぜ使うのかはわかりません、、、。
・tcpdumpの後のsrcはソースで後にURLが来ることを意味します。
・srcの後には送信元のサイトにしたい、好きなURLを指定します。
※サーバー側のURLにはhttps://などのプロトコルは書かないでください。
・-Xは、詳細にパケットの中身を表示するというオプションです。
クライアント側ではcurlコマンドを使います。
curl 好きなURL
curl (カール) というコマンドは 「好きなURL名」のWEBサイトの内容をコンソールに表示する、というコマンドです。
オプションがない場合、HTML文字列をそのまま標準出力(コンソール)に表示します。
※クライアント側のURLにはプロトコルを含めて書いてください。
クライアント側では、指定したURLのHTML文字列が表示されると思います。
クライアント側でコンソールではなく、WEBブラウザを使うとWEBブラウザがHTMLを読み取り、綺麗な画面を表示してくれるというわけです。
サーバー側では以下のように、パケットの情報が表示されます。
IP 182.22.25.124.httpsが送信元のIPアドレスで、>の後に隠している部分に送信先のIPアドレスが来ます。
0x0000: a4d1 8ce6 b764 8857 eee6 c2cd 0800 4500...の部分がパケットです。
以上でTCP/IP通信を行い、そのパケットの様子を見ることができました。
通信ができているか確認
pingコマンドを使うことで、通信ができているかの確認を行うことができます。
詳しく言うと、パケットを発行し、通信の確認をしたい相手に対して、パケットが届くかの確認をしたり、その応答時間を調査することができるコマンドです。
ping www.google.co.jp
すると、
と表示され、172.217.26.35 というIPアドレスのコンピューターと通信できていることが確認でき、
64バイトの情報が4.395ミリ秒でこちらに届いたということが確認できます。
参考
「N予備校 プログラミングコース」
https://www.nnn.ed.nico/
「「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典」
https://wa3.i-3-i.info/index.html
「【入門】FTPとは?通信・ソフトについて分かりやすく解説します」
https://www.kagoya.jp/howto/network/ftp/