1. 서버와 클라이언트 Server and Client
네트워크 프로그램은 하나 이상의 컴퓨터가 데이터를 상호 교환할 수 있도록 한다. 여기서 정보나 서비스를 제공하는 컴퓨터를 서버라고 하며, 서비스를 요청하고 받는 컴퓨터를 클라이언트라고 한다.
서버는 클라이언트보다 미리 실행되어 클라이언트의 요청을 기다려야 한다. 클라이언트는 서비스를 요청하기 전에 먼저 서버와 연결을 시도해야 한다. 클라이언트가 연결을 요청하면 서버는 받아들이거나 거부할 수 있다.
2. TCP와 UDP
인터넷 기반의 컴퓨터는 TCP/IP 모델을 사용해 상호 통신하며, 자바의 네트워크 프로그램도 TCP/IP 모델을 사용한다.
TCP/IP는 인터넷 표준 프로토콜로 컴퓨터의 데이터 통신을 위해 만든 통신 규약이며, 4개의 계층으로 구성된다.
| 응용 계층 |
| 전송 계층 |
| 네트워크 계층 |
| 네트워크 접속 계층 |
- 응용 계층은 애플리케이션에서 요청을 받아 이를 적절한 메시지로 변환해서 하위 계층으로 전달한다.
- 전송 계층은 패킷의 오류를 검사하고 재전송을 요구하는 등 제어를 담당하는 계층으로, 연결 지향 프로토콜인 TCP와 비연결 지향 프로토콜인 UDP를 사용한다.
Transmission Control Protocol
TCP는 데이터를 상대편에게 제대로 전달했는지 알려고 확인 메시지를 교환하기 때문에 데이터 손실이 없다. 그리고 서버와 클라이언트 간에 연결을 설정한 후 데이터를 전송하기 때문에 데이터의 전달 순서가 보장된다. 마치 전화와 유사하다. 전화는 상대방과 연결해야 통화할 수 있으며, 통화 내용을 순서대로 내보내면서 손실 없이 전달하기 때문이다. 그러나 연결 설정과 해제에 따른 시간적 부담이 발생한다.
User Datagram Protocol
UDP는 데이터의 전달 여부를 확인하지 않기 때문에 데이터 전달 속도가 빠르다. 그러나 데이터 손실이 발생할 수 있고, 데이터마다 전달 경로가 다를 수 있기 때문에 데이터의 전달 순서를 보장하지 않는다. 데이터 손실이나 데이터 순서 처리는 애플리케이션 몫이다. 마치 편지와 유사하다. 상대방과 편지를 교환하기 전부터 미리 연결할 필요가 없고, 배달 도중 분실할 수도 있고 배달 순서가 뒤바뀔 수도 있기 때문이다.
3. IP 주소와 DNS 서버
네트워크에 연결된 모든 컴퓨터가 상호 통신하려면 각 컴퓨터마다 고유한 주소가 있어야 한다. 이는 마치 우편물을 정확하게 보내려면 집집마다 고유 주소가 필요한 것과 마찬가지이다. 컴퓨터에 부여된 고유 주소를 IP 주소, 즉 인터넷 주소라고 한다. IP 주소는 네트워크 어댑터마다 할당되고, 32 비트로 구성되며, xxx.xxx.xxx.xxx 형식으로 표현한다. xxx는 0~255 사이인 8비트의 부호 없는 정수이다. 컴퓨터에서 자신의 IP 주소를 파악하려면 명령 창에서 다음 명령어를 실행하면 된다.
C:\> ipconfig
인터넷에 연결된 모든 컴퓨터는 고유한 IP 주소가 있기 때문에 특정 컴퓨터의 IP 주소를 안다면 전 세계 어디에서든지 통신할 수 있다. 다만, 인터넷을 사용할 때 숫자보다 문자열이 편하기 때문에 IP 주소보다는 www.naver.com처럼 URL을 사용하는 것뿐이다. URL을 사용하면 IP 주소로 변환하는 DNS 서버가 필요하다. DNS 서버는 회사 이름을 말하면 전화번호를 알려주는 114 전화국과 유사하다
4. Port
네트워크 카드가 1개인 서버 컴퓨터라도 다수의 서버 프로그램을 실행할 수 있다. 그런데 하나의 네트워크 카드에는 하나의 IP 주소가 부여되므로 다수의 서버 프로그램을 동시에 실행하려면 클라이언트는 어느 서버 프로그램과 통신할지를 결정해야 한다. 이는 같은 주소를 사용하는 건물 안의 독립된 방을 사용하는 부서에 우편물을 전달하는 것과 유사한 방식으로 해결할 수 있다. 주소가 같더라도 부서의 방 번호가 다르므로 우편물을 어느 방으로 전달할지 알 수 있다. 회사 건물을 컴퓨터라고 한다면 건물 주소는 IP 주소에 해당하며, 방 번호는 컴퓨터의 포트 번호에 해당한다.
포트는 논리적인 통신 연결 번호를 의미하며, 0~65,535 사이의 번호를 사용한다. 0~1,023은 인터넷 주소 관리 기구(ICANN)가 특정 프로그램에 예약해 놓았다. 서버 프로그램은 고정된 포트 번호를 사용한다. 예를 들어 파일 서버는 21번, 메일 서버는 25번, 웹 서버는 80번 포트를 사용한다고 했을 때, 클라이언트 컴퓨터에서 웹 브라우저로 웹 서버에 접속하려면 해당 웹 서버의 IP 주소 외에 80번 포트로 연결을 요청해야 한다.
5. Socket
소켓은 서버와 클라이언트 간에 통신할 수 있도록 추상화한 연결 통로, 즉 두 컴퓨터 간에 통신하는 끝 부분을 의미한다. 사전에는 '전구 따위를 끼워 넣어 전선과 접속되게 하는 기구'로 기술돼있다. 프로그램은 지정된 소켓으로 통신할 수 있다. 소켓은 전송 계층까지 추상화했기 때문에 개발자는 전송 계층 및 네트워크 계층은 신경 쓸 필요가 없다.
오늘날 컴퓨터 간 통신의 대부분은 인터넷 프로토콜을 기반으로 하고 있으며, 대부분의 네트워크 소켓은 인터넷 소켓이다. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환한다.
인터넷 소켓은 다음과 같은 요소들로 구성되어 있으며,
- 인터넷 프로토콜(위에서 언급한 TCP와 UCP 또한 소켓의 종류에 해당한다.)
- 로컬 IP 주소
- 로컬 포트
- 원격 IP 주소
- 원격 포트
크게 두 개의 타입으로 분류한다.
- TCP 프로토콜을 사용하는 경우
- UDP 프로토콜을 사용하는 경우
6. 정리하기
- Server : 정보나 서비스를 제공하는 컴퓨터
- Client : 서비스를 요청하고 받는 컴퓨터
- Socket : 서버와 클라이언트 간에 통신할 수 있도록 추상화한 연결 통로
- TCP : 전화와 유사, 데이터 손실 없음, 데이터 순서 보장, 연결과 연결 해제에 따른 시간적 부담 발생
- UDP : 편지와 유사, 빠른 데이터 전송 속도, 데이터 손실 발생할 수 있음, 데이터 순서를 보장하지 않음
- IP : 회사 건물을 컴퓨터라고 한다면 건물 주소는 IP 주소
- Port : IP 주소를 건물 주소라고 한다면 컴퓨터의 포트 번호는 방 번호
- URL : 숫자보다 문자열이 편하기 때문에 IP 주소보다는 URL을 사용
- DNS : 회사 이름을 말하면 전화번호를 알려주는 114 전화국과 유사, URL을 IP 주소로 변환
'Dev > Ect' 카테고리의 다른 글
| 세션이란? What is a Session? (0) | 2022.08.03 |
|---|---|
| 쿠키란? What is Cookie? (0) | 2022.08.03 |
| 데이터 교환 형식 (2) - CSV, YAML (0) | 2022.07.27 |
| 데이터 교환 형식 (1) - JSON, XML (0) | 2022.07.27 |
| 소프트웨어 빌드 (Software Build) - 빌드 자동화 (0) | 2022.07.27 |
댓글