

岡田 康介
名前:岡田 康介(おかだ こうすけ) ニックネーム:コウ、または「こうちゃん」 年齢:28歳 性別:男性 職業:ブロガー(SEOやライフスタイル系を中心に活動) 居住地:東京都(都心のワンルームマンション) 出身地:千葉県船橋市 身長:175cm 血液型:O型 誕生日:1997年4月3日 趣味:カフェ巡り、写真撮影、ランニング、読書(自己啓発やエッセイ)、映画鑑賞、ガジェット収集 性格:ポジティブでフランク、人見知りはしないタイプ。好奇心旺盛で新しいものにすぐ飛びつく性格。計画性がある一方で、思いついたらすぐ行動するフットワークの軽さもある。 1日(平日)のタイムスケジュール 7:00 起床:軽くストレッチして朝のニュースをチェック。ブラックコーヒーで目を覚ます。 7:30 朝ラン:近所の公園を30分ほどランニング。頭をリセットして新しいアイデアを考える時間。 8:30 朝食&SNSチェック:トーストやヨーグルトを食べながら、TwitterやInstagramでトレンドを確認。 9:30 ブログ執筆スタート:カフェに移動してノートPCで記事を書いたり、リサーチを進める。 12:30 昼食:お気に入りのカフェや定食屋でランチ。食事をしながら読書やネタ探し。 14:00 取材・撮影・リサーチ:街歩きをしながら写真を撮ったり、新しいお店を開拓してネタにする。 16:00 執筆&編集作業:帰宅して集中モードで記事を仕上げ、SEOチェックやアイキャッチ作成も行う。 19:00 夕食:自炊か外食。たまに友人と飲みに行って情報交換。 21:00 ブログのアクセス解析・改善点チェック:Googleアナリティクスやサーチコンソールを見て数字を分析。 22:00 映画鑑賞や趣味の時間:Amazonプライムで映画やドラマを楽しむ。 24:00 就寝:明日のアイデアをメモしてから眠りにつく。
ソケット通信・とは?
ソケット通信とはネットワーク上の2つのプログラムが話す仕組みのことです。日常の会話を想像すると分かりやすいです。ソケットはデータを送るための入口と出口の端点であり、2つのプログラムがこの入口出口を通してやり取りします。データはバイト列として送られます。
まずは基本の用語を置き換えると理解が進みます。ソケットは通信の入口と出口の端点です。プログラムAとプログラムBはそれぞれ自分のソケットを持ち、ここを通してデータを送ります。データは文字列ではなくバイト列と呼ばれる小さなデータのかたまりです。
TCPとUDPの違い
ソケット通信には大きく分けてTCPとUDPの二つのやり方があります。TCPはデータがちゃんと届くように順番を保証しますが、少し遅くなることがあります。一方でUDPは速さを優先しますが届くかどうかの保証がなく順番も崩れることがあります。この違いを理解して用途を決めることが大切です。
実際の流れはサーバーとクライアントの組み合わせで動きます。サーバーは待ち受けの状態となり接続を待ちます。クライアントはサーバーのアドレスとポートに接続します。接続が確立するとお互いにデータを送受信でき、通信が終われば切断します。この基本は多くのプログラミング言語で共通です。
実際の流れを簡単に整理
- ステップ1 サーバーがソケットを作成し待ち受けを開始する
- ステップ2 クライアントがサーバーへ接続する
- ステップ3 データを送受信する
- ステップ4 通信を終えると接続を切断する
ソケット通信を使う場面の例としてはウェブページの表示、オンラインゲームのリアルタイム通信、スマートフォンの通知などが挙げられます。日常生活にも役立つ技術であり、学べば自分で小さなネットワークアプリを作ることも可能です。
要点のまとめ
要点は次の三つです。ソケットは通信の入口と出口の端点、TCPとUDPの違いを理解する、実際の流れをイメージすることです。最初は難しく感じても、用語と流れをひとつずつ覚えると理解が深まります。
ソケット通信の同意語
- ソケットを使った通信
- ソケットという仕組みを利用して、ネットワーク上でデータの送受信を行う通信のこと。通常は TCP や UDP などのプロトコルの上で動作します。
- ソケットベースの通信
- ソケットを基盤とした通信のこと。プログラム内でソケットを作成してデータを送受信します。
- ネットワークソケット通信
- ネットワーク経由で、ソケットを介してデータをやり取りする通信の総称です。
- TCPソケット通信
- TCP プロトコルを用いたソケット通信。信頼性の高い接続型の送受信を行います。
- UDPソケット通信
- UDP プロトコルを用いたソケット通信。低遅延で軽量ですが、データの到達保証はありません。
- TCP/IPソケット通信
- TCP/IP の上で動作するソケット通信。インターネット上で最も一般的な形です。
- IPソケット通信
- IP を前提としたソケット通信。実装は通常 TCP/UDP のいずれかの上で動作します。
- ソケットAPIを用いた通信
- ソケット API(言語により異なる関数群)を用いて、端点間でデータを送受信する通信のことです。
ソケット通信の対義語・反対語
- 非ソケット通信
- ソケットを使わない通信の総称。HTTP/HTTPSやWeb APIなど、上位プロトコルを利用して通信を成立させる方式で、直接ソケットAPIを扱わずに済む点が特徴です。
- HTTP通信
- アプリケーション層のHTTPを用いた通信。リクエストとレスポンスのやり取りを基本とし、ステートレスな設計になりやすい点がソケット通信と異なる部分です。
- メッセージング系通信
- メッセージブローカー(例: RabbitMQ、Kafka、MQTT)を介して非同期にデータをやり取りする方式。直接的な長期接続を維持するソケット通信とは異なり、 broker 経由でのやり取りが特徴です。
- IPC(パイプ/ FIFO)通信
- 同一マシン内のプロセス間通信で、名前付きパイプやFIFO、共有メモリなどを用いる方法。ネットワークを介したソケット通信とは関係なく、ローカル専用の通信手段です。
- Webサービス/REST API通信
- RESTful API などを HTTP 経由で呼び出す通信。ソケットの低レベル操作を意識せず、Web API の形で通信を設計する点が対義的なイメージになります。
ソケット通信の共起語
- ソケット
- ネットワーク通信のエンドポイントを作るための小さなファイルディスクリプタ。プログラムからネットワークへアクセスする入口です。
- ソケットAPI
- ソケットを作成・設定・通信するための関数の集合(例: socket, bind, listen, accept, connect, send, recv など)です。
- BSDソケット
- Unix系の標準ソケットAPIの通称。BSD系の呼び方が広く使われます。
- Winsock
- WindowsでのソケットAPI実装の名称で、Winsock APIを通じてネットワーク通信を行います。
- UNIXドメインソケット
- 同一マシン内のプロセス間通信に使われるソケット。AF_UNIX を用い、ファイルパスでアドレスを指定します。
- ソケットファイル
- Unix系でソケットをファイルのように扱う概念。ソケットをファイルディスクリプタと同様に操作します。
- SOCK_STREAM
- ストリーム型のソケット。主にTCPで信頼性の高い連続データの送受信に使われます。
- SOCK_DGRAM
- データグラム型のソケット。主にUDPでデータの独立したパケット送信に使われます。
- AF_INET
- IPv4アドレスファミリを示します。
- AF_INET6
- IPv6アドレスファミリを示します。
- AF_UNIX
- Unixドメインソケット用のアドレスファミリを示します。
- TCP
- 信頼性の高いストリーム型の通信プロトコル。順序性と再送を保証します。
- UDP
- 軽量なデータグラム型の通信プロトコル。信頼性は低いがオーバーヘッドが少ないです。
- IPv4
- Internet Protocol version 4。32ビットのアドレス体系です。
- IPv6
- Internet Protocol version 6。128ビットのアドレス体系です。
- IPアドレス
- 通信相手を特定する番号。IPv4/IPv6の表現を含みます。
- ホスト名
- 文字列の名前をIPアドレスへ解決する名前解決の表現です。
- ポート番号
- 通信の窓口を識別する数字。0–65535が一般的です。
- エンドポイント
- 通信の終点。アドレスとポートの組み合わせを指します。
- クライアント
- リクエストを送る側の役割を担うプログラムやプロセスです。
- サーバ
- リクエストを受け取り応答する側の役割を担うプログラムやプロセスです。
- クライアントサーバモデル
- クライアントとサーバが分離して機能する通信設計モデルです。
- バインド
- ソケットにアドレス情報を割り当て、特定のネットワーク地点へ結びつけます。
- listen
- サーバ側が接続待ち状態になる設定です。
- accept
- 待機している接続を受け入え、新しいソケットを作成します。
- connect
- クライアントがサーバへ接続を確立します。
- send
- データをソケット経由で送信します。
- recv
- ソケットからデータを受信します。
- sendto
- 宛先を指定してデータを送る送信関数です(主にUDPで使用)。
- recvfrom
- データを受信しつつ送信元情報を取得します(UDPでよく使われます)。
- ブロッキング
- 呼び出しが完了するまで処理を止める動作です。
- ノンブロッキング
- 呼び出しがすぐ戻るが、データがまだ無い場合は結果が得られません。
- 非同期I/O
- I/Oを待つ間に他の作業を進める実装方針です。
- イベント駆動
- イベントが発生したときに処理を起動する設計です。
- select
- 複数のソケットのI/Oを同時に監視する基本的な手法です。
- poll
- 複数ソケットを待機するためのI/O多重監視手法です。
- epoll
- Linuxでの高性能なI/O多重待機機構です。
- kqueue
- BSD/macOSで使われる高機能なイベント通知機構です。
- IOCP
- WindowsのI/O完了ポリシ。非同期I/Oの実装手段です。
- TLS
- 通信データを暗号化するためのTLS/SSLの一部。通信の機密性を守ります。
- SSL
- TLSの旧称で、暗号化通信を提供します。
- SO_REUSEADDR
- ソケットのアドレス再利用を許可します。再起動時の待機を短縮します。
- SO_KEEPALIVE
- 長時間アイドル時の接続維持機能を有効にします。
- TCP_NODELAY
- Nagleアルゴリズムを無効化して小さなパケットの送信を遅延なく行います。
- Nagleアルゴリズム
- 小さなデータをまとめて送ることでオーバーヘッドを低減します。
- errno
- C言語系のエラー番号を参照するためのグローバル変数です。
ソケット通信の関連用語
- ソケット
- ネットワーク通信の端点。IPアドレスとポート番号の組み合わせを識別子として、データの送受信を行う窓口となる。
- ソケットファイルディスクリプタ
- Unix系でソケットはファイルディスクリプタという整数で表され、readやwriteなどの操作でデータをやり取りする。
- IPアドレス
- ネットワーク上の機器を識別する数値表現。IPv4とIPv6がある。
- IPv4
- 32ビットのアドレス体系。通常は4つの10進数で表現する。
- IPv6
- 128ビットのアドレス体系。コロンで区切る長い表現を用いる。
- ポート番号
- 通信の窓口を示す番号。0〜65535の範囲で表す。
- AF_INET
- IPv4アドレスファミリを表す定数。
- AF_INET6
- IPv6アドレスファミリを表す定数。
- AF_UNIX
- Unixドメインソケット用のアドレスファミリ。
- SOCK_STREAM
- ストリーム型のソケット。主にTCPで使われ、信頼性の高い接続型通信。
- SOCK_DGRAM
- データグラム型のソケット。主にUDPで使われ、無接続型通信。
- SOCK_RAW
- 生のパケットを扱うソケット。特殊用途。
- TCP
- 信頼性の高い接続指向の通信プロトコル。
- UDP
- 低遅延で軽量だが信頼性が低い無接続型のプロトコル。
- クライアント
- 接続を要求して通信を開始する側。
- サーバ
- 接続を待ち受け、クライアントと通信を成立させる側。
- bind
- ソケットにアドレスとポートを割り当てる操作。
- listen
- 接続待ちの状態にして、接続要求を受け付ける準備をする。
- accept
- 接続要求を受け付け、新しいソケットを返す。
- connect
- クライアントがサーバへ接続を開始する操作。
- send
- データを送信する関数。
- recv
- データを受信する関数。
- sendto
- 宛先を指定してデータを送る関数(主にUDPで使用)。
- recvfrom
- 受信時に送信元情報を取得する関数(主にUDPで使用)。
- close
- ソケットを閉じてリソースを解放する。
- shutdown
- 送受信の一部または全体を停止する操作。
- non-blocking
- ノンブロッキング。I/Oを待たずに返す設定。
- blocking
- ブロッキング。I/Oが完了するまで処理を止める設定。
- I/O多重化
- 一つのスレッドで複数のソケットのI/Oを待機する技術。
- select
- I/O多重化の古典的API。
- poll
- I/O多重化の別API。
- epoll
- Linuxの高性能I/O多重化機構。
- kqueue
- BSD系の高性能I/O多重化機構。
- IOCP
- WindowsのI/O完了ポート。当たり判定を効率化する仕組み。
- backlog
- listen時に保留する接続の最大数。
- 3ウェイハンドシェイク
- TCPの接続確立時の3段階の交渉プロセス。
- TLS/SSL
- 通信を暗号化して安全にするセキュア層。
- TLSハンドシェイク
- 暗号化通信を確立するための初期交渉。
- OpenSSL
- TLS/SSLの代表的な実装ライブラリ。
- SSLSocket
- TLSで暗号化されたソケット。
- HTTPS
- HTTP通信をTLSで暗号化したもの。
- SNI
- TLSでサーバ名を識別する拡張機能。
- TLS over TCP
- TLSをTCP上で動かすこと。
- HTTP
- Webのアプリケーション層プロトコル。
- localhost
- 自分自身を指す特別な名前。
- 127.0.0.1
- IPv4のループバックアドレス。
- ::1
- IPv6のループバックアドレス。
- ユニキャスト
- 1対1の通信形態。
- ブロードキャスト
- 同一ネットワーク内の全端末へ同時送信。
- マルチキャスト
- 特定グループの複数端末へ同時送信。
- NAT
- ネットワークアドレス変換。内部と外部のアドレスを変換する。
- ファイアウォール
- 不正な通信を遮断するセキュリティ機能。
- setsockopt
- ソケットの動作設定を行う関数。
- getsockopt
- ソケットの現在の設定値を取得する関数。
- sockaddr_in
- IPv4アドレス情報を格納する構造体。
- sockaddr_in6
- IPv6アドレス情報を格納する構造体。
- sockaddr_un
- Unixドメインソケットのアドレス情報を格納する構造体。
- dual_stack
- IPv4とIPv6の双方を同時に扱える状態・設定。
ソケット通信のおすすめ参考サイト
- ソケット通信とは?【C言語】 - Zenn
- TCP/IPとは?通信プロトコルの階層モデルを図解で解説 - アイティーエム
- ソケット通信とは?【C言語】 - Zenn
- ソケット通信とシリアル通信の違いとは? - ITガイド
- 【ネットワーク基礎】ソケット通信とは | 若手エンジニアのブログ