Różnica między programowaniem sieciowym a programowaniem gniazd

16

Czy są jakieś zasadnicze różnice, gdy mówimy o „programowaniu gniazd” w porównaniu do „programowania sieciowego”?

Czy są jakieś tematy, które obejmują „programowanie sieciowe”, ale nie „programowanie przez gniazdo”?

Aquarius_Girl
źródło

Odpowiedzi:

26

Programowanie przez gniazda (przynajmniej tak, jak zwykle używa się tego terminu) to programowanie do jednego konkretnego sieciowego interfejsu API. Gniazda obsługują protokoły IP (głównie TCP i UDP) 1 .

Programowanie sieciowe można wykonać przy użyciu różnych innych interfejsów API. System Windows ma wiele niezależnych od protokołu interfejsów API, takich jak funkcje WNet * i Net *. Starsze wersje systemu Windows również używały NetBIOS / NetBEUI (interfejs użytkownika końcowego NetBIOS), a większość obsługiwanych (i prawdopodobnie nadal działa) IPX / SPX (stary protokół Netware).

Większość obecnych programów sieciowych jest jednak wykonywana albo bezpośrednio przy użyciu gniazd, albo przy użyciu różnych innych warstw na wierzchu gniazd (np. Całkiem sporo odbywa się za pośrednictwem protokołu HTTP, który zwykle jest implementowany za pomocą TCP przez gniazda). TCP / IP i UDP / IP (a także szereg innych protokołów opartych na IP) są wykonywane przede wszystkim za pośrednictwem interfejsu gniazd. Teoretycznie można użyć innych interfejsów programistycznych, ale w praktyce gniazda wydają się wystarczające, więc nie ma dużego zainteresowania ich wymianą. Powinienem jednak wspomnieć, że gniazda systemu Windows (WinSock) mają całkiem sporo rozszerzeń, które są mniej więcej unikalne w systemie Windows. Podejrzewam, że jest otwarty na jakiś argument, czy kod korzystający z tych rozszerzeń naprawdę kwalifikuje się jako kod „gniazd”, czy nie - są to rozszerzenia oparte na tych samych pojęciach, ale kod, który ich używa, nie jest t zwykle przenośny do innych systemów. Domyślam się, czy kwalifikuje się jako „gniazdo”, czy nie, zależy przede wszystkim od tego, czy myślisz o gniazdach bardziej jako koncepcji, czy o bardzo specyficznym zestawie funkcji, parametrów itp.

Edytuj (w odpowiedzi na komentarz):

Trudno powiedzieć, czy „znajomość gniazd” oznacza znajomość „wszystkiego” na temat TCP i UDP. Rozważmy tylko jeden drobiazg: jednym typowym programem demonstracyjnym dla gniazd jest tworzenie programu czatu klient / serwer. Klient łączy się z serwerem, a gdy użytkownik na jednym kliencie coś wpisze, zostaje przekierowany do innych klientów podłączonych do tego samego serwera. Każdy klient wyświetla informacje przychodzące z serwera i pozwala użytkownikowi wpisywać wiadomości, które mają być wysyłane do innych klientów.

Jednocześnie zastanów się, na czym polega „prawdziwy” program do czatowania, taki jak AIM, Windows Messenger, iChat itp. Do obsługi nie tylko tekstu, ale także głosu, wideo, przesyłania plików, grup, list itp., Typowy program prawdopodobnie obejmuje kilkanaście różnych standardów, w tym takie rzeczy jak SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS itp. .

IMO, ktoś, kto „zna gniazda”, powinien być w stanie zakodować pierwszy program do czatowania (na poziomie demonstracyjnym, tylko tekstowy) w ciągu kilku godzin, nie poświęcając dużo czasu na pliki pomocy (i takie) na prowadzenie badań. O ile nie twierdzą, że przynajmniej mieli jakieś wcześniejsze doświadczenie w pracy nad „prawdziwym” programem do czatowania, nie spodziewałbym się, że nawet dowiedzą się, które RFC / standardy mają zastosowanie do takich rzeczy.

To samo dotyczy ogólnie: biorąc pod uwagę liczbę RFC (i różne inne standardy), które stosuje się do wszystkich różnych rzeczy, które ludzie robią w sieciach, nie można oczekiwać, że ktoś zapamięta je wszystkie. Niemniej jednak, jeśli masz zestaw wymagań dotyczących czegoś, czego oczekujesz, że ludzie będą w stanie łatwo obsłużyć program „lokalny”, po prostu dodanie „przez sieć” jako wymagania nie powinno zazwyczaj stanowić ogromnej trudności. (choć radzenie sobie z takimi problemami, jak opóźnienie sieci).


1 Gniazda w Uniksie również obsługują gniazda z rodziny Uniksów, ale są one (przynajmniej normalnie) używane do IPC wewnątrz maszyny, a nie do sieci. Istnieją również dosłownie dziesiątki innych protokołów dla takich rzeczy jak zarządzanie routerem, których gniazda tak naprawdę nie obsługują (poza gniazdami surowymi, umożliwiającymi tworzenie i wysyłanie dowolnych pakietów).

Jerry Coffin
źródło
Dzięki, teraz jest to odpowiedź, którą warto poprawić. :-) Czy mogę zatem stwierdzić, że kiedy mówię, że znam programowanie gniazd, oznacza to, że „ wszystko ” dotyczy tylko TCP / UDP? Muszę wiedzieć wszystko o TCP / UDP?
Aquarius_Girl
@AnishaKaul: Zobacz zredagowaną odpowiedź.
Jerry Coffin,
@JerryCoffin: Być może warto zauważyć, że gniazda są również podzbiorem protokołów opartych na IP. Są rzeczy takie jak ICMP / IP, które nie są również objęte gniazdami.
Matthew Scharley
6

„programowanie sieciowe” będzie wymagało pewnej technologii sieciowej - na przykład RPC. Gniazda (najprawdopodobniej masz na myśli gniazda BSD) są przykładem takiej technologii. Zatem „programowanie przez gniazdo” jest podzbiorem „programowania przez sieć”.

sharptooth
źródło
@Anisha Kaul: Dobra, programowanie RPC to programowanie sieciowe (jego podzbiór), a jedną ważną koncepcją RPC jest tak zwane wiązanie ciągów - patrz msdn.microsoft.com/en-us/library/aa378691(v=VS.85) .aspx Nie potrzebujesz tego podczas programowania gniazd BSD.
sharptooth
@Anisha Kaul: Nie, „wszystkie możliwości” to ogromna lista. Nazwałbym niektóre powszechnie używane - Java RMI i .NET Remoting to dobre przykłady.
sharptooth
-3

Tak, to prawda, że ​​programowanie sieciowe wymaga technologii sieciowej, podczas gdy z drugiej strony programowanie gniazd jest podzbiorem programowania sieciowego. Większość obecnych programów sieciowych odbywa się albo bezpośrednio przy użyciu gniazd, albo przy użyciu różnych innych warstw na wierzchu gniazd.

Ajay Prasad
źródło
3
wydaje się, że nie dodaje to nic znaczącego w stosunku do tego, co zostało już opublikowane w poprzednich odpowiedziach
gnat