プログラミング奮闘記

難しいと評判!初心者がN予備校でプログラミングを学んだ感想と備忘録!
No.12:通信について

N予備校 プログラミングコース 第12回

あなたは2019年の目標って立てましたか?
どんな目標を立てたか覚えていますか?

私は2018年末に2019年の目標を立てました。
その一つにプログラミングを学び仕事として使えるようにすることをあげました。
そして、思い立ったが吉日と「N予備校のプログラミングコース」を申し込みました。

そして受講と同時に自身の振替と、これから始めようと考えている人の参考になればとブログを書き始めました。
今回ブログの移設にともない、再度そのブログを読み返しながら、今思うことを加えて記載していきたいと思います。

また私が受講したのは【2018年度】で、現在公開されている【2019年度】との違いについても書いていきたいと思います。

このブログは、初心者が学びながら書いているため、間違っている場合があります。
分かり次第修正していくつもりです。

そのあたりも含め楽しんでいただければと思います。 

最後に進めていてわからなかったところや気になったところをまとめています。

プログラミング入門 webアプリコース 第12回

前回は、標準出力、vi、シェルプログラムについて学びました。

今回は、通信ネットワークの仕組みについて学びます。
さらに、多数の人に特定のサービスを提供する仕組みを作り、HTTP通信について学びます。

  • 今回の内容まとめ(第2章 7~9)
    ・通信手段について
    ・ネットワークについて
    ・サーバーとクライアントについて
    ・HTTP通信ついて

  • 今回の目標
    第一章で作成した「あなたのいいところ診断」アプリをサーバー上で起動できるようにする

  • 今回新しく扱っているコマンド等
    ・sudo
    ・tcpdump
    ・curl
    ・ping

通信手段について

電話・無線・インターネットなどの電気通信手段には、「回線交換方式」「パケット交換方式」の二つの方式があります。

回線交換方式

電話などのように、回線交換方式は、通信を始める前に回線を占有します。
一旦通信を始めると終わるまでつながった状態が続きます。
1対1で占有しているため、他の人とつながることが出来ません(電話で言う話し中の状態)。

パケット交換方式

インターネットで利用されているのがパケット交換方式です。
パケットとは、細かく分割したものの単位のことを言います。
パケット交換方式では、このパケットを様々な経路を通じて送ります。
様々な経路を通してつながるため、回線を占有することがありません。
そのため多くの人が使うことが可能であり、またどこかの経路が遮断されても別回路を経由することで通信を続けることができます。

ネットワークについて

ネットワークとは、「網」という意味の英単語です。
コンピューター同士は、インターネットを通じて他のコンピューターと接続し網状の構造体を構成します。この構造体のことをネットワークと言います。
このネットワーク上の自分の住所にあたるものをIPアドレスといいます。
またインターネットでは通信の安全性を高めるためにTCPという仕組みが利用されています。

IPアドレス

IPアドレス(Internet Protocol Address)は、0~255の整数4つで構成されたインターネット上の住所です。
パケットの中には送信先と送信元の情報が含まれており、その中にIPアドレスも含まれています。
なお、プロトコル(protocol)とは、通信上での約束事のことです。

TCP

Transmission Control Protocolの略称で、伝送制御プロトコルという意味です。
IPによるパケットを使った通信で、送り手がデータを送った際に受け取り側が受け取ったことを確認しながら通信します。
相手との通信状況を確認しているため、安全性は高いですが、確認を行う分通信速度が遅くなります。

UDP

User Datagram Protcolの略称で、 TCPに対して、相手との接続を確立せずに一方的にデータを送る方式です。
接続を確認せずに送るため、通信速度は速いですが、正しく送れているかの確認ができません。

以上のように、インターネットでは情報を分割したパケットをやり取りしています。

パケットに関するコマンド

そのパケットの内容を、下記のコマンドを使うことで確認することが出来ます。

sudo

superuser doの略で、すべての権限を持つユーザーや他のユーザーとして実行するときのコマンドです。

sudo ○○
スーパーユーザーで、コマンド○○を実行します。

tcpdump

TCPという取り決めで通信する際の、パケットの内容を見るためのコマンド

tcpdump src www.×××
 サイト(www.×××)から送られてくるパケットの内容を見ることが出来ます。
*Ctrl+Cキーで、コマンドを終了させることが出来ます。 

curl

ウェブサイト内の内容をコンソールに表示するコマンドです。

curl www.×××
サイト(www.×××)内の内容をコンソールに表示するkとが出来ます。 

ping

ネットワーク上にあるパソコンなどに対してパケットが届くのかや応答時間を確認することが出来るコマンドです。

ping www.×××
サイト(www.×××)にパケットが届くかと、そのパケットが届くまでの時間を確認することが出来ます。

*Ctrl+Cキーで、コマンドを終了させることが出来ます。

サーバーとクライアント

サーバーを提供するための仕組みには「サーバークライアント型通信」「P2P(Peer to Peer)型通信」の2つあります。
この項では、tmuxという仮想端末ソフトを利用して、サーバークライアント型のプログラムを動かします。

  • サーバークライアント型通信
    サービスを提供するコンピューターをサーバー、サービスを受ける側のコンピューターをクライアントと呼び、それぞれのクライアントがサーバーと通信します。

  • P2P型通信
    すべてのコンピューターがサーバでありクライアントでもあり、それぞれが相互に通信します。
     

tmuxを用いたサーバークライアント通信

tmuxとは、仮想ソフトと呼ばれるソフトウェアで、1つのコンソールで、複数のコンソールを操作したり、コンソールの状態を維持したままにすることが出来ます。
このソフトを使って、1つのコンソールをサーバーとして使い、別のもう一つのコンソールをクライアントとして使うことで、サーバークライアント型のプログラムを動かします。

tmuxの使い方

tmux 

tmuxを起動します。

tmux a

tmuxに接続します。このことをアタッチと言います。

Ctrl +b  → d

tmuxから離れ ます。このことをデタッチと言います。

Ctrl +b  → c

新規にウインドウを作成します 

Ctrl +b  → 数字

数字のウィンドウを表示します。

Ctrl +b  → p

前の数字に移動します。

Ctrl +b  → n

後ろの数字に移動します。

Ctrl +b  → x

ウィンドウを閉じます。

Ctrl +b  → ?

ヘルプを表示することが出来ます。
*qで終了することができます。

サーバーの設定

tmuxを用いて2つのウィンドウを作成し、片方をサーバーにします。

while :; do (echo “Success”) | nc -l 8000; done
上記を実行することで、クライアントからのアクセスを待ち受ける状態になります。

このコマンドは、「8000番のポートからの通信があったら、Successという内容を表示して終了します」という意味になります。

ポート

TCPやUDPの通信の取り決めのひとつで、0~65535番のいずれかの数値を設定して通信を行います。 このポートを必ず利用して通信します。

nc

netcatの略で、TCPやUDPの読み書きを行うコマンドです。

nc -l ○○
-l は、リッスン(listen)モードで、○○番のポートからの通信を待ち受けている状態になります。

クライアントの設定

サーバーとして設定したウィンドウとは違う、もう片方のウィンドウをクライアントと設定します。

talent 127.0.0.1 8000
自分自身を示す特別な IPアドレス(127.0.0.1)の8000番のポートにアクセスします。

telnet

リモートコンピューター(ネットワークに接続している自分以外のコンピューター)にアクセスし、遠隔操作を開始するためのコマンドです。
 
上記のように設定・実行することで、サーバー側のコマンド(telnet)によって、ポート番号8000を使って自分のコンピューターにアクセスし、それにより8000番ポートからのアクセスがあったためクライアント側がSuccessと表示します。

  

HTTP通信

httpとは、通信プロトコルの一つで、インターネット上でWebサーバーとクライアントが相互に通信するために使用される仕組みです。

HTTP

HTTPとは、HyperText Transfer Protpcplの略で、Hyper Text(文章、画像、音声などを含んだ文書)を受け渡すためのTCP/IP上で実現するプロトコルの一つです。HTTPでは、80番のポートを使う決まりになっています。

HTTPS

HTTPSとは、HTTPをSSLやTLSという方式で暗号化して通信を行うプロトコルです。
通信経路上の盗聴や第三者によるなりすましを防止するつことが出来ます。HTTPSでは、443番のポートが利用されています。

DNS

DNSとは、Domain Name Systemの略で、ホスト名をIPアドレスに変換するシステムです。
 

ここまでで学んだことを使うことで、以前に作成した「あなたのいいところ診断」アプリをサーバー上で起動できるようなります。

ABOUT ME
GoodAmbition
オンライン塾経営者(大阪大学工学部出身の元開発技術者) 自身も家庭教師や塾講師として働きつつ、後輩の育成やオンライン塾を経営しています。 私自身も約10年にわたり家庭教師や塾講師として100人以上の受験生と向き合ってきました。 色々な学生、保護者の方とかかわる中でよく質問される内容や、受験に必要な内容について書いています。 独学で頑張っている人たちへ勉強計画や悩み相談なども受け付けていますので気軽にお問い合わせください。 就職活動や資格の勉強などで悩んでいる方もご連絡ください。 教育・就活、書籍、食べ歩きに関するお話がメインです。 最近取り組んでいること プログラミング、筋トレ、マラソン、ライティングスキル向上etc. 苦手なことを克服しようと頑張っています。