【ITニュース解説】Networking 101 — Part 1: Foundations Every Developer Should Know Before We Begin
2025年09月28日に「Medium」が公開したITニュース「Networking 101 — Part 1: Foundations Every Developer Should Know Before We Begin」について初心者にもわかりやすく解説しています。
ITニュース概要
システムエンジニアを目指す初心者に向け、ネットワークの基礎を解説する記事。ソケット、ポート、システムコールといった用語を、バックエンド開発者が理解すべきポイントに絞り、わかりやすく説明している。基本的なネットワーク知識の習得に役立つだろう。
ITニュース解説
システムエンジニアを目指す上で、ネットワークの基礎知識は非常に重要である。なぜなら、現代のほとんどのシステムはネットワークを介して動作しており、その仕組みを理解していなければ、問題発生時の原因究明やパフォーマンス改善、セキュアなシステム設計は困難だからだ。ここでは、ネットワークの最も基本的な要素であるIPアドレス、MACアドレス、ポート、ソケット、システムコール、そして主要な通信プロトコルであるTCPとUDPについて解説する。
まず、IPアドレスはインターネット上のデバイスを識別するための論理的な住所である。スマートフォン、PC、サーバーなど、ネットワークに接続されているすべてのデバイスは、それぞれ固有のIPアドレスを持つことで、互いにデータを送受信できる。IPアドレスには現在主にIPv4とIPv6の二つの形式があり、IPv4は32ビットのアドレス空間を持ち、約43億個のアドレスが利用できるが、アドレス枯渇の問題がある。一方、IPv6は128ビットのアドレス空間を持ち、事実上無限のアドレスを提供することで、この問題に対処している。
次に、MACアドレスはネットワークインターフェースカード(NIC)に物理的に割り当てられた一意の識別子である。これは世界中のどのNICにも重複しないように製造時に書き込まれており、IPアドレスが論理的な住所であるのに対し、MACアドレスは物理的な住所と言える。ローカルネットワーク内では、ARP(Address Resolution Protocol)というプロトコルがIPアドレスからMACアドレスを解決し、データの直接的な送受信を可能にしている。
デバイスがIPアドレスによって識別され、MACアドレスによって物理的に通信が可能になったとしても、一つのデバイス上では複数のアプリケーションが同時に動作している。例えば、ウェブブラウザでニュースを閲覧しながら、メールクライアントでメールをチェックすることも可能である。これらのアプリケーションがそれぞれ独立してネットワーク通信を行うための論理的な出入口が「ポート」である。ポートは0から65535までの番号で識別され、特定のアプリケーションやサービスには標準的なポート番号が割り当てられている。例えば、ウェブサーバーは通常80番ポート(HTTP)や443番ポート(HTTPS)を使用する。0から1023番までは「ウェルノウンポート」と呼ばれ、HTTP、FTP、SSHなど広く知られたサービスに予約されている。1024から49151番までは「登録済みポート」と呼ばれ、特定のアプリケーションが利用するために登録できる。49152から65535番までは「動的またはプライベートポート」と呼ばれ、クライアントがサーバーと通信する際に一時的に使用されることが多い。
これらのIPアドレスとポート番号の組み合わせによって、ネットワーク通信の「終点」や「接続点」を具体的に識別するのが「ソケット」である。ソケットは、アプリケーションがオペレーティングシステム(OS)のネットワーク機能を利用するためのインターフェースであり、通信の基盤となる。アプリケーションはソケットを通じて、データの送受信を行う。ソケットを作成することで、アプリケーションは特定のIPアドレスとポート番号を使い、他のデバイス上のアプリケーションと通信するための準備を整える。
アプリケーションがソケットを作成し、ネットワーク通信を行うためには、OSの提供する機能を利用する必要がある。このアプリケーションからOSへの機能要求の仕組みが「システムコール」である。ネットワーク通信においては、ソケットの作成、接続の確立、データの送受信、接続の終了といった一連の操作がシステムコールを通じて行われる。具体的には、socket()システムコールでソケットを作成し、サーバー側ではbind()でソケットにIPアドレスとポート番号を割り当て、listen()で接続要求を待ち受ける状態にする。クライアントからの接続要求を受け入れるにはaccept()を、クライアント側からサーバーに接続するにはconnect()システムコールを使用する。データの送受信にはsend()やrecv()が使われ、通信を終了する際にはclose()システムコールが呼び出される。これらのシステムコールは、アプリケーションとOSが連携してネットワーク通信を実現するために不可欠な命令群である。
最後に、ネットワーク通信プロトコルの二つの主要な種類であるTCPとUDPについて理解することは重要である。 TCP(Transmission Control Protocol)は、信頼性が高く、データが確実に、かつ正しい順序で相手に届くことを保証するプロトコルである。TCPは通信を開始する前に「コネクション(接続)」を確立し、データの送受信中にエラー検出や再送制御、フロー制御などを行うため、信頼性が求められるウェブ閲覧、ファイル転送、メール送信などの用途に適している。 一方、UDP(User Datagram Protocol)は、信頼性よりも速度を重視するプロトコルである。UDPはコネクションを確立せずにデータを送信するため、データの到達や順序は保証しないが、その分オーバーヘッドが少なく、高速な通信が可能である。リアルタイム性が求められる音声通話、ビデオストリーミング、オンラインゲームなど、多少のデータ損失が許容される用途で利用されることが多い。
これらの基礎的な概念を理解することは、システムエンジニアとしてネットワークを用いたアプリケーションを開発したり、既存のシステムを運用・保守したりする上で不可欠な出発点となる。