Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21097

100日後にエンジニアになるキミ - 49日目 - ネットワーク - 通信について

$
0
0

昨日までのはこちら

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ブラウザー
主にGETPOSTメソッドを用いて通信を行なっています。

リクエストとレスポンス

HTTP通信ではリクエストレスポンスが発生します。

リクエストはブラウザーを含むクライアントからサーバーへの問い合わせ要求
レスポンスはサーバーからの返答結果になります。

ブラウザーでURLを打ち込むとサーバーに対するアクセス要求を行おうとします。
この時のURL部分
http://hoge.com/?page_id=1

この先頭にあるhttpプロトコルになります。
続くhoge.comが問い合わせ先のドメインになります。

URLが正しければブラウザー側でリクエストを発生させてサーバーにアクセスして情報取得を試みます。

レスポンスはサーバーからの返答となるためHTML,XML,JSON,IMGなど
何かしらのデータとなって返ってきます。

GETとPOST

リクエストを行う際の通信の方法にも種類があります、それが主にGETPOSTです。

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通信にカプセル化されて
相手先に情報が送られます。

TCPUDPはともにクライアントとサーバ間での通信チャネルの提供通信管理を行うレイヤー4のプロトコルです。

通信チャネルというのはいわゆるポートというもので1番から65535番までの番号が使用できます。
同じIPアドレスであってもTCPUDPのポートが異なれば提供されるサービスが異なります。

一般的なポート番号

ポート番号サービス名称
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


Viewing all articles
Browse latest Browse all 21097

Trending Articles