1-2. 소켓의 개념
목차
01. 소켓의 개념
1) 소켓의 관점 : 데이터 타입
2) 소켓의 관점 : 통신종단점
3) 소켓의 관점 : 네트워크 프로그래밍 인터페이스
01. 소켓의 개념
- 소켓이 뭘까?
- 소켓에 넣은 데이터는 상대편 소켓을 통해 빠져나온다.
- 소켓은 포트 번호와 IP 주소 등의 통신 관련 정보를 포괄하는 개념으로 볼 수 있다.
- TCP를 바로 쓰기 어려워서 운영체제의 힘을 빌리는데, 인터페이스로 소켓을 이용한다.
- 앞으로 소켓을 세 가지 관점에서 공부해보자.
- 데이터 타입
- 통신 종단점
- 네트워크 프로그래밍 인터페이스
1) 소켓의 관점 : 데이터 타입
→ 파일 디스크립터(file descripter) & 핸들(handle)과 유사한 개념
- 리눅스에서 소켓 파일 디스크립터와 같은 역할 (윈도우 소켓 데이터 타입 정리 (tistory.com))
→ 프로그래밍 관점에서 소켓은, 생성과 설정 과정이 끝나면 운영체제의 통신 관련 정보를 참조해 다양한 작업을 편리하게 사용할 수 있는 데이터 타입으로 볼 수 있다.
- 일단 소켓을 만들고 나면 함수를 호출하여 손쉽게 통신을 수행할 수 있다.
- 파일 생성하는 것처럼 소켓도 저렇게 생성하믄 됨.
- 응용 프로그램이 통신하려면 결정되어야 하는 요소
- 사용할 프로토콜(TCP/IP, UDP/IP 등)
- 송신 측 IP 주소
- 송신 측 포트번호
- 수신 측 IP 주소
- 수신 측 포트 번호
- ⇒ OS는 내부적으로 통신때 필요한 정보를 결정하고 관리한다. 이때 응용프로그램은 소켓을 사용해 이 정보에 접근할 수 있다.
2) 소켓의 관점 : 통신 종단점
→ 응용 프로그램은 자신의 소켓이 상대편의 소켓과 연결된 것이라고 생각하고 데이터를 주고 받는다.
- 통신 종단점(communication end-pointer), 즉 통신의 출발점과 도착점이라고 간주할 수 있다.
- 클라이언트가 서버에 데이터를 보내는 경우를 가정한 그림
- 클라이언트
- 자신의 소켓이
<서버 소켓>
과 연결된 것으로 생각하고,send()
함수를 호출해 데이터를 보낸다.
- 자신의 소켓이
- 서버
- 자신의 소켓이
**<클라이언트 소켓>
과 연결된 것으로 생각**하고,recv()
함수를 호출해 데이터를 받을 수 있다.
- 자신의 소켓이
3) 소켓의 관점 : 네트워크 프로그래밍 인터페이스
→ TCP/IP 프로토콜의 관점에서 소켓은 application 개층과 transport 계층 사이에 위치하는 ‘네트워크 프로그래밍 인터페이스’에 불과하다.
- 소켓은 통신 양단이 모두 소켓을 사용할 필요는 없다
- 프로그래밍할때 클라이언트가 서버거까지 만들 필요 없다
- 서버도 마찬가지로 자기 소켓만 만들면 됨 클라소켓 안만들어도 된다는 뜻
- TCP/IP 프로토콜 구조에서의 소켓 : 응용 계층과 전송 계층 사이의 소켓
-
TCP/IP 프로토콜 구조
에서 소켓은 응용 계층(application)과 전송 계층(transport) 사이에 위치한다고 간주한다.- 그림과 같이 전송 (transport)계층의 TCP, UDP를 건너뛰고 바로 인터넷(Network) 계층(IP)을 사용할 수도 있다.
-
- 소켓은 통신 양단이 모두 소켓을 사용할 필요는 없다. 둘 다 같은 프로토콜을 사용하고 정해진 형태와 절차에 따라 데이터를 주고 받으면 된다.
- 용어 정리
- 소켓 : 소켓은 네트워크 통신을 위한 인터페이스로, 컴퓨터간에 데이터를 주고받을 수 있게 해줌.
- 통신 양단 (Endpoints) : 네트워크 통신에서 통신 양단은 데이터를 주고받는 두 개체. (웹 서버와 웹 브라우저같은거)
- 용어 정리
출처 및 참고자료
- TCP/IP 윈도우 소켓 프로그래밍 [한빛아카데미]
댓글