네트워크 애플리케이션 개발의 중심
- 다른 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것
- 예시
- 웹 어플레케이션의 서버와 클라이언트로 구별되는 두 가지 프로그램
- 클라이언트 프로그램 : 사용자 호스트에서 실행되는 브라우저 프로그램
- 사용자 호스트 → 데스크톱, 랩톱, 태블릿, 스마트폰
- 사용자 호스트 → 데스크톱, 랩톱, 태블릿, 스마트폰
- 클라이언트 프로그램 : 사용자 호스트에서 실행되는 브라우저 프로그램
- 서버 프로그램 : 웹 서버 호스트에서 실행되는 웹 서버 프로그램
- 이러한 서버는 종종 데이터 센터에 위치
- 이러한 서버는 종종 데이터 센터에 위치
- 웹 어플레케이션의 서버와 클라이언트로 구별되는 두 가지 프로그램
- 예시
- 종단 시스템에만 애플리케이션 소프트웨어가 존재 → 기본 설계 방식
새로운 애플리케이션 개발
- 여러 종단 시스템에서 실행되는 소프트웨어를 작성해야 함
- C, Java, Python 등으로 작성됨
- C, Java, Python 등으로 작성됨
- 네트워크 코어 장비에서 실행되는 소프트웨어까지 작성할 필요가 없다.
- 네트워크 코어 장비는 네트워크 계층 및 그 하위 계층에서 기능함
네트워크 애플리케이션 구조
- 애플리케이션 개발자 관점에서 애플리케이션 구조는 네트워크 구조와 다름
- 네트워크 구조 : 고정되어 있고 해당 애플리케이션에 특정 서비스 집합을 제공
- 애플리케이션 구조
- 애플리케이션 개발자가 직접 설계
- 애플리케이션이 다양한 종단 시스템에서 어떻게 조직되어야 하는지 알림
- 애플리케이션이 다양한 종단 시스템에서 어떻게 조직되어야 하는지 알림
- 애플리케이션 개발자가 직접 설계
- 네트워크 구조 : 고정되어 있고 해당 애플리케이션에 특정 서비스 집합을 제공
- 애플리케이션 구조를 선택할 때의 특징
클라이언트-서버 구조
혹은P2P 구조
중 하나를 선택- 두 구조는 현대 네트워크 애플리케이션에서 사용됨
클라이언트-서버 구조(client-server architecture)
서버(server)
: 해당 구조에서 항상 동작하고 있는 호스트- 서버 서비스는
클라이언트(client)라는
다른 호스트들에게 서비스 요청을 받음- 클라이언트 호스트는 항상 켜져 있지 않음
- 클라이언트 호스트는 항상 켜져 있지 않음
- 클라이언트는 서버 주소로 패킷을 보내서 언제든지 서버에 연결 가능
← 서버는 항상 켜져 있기 때문
- 서버 서비스는
- 해당 구조에서 클라이언트끼리는 서로 직접적인 통신을 하지 않음
- 예시 : 웹 애플리케이션에서 2개의 브라우저가 직접적으로 통신하지 않음
- 예시 : 웹 애플리케이션에서 2개의 브라우저가 직접적으로 통신하지 않음
- 서버가
고정 IP 주소라는
잘 알려진 주소를 가짐 - 클라이언트-서버 구조로 설계된 애플리케이션
→ 웹, 파일 전송, 원격 로그인, 전자메일 데이터 센터(data center)
: 많은 수의 호스트로 갖추었고, 강력한 가상 서버를 생성- 존재 이유 : 하나의 서버 호스트가 클라이언트의 모든 요청 응답하는 것은 불가능
- 대략 10만 개 정도의 서버를 갖춤
- 서비스 제공자들은 데이터 전송을 위해 데이터 센터를 이용
→ 데이터 센터에게 상호 연결 및 대역폭에 합당한 비용을 지불함
P2P 구조
- 애플리케이션은
피어(peer)
라는 간헐적으로 연결된 호스트쌍이 서로 직접 통신피어(peer)
- 서비스 제공자가 소유하지 않고 사용자들이 제어하는 데스크톱과 랩탑
- 피어들은 가정, 대학, 사무실에 위치
- 항상 켜져 있는 인프라스트럭처 서버에 최소한으로 의존(전혀 의존하지 않을 수도)
- 특정 서버를 통하지 않고 피어가 통신 →
peer To peer(P2P)
라고 부름 - P2P 구조의 특성
자가 확장성(self-scalability)을
갖춤- 피어들은 파일을 다른 피어들에게 분배함으로써 시스템 서비스 능력을 추가
- 피어들은 파일을 다른 피어들에게 분배함으로써 시스템 서비스 능력을 추가
- P2P 구조는 비용 효율적이다.
- 일반적으로 상당한 서버 인프라스트럭처와 서버 대역폭을 요구하지 않음
- 일반적으로 상당한 서버 인프라스트럭처와 서버 대역폭을 요구하지 않음
- P2P 애플리케이션 한계
- 고도의 분산 구조 특성 → 보안, 성능, 신뢰성이 떨어짐
프로세스 간 통신
프로세스
: 종단 시스템에서 실행되는 프로그램- 운영체제 용어에서 실제 통신하는 것은 프로그램이 아닌 프로세스(process)
- 운영체제 용어에서 실제 통신하는 것은 프로그램이 아닌 프로세스(process)
- 통신 프로세스가 같은 종단 시스템에서 실행될 때 서로 프로세스 간 통신을 한다.
- 프로세스 간 통신 규칙은 종단 시스템의 운영체제에 의해 좌우됨
다른 호스트에서 실행되는 프로세스와의 통신
- 2개의 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한
메시지 교환으로
서로 통신 - 송신 프로세스는 메시지를 만들어서 네트워크로 보냄
- 수신 프로세스는 메시지를 받고 역으로 메시지를 보냄으로써 응답
클라이언트와 서버 프로세스
- 네트워크 애플리케이션은 네트워크에서 서로 메시지를 보내는 2개의 프로세스로 구성
- 통신하는 프로세스 각 쌍에 대해 클라이언트 프로세스와 서버 프로세스로 구분
- P2P 파일 공유와 같은 애플리케이션에서의 프로세스
→ 클라이언트와 서버 둘 다 가능함
- P2P 파일 공유와 같은 애플리케이션에서의 프로세스
- 통신하는 프로세스 각 쌍에 대해 클라이언트 프로세스와 서버 프로세스로 구분
- 클라이언트와 서버 프로세스의 정의
클라이언트 프로세스
: 두 프로세스 간의 통신 세션에서 통신을 초기화하는 프로세스서버 프로세스
: 세션을 시작하기 위해 접속을 기다리는 프로세스
프로세스와 컴퓨터 네트워크 사이의 인터페이스
- 프로세스는 소켓(socket)을 토해 네트워크로 메시지를 주고받음
소켓(socket)
: 네트워크 애플리케이션이 인터넷에 만든 프로그래밍 인터페이스- 애플리케이션과 네트워크 사이의 API라고도 불림
- API → Application Programming Interface
- 애플리케이션과 네트워크 사이의 API라고도 불림
프로세스 간 메시지 송수신 과정
- 송신 프로세스가 소켓을 통해 메시지를 바깥 네트워크로 밀어냄
- 메시지가 목적지 호스트에 도착하면 메시지는 수신 프로세스의 소켓을 거침
- 수신 프로세스는 메시지를 처리
트랜스포트 계층에 대한 애플리케이션 개발자의 통제
- 애플리케이션 개발자의 소켓에 관한 통제권
- 통제권을 가지는 부분 → 소켓의 애플리케이션 계층에 대한 모든 것
- 통제권을 가지지 못하는 부분 → 소켓의 트랜스포트 계층에 대한 것
- 트랜스포트 프로토콜 선택 가능
- 애플리케이션을 선택한 프로토콜이 제공하는 전송 서비스를 사용하여 구성
- 애플리케이션을 선택한 프로토콜이 제공하는 전송 서비스를 사용하여 구성
- 트랜스포트 계층 매개 변수의 설정
- 최대 버퍼와 최대 세그먼트 크기 등
프로세스 주소 배정
- 다른 호스트의 프로세스로 패킷을 보내기 위해 수신 프로세스는 주소를 가지고 있음.
- 프로세스 식별을 위해 2가지의 정보 명시해야 함
- 호스트의 주소
- 그 목적지 호스트 내의 수신 프로세스를 명시하는 식별자
IP 주소
: 호스트를 유일하게 식별하는 주소- IP 주소는 32비트로 구성
- 인터넷에서 호스트는 IP 주소로 식별됨
- 프로세스 간 메시지 전달하기 위해 알아야 하는 것
- 메시지가 전달되어야 하는 호스트의 주소
- 송신 호스트는 목적지 호스트에 있는 수신 프로세스
- 한 호스트가 많은 네트워크 애플리케이션을 수행할 수 있음
- 인기 있는 애플리케이션은 특정한 포트 번호가 할당
- 웹 서버 포트 번호 → 80
- SMTP 프로토콜의 메일 서버 포트 번호 → 25
- 위 목적들을 위해 목적지 포트 번호(port number)가 사용
- 인기 있는 애플리케이션은 특정한 포트 번호가 할당