모든 네트워크 응용 프로그램은 클라이언트-서버 모델에 기초한다.
이 모델에서 응용(Application)은 한 개의 서버 프로세스와 여러 개의 클라이언트 프로세스로 구성된다.[^11-1]
클라이언트-서버 모델에서 근본적인 작업은 트랜잭션 transaction이다.
트랜잭션은 클라이언트-서버 간 요청을 주고 받거나 작업을 처리하는 것으로 네 단계로 구성된다:
클라이언트-서버 모델 구분 이점
[^11-1]: 클라이언트-서버 모델에서의 클라이언트와 서버는 프로세스이다. 머신, 호스트가 아니므로 하나의 호스트 내에 클라이언트 프로세스와 서버 프로세스를 모두 갖는 것이 가능하다.
네트워크란 여러 컴퓨터들을 그물망처럼 연결한 통신 형태를 뜻한다.
많은 서비스들이 네트워크를 이용하여 제공되고 있다.
네트워크는 각기 다른 위계 Hierarchy를 갖는 계층구조 시스템으로 이해할 수 있다.
계층으로 나누어 설명하는 이유는:
OSI 모델은 이론적인 목적으로 ISO에서 제안한 반면, TCP/IP 모델은 ARPANET(인터넷의 전신)과 함께 발전한 실용적인 모델이다.
서로 다른 기술을 사용하는 네트워크와 통신하기 위해서, 각 계층에서는 하위 계층에서 요구되는 형식으로 헤더를 추가하여 데이터를 변환한다.
그림을 예시로 들면 TCP/IP 4계층에서 전송 계층은 응용 계층에서 받은 데이터가 텍스트이든 이미지이든 헤더를 붙여 변환한다. 인터넷 계층에서도 마찬가지로 전송 계층에서 TCP/UDP 어떤 프로토콜을 사용하든 헤더를 붙여 전송 가능한 데이터그램으로 만든다. 네트워크 엑세스 계층에서도 헤더를 붙여 프레임으로 만들고 비트로 변환하여 전송된다.
이런 변환 방식을 반복하면 최종적으로는 통일된 형식의 비트(데이터의 가장 미시적 단위)로 변환할 수 있으며 이런 상위 계층의 데이터를 감싸는 변환 방식을 캡슐화 encapsulation라고 한다.
캡슐화를 사용하면 각 계층에서 어떤 프로토콜을 사용하든 동일한 형식으로 전송할 수 있으며 인터넷 통신 방식의 핵심이다.
요약하자면, 계층화가 필요한 주된 이유는 계층 내 서로 호환되지 않는 기술을 하위 계층의 동일한 기술로 변환할 수 있도록 만들기 위해서이다.
OSI 7계층:
일반적인 개념으로서의 인터넷 internet을 우리가 실제로 사용하고 있는 Internet, global IP Internet의 맥락(컨텍스트)에서 저수준 계층부터 설명한다.
인터넷은 (로컬)네트워크들 간의 연결을 구현한 것이다.
앞으로 사용하는 용어 중 개념을 가리키는 일반적인 용어(LAN, 네트워크 세그먼트, 인터넷 주소, 전송 프로토콜 등)와 개념을 구현한 기술을 가리키는 용어(주로 TCP/IP 컨텍스트에서. 이더넷/802.11, 이더넷 세그먼트, IP 주소, TCP/UDP 등)를 구분해야 한다.
가장 작은 단위의 네트워크는 LAN Local Area Network이며 사무실 내의 내부망을 떠올릴 수 있다.
이더넷 Ethernet은 이런 LAN을 구현한 기술로 1970년대 이래 진화를 거쳐 속도와 안정성이 높아졌다.
이더넷 세그먼트(이더넷 기술 외의 일반적인 표현은 네트워크 세그먼트)는 호스트와 허브로 구성된다.[^11-2]
허브는 모든 신호를 모든 포트로 복사하기 때문에 호스트들이 동시에 발송을 시도하는 경우 충돌이 발생한다.
이를 이더넷 세그먼트 내의 호스트들이 하나의 충돌 도메인 Collision domain에 있다고 한다.
[^11-2]: 허브를 이용하지 않고 단일 호스트로만 세그먼트를 구성할 수도 있다.
[^11-7]: 의도한 것이 아니라 자연스럽게 모든 호스트가 프레임을 수신하도록 하게 된다. 호스트들은 같은 통신 기술을 공유하고 신호(이더넷 같은 유선 통신에서는 전기신호)를 주고 받을 수 있는 상황에 놓여지기 때문이다. 후술할 인터넷 프로토콜이 필요한 이유, 브로드캐스트 도메인이 각 네트워크 세그먼트로 한정되는 이유로 연결되는 중요한 아이디어이다.
브릿지를 사용하여 충돌 도메인을 분리하고 둘 이상의 이더넷 세그먼트를 연결할 수 있다.
이를 브릿지형 이더넷 세그먼트 *Bridged Ethernet Segments**이라고 한다.
스위치[^11-3] 역시 헤더를 조회해 브릿지처럼 이더넷 세그먼트를 연결하며 충돌 도메인을 분리한다.
그러나 브릿지는 소프트웨어를 기반으로 CPU와 소프트웨어가 MAC 주소 테이블을 관리하고 프레임 포워딩하는 반면, 스위치는 전용으로 설계된 ASIC와 TCAM을 이용하여 하드웨어적으로 처리한다.
따라서 브릿지에 비해 처리 속도가 매우 빠르므로 대규모 네트워크 환경에 유리하며 포트 수도 보통 수십개이다.
[^11-3]: 스위치는 프레임을 받고 적절한 경로를 결정해 발송(포워딩)해주는 네트워킹 장비를 말한다. 하지만 일반적으로 '스위치'라고만 하면 L2에서 작동하는 스위치를 의미하며, 다른 계층에서 작동하는 스위치는 L3 스위치, L4 스위치 등으로 구분해 부른다. 허브는 항상 모든 포트로 발송하므로 스위치가 아니다.
internet은 둘 이상의 network(예를 들어 이더넷)들을 연결한 것(inter-network)이다.
주로 라우터[^11-4]를 이용해 네트워크들을 연결하게 된다. 즉, 라우터는 네트워크(또는 브로드캐스트 도메인[^11-5])을 구분한다.
하나의 라우터로 연결된 네트워크들을 가장 작은 internet이라고 생각할 수 있다.
[^11-4]: 라우터는 일반 컴퓨터로도 구성할 수 있으나 주로 라우터 전용으로 나온 컴퓨터 단말을 사용한다.
[^11-5]: 브로드캐스트란 목적지 호스트를 정하지 않고 네트워크의 모든 호스트에 발송하는 것을 말한다. 라우터는 브로드캐스트를 수신해도 다른 물리포트로 포워드하지 않으므로 각 물리포트들은 다른 브로드캐스트 도메인에 있게 된다. 브로드캐스트는 한 번의 신호 발송으로 네트워크 내의 모든 호스트들에 전달하는 것이므로 라우터가 복사하여 전달할 필요도 없으며 해서도 안 된다.
MAC 주소를 이용한 통신은 같은 기술을 사용하는 호스트 간에 사용했다.
되짚어 보자면, 이더넷이나 와이파이와 같이 서로 같은 방식의 물리 신호를 주고받을 수 있는 상황에서 호스트를 선택적으로 통신하기 위해서 MAC 주소를 사용했다.
다르게 말하면 MAC 주소로는 다른 종류의 네트워크와 통신할 수 없다.
LAN 내부에서 통신했던 것과 달리 LAN들은 서로 호환되지 않는 기술들을 사용할 수 있다.
따라서 다른 네트워크로는 직접 통신이 불가능할 수 있다.
예를 들어 이더넷은 유선 통신으로 구현된 LAN이지만 WLAN은 무선통신으로 구현되었으므로 이더넷에서 WLAN으로는 직접 통신할 수 없다.
이렇게 비호환 네트워크일 수 있는 다른 LAN과 통신하기 위해서는 새로운 규약(인터넷 프로토콜)이 필요하다.
인터넷 프로토콜은 호스트들과 라우터들이 데이터를 전송하는 방법을 규정한 것이며 우리가 사용하는 인터넷(Global IP Internet)은 IP Internet Protocol를 사용한다.
IP를 포함한 인터넷 프로토콜은 아래 두 가지 기본 기능을 가지고 있다.
명명법 Naming scheme
호스트의 주소로 사용할 통일된 형식을 정의한다.
각 호스트는 internet 주소를 한 개 이상 가지고 있다.
IP에서는 IP 주소와 포트를 사용한다.
[[#11-3-1. IP 주소|IP주소에 대한 자세한 설명]]은 뒤에서 하기로 하고 일단은 IP에서 사용하는 주소라고만 하겠다.
전달기법 Delivery mechanism
서로 다른 길이와 인코딩 방식의 데이터를 통일된 방식으로 묶기 위해서, 데이터 비트를 패킷(IP에서는 데이터그램으로도 부름)이라는 단위로 묶는 방법을 정의한다.
패킷은 패킷 크기, 소스 호스트 주소(IP 주소), 목적지 호스트 주소(IP 주소)를 포함하는 헤더를 데이터 앞에 붙여 구성한다.
(IP에서 패킷의 예)
IP를 통해 통신하는 모든 호스트들은 고유한 IP주소를 가지고 있다.
네트워크가 하나의 외부 IP를 공유하는 경우에는 네트워크 내 호스트들은 고유한 내부 IP를 가지고 있다.
네트워크 간 IP로 통신하는 방식:
다른 네트워크의 호스트와 데이터를 주고 받을 때엔 MAC 주소 대신 규약으로 정해진 주소(명명법, IP 주소)가 포함된 헤더를 데이터 앞에 추가하게 된다. 이를 데이터그램/패킷이라고 한다.
이 패킷을 네트워크 내에서 주고 받을 때에는, 하위 계층의 헤더(MAC 주소)가 추가로 붙게 되므로 실제 1계층에서 주고 받게 되는 데이터는 (프레임 헤더)+(패킷 헤더)+(패킷 데이터) 의 형태가 된다.
[^11-6]: 내부 네트워크의 호스트들은 사설(내부) IP 주소를 사용한다. 인터넷에 접속하기 위해서는 공인(외부) IP 주소가 필요하며, 하나의 공인 IP 주소를 사용하여 모든 내부 호스트가 외부 인터넷과 통신한다. NAT는 같은 공인 IP를 사용하더라도 포트 번호를 사용하여 내부 호스트들을 구분할 수 있게 하는 기술이다. 내부 호스트가 외부 인터넷에 패킷을 보내면, 라우터는 패킷의 출발지(내부 호스트) IP 주소를 공인 IP 주소로 변환한다. 이와 함께, 포트 번호도 변환하여 NAT 테이블에 기록한다(NAT 테이블). 이 포트 번호는 내부 호스트와의 세션을 식별하는 데 사용된다. 라우터는 외부에서 오는 (공인 IP와 포트번호를 가진) 응답 패킷을, NAT 테이블을 참조하여 원래의 내부 IP 주소와 포트 번호로 변환하여 내부 호스트에 전달한다. 이 때 특정 포트 번호로 오는 패킷을 특정 내부 IP로 변환하여 보내도록(포워딩하도록) 변환하는 작업을 포트포워딩이라고 한다. 사용 중이거나 포트포워딩한 포트가 아닌 나머지 포트로 온 패킷을 모두 특정 내부 IP로 변환하여 보내도록 하는 것은 DMZ라고 한다.
네트워크 내에서 IP로 통신하는 방식
같은 기술을 사용하는 네트워크 안에서는 IP를 사용하지 않고도 통신할 수 있지만, 외부 네트워크와 같은 프로토콜로 통신하여야 하는 경우가 있을 수 있다.
라우터 요약:
라우터는 IP 주소를 기반으로 패킷을 라우팅 테이블에 따라 최적의 경로로 전달한다. 즉, 네트워크 간의 경로를 결정(라우팅)한다.
브로드캐스트 도메인을 분리하고 각 브로드캐스트 도메인을 독립적으로 관리한다.
알아두기(게이트웨이)
게이트웨이는 일반적으로 다른 프로토콜의 두 네트워크 간에 프로토콜의 변환 기능을 수행하는 장치
즉, 이질적인 망을 연결시키는 개체(Entity)를 가리키는 일반적인 용어
TCP/IP에서 볼 때는 망간의 연결을 담당하는 '라우터'를 의미 하기도 하나, 주로, 상위계층(L4-L7)에서 상이한 프로토콜들 간의 특수한 변환을 담당하는 서버를 의미함
(계속)