[WEEK07] Proxy - Ⅰ

김상호·2022년 5월 17일
0

Development Log

목록 보기
23/45

Proxy

클라이언트-서버 프로그래밍 모델

모든 네트워크 응용 프로그램은 클라이언트-서버 모델에 기초하고 있다. 이 모델을 사용해서 응용은 한 개의 서버 프로세스와 한 개 이상의 클라이언트 프로세스로 구성된다. 서버는 일부 리소스를 관리하고, 이 리소스를 조작해서 클라이언트를 위한 일부 서비스를 제공한다. 클라이언트-서버 모델에서 근본적인 연산은 트랜잭션이다.

클라이언트-서버 트랜잭션은 네 단계로 구성된다.

  1. 클라이언트가 서비스를 필요로 할 때, 클라이언트는 한 개의 요청(request)을 서버에 보내는 것으로 트랜잭션을 개시한다. 예를 들어 웹 브라우저가 파일을 필요로 할 때, 웹 서버로 요청을 보낸다.
  2. 서버는 요청을 받고, 해석하고, 자신의 자원들을 적절한 방법으로 조작한다. 예를 들어 웹 서버가 브라우저로부터 요청을 받을 때, 디스크 파일을 읽는다.
  3. 서버는 응답(response)을 클라이언트로 보내고, 그 후에 다음 요청을 기다린다. 예를 들어 웹 서버는 이 파일을 다시 클라이언트로 돌려 보낸다.
  4. 클라이언트는 응답을 받고 이것을 처리한다. 예를 들어 웹 브라우저가 서버로부터 페이지를 한 개 받은 후, 이것을 스크린에 디스플레이한다.

클라이언트와 서버는 프로세스(실행 중인 프로그램)이며 모든 서버는 호스트이지만, 모든 호스트가 서버는 아니다.

*호스트(Host)
			  네트워크 주소가 할당된 네트워크 노드.
		  	  네트워크에 연결이 확립된 모든 장치는 호스트의 자격이 있는 반면, 
			  다른 장치(client)로부터 연결을 수락하는 호스트만 서버가 될 수 있다.

네트워크

네트워크는 클라이언트와 서버가 서로 데이터를 요청하고 응답하는 것과 같이 호스트들을 서로 연결하고 통신할 수 있는 것을 말한다. 물리적으로 네트워크는 기하학적 위치로 구성된 계층 구조 시스템이다.

LAN(Local Area Network)

네트워크 계층구조의 하위수준으로는 LAN이 있고, 가장 대중적인 LAN 기술은 이더넷(Ethernet, 네트워크에 연결된 각 기기들이 48bit의 고유의 MAC주소를 가지고 이 주소를 이용해 상호간에 데이터를 주고 받는다)이다.

이더넷 세그먼트는 몇 개의 전선들과 허브라고 부르는 작은 상자로 구성된다. 각 전선은 동일한 최대 비트 대역폭(100Mb/s, 1Gb/s)을 가진다.

호스트는 프레임이라고 부르는 비트들을 세그먼트의 다른 호스트에 보낼 수 있다. 각 프레임은 프레임의 소스와 목적지, 프레임의 길이를 식별할 수 있는 고정된 헤더 비트를 가지고 있으며, 그 뒤에 데이터 비트가 이어진다. 모든 호스트 어댑터는 이 프레임을 볼 수 있지만 목적지 호스트만이 실제로 읽어 들인다.

전선들과 브릿지라고 하는 작은 상자들을 사용해서 다수의 이더넷 세그먼트가 연결되어 브릿지형 이더넷이라고 하는 더큰 LAN을 구성할 수 있다.

브릿지는 허브보다 더 높은 전선의 대역폭을 가지며 우수한 분산 알고리즘을 사용해서 선택적으로 필요한 호스트에게만 프레임을 보낼 수 있도록 한다.

위의 그림에서 예시를 들자면, 만일 호스트 A가 같은 세그먼트에 있는 호스트 B로 한 프레임을 전송하려고 한다면 브릿지 X에서 필터링을 거쳐서 다른 세그먼트로 프레임이 복사되지 않도록 하여 다른 세그먼트에서의 대역폭을 절약한다. 다른 경우로 만약 호스트 A에서 호스트 C로 프레임을 전송한다면 브릿지 X는 이 프레임을 브릿지 Y에 연결된 포트로만 복사하고, 브릿지 Y는 호스트 C가 있는 세그먼트로만 이 프레임을 복사한다.

WAN(Wide-Area Network)

다수의 비호환성 LAN들은 라우터라고 불리는 특별한 컴퓨터에 의해 물리적으로 연결될 수 있으며, 라우터는 네트워크 간 연결(상호연결 네트워크)을 구성한다. 라우터들은 WAN으로 연결되며, 이렇게 LAN과 WAN들이 연결되어 internet을 구성한다.

물리적으로 서로 다른 곳에 연결된 호스트들이 어떻게 데이터를 주고 받을 수 있을까? 답은 프로토콜 소프트웨어의 계층이다. 이 소프트웨어는 어떻게 호스트들과 라우터들이 데이터를 전송하기 위해서 협력하는지 결정하는 프로토콜을 구현한 것이다.

프로토콜은 두 가지 기본 기능을 제공해야 한다.

  • 명명법(Naming Scheme) : 각 호스트는 자신을 유일하게 식별하는 internet주소 최소한 한 개 할당
  • 전달기법(delivery mechanism) : 패킷이라고 불리는 데이터 비트 단위로 묶는 통일된 방법으로 전송
    • 패킷 : 패킷 크기와 소스, 목적지 호스트 주소를 포함하는 헤더 + 데이터 비트를 포함하는 데이터

아래의 그림은 하나의 라우터에 연결된 두 개의 LAN으로 구성된 internet의 예시를 보여준다.

  • (1) 호스트 A의 클라리언트
  • (2) 호스트 A의 프로토콜 소프트웨어
    • 인터넷 라우팅에 사용할 패킷 헤더를 추가해 internet 패킷을 만든다. 패킷 헤더에는 호스트 B로 주소가 지정된다.
    • 그 앞에 로컬 라우팅에 사용할 프레임 헤더를 추가해 LAN1 프레임을 만든다. 프레임 헤더는 라우터로 주소가 지정된다.
    • LAN1 프레임에서의 데이터 안에 internet 패킷이 들어있다.
  • (3) 호스트 A의 LAN1 어댑터
    • 해당 프레임을 네트워크로 복사한다.
  • (4) 라우터의 LAN1 어댑터
    • 해당 프레임을 라우터의 프로토콜 소프트웨어로 전달한다.
  • (5) 라우터
    • internet 패킷 헤더에서 목적지의 internet 주소를 가져와 LAN2의 라우팅 테이블에서 패킷의 목적지인 호스트 B를 찾는다.
    • LAN1 프레임 헤더를 벗겨내고 LAN2 프레임 헤더(호스트 B의 주소)를 추가한다.
  • (6) 라우터의 LAN2 어댑터
    • 해당 프레임을 네트워크로 복사한다.
  • (7) 호스트 B의 LAN2 어댑터
    • 해당 프레임을 읽어서 프로토콜 소프트웨어로 옮긴다.
  • (8) 호스트 B의 프로토콜 소프트웨어
    • 패킷 헤더와 프레임 헤더를 벗겨내어 데이터를 읽어낸다.

글로벌 IP 인터넷

글로벌 IP 인터넷은 internet을 성공적으로 구현한 가장 유명한 것

*Internet vs internet
		소문자 internet : 인터넷의 일반적인 개념
		대문자 Internet : 글로벌 IP Internet을 의미

그림은 인터넷 클라이언트-서버 응용의 기본적인 하드웨어 및 소프트웨어 구조를 보여준다.

IP

IP는 기본 명명법과 데이터그램이라고 하는 패킷을 한 인터넷 호스트에서 다른 호스트로 보낼 수 있는 배달 메커니즘을 제공한다. IP매커니즘은 만일 데이터를 잃어버리거나 네트워크 내에서 중복되는 경우 복구하려고 노력하지 않는다.

TCP/IP

TCP는 IP 위에 구현한 프로토콜로 프로세스들 간에 안전한 완전 양방향 연결을 제공한다. 즉 전송이 딜레이되더라도 데이터 손실이 없도록 한다.

UDP

UDP는 IP를 확장해서 데이터그램이 호스트에서 호스트로 가는 대신, 프로세스에서 프로세스로 전송될 수 있다. IP와 마찬가지로 데이터그램이 손실되는 경우 복구하려고 노력하지 않지만 제 시간에 데이터를 전달한다.

IP 주소

IP 주소는 비부호형 32bit 정수, 네트워크 프로그램은 IP주소를 IP주소 구조체에 저장된다.

// IP address structure
struct in_addr {
	unit32_t s_addr;  // Address in network byte order (big-endian)
}

IP주소는 dotted-decimal표기라고 하는 형식으로 제시되며, 이것은 각 바이트가 십진수 값을 사용하고 다른 바이트들과는 점을 사용해서 구분된다. (예시- 128.2.194.242는 주소 0x8002c2f2의 dotted-decimal 표현)

IP의 특징은 다음과 같다.

  • 호스트의 집합은 32비트 IP주소에 매핑
  • IP주소의 집합은 인터넷 도메인 네임(Inetnet Domain Name)이라고 부르는 식별자의 집합에 매핑
  • 하나의 인터넷 호스트의 프로세스는 연결을 통해서 다른 인터넷 호스트의 프로세스와 통신

인터넷 도메인 이름(Internet Domain Name)

인터넷 클라이언트와 서버는 서로 통신할 때 IP주소를 사용하지만, 컴퓨터 사용자 입장에서 정수들로 이루어진 주소값을 기억하기 어려워하기 때문에 도메인 이름을 별로도 정의한다.(www.google.com과 같은 우리에게 익숙한 도메인)

인터넷은 도메인 이름의 집합과 IP주소 집합 사이에 매핑을 정의하고, 이 매핑은 DNS(Domain Name System)이라는 전 세계에 분산된 데이터베이스에 의래 관리되어 왔다. NSLOOKUP 프로그램으로 도메인 이름과 연관된 IP주소를 일부 조사할 수 있다.

인터넷 연결의 구조

연결의 양 끝 소켓 쌍에 의해 유일하게 정해진다.
클라이언트는 호스트 커널에 의해 부여된 임시 포트를, 서버는 웹 서버이므로 80 포트를 통해 데이터를 주고받는다.

0개의 댓글