2.7 소켓 프로그래밍: 네트워크 어플리케이션 생성
일반적인 네트워크 애플리케이션은 2개의 종단 시스템에 존재하는 클라이언트 프로그램과 서버 프로그램으로 구성됨. 이 두 프로그램을 수행하면 클라이언트와 서버 프로세스가 생성
되고, 두 프로세스가 소켓으로부터 읽고, 소켓에 쓰기를 통해 서로 통신함.
클라이언트-서버 애플리케이션에는 두 가지 형태가 있음.
- 클라이언트-서버 애플리케이션 (RFC에 정의된 표준 프로토콜로 구현)
- 이러한 애플리케이션은 때떄로 개방형이라고 불림. → 그 동작을 규정하는 규칙들이 모두에게 알려져 있기 때문. 이 경우, 클라이언트와 서버 프로그램은 RFC에 정의된 규칙을 따라야 함.
- 개인의 독점적인 네트워크 애플리케이션
- 이 경우, 클라이언트와 서버 프로그램은 RFC 또는 다른 곳에 비공식적으로 출판된 서버 프로그램을 모두 생성하고, 개발자는 코드에 무엇을 사용할지를 완전히 제어함.
- but, 코드는 공개된 프로토콜로 구현되지 않음. ⇒ 다른 개발자는 해당 애플리케이션과 상호작용하는 코드 개발할 수 없음.
개발자가 개발 단계동안 우선해야 할 결정 중 하나 애플리케이션이 TCP를 이용하는지, UDP를 이용하는지
에 대한 것임.
- TCP: 연결지향형 서비스이고 신뢰적 바이트 스트림 채널을 제공하는데, 해당 채널을 통해 데이터가 두 종단 시스템 사이를 흐르게 됨.
- UDP: 비연결형이고 한 종단 시스템에서 다른 곳으로 데이터를 독립적인 패킷으로 만들어서 보냄. but,
전송에 대한 보장은 하지 않음.
클라이언트 or 서버 프로그램이 RFC에 정의된 프로토콜을 구현할 때, 그 프로토콜과 연관된 잘 알려진 포트 번호를 사용해야함. (HTTP: 80번, HTTPS: 443번, SNTP: ..번)
역으로, 독점적인 애플리케이션을 개발할 때 개발자는 잘 알려진 포트번호를 사용하지 않도록 유의해야 함.
2.7.1. UDP를 이용한 소켓 프로그래밍
다른 컴퓨터에서 수행되는 프로세스 간의 통신은 소켓에 메시지를 보냄으로써 실행한다.
- 각 프로세스 - 집
- 프로세스의 소켓 - 문
- 애플리케이션 - 집의 문 한쪽 (집 내부 문의 면)
- 트랜스포트 계층 프로토콜 - 외부 세계에 있는 문의 다른 면
⇒ `애플리케이션 개발자는 소켓의 애플리케이션 계층에 대한 제어권을 갖지만 트랜스포트 계층 쪽에 대한 제어권은 거의 없음.