Network Programming

youngwiki
Pinkgo (토론 | 기여)님의 2025년 4월 29일 (화) 07:15 판

상위 문서: 컴퓨터 시스템, 컴퓨터 네트워크

개요

네트워크 애플리케이션은 컴퓨터 시스템의 많은 개념에 의존한다. 예를 들어, 프로세스(process), 시그널(signal), 바이트 순서(byte ordering), 메모리 매핑(memory mapping), 동적 저장소 할당(dynamic storage allocation) 등이 모두 중요한 역할을 한다. 또한 application layer에서의 개념, 클라이언트-서버(client-server) 구조 등에 대한 개념도 필요하다. 즉, 네트워크 프로그래밍은 네트워크 그 자체는 물론, 컴퓨터 시스템과도 땔려야 떌 수 없는 사이이다. 이 모델에서는, 하나의 애플리케이션이 서버 프로세스(server process)와 하나 이상의 클라이언트 프로세스(client process)로 구성된다.

The Client-Server Programming Model

거의 모든 네트워크 애플리케이션은 클라이언트-서버 모델에 기반한다. 이 모델에서는, 하나의 애플리케이션이 서버 프로세스(server process)와 하나 이상의 클라이언트 프로세스(client process)로 구성된다. 서버는 어떤 자원(resource)을 관리하고, 이 자원을 적절히 다루어서 클라이언트에게 서비스를 제공한다. Figure 1에 나타나 있듯이, 클라이언트-서버 모델에서 기본적인 동작은 트랜잭션(transaction)이다. 이는 다음의 네 단계로 구성된다:

Figure 1. A client-server transaction
Figure 1. A client-server transaction
  1. 클라이언트가 트랜잭션을 시작하기 위해[1] 서버에 요청(request)을 보낸다.
    • 예를 들어, 웹 브라우저가 파일을 필요로 할 때, 웹 서버에 요청을 보낸다.
  2. 서버는 요청을 수신하고(receive), 이를 해석하고(interpret), 적절한 방식으로 자원을 조작(manipulate)한다.
    • 예를 들어, 웹 서버가 브라우저로부터 요청을 받으면, 디스크 파일을 읽는다.
  3. 서버는 클라이언트에게 응답(response)을 보낸 다음, 다음 요청을 기다린다.
    • 예를 들어, 웹 서버는 파일을 클라이언트에게 전송한다.
  4. 클라이언트는 응답을 수신하고, 이를 사용한다.
    • 예를 들어, 웹 브라우저가 서버로부터 페이지를 수신한 후, 이를 화면에 표시한다.

이때 주의할 점은, 클라이언트와 서버는 프로세스이지, 호스트(host), 즉 실체적인 기계가 아니라는 것이다. 하나의 호스트는 서로 다른 여러 클라이언트와 서버를 동시에 실행할 수 있으며, 클라이언트와 서버 간의 트랜잭션은 동일한 호스트 내에서 일어날 수도, 서로 다른 호스트에서 일어날 수도 있다.

Hardware organization of a network host

Figure 2. Hardware organization of a network host
Figure 2. Hardware organization of a network host

Figure 2는 호스트가 어떻게 하드웨어적으로 구성되어 있는지를 보여준다.

  1. CPU chip
    • 내부에 레지스터 파일(Register file)과 ALU(Arithmetic Logic Unit, 산술논리연산장치)가 있다.
    • Bus interface를 통해 시스템의 다른 부분과 연결된다.
    • System bus를 통해 CPU는 외부의 I/O bridge로 데이터를 주고받는다.
  2. I/O bridge
    • 시스템의 중심적인 연결 지점이며, System bus 와 Memory bus, 그리고 I/O bus 사이를 연결해주는 다리 역할을 한다.
    • CPU와 메인 메모리 및 다양한 주변장치들 간의 데이터 흐름을 조정한다.
  3. Main memory
    • Memory bus 를 통해 I/O bridge에 연결되며, CPU가 직접 읽고 쓰는 기본적인 저장공간이다.
    • 네트워크로부터 수신된 데이터나, 네트워크로 보낼 데이터도 여기에 저장된다.
  4. I/O bus: 다양한 입출력 장치들을 연결하는 버스이며, I/O bridge를 거쳐 CPU 및 메모리와 통신한다.
  5. USB controller: 마우스나 키보드 같은 장치를 USB를 통해 연결하고 제어한다.
  6. Graphics adapter: 모니터와 연결되어 화면 출력(Display)을 담당한다.
  7. Disk controller: 파일 시스템에 저장된 데이터에 접근하기 위해 하드디스크와 같은 저장장치를 제어한다.
  8. Expansion slots: 추가적인 장치를 설치할 수 있는 슬롯이며, 네트워크 어댑터도 해당 슬롯에 장착된다.
  9. Network adapter: 네트워크와 직접 연결되는 하드웨어이며, 데이터가 이 어댑터를 통해 입출력된다.[2]
  10. Network: 외부의 다른 호스트들과 연결된 네트워크(예: LAN, WAN)를 의미하며, 호스트에게는 단지 데이터를 위한 입력과 출력을 제공하는 I/O 장치로 여겨진다.

Computer Networks

네트워크란, 지리적 근접성에 따라 조직된 상자(box)들과 선(wire)들의 계층적 시스템이다. 이때, 물리적인 근접성에 따라 다음과 같이 구분된다:

  • SAN (System Area Network): 한 클러스터 또는 머신룸(서버실)을 연결하는 네트워크이다.
    • 예: 스위치드 이더넷(Switched Ethernet), Quadrics QSW 등
  • LAN (Local Area Network): 어떤 건물이나 캠퍼스 단위에 걸쳐 있는 네트워크이다.
    • 예: 이더넷(Ethernet)
  • WAN (Wide Area Network): 나라 전체나 전 세계에 걸친 네트워크이다.[3]

인터넷(internet)은 여러개의 네트워크들을 상호 연결한 것이다. 또한 대중적으로 알려져 있는 Global IP Internet[4]은 인터넷[5]의 가장 일반적인 한 형태이다.


각주

  1. 서비스를 받기 위함이다.
  2. 보통 이더넷 카드(Ethernet card)라고도 불린다.
  3. 보통 고속 점대점 전화선(point-to-point phone lines) 을 통해 연결된다.
  4. 대문자 "I"의 Internet이다.
  5. 소문자 "i"의 일반적인 internet에 해당한다.