自作プロトコルMSPをPythonで実装した理由と構造のすべて
通信プロトコルという言葉を聞くと、多くの人はRFC文書のような堅苦しく抽象的な世界を思い浮かべるかもしれません。
しかし、プロトコルは「難しいもの」ではなく、「道具」であり、「美しくデザインされた約束事」にすぎません。
今回私は、Pythonを使ってシンプルな通信プロトコルを自作しました。名前は MSP(Minokamo Secure Protocol)。
この記事では、その全体像と実装方法、そして応用の可能性についてご紹介します。
なぜ自作プロトコルを作ったのか?
私がMSPを作ろうと思ったのは、「既存の通信方式では表現できない体験を、自分の手で作りたかった」からです。
もちろんHTTPやWebSocketのように便利な仕組みは数多くありますが、
それらはすでに“完成しすぎていて”、内部構造を触る余地がありません。
MSPは、TCPの上に非常にシンプルなパケット構造を持たせたもので、通信の本質的な部分を学び直すのに最適な設計にしました。
MSPのパケット構造について
MSPでは、送受信するデータを次のようなパケットとして定義しています。
- SYNC(2バイト)… 開始を示す固定値(0xAA55)
- LENGTH(2バイト)… パケット全体の長さ(ヘッダー+ペイロード)
- VERSION(1バイト)… プロトコルバージョン
- TYPE(1バイト)… メッセージの種類(データ or 応答)
- PAYLOAD(可変長)… UTF-8でエンコードされた文字列データ
- CRC(1バイト)… 単純なチェックサム(ペイロードの合計 mod 256)
図解としてプロトコル構造をまとめましたので、あわせてご覧ください。
このような構造にすることで、通信が途切れても「同期(SYNC)」で復帰でき、
受信したデータが壊れていればCRCで検出できます。
クライアントとサーバーの処理フロー
MSPは、クライアントがサーバーにメッセージを送り、サーバーがACK(応答)を返すという非常に明快な仕組みです。
内部的にはPythonのソケット通信を使い、バイナリデータとして上記のパケットをやり取りします。
以下は、その全体フローです。
実際のコードでは、build_packet()
や parse_packet()
という関数がそれぞれ
「送信側でパケットを組み立てる」
「受信側でパケットを分解する」
という役割を果たします。
実行方法と試してみる価値
MSPは非常に軽量で、依存パッケージは一切ありません。msp.py
という1つのファイルだけでクライアント・サーバーの両方が動作します。
例えば次のように使います。
サーバー起動:
python msp.py --mode server --host 127.0.0.1 --port 9009

クライアントから送信:
python msp.py --mode client --host 127.0.0.1 --port 9009 --message "Hello MSP"
応答として、ACK(応答パケット)が返ってきたら通信成功です。
さらに、Linux(Ubuntu)から別PC経由での接続にも成功しました。
その場合、クライアント側では次のように実行します。
python3 msp.py --mode client --host 192.168.0.15 --port 9009 --message "Hello MSP"
ここで 192.168.0.15
は、MSPサーバーを起動しているWindowsマシンのローカルIPアドレスです。
これに対応して、サーバー側は次のように起動しておきます。
python msp.py --mode server --host 0.0.0.0 --port 9009
0.0.0.0
を指定することで、全てのネットワークインターフェースからの接続を受け付けます。
🔒 注意:Windowsファイアウォールの設定
このように外部(Linux)からWindowsへ接続する場合、
Windows側のファイアウォールが通信をブロックしていないことを確認してください。
以下のように、受信の規則にポート9009を許可する設定を追加しておく必要があります。

設定の例:
- プロトコルの種類:TCP
- ローカルポート:9009
- アクション:接続を許可する
- プロファイル:プライベートまたはドメインネットワーク
応用の可能性と今後の展望
MSPは「自作の通信プロトコル」であるがゆえに、あらゆる応用が可能です。
たとえば、以下のような展開を計画しています。
- 通信内容をAES暗号化してセキュアに(MSP v0.2として予定)
- GUIツール(Tkinter)で視覚的に送信
- COMポート(シリアル通信)にも対応し、レトロPCやFreeDOSとの連携を目指す
- ファイル転送やリモート制御のプロトコルとして発展
GitHubと動画紹介
今回紹介したコードはすべてGitHubに公開済みです。
また、実際の通信の様子を動画でもご覧いただけます。
- GitHubリポジトリ:https://github.com/superdoccimo/msp
最後に
このプロトコルは、決して実用重視ではありません。
それでも私は、「あえて自分で作る」ことの価値を信じています。
通信という“目に見えない世界”を、自分の言葉(構造)で形にする──
それは、プログラミングの原点のように感じます。
MSPが、誰かの学びや試みに役立つことを願って。
ここまでお読みいただき、ありがとうございました。