昨日までのはこちら
100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて
100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて
100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1
100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1
100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1
100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1
通信について
コンピューターなどにおける通信とは世界中のコンピュター同士をつなぐ事です。
通信を行うためには、通信に参加するもの同士の間で、あらかじめ通信に関する規約を
定めていなくてはなりません。この規約のことをプロトコル
と言っています。
プロトコルについて
ざっくりした訳だと通信規約
です。
プロトコルを定め、それに従うことは、通信を成立させるための基本原理となっています。
また世界中には様々なプロトコルが存在します。
よく使われているプロトコルは以下のようなものがあります。
層 | プロトコル名 | 内容 |
---|---|---|
アプリケーション層 | HTTP(Hypertext Transfer Protocol) | WebブラウザがWebサーバと通信する際に主として使用する通信プロトコル |
アプリケーション層 | FTP(File Transfer Protocol) | コンピュータネットワーク上のクライアントとサーバの間でファイル転送を行うための通信プロトコル |
アプリケーション層 | SSH(Secure SHell) | 暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル |
プレゼンテーション層 | SMTP(Simple Mail Transfer Protocol) | インターネットで電子メールを転送するプロトコル |
トランスポート層 | TCP(Transmission Control Protocol) | インターネットにおいて標準的に利用されているプロトコル |
余談ですが映画ミッション:インポッシブルシリーズ
の第4弾にゴースト・プロトコル
というものが出てきます。
ゴースト・プロトコル
は元のTVシリーズであるスパイ大作戦でお馴染みの例によって君もしくは君のメンバーが捕らえられ、或いは殺されても当局は一切関知しないから、そのつもりで
よろしく、アメリカ政府が非合法の秘密作戦に対して一切の関与を否定する
つまりIMFのと言う組織そのものが存在しない物(ゴースト)だとして扱うという取り決め(プロトコル)
だからだそうです。
ハイパー蛇足でしたね。プロトコル
の意味合いが把握できれば大丈夫です。
まあこれを機会にゴースト・プロトコル
の方も見ていない方は見た方が良いでしょうね。
より言葉に対する理解が深まると思います。
HTTP(Hypertext Transfer Protocol)について
おそらくはもっともメジャーで普段から気にせず利用している通信です。
HTML(HyperText Markup Language)
やXML(Extensible Markup Language)
によって
記述されたハイパーテキストの転送を主な目的としてます。
それ以外にも、バイナリ形式の画像、音声を含め、様々なデータを扱うことが可能です。
この通信を行う代表的なソフトウェアはWEBブラウザー
で
主にGET
とPOST
メソッドを用いて通信を行なっています。
リクエストとレスポンス
HTTP通信ではリクエスト
とレスポンス
が発生します。
リクエスト
はブラウザーを含むクライアントからサーバーへの問い合わせ要求レスポンス
はサーバーからの返答結果になります。
ブラウザーでURLを打ち込むとサーバーに対するアクセス要求を行おうとします。
この時のURL部分http://hoge.com/?page_id=1
この先頭にあるhttp
がプロトコル
になります。
続くhoge.com
が問い合わせ先のドメイン
になります。
URLが正しければブラウザー側でリクエスト
を発生させてサーバーにアクセスして情報取得を試みます。
レスポンス
はサーバーからの返答となるためHTML
,XML
,JSON
,IMG
など
何かしらのデータとなって返ってきます。
GETとPOST
リクエスト
を行う際の通信の方法にも種類があります、それが主にGET
とPOST
です。
URLなどにパラメータをつけて送る事ができるのがGET
通信でhttp://hoge.com/?page_id=1
この?
以降の部分がパラメータ値になります。
この場合は様々な情報をパラメータ値としてサーバー側に送る事ができますが
URLを見れば値などが見えてしまうため、間違って送ってしまうと丸見えになってしまいます。
POST
通信ではそのようなことを防ぐためリクエストボディ
部に情報を格納して通信を行います。
URL:
http://hoge.com/
リクエストボディ
{ "name":"hoge", "date":"2020/05/08", "page_id":"1" }
WEBスクレイピング
ではHTTP通信を用いて情報取得を行うため
HTTP通信の仕組みを把握しておく事が求められます。
FTP(File Transfer Protocol)について
主にファイルなどをやり取りする際のプロトコルです。
用途としてはウェブページ用各種データファイル(HTMLファイル、画像)の
クライアントのパソコンからウェブサーバへのアップロードFTPファイルサーバからクライアントへのファイルのダウンロード
などに用いられます。
wordpress
などのCMSを用いてWEBサイトを構築する際などによく使われています。FTP
クライアントソフトを用いてサイトを構成するファイルをアップロードしたり
バックアップを取るためにダウンロードしたりする場合に用いられる通信規約になります。
定番のFTP
クライアントはWinSCP
FFFTP
Cyberduck
などがあります。
SSH(Secure SHell)について
SSHとは、安全に通信を行いネットワークに接続された機器を遠隔操作するためのプロトコルです。
SSHを利用するためにはSSHプロトコルを使用する為のソフトが導入されており
サーバー側でSSHデーモン
,クライアント側でSSHクライアント
が起動されている必要があります。
LinuxやMacなどでは初めからクライアントが用意されています。
(base) otupynoiMac:~ otupy$ ssh -V
OpenSSH_7.9p1, LibreSSL 2.7.3
SSHでの接続方法は主に二つ
1.パスワード認証方式
パスワード認証方式はデフォルトの認証方式で、ユーザー名とパスワードでログインする方式。
ユーザー名とパスワードは接続先OSのユーザーアカウントの情報が使用される。
sshコマンドで
$ ssh ユーザー名@ドメイン
ユーザー名@ドメイン パスワード:
と入力してアクセスする。
2.公開鍵認証方式
公開鍵と秘密鍵の2つの鍵(キーペア)を使用した接続方式。
サーバーに公開鍵、クライアントに秘密鍵を置いて使用する。
公開鍵認証を使うとパスワード入力なしでログインする事が可能になる
いくつかの手順を追って設定をします。
クライアントPCでキーペアを作成する
ssh-keygen -t rsa -b 2048 {-f 鍵のパス}
(暗号方式:RSA,鍵長:2048bit)
/home/[user名]/.sshディレクトリに以下の秘密鍵と公開鍵が作られる。
秘密鍵:id_rsa
公開鍵:id_rsa.pub
鍵の保管先
デフォルトだとログインユーザーの.sshディレクトリにid_rsaという名前で保存される。
鍵の名前や保存先を変えたければ-f /home/ユーザー名/.ssh/[鍵の名前]
パスフレーズ
未入力だと無し
, セキュリティー的に問題がない環境なら無し
でも。
公開鍵をリモートに転送する
scp /home/ユーザー名/.ssh/id_rsa.pub ユーザー名@ホスト名:~/.ssh
リモートで公開鍵を登録する
ssh-copy-id ~/.ssh/id_rsa.pub
公開鍵がリモートの~/.ssh/authorized_keysに登録される。
公開鍵認証でSSH接続できることを確認する
ssh -i id_rsa ユーザー名@ホスト名
鍵の保管先が別ならパスで指定すること
SMTP(Simple Mail Transfer Protocol)について
インターネットで電子メールを転送するプロトコルです。
SMTPサーバーの設定に必要な項目は以下のようなものがあります。
サーバー名
ポート番号
セキュリティ(暗号化)方式
認証の有無
この辺りの設定を把握すればプログラム側からもメールにアクセス可能になります。
pythonでgmailにアクセスするためのコード例は以下のようになります。
importsmtplibsmtpobj=smtplib.SMTP('smtp.gmail.com',587)smtpobj.ehlo()smtpobj.starttls()smtpobj.ehlo()smtpobj.login(メールアドレス,パスワード)
TCP(Transmission Control Protocol)について
TCP(Transmission Control Protocol)/IP(Transmission Control Protocol)
とはレイヤー3
のIPとレイヤー4
の TCP/UDP(User Datagram Protocol) を組み合わせて通信を行う
プロトコルのことで現在のインターネット通信の一般的な通信モデルです。
更に上位レイヤー(http, ftp 等)のプロトコルはこのTCP/IP
通信にカプセル化されて
相手先に情報が送られます。
TCP
とUDP
はともにクライアントとサーバ間での通信チャネルの提供通信管理を行うレイヤー4
のプロトコルです。
通信チャネル
というのはいわゆるポート
というもので1
番から65535
番までの番号が使用できます。
同じIPアドレス
であってもTCP
やUDP
のポートが異なれば提供されるサービスが異なります。
一般的なポート番号
ポート番号 | サービス名称 |
---|---|
TCP:80番 | HTTP |
UDP:53番 | DNS |
TCP:25番 | SMTP |
このポート番号は一般的なものであり、変更することも可能ですが
よく使われるポートに関してはあまり設定をいじることは少ないです。
サーバーとの通信を行う場合は、そのプロトコルとポートの番号の設定を
把握しておく必要が出てきますので、サーバー側の設定を調べておきましょう。
まとめ
プログラム内で通信を行おうとする際には取り扱う情報ごとに通信規約やライブラリの使い方などが変わってきます。
どの何をどの通信方式でやり取りするのかを把握してコードを書いたりする事が求められてきますので
通信にも色々な仕組みがあることを知っておきましょう。
君がエンジニアになるまであと51日
作者の情報
乙pyのHP:
http://www.otupy.net/
Youtube:
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter:
https://twitter.com/otupython