TCP / IP ソケットプログラミング (C 言語編)

ティーシーピー アイピー ソケット プログラミング

TCP / IP ソケットプログラミング (C 言語編) の表紙
ネットワーク
著者:
マイケル・J.ドナフー / ケネス・L.カルヴァート(ドナフー, マイケル・J. / カルヴァート, ケネス・L.)
出版社:
オーム社
出版日:
2003年05月
ISBN:
9784274065194
在庫:
在庫あり
3.57(7 件 / 楽天ブックス)
中級者向け
TCP/IPネットワークソケットプログラミングC 言語ネットワークプログラミングクライアント/サーバー名前解決ネットワークプロトコルシステムプログラミングプログラミング

なぜ注目されているか

言及数
287位
総合601位 ↑ 3 ランクアップ 言及 10 件
02320222023202420252026

書籍紹介

第 1 章から第 4 章では、シンプルなクライアント / サーバの構築を目指します。ここでの経験は課題に取り組むのに役立つはずです。第 5 章では、ソケットのさまざまな利用方法を紹介します。第 6 章では、ソケット操作の基本に立ち返り、隠れたメカニズムを取り上げ、気をつけなければいけない点などを詳しく説明します。第 7 章では、ドメイン名から IP アドレスを取得する、いわゆる名前解決について解説します。

技書の森解説

C 言語で TCP と UDP の通信プログラムを書くための、ソケット API の入門書です。『TCP/IP ソケットプログラミング C 言語編』 (Michael J. Donahoo、Kenneth L. Calvert 著、小高 知宏 監訳、オーム社、2003 年 5 月 24 日発売) は、原書 TCP/IP Sockets in C の日本語版です。版元は本書を「コンパクトなボリュームの中に、TCP/IP の基礎から C 言語による TCP/IP ソケットプログラミングまでのエッセンスを凝縮した入門書」と紹介し、おすすめの読者を TCP/IP ソケットプログラミングを学びたい C プログラマと学生、読者の段を初級としています。

全 7 章と API リファレンスの構成、ソケットの基礎から名前解決まで

第 1 章「ネットワークとプロトコルの概要」でパケット、アドレス、クライアントとサーバー、ソケットの考え方を整理し、第 2 章「ソケットの基礎」でソケットの作成と破棄、アドレスの指定、TCP のクライアントとサーバーを組みます。第 3 章「メッセージの作成」はデータのエンコード、バイト順、整列とパディング、フレーミングと解析を、第 4 章「UDP ソケット」は UDP のクライアントとサーバーとデータの送受信を扱います。第 5 章「ソケットプログラミング」はソケットオプション、シグナル、ノンブロッキング I/O と非同期 I/O、タイムアウト、プロセスやスレッドによるマルチタスク、多重化、ブロードキャストとマルチキャストまでを取り上げます。第 6 章「ソケット API の舞台裏」は TCP のバッファリング、デッドロック、パフォーマンスへの影響、TCP ソケットのライフサイクルを、第 7 章「ドメインネームサービス」は名前と IP アドレスの対応付けとサービス情報の検索を扱います。巻末にはデータ構造体からホスト情報とサービス情報までを項目別にまとめた API リファレンスが付き、第 1 章から第 6 章の末尾には「考えてみよう」が置かれています。

TCP の通信で起きる区切りと並び順の問題

TCP はバイトの流れを相手に届ける仕組みで、送った単位の区切りは保たれません。1 回の送信で書いたデータが受信側で 2 回に分かれて届くことも、2 回分がまとめて届くこともあるため、メッセージの長さや終わりの印を決めて、受け手の側で組み立て直す取り決めが要ります。複数バイトの整数をどの順でメモリに並べるかは CPU によって異なり、通信では エンディアン の違いを吸収するために、ネットワーク上の並びを決めておいて変換の関数を通します。構造体をそのまま送ると、コンパイラーが挟む詰め物のせいで相手の環境と配置が合わないこともあります。第 3 章の節題が並べているのは、こうした送受信の取り決めの問題です。

接続の始まりと終わりにも落とし穴があります。TCP は 3 段階のやり取り で接続を確立し、切断では双方がそれぞれ終了を伝え合います。先に切断した側には一定時間 TIME_WAIT という状態が残るため、サーバーを止めてすぐ起動し直すと、同じポートへの bind が失敗することがあります。送信と受信のバッファーの大きさや、互いに相手の読み出しを待つ組み合わせは、通信が止まる原因や性能の低下の原因にもなります。こうした現象は API の呼び方だけを覚えても見えてこないため、カーネルの中で何が起きているかを知っておく意味があります。

2003 年刊の本として読むときの前提

本書の刊行は 2003 年 5 月です。版元のページでは日本語版のソースコードが配布されており、本書で直接解説していない WinSock 対応のソースコードなどは原出版社または原著者の Web ページから入手するよう案内されています。第 7 章の節題からは、IPv6 のアドレスをどこまで扱うかは読み取れません。IPv4 と IPv6 の両方で動くコードを書く場合は、getaddrinfo を使って名前解決と接続先の情報をまとめて得る書き方を、別の資料で確かめておくと安心です。

初めてソケットを書く C プログラマに向く理由

版元がおすすめの読者を C プログラマとしているとおり、C 言語のポインターと構造体を読み書きできることは前提になります。そのうえで、第 1 章のネットワークの概要から始まり、TCP と UDP のクライアントとサーバーを順に組む並びなので、ソケットに触れるのが初めての段階から入れます。一方で、Windows の WinSock を中心に学びたい人や、C 以外の言語で通信プログラムを書きたい人には、題材の前提が合いません。ネットワークの教科書でプロトコルの仕組みは学んだものの、自分でクライアントとサーバーを書いたことがない人にとって、短い紙幅で通信プログラムの骨組みと TCP の振る舞いを一通り確かめられる一冊です。プロトコルの教科書との組み合わせ方は ネットワーク本ガイド で整理しています。

言及した記事 (10 件)

この本に興味がある方におすすめ

関連する本

関連記事

関連用語

共有: