cs:bsd_sockets_-_uvod

BSD Sockets

BSD Sockets je aplikační programové rozhraní (API), s jehož pomocí lze programovat komunikační aplikace všeho druhu. Jak název napovídá, bylo původně vytvořeno na univerzitě v Berkeley pro BSD Unix, ale postupně se rozšířilo nejen do všech ostatních odnoží Unixu, ale také do operačních systémů MacOS, MS Windows a dokonce i PalmOS. Použití BSD Sockets se neomezuje jen na síťový protokol IP, nicméně v oblasti internetových aplikací má zdaleka největší význam. Bez nadsázky lze tvrdit, že současný Internet je na tomto programovém rozhraní postaven.

Jak známo, (téměř) všechno v Unixu je soubor. BSD Sockets používají toto unixové paradigma pro komunikaci mezi programy. Využívá se k tomu abstraktní programový objekt - soket - reprezentující komunikační kanál, jímž si mohou programy navzájem vyměňovat data prostřednictvím standardních souborových deskriptorů (file descriptors).

API BSD Sockets je velmi obecné a je možno je použít pro celou řadu rodin komunikačních protokolů (protocol families). Linux 2.4 jich v hlavičkovém souboru /usr/include/bits/socket.h definuje celkem 32. Nás zde budou zajímat pouze dvě z nich, používané pro datovou komunikaci nad IP: PF_INET pro IPv4 a PF_INET6 pro IPv6.

Datové struktury původních BSD Sockets byly sice navrženy s jistou rezervou, ta však nestačí pojmout čtyřnásobné prodloužení adres a další informace, které sokety IPv6 potřebují. API bylo proto nutno doplnit a upravit. Příslušná pracovní skupina IETF (Internet Engineering Task Force) této příležitosti využila také k jisté konsolidaci a zefektivnění API BSD Sockets. Výsledkem je RFC 3493, které de facto umožňuje programovat internetové aplikace jednotně pro obě verze protokolu IP.

Datové struktury a funkce BSD Sockets budeme popisovat v té podobě, jak jsou definovány v hlavičkových souborech Linuxu, tedy prostředky programovacího jazyka C (někdy ovšem kvůli přehlednosti s mírnými zjednodušeními). Ekvivalentní API je samozřejmě k dispozici pro většinu běžných programovacích jazyků. Pro ukázky programů na konci tohoto příspěvku použijeme jazyk Python, který jako jeden z prvních (od verze 2.2.1) dává k dispozici toto nové API. Ukázky tak budou daleko přehlednější, neboť budeme ušetřeni některých technických komplikací při práci s proměnnými a argumenty funkcí.

Podrobně diskutujeme pouze změny, které přináší nové API BSD Sockets, a předpokládáme tudíž aspoň rámcovou znalost technologie IP, jazyka C a původního API. Pro získání či doplnění vědomostí o obou tématech je k dispozici jak řada zdrojů na webu, tak i několik monografií (též v češtině). Za všechny jmenujme aspoň klasickou knihu Richard W. Stevens: UNIX Network Programming. Velmi dobrým zdrojem informací jsou také unixové on-line manuály.

Poslední úprava:: 24.09.2019 12:50