LinuxにおけるSocketプログラミングの核心原理と実装
ネットワーク上のプロセス間通信は、単一マシン内でのIPC(Inter-Process Communication)とは本質的に異なる課題を孕んでいます。ローカル環境では、パイプや共有メモリ、セマフォといった機構がプロセス識別と同期を支えますが、これらはホストを跨いだ通信には適用できません。分散環境では、プロセスを一意に特定するための「アドレス空間」が必要であり、それがTCP/IP ...
8月10日 08:38 投稿
linux オペレーティングシステムにおける epoll の仕組みと高スケーラビリティの実現方法
高性能ネットワークプログラミングにおける epoll の役割
大規模なネットワークアプリケーションを開発する際、プラットフォームによって推奨される IO 多路复用メカニズムが異なります。Windows 環境では iocp が主流ですが、Linux システムにおいては epoll が事実上の標準となっています。従来の select や poll に比べて、数百万という socket 接続を扱う際の性能差は ...
8月3日 20:32 投稿
libevent による非同期サーバー実装と epoll 直接制御の比較
Linux 環境において高性能なネットワークサーバーを構築する際、I/O マルチプレクスングは不可欠な技術です。従来は epoll システムコールを直接制御して実装するのが一般的でしたが、libevent などのライブラリを利用することで、より簡潔なコードで同等の機能を実現できます。ここでは、単純なエコーサーバーを例に、raw epoll を使用した場合と libevent を使用した場合 ...
8月3日 17:07 投稿
C言語によるWebSocketサーバーの構築とチャットプロトコルの実装
WebSocketサーバーの基礎とハンドシェイクの実装
標準的なTCPソケット通信とWebSocketの最大の違いは、接続開始時に行われる「ハンドシェイク」プロセスにあります。WebSocketはHTTP/1.1のプロトコルアップグレードを利用して確立されます。クライアントから送られてくるSec-WebSocket-Keyに対し、特定のGUIDを結合した上でSHA-1ハッシュ化し、さらにBase64エンコードを施 ...
7月27日 03:46 投稿
Linux I/O多重化の仕組み:select、poll、epollの技術詳解
1. selectによるI/O監視
selectは、複数のファイルディスクリプタ(FD)を監視し、いずれかが読み書き可能な状態になるまでプロセスを待機させる古典的な手法です。一般的に、監視可能なFDの最大数は1024(FD_SETSIZE)に制限されています。
select関数の定義
int select(int max_fd_plus_1, fd_set *read_fds, fd_set *write_fds, fd_set *error_fds, struct timeval *ti ...
7月22日 04:29 投稿
Javaソケット通信の基本操作
サーバーサイド:
public class SocketServer {
public static void main(String[] args) throws Exception {
// サーバーソケットを作成し、指定ポートで待受開始
ServerSocket serverSocket = new ServerSocket(8765);
// クライアントからの接続を待機
Socket clientConnection = serverSocket.accept();
...
7月14日 02:21 投稿
Linux ioctlによるネットワークインタフェース情報の取得手法
ioctlシステムコールとネットワーク制御の概要
Linuxカーネルのデバイスドライバやネットワークスタックとユーザ空間プログラムが通信する際、ioctl() が標準的な制御インターフェースとして利用されます。ソケットやキャラクタデバイスなどのファイルディスクリプタに対して特定のリクエストコードを渡すことで、ネットワークインタフェースのIPv4/IPv6アドレス、MTU、リ ...
6月27日 17:29 投稿
libmoon の構造と設定ファイルの使い方
ディレクトリ構成の概要
libmoon は高性能パケット処理を実現する Lua ベースのフレームワークであり、そのプロジェクト構成は明確に分離されています。以下が主要なディレクトリ構成です。
libmoon/
├── bin/
├── build/
├── config/
├── deps/
├── examples/
├── lib/
├── scripts/
├── src/
├── test/
├── CMakeLists.txt
├── README.md
└── LICENSE
bin/: コンパイ ...
6月22日 21:05 投稿
skb_in.cとskb_out.cの詳細解析
skb_in.cとskb_out.cの詳細解析
NetFilter_Skb_modプロジェクトは、Netfilterが提供するフック関数メカニズムを利用して、カーネルレベルでのパケットキャプチャと再送信を実現します。主にC言語でNF_IP_LOCAL_INおよびNF_IP_LOCAL_OUTの2つの段階におけるSKBネットワークパケット処理を実装しており、パケット内容の印刷、長さ測定、チェックサムの再計算を含みます。Netf ...
6月20日 19:56 投稿
ZooKeeper を用いたシンプルなサービス登録・検出機能(C++): 接続管理層の実装
ZooKeeper クライアントとの永続的な接続を管理し、自動再接続・監視機能を備えた単一ヒープ生成的なハンドラクラスを C++ で実装します。
コピー禁止基底クラス
class CNonCopyable {
protected:
CNonCopyable() = default;
virtual ~CNonCopyable() = default;
CNonCopyable(const CNonCopyable&) = delete;
CNonCopyable& operator=(const CNonC ...
6月3日 19:26 投稿