前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
学習の目的
ブログラミングとネットワーク通信の基礎を深く理解して、強い高頻度botを作りたい
今回は「プログラミングとネットワーク通信の基礎」について最近勉強したことをまとめます。
勉強のきっかけにしたのは以下の2冊です。
botterとしての基礎固めにつながる一冊。特に中盤以降の"プログラムの動作環境"について書かれた部分が高速処理を実行するbot開発の参考になる。
根本を理解すると応用が効くので、この部分の理解は丁寧に進めていく。 pic.twitter.com/Yeht9ps7Xe— よだか(夜鷹/yodaka) (@yodakablog) June 14, 2024
最近熟読している本。今までなんとなく使っていた技術のことも改めて調べ直してみると全く分かっていないことが判明するってことがよくある。この本は初学者には優しくないかもしれないが、ネットワーク通信の全体像を掴んだり深掘りしていくきっかけにはなると感じる。 pic.twitter.com/PC64rOEyJT
— よだか(夜鷹/yodaka) (@yodakablog) July 9, 2024
アセンブリ言語
アセンブリ言語は、コンピュータのハードウェアアーキテクチャに特有のプログラミング言語で、特定のマシンコードに直接対応する命令セットを使用します。これは、低水準言語の一種であり、人間が理解しやすい形でコンピュータの命令を記述するために使用されます。
アセンブリ言語の特徴
- ハードウェア指向:
- アセンブリ言語は、特定のプロセッサ(CPU)の命令セットに基づいています。そのため、作成されたプログラムはそのプロセッサに特化しており、他のタイプのプロセッサでは動作しないことがあります。
- シンボリック命令:
- マシンコード(バイナリコード)を人間が読みやすい形にしたものです。例えば、バイナリコード
10110000 01100001
が、アセンブリ言語ではMOV AL, 61h
(ALレジスタに61hを移動)と表現されます。
- マシンコード(バイナリコード)を人間が読みやすい形にしたものです。例えば、バイナリコード
- コントロールの精度:
- アセンブリ言語を使うと、メモリ管理やプロセッサのレジスタの操作など、コンピュータのリソースを細かく制御できます。これにより、非常に効率的なプログラミングが可能になりますが、同時に複雑さも増します。
- 効率性:
- アセンブリ言語で書かれたプログラムは、直接ハードウェアに命令を出すため、実行が非常に高速です。また、生成されるプログラムもサイズが小さくなります。
アセンブリ言語の使用例
- 組み込みシステム:
- リソースが限られている組み込みシステムやリアルタイムシステムでは、プログラムのサイズと速度が重要であるため、アセンブリ言語が選ばれることがあります。
- オペレーティングシステムの開発:
- オペレーティングシステムの一部は、ハードウェアとの直接的な対話が必要なため、アセンブリ言語で記述されることがあります。
- パフォーマンスの最適化:
- 特定のアルゴリズムを最適化するために、アセンブリ言語が使われることがあります。これにより、最高のパフォーマンスを実現できます。
学習と使用における考慮事項
アセンブリ言語は強力ですが、学習曲線が非常に急であり、プログラムの保守やデバッグが難しいため、現代のアプリケーション開発では通常、より高水準のプログラミング言語が推奨されます。ただし、コンピュータの動作原理を深く理解するための学習ツールとして、また特定の技術的なニーズに応えるためには、非常に有用です。
TCP/IP
TCP/IP(Transmission Control Protocol/Internet Protocol)は、インターネットでデータをやりとりするための基本的な通信プロトコルのセットです。これらのプロトコルは、異なるネットワーク上のコンピュータ同士がデータを交換するための標準的な方法を提供します。TCP/IPは、インターネットの動作の基盤となっている技術であり、多くの異なるタイプのネットワークが相互に通信できるようにするために設計されています。
TCP/IPの主要な要素
- IP(Internet Protocol):
- IPは、データパケットがインターネットを通じて正しい宛先にルーティングされるためのメカニズムを提供します。各デバイスは一意のIPアドレスを持っており、このアドレスが通信の際の識別子となります。
- TCP(Transmission Control Protocol):
- TCPは、データの正確な伝送を保証するためのプロトコルです。データがパケットと呼ばれる小さな単位に分割され、これらが送信された後、受信側で正しい順序に再構成され、データが正しく送られたことが確認されます。このプロセスには、エラーチェックやデータの再送などが含まれます。
TCP/IPの機能と利点
- 信頼性の高い通信:
- TCPは通信が正確に行われることを保証するために、データの損失、エラー、重複、または乱れがあった場合にそれを修正する機能を備えています。
- 接続指向のサービス:
- TCPは、データを送信する前に通信する両端間で「接続」を確立します。これにより、双方向の持続的な通信が保証されます。
- ユニバーサルプロトコル:
- TCP/IPは、異なる種類のコンピュータやネットワーク機器が互いに通信するための共通言語として機能します。
用途
- インターネットブラウジング:
- ウェブサイトへのアクセスやファイルのダウンロードなど、インターネットを介したほとんどの活動はTCP/IPを利用しています。
- メール送信:
- 電子メールの送受信にもTCP/IPが使用されます。
- ファイル転送:
- FTP(File Transfer Protocol)などのプロトコルもTCP/IP上で動作し、ファイルのアップロードやダウンロードを可能にします。
TCP/IPはインターネットの設計と運用の基礎であり、現代のデジタルコミュニケーションにおいて中心的な役割を果たしています。
webブラウザ
Webブラウザは、インターネット上の情報にアクセスするために使用されるソフトウェアアプリケーションです。これにより、ユーザーはウェブページを表示し、様々なウェブサイトを閲覧することができます。ウェブブラウザは、HTML(HyperText Markup Language)という言語で記述された文書を解析し、スタイルシート(CSS)やJavaScriptなどの他のテクノロジを使用して、ユーザーに視覚的に魅力的でインタラクティブなウェブページを提供します。
Webブラウザの主要な機能
- ページ表示:
- ブラウザは、ウェブサーバーからHTMLファイルや関連するメディアファイル(画像、動画など)を取得し、それらを組み合わせてユーザーに表示します。
- ハイパーリンクのナビゲーション:
- ブラウザは、ページ間のリンクに対応し、クリック一つで新しいページに移動できるようにします。
- ユーザーインターフェース:
- タブやウィンドウ管理、ブックマークの管理、履歴機能など、ブラウザにはユーザーが効率的に情報を見つけて操作できるように設計された多くの機能が備わっています。
- セキュリティ:
- セキュアな通信(HTTPS)をサポートし、悪意あるサイトやダウンロードからユーザーを保護します。
- プライバシー:
- Cookieの管理やプライベートブラウジングモードなど、ユーザーのプライバシーを保護するための機能を提供します。
一般的なWebブラウザ
- Google Chrome:
- 世界で最も広く使用されているブラウザの一つで、速度と拡張性で知られています。
- Mozilla Firefox:
- オープンソースで、プライバシーとカスタマイズのオプションが豊富です。
- Safari:
- Apple製品用に設計されており、MacOSやiOSデバイスに最適化されています。
- Microsoft Edge:
- Windows 10およびそれ以降のOSに組み込まれているMicrosoftのブラウザで、高速でモダンなブラウジング体験を提供します。
- Opera:
- 独自の機能(無料のVPNなど)を提供し、データ圧縮技術で速度と効率を向上させています。
Webブラウザは、インターネットを利用するための基本的なツールであり、情報社会において中心的な役割を担っています。それぞれのブラウザは異なる特性を持ち、ユーザーのニーズに応じて選択されます。
ハブ・スイッチ・ルーター
ハブ、スイッチ、ルーターはネットワークの構成要素で、コンピューターや他のデバイス間の通信を助けるデバイスです。それぞれが異なる役割を持ち、ネットワークの性能や構造に影響を与えます。
ハブ(Hub)
ハブは、ネットワーク内の複数のデバイスを物理的に接続する最も単純な装置です。ハブには、データのフィルタリングやパケットの方向付けの能力がなく、ハブに接続されたデバイスにブロードキャストでデータを送信します。つまり、ハブに届いたパケットは接続されている全てのポートに複製され、全デバイスに送られます。これにより、ネットワークの帯域が無駄に消費されることがあり、セキュリティ上の問題を引き起こす可能性もあります。
スイッチ(Switch)
スイッチもハブと同様にネットワークデバイスを接続する役割を果たしますが、より高度です。スイッチは接続されているデバイスのMACアドレス(ネットワークインターフェースカードに割り当てられた一意の識別子)を学習し、データパケットを必要なポートにのみ送信します。これにより、ネットワークの効率が向上し、不要なトラフィックのブロードキャストを避けることができます。
ルーター(Router)
ルーターは、異なるネットワーク間でデータをルーティングする装置です。インターネットへの接続ポイントとして機能し、複数のネットワークを相互に接続する役割を持ちます。ルーターはIPアドレスを基にデータパケットの送信先を決定し、最適な経路を計算してデータを送ります。また、ルーターはネットワークのセキュリティ機能を提供し、ファイアウォールやVPNのサポートを含めることができます。
それぞれの適用
- ハブ:小規模なネットワークや一時的なセットアップ、コストが最も重要な場合に適しています。
- スイッチ:企業環境や学校など、多数のデバイスが接続されるネットワークで一般的に使用されます。
- ルーター:家庭や企業でインターネット接続を共有する場合、または異なるネットワーク間のデータ転送が必要な場合に必要です。
これらのデバイスは、ネットワークの設計や要件に応じて選択され、適切に配置することでネットワークのパフォーマンスとセキュリティを最大化することができます。
プロバイダ
プロバイダ(インターネットサービスプロバイダ、ISP: Internet Service Provider)は、インターネット接続サービスを提供する企業や組織です。家庭や企業がインターネットにアクセスするためには、プロバイダを通じて接続サービスを契約する必要があります。プロバイダは、個人や企業がインターネットのリソースにアクセスできるようにする基本的な機能を提供し、データ通信のインフラストラクチャを管理します。
プロバイダの主な種類
- 固定ブロードバンドプロバイダ:
- ADSL、ケーブル、光ファイバーなど、固定回線を通じてインターネットサービスを提供します。これらは高速で安定した接続が特徴です。
- モバイルプロバイダ:
- 携帯電話網を使用してインターネット接続を提供します。スマートフォンやタブレット、モバイルWi-Fiルーターなどで利用されます。
- 衛星インターネットプロバイダ:
- 衛星を利用してインターネット接続を提供します。地理的な制約が大きい地域や、他のブロードバンド接続が利用困難な場所でよく使われます。
プロバイダの提供するサービス
- インターネット接続:
- ユーザーがインターネットにアクセスするための基本的なサービスを提供します。
- 電子メールサービス:
- ユーザーに個別の電子メールアカウントを提供し、メールの送受信機能を提供します。
- ウェブホスティング:
- ユーザーのウェブサイトをホストし、インターネット上でアクセス可能にするサービスを提供することがあります。
- セキュリティサービス:
- ファイアウォール、ウイルス対策、スパムフィルタリングなど、セキュリティ関連のサービスを提供してインターネット接続の安全を保ちます。
プロバイダ選びのポイント
- 速度と帯域幅:
- 必要なインターネット速度とデータ使用量に基づいて、適切なプランを選びます。
- コスト:
- サービスの価格と提供される内容を比較検討します。
- カスタマーサービス:
- サポートの質や対応速度も選択の重要な要素です。
- カバレッジエリア:
- 住んでいる地域や活動地域において十分なカバレッジが提供されているかを確認します。
プロバイダは、インターネットの世界へのゲートウェイとして機能し、その選択は利用するインターネット体験に直接影響を与えるため、選択には慎重になることが重要です。
ファイアウォールとキャッシュサーバー
ファイアウォール(Firewall)
ファイアウォールは、ネットワークのセキュリティを強化するためのデバイスまたはソフトウェアです。ファイアウォールの主な役割は、許可された通信のみをネットワーク間でやり取りさせることによって、不正アクセスや悪意のある攻撃からネットワークを保護することです。
ファイアウォールの主な機能:
- トラフィックフィルタリング: ネットワークに入るまたは出るトラフィックを監視し、定義されたセキュリティルールに基づいてトラフィックを許可または拒否します。
- 状態監視: 接続状態を追跡し、異常なパターンがある場合に警告を発します。
- NAT(Network Address Translation): プライベートIPアドレスをインターネット上の公開IPアドレスに変換することで、内部ネットワークのセキュリティを向上させます。
- VPN(Virtual Private Network): セキュアなリモートアクセスを提供します。
キャッシュサーバー(Cache Server)
キャッシュサーバーは、よくアクセスされるデータやファイルを一時的に保存するシステムです。この目的は、データアクセスの速度を向上させ、サーバーの負荷を減らすことにあります。インターネット環境でのキャッシュサーバーの使用は、ウェブページのロード時間を短縮し、ユーザーエクスペリエンスを向上させる効果があります。
キャッシュサーバーの主な機能:
- データの一時保存: よく要求されるウェブページやメディアファイルをローカルに保存し、次回の同じ要求に対して迅速に応答できます。
- ネットワークトラフィックの削減: データがネットワークを通じて繰り返し送信されるのを防ぎ、帯域幅の使用を減らします。
- 応答時間の短縮: エンドユーザーにとっての待ち時間を短縮し、サービスの応答性を高めます。
用途の違い
- ファイアウォール: セキュリティ重視で、ネットワークへの不正アクセスを防ぎ、データの保護を主な目的としています。
- キャッシュサーバー: パフォーマンス重視で、データアクセスの速度を向上させることが目的です。
これらの技術は、現代のデジタルインフラストラクチャの重要な部分を形成し、それぞれがネットワークの効率とセキュリティを向上させるために不可欠です。
HTTPプロトコル
HTTP(HyperText Transfer Protocol)は、ウェブ上で情報を交換するためのプロトコルです。このプロトコルは、インターネット上でウェブページやその他のデータをブラウザとサーバー間で転送する標準的な方法を定義しています。HTTPはインターネットのウェブブラウジングの基盤となる技術の一つで、1990年代初頭にTim Berners-Leeによって開発されました。
HTTPの基本概念
1. クライアントとサーバーのモデル
HTTPはクライアント/サーバーモデルに基づいて動作します。ウェブブラウザ(クライアント)がHTTPを使用してウェブサーバーにリクエストを送信し、サーバーからはHTMLページや画像などのリソースがレスポンスとして返されます。
2. 無状態性
HTTPは「無状態」プロトコルです。つまり、一連のリクエストとレスポンスの間に状態情報を保持しないという意味です。各リクエストは独立しており、以前のリクエストからの情報は保存されません。このため、セッションやクッキーといった技術が導入され、ユーザーの状態やセッション情報を追跡します。
3. リクエスト/レスポンスのパラダイム
HTTP通信は、リクエストとレスポンスの形式を取ります。クライアントがサーバーに特定のリソースを要求するリクエストを送信し、サーバーはそれに応じてレスポンスを返します。
HTTPの操作メソッド
- GET: サーバーから情報を取得するために使用されます。ブラウザがページを要求する際に最も一般的に使用されるメソッドです。
- POST: サーバーにデータを送信するために使用されます。通常、フォームの送信やファイルのアップロード時に使われます。
- PUT: 指定されたURIにリソースを作成または更新するために使用されます。
- DELETE: 指定されたリソースをサーバーから削除するために使用されます。
- HEAD: GETと同様ですが、ボディを除いたヘッダ情報のみを返します。これは、リソースの存在を確認するのに役立ちます。
HTTPステータスコード
HTTPレスポンスにはステータスコードが含まれ、それによってリクエストの成功や種類の失敗が示されます。例えば:
- 200 OK: リクエストが成功したことを示します。
- 404 Not Found: リクエストされたリソースが見つからないことを示します。
- 500 Internal Server Error: サーバー側でエラーが発生したことを示します。
HTTPはウェブの発展と共に進化し続けており、セキュリティやパフォーマンスの向上を図るためにHTTP/2やHTTP/3などの新しいバージョンが開発されています。
まとめ
今回は本を読んでその内容をまとめる過程で改めて調べ直したことを覚書として残しました。
プログラムが動く仕組みやネットワーク通信の基礎となる技術を学ぶことで高速で稼働するbotの作成に繋げていきます。
今後もこの調子で学んだことや開発の状況をまとめていきます。