네트워킹 프로그래밍과 소켓 프로그래밍의 차이점


16

"소켓 프로그래밍"과 "네트워크 프로그래밍"에 관해 이야기 할 때 큰 차이점이 있습니까?

"네트워크 프로그래밍"을 다루지 만 "소켓 프로그래밍"을 다루지 않는 몇 가지 주제가 있습니까?

답변:


26

소켓 프로그래밍 (적어도 일반적으로 사용되는 용어)은 하나의 특정 네트워크 API로 프로그래밍됩니다. 소켓은 IP 기반 프로토콜 (주로 TCP 및 UDP)을 지원합니다 1 .

다양한 다른 API를 사용하여 네트워크 프로그래밍을 수행 할 수 있습니다. Windows에는 WNet * 및 Net * 기능과 같은 여러 프로토콜 독립적 API가 있습니다. 또한 이전 버전의 Windows는 NetBIOS / NetBEUI (NetBIOS 최종 사용자 인터페이스)를 사용했으며 IPX / SPX (이전 Netware 프로토콜)를 가장 많이 지원합니다.

그러나 대부분의 현재 네트워크 프로그래밍은 소켓을 직접 사용하거나 소켓 위에 다양한 다른 계층을 사용하여 수행됩니다 (예를 들어, HTTP를 통해 수행되며, 일반적으로 TCP over 소켓으로 구현 됨). TCP / IP 및 UDP / IP (및 기타 여러 IP 기반 프로토콜)는 주로 소켓 인터페이스를 통해 수행됩니다. 이론적으로는 다른 프로그래밍 인터페이스가 사용될 수 있지만 실제로는 소켓이 충분한 것으로 보이므로이를 대체하는 데 큰 관심이 없습니다. 그러나 Windows 소켓 (WinSock)에는 Windows 고유의 확장 기능이 상당히 있습니다. 이러한 확장을 사용하는 코드가 실제로 "소켓"코드로 자격이 있는지 아닌지 논란의 여지가 있다고 생각합니다. 동일한 개념을 기반으로하는 확장이지만 그것들을 사용하는 코드는 ' 일반적으로 다른 시스템에 이식 할 수 없습니다. 소켓이 "소켓"으로 한정되는지 아닌지는 소켓을 개념으로 생각하는지, 매우 특정한 함수, 매개 변수 등으로 생각하는지에 달려 있습니다.

편집 (댓글에 답장) :

"소켓을 아는 것"이 ​​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 : 수정 된 답변보기.
Jerry Coffin

@JerryCoffin : 소켓도 IP 기반 프로토콜의 하위 집합이라는 점에 주목할 가치가 있습니다. 소켓으로 커버되지 않는 ICMP / IP와 같은 것들이 있습니다.
Matthew Scharley

6

"네트워크 프로그래밍"에는 RPC와 같은 네트워킹 기술이 필요합니다. 소켓 (대부분 BSD 소켓을 의미 할 수 있음)이 그러한 기술의 예입니다. "소켓 프로그래밍"은 "네트워크 프로그래밍"의 하위 집합입니다.


@Anisha 카울 : 좋아, RPC 프로그래밍 네트워크 프로그래밍 (그 일부) 및 하나 개의 중요한 RPC 개념이다 소위 문자열 바인딩 - 참조 ) msdn.microsoft.com/en-us/library/aa378691(v=VS.85를 .aspx BSD 소켓을 프로그래밍 할 때는 그런 것이 필요하지 않습니다.
sharptooth

@Anisha Kaul : 아니요, "모든 가능성"은 큰 목록입니다. Java RMI와 .NET Remoting이 널리 사용되는 예입니다.
sharptooth

-3

네, 네트워크 프로그래밍에는 네트워킹 기술이 필요하지만 소켓 프로그래밍은 네트워크 프로그래밍의 하위 집합입니다. 대부분의 현재 네트워크 프로그래밍은 소켓을 직접 사용하거나 소켓 위에 다양한 다른 계층을 사용하여 수행됩니다.


3
이것은 이전 답변에 이미 게시 된 내용보다 실질적인 내용을 추가하지 않는 것 같습니다
gnat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.