Різниця між мережевим програмуванням і програмуванням сокет


16

Чи є якісь основні відмінності, коли ми говоримо про "програмування сокетів" порівняно з "мережевим програмуванням"?

Чи є деякі теми, які охоплюють "мережеве програмування", але не "сокетне програмування"?

Відповіді:


26

Програмування сокетів (принаймні, як зазвичай використовується цей термін) - це програмування на один конкретний мережевий API. Сокети підтримують протоколи на основі IP (в першу чергу TCP та UDP) 1 .

Мережеве програмування можна виконати за допомогою різних інших API. У Windows існує ряд незалежних від протоколу API, таких як функції WNet * та Net *. Старіші версії Windows також використовували NetBIOS / NetBEUI (NetBIOS Кінцевий користувальницький інтерфейс), і більшість підтримуваних (і, мабуть, досі) IPX / SPX (старий протокол Netware).

Однак більшість поточних мережевих програмувань виконується або за допомогою розеток безпосередньо, або за допомогою різних інших шарів поверх сокетів (наприклад, досить багато робиться через HTTP, що зазвичай реалізується з TCP через сокети). TCP / IP і UDP / IP (а також ряд інших протоколів на основі IP) здійснюються в основному через інтерфейс сокетів. Теоретично можна використовувати й інші інтерфейси програмування, але на практиці розетки здаються достатніми, тому зацікавлення в його заміні не має великого інтересу. Однак слід зазначити, що розетки для Windows (WinSock) мають досить багато розширень, більш-менш унікальних для Windows. Я припускаю, що відкрито деякий аргумент, чи дійсно код, який використовує ці розширення, кваліфікується як код "sockets" чи ні - це розширення, засновані на одних і тих же поняттях, але код, який використовує їх isn " t як правило, портативні для інших систем. Я здогадуюсь, кваліфікується він як "сокети" чи ні, в першу чергу залежить від того, чи вважаєте ви сокети більше поняттям, або дуже специфічним набором функцій, параметрів тощо.

Редагувати (у відповідь на коментар):

Трохи важко сказати, чи означає "знання розеток" знати "все" про TCP та UDP. Розглянемо лише один невеликий предмет: одна типова демо-програма для сокетів - це створення чат-програми клієнт / сервер. Клієнт підключається до сервера, і коли користувач на одному клієнті щось набирає, він пересилається до інших клієнтів, які підключені до того ж сервера. Кожен клієнт відображає те, що надходить з сервера, і дозволяє користувачеві вводити повідомлення, які надсилаються іншим клієнтам.

У той же час, подумайте, що передбачає така "реальна" програма для чатів, як AIM, Windows Messenger, iChat тощо. Для обробки не лише тексту, але й передачі голосу, відео, передачі файлів, груп, списків тощо, ймовірно, передбачено десяток різних стандартів, включаючи такі речі, як SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS тощо .

IMO, хтось, хто «знає сокети», повинен мати можливість кодувати першу (демонстраційну, текстову) програму чату за кілька годин, не витрачаючи багато часу на довідкові файли (і такі), які роблять дослідження. Якщо б вони не вимагали хоча б деякого попереднього досвіду роботи над "реальною" програмою чату, я не очікував би, що вони навіть знають, які RFC / стандарти застосовуються до таких речей.

Це стосується загалом: враховуючи кількість RFC (та різних інших стандартів), які застосовуються до всіх різних речей, які люди роблять через мережі, нерозумно очікувати, що хтось запам'ятає їх усі. Тим не менш, якщо у вас є набір вимог до чогось, з чим ви очікували, що люди зможуть легко обробляти в "локальній" програмі, просто додавання "через мережу" як вимога зазвичай не повинно створювати величезних труднощів (хоча може бути вирішено такі проблеми, як затримка мережі).


1 Сокети в Unix також підтримують розетки сімейства Unix, але вони (принаймні зазвичай) використовуються для внутрішньомашинних IPC, а не для мереж. Існують також буквально десятки інших протоколів для таких речей, як управління маршрутизатором, що сокети не підтримують насправді (крім необроблених сокетів, що дозволяють створювати та надсилати довільні пакети).


Дякую, зараз це відповідь, яку варто підкріпити. :-) Отже, чи можу я зробити висновок, що коли я кажу, що я знаю програмування сокетів, це означає мати справу " все " тільки з TCP / UDP? Мені потрібно знати все про TCP / UDP?
Aquarius_Girl

@AnishaKaul: див. Відредаговану відповідь.
Джеррі Труну

@JerryCoffin: Можливо, варто відзначити, що сокети також є підмножиною протоколів на основі IP. Є такі речі, як ICMP / IP, які також не охоплені сокетами.
Меттью Шарлі

6

"мережеве програмування" зажадає певної мережевої технології - наприклад, RPC. Розетки (швидше за все, ви маєте на увазі BSD-розетки) - приклад такої технології. Отже, "програмування сокетів" - це підмножина "мережевого програмування".


@Anisha Kaul: Гаразд, програмування RPC - це мережеве програмування (його підмножина), і одна важлива концепція RPC - це так зване прив'язка рядків - див. Msdn.microsoft.com/en-us/library/aa378691(v=VS.85) .aspx Вам цього не потрібно при програмуванні BSD-розеток.
гострий зуб

@Anisha Kaul: Ні, "всі можливості" - це величезний список. Я б назвав кілька широко використовуваних - Java RMI і .NET Remoting - хороші приклади.
гострий зуб

-3

Так, це правда, що мережеве програмування вимагає мережевих технологій, а з іншого боку програмування сокетів - це підмножина мережевого програмування. Більшість поточних мережевих програмувань проводиться або за допомогою розеток безпосередньо, або за допомогою різних інших шарів поверх розеток.


3
це, мабуть, не додає нічого істотного щодо того, що вже було розміщено в попередніх відповідях
gnat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.