네트워크 어플리케이션
웹 서핑, 이메일 수발신, 온라인 게임, 카톡 수발신, 온라인 결제 ... 이들의 공통점은 네트워크 어플리케이션을 사용하고 있다는 것이다. 네트워크에 연결된 컴퓨터 한 대 한 대를 호스트(host) 라고 하는데, 어떤 호스트의 어플리케이션이 다른 호스트의 어플리케이션과 통신하고 있다면 이 어플리케이션을 네트워크 어플리케이션이라고 한다.
네트워크 어플리케이션을 이해하기 위해서는 클라이언트-서버 프로그래밍 모델과, 인터넷에서 제공되는 서비스들을 사용할 수 있는 클라이언트-서버 프로그램을 어떻게 만들 수 있는지를 알아야 한다.
클라이언트-서버 프로그래밍 모델 (The Client-Server Programming Model)
모든 네트워크 어플리케이션은 클라이언트-서버 모델을 기반으로 한다.
클라이언트-서버 모델에서 어플리케이션은 하나의 서버 프로세스와, 하나 이상의 클라이언트 프로세스로 구성된다. 클라이언트는 서버에 서비스를 요청하고, 서버는 리소스를 조작(manipulate)함으로서 클라이언트에게 서비스를 제공한다. 리소스를 조작한다는 것은 파일을 관리하고, 실행하고, 읽고 업데이트 하는 작업들을 의미한다.
클라이언트-서버 모델에서 가장 중요한 동작은 트랜잭션(transaction) 이다. 트랜잭션은 클라이언트가 서버에 요청을 보내고 서버가 응답하는 과정을 의미하는데 아래의 네 단계로 구성된다.
- 클라이언트가 서버로 요청을 보냄으로써 트랜잭션을 시작한다. e.g. 웹브라우저 → 웹서버 : html 파일 요청
- 서버는 요청을 받고 해석한 뒤 리소스를 조작한다. e.g. 웹서버 : 요청을 받은 후 disk file 읽음
- 서버는 클라이언트로 응답을 보내고 다음 요청을 기다린다. e.g. 웹서버 → 웹브라우저 : html 파일 전송
- 클라이언트는 응답을 받고 이를 처리(manipulate) 한다. e.g. 웹브라우저 : 응답받은 html 페이지를 화면에 display
한 가지 중요한 사실은, 클라이언트와 서버는 프로세스이지 기계나 호스트(네트워크에 연결된 컴퓨터)가 아니라는 것을 이해하는 것이다. 하나의 호스트가 여러 개의 클라이언트와 서버를 동시에 실행할 수 있고, 클라이언트와 서버의 트랜잭션은 같은 호스트 내서 발생할 수도 있고, 다른 호스트에서 발생할 수도 있다.
네트워크 (Networks)
대부분의 경우, 클라이언트와 서버는 별도의 분리된 서버에서 각각 실행되고, 컴퓨터 네트워크의 하드웨어 및 소프트웨어를 이용해서 서로 통신한다.
네트워크를 이해하는 한 가지 방법으로서 네트워크에 연결된 컴퓨터, 즉 호스트 입장에서 네트워크를 이해해보자.
호스트 입장에서 네트워크는 그저 데이터를 입출력하는 장치에 가깝다. 컴퓨터에 데이터가 들어오거나 나가는 지점(source and sink)이 되는 입출력 장치와 같은 것이다. 호스트 컴퓨터 확장 슬롯에는 네트워크 어댑터가 꽂혀있고, 이는 컴퓨터와 네트워크 사이의 물리적 인터페이스를 제공한다.
이 네트워크 어댑터를 통해서 네트워크의 데이터가 네트워크 어댑터로부터 I/O bus와 Memory bus를 거쳐 메모리로 복사될 수 있다. 메모리에서부터 네트워크로 복사되는 반대 방향도 가능하다. 아래 그림은 네트워크 호스트의 물리적 구조를 나타낸 것인데 연보라색 형광펜으로 그려놓은 경로를 참고하시라)
이제 컴퓨터 입장에서 네트워크를 이해해보았으니 좀 더 큰 범위에서 네트워크를 이해해보자.
네트워크의 범위 : LAN & WAN & internet
네트워크는 물리적으로 지리적 근접성(nearness)에 따라 계층구조를 갖는 시스템이다. 지리적으로 가까운 지역을 커버하는 작은 영역의 네트워크(=LAN)가 존재하고 이러한 LAN들이 모여 더 넓은 지역을 커버하는 WAN 들이 있고 더 나아가 이러한 WAN 들이 모여 전 세계의 컴퓨터가 연결된 인터넷이 존재하는 것이다.
💡 LAN : Local Area Network. 건물 안이나 특정 지역을 범위로 하는 네트워크. 근거리 통신이라 속도가 빠르고 오류가 적다.
💡 WAN: Wide Area Network. 랜과 랜의 연결. ISP가 제공하는 서비스를 사용하여 구축된 네트워크. 원거리 통신이라 랜에 비해 속도가 느리고 오류가 많다. ex. 서울 사무실의 랜과, 부산 사무실의 랜을 ISP 서비스를 사용하여 연결
💡 인터넷: TCP/IP 프로토콜을 사용하는 세계 최대 규모의 네트워크. 네트워크의 한 종류로서, 전 세계의 큰 네트워크부터 작은 네트워크까지를 연결하는 거대한 네트워크를 의미 (인터넷으로 전 세계가 네트워크로 연결되어 있는 것)
이더넷 (Ethernet)
LAN에서는 이더넷이라는 기술을 사용해서 통신한다. 아래와 같이 트위스트 페어 케이블(wire) 및 허브라는 장비로 구성된 것을 이더넷 세그먼트라고 하는데, 이 이더넷 세그먼트는 방 하나, 건물 한 층 정도의 좁은 범위를 아우르는 LAN 이다. 이더넷 세그먼트에서 케이블의 한쪽 끝은 호스트 컴퓨터의 네트워크 어댑터에 꽂고, 다른 한쪽은 허브의 포트에 꽂는다.
이더넷 세그먼트의 구성요소인 트위스트 페어 케이블과 허브에 대해서 간단하게 다루어보자.
💡 트위스트 페어 케이블 (랜 케이블)
구리 선 여덟개를 두 개씩 꼬아 만든(Twisted Pair) 네 쌍의 전선. 두개씩 꼬아 만든 선을 실드(Shield)로 보호한 STP(Shielded Twisted Pair) 케이블과, 그렇지 않은 UTP(Unshielded Twisted Pair) 케이블이 있다. (구리선을 꼬는 이유는 노이즈의 영향을 적게 받기 위함)
실드는 금속 호일이나 금속의 매듭과 같은 것으로 외부에서 발생하는 노이즈를 막는 역할을 한다. (노이즈는 케이블에 전기 신호가 흐를 때 발생) STP는 실드가 존재하기 때문에 노이즈의 영향을 적게 받지만 비싸기 때문에 보편적으로 사용하지는 않는다. 케이블의 양쪽 끝에는 RJ-45라고 부르는 커넥터가 존재. 이를 컴퓨터의 랜 포트와 네트워크 기기에 연결한다.
💡 허브
랜을 구성할 때 가까운 거리에 있는 장비들을 케이블을 사용하여 연결하는 장치. 포트(통신 통로)를 여러 개 가지고 있어 컴퓨터 여러 대와 통신할 수 있다. 하지만 어떤 포트로부터 데이터를 받았을 때, 언제나 나머지 모든 포트로 데이터를 전송하므로 ‘dummy (멍청이) hub’ 라고도 불린다.
이렇게 허브는 한 포트에서 들어온 데이터를 나머지 모든 포트로 전달한다. 그럼에도 불구하고 어떻게 데이터가 다른 호스트가 아닌 목적지 호스트까지 올바르게 전달될 수 있을까?
이더넷 어댑터 (네트워크 어댑터; 랜 카드)에는 MAC 주소라는 전세계에서 하나만 존재하는 고유한 주소가 저장되어있다. MAC 주소는 00-23-AE-D9-7A-9A 와 같은 48비트(6byte) 숫자로 구성되는데, 앞쪽 24비트는 랜 카드 제조사 번호, 뒤쪽 24비트는 제조사가 붙인 일련번호이다.
이더넷 세그먼트에 속한 한 호스트가 다른 호스트로 데이터를 보낼 때, 데이터(payload)의 앞에는 데이터의 출발지(Source) MAC 주소와 목적지(destination) MAC 주소, 데이터의 길이 정보가 담겨있는 헤더가 존재하고, 데이터(payload)의 끝에는 데이터 무결성을 보장하기 위한 트레일러가 존재한다. 이렇게 이더넷 헤더와 트레일러가 붙은 데이터를 이더넷 프레임(frame)이라고 한다.
이렇게 프레임의 헤더에 출발지와 목적지 MAC 주소가 담겨있기 때문에, 허브에서 모든 포트를 통해 모든 호스트에게 데이터를 보내도 호스트는 자신의 MAC 주소와 이더넷 프레임의 목적지 MAC 주소와 일치할 때만 데이터를 읽는다.
브릿지라는 장비를 사용해서 여러 개의 이더넷 세그먼트들이 연결하여 더 큰 LAN을 구성한 것을 브릿지형 이더넷(bridged Ethernets) 이라고 한다. 케이블이 허브와 브릿지를 연결하고, 브릿지와 브릿지를 연결함으로서 건물 전체나 캠퍼스 전체를 아우르는 더 큰 네트워크가 만들어질 수 있다.
Internet protocol
위에서 랜과 랜이 열결되면, WAN이 구성된다고 언급한 바 있다.
여러 개의 LAN들은 router 라고 불리는 특별한 장비를 통해 연결되어 internet(interconnected network)을 형성한다. 라우터는 포트(어댑터)가 있어서 다른 네트워크들과 연결될 수 있는데, 라우터가 연결하는 네트워크들을 WAN이라고 하고, 라우터를 통해 수많은 LAN과 WAN이 연결되어 인터넷을 형성하게 되는 것이다.
이렇듯 인터넷은 서로 다른 기술로 구성된 임의의 LAN과 WAN들로 구성되는데, 이렇게 난잡한(?) 네트워크를 통해 하나의 호스트가 보낸 데이터가 어떻게 정확히 목적지 호스트까지 도착할 수 있을까 ?
궁금하면 다음 포스팅으로.. !

Reference
Randal E. Bryant and David R. O'Hallaron, Computer Systems: A Programmer's Perspective, 3/E (CS:APP3e), Carnegie Mellon University, 2015
미즈구치 카츠야, 『10일 만에 배우는 네트워크(Network) 기초』, 이승룡, 길벗 , 2018
댓글