프로토콜이란 송신자와 수신자 및 모든 중간 장치가 효과적으로 통신하기 위해 따라야 하는 규칙들의 집합이다. 통신이 복잡해질 때, 프로토콜을 여러 계층으로 나누어 구성하는 것이 효율적이다.
Protocol Layering (프로토콜 계층화) : 통신 과정을 여러 단계로 나누어 각 단계에서 특정한 역할과 책임을 갖는다. 이는 통신 과정을 단순화하고, 각 계층이 독립적으로 작업을 수행하도록 한다. 이를 통해 전체 시스템의 효울성 증가, 안정성 보장 등의 효과를 기대할 수 있다.
1). 프로토콜 계층화의 장점
1-1). 서비스와 구현의 분리 : 각 계층은 독립적으로 작동하며, 상위 계층은 하위 계층이
어떻게 구현되었는지에 대해 걱정할 필요 없이 하위 계층으로부터 받는 서비스를 그대로 활용한다.
이런 이유로 프로토콜 시스템의 특정 계층만 교체, 업데이트하는 것이 가능하다 (모듈성).
1-2). 중간 시스템의 단순화 : 네트워크에서 데이터는 송신자에서 수신자까지 직접 전달되는 것이 아닐 수 있다.
데이터는 여러 중간 시스템을 거쳐갈 수 있는데, 계층화가 없다면 이 중간 시스템들 모두가 네트워크의 모든 시스템을 구현해야한다.
하지만 계층화를 통해, 이런 중간 시스템들은 필요한 계층만을 구현할 수 있다. 이는 전체 통신 시스템의 경제성, 효율성을 증가시킨다.
1-3). 유연성과 확장성 : 서비스와 구현의 분리는 시스템의 유연성과 확장성을 향상시킨다.
특정 계층의 기술이나 알고리즘이 교체되어야 할 때, 해당 계층만 교체하거나 수정하면 된다.
이를 통해 전체 시스템의 나머지 부분에 영향을 최소화 하면서 필요한 업데이트만을 신속하게 수행할 수 있다.
2). 프로토콜 계층화의 단점
2-1). 계층화의 복잡성 : 일부 경우에는, 시스템을 단일 계층으로 구성하는 것이
더 단순하고 관리하기 쉬울 수 있다. 계층화는 설계와 구현을 더 복잡하게 만든다.
2-2). 계층간 의존성 : 계층화된 시스템은 특정 계층에 문제가 발생했을 때, 해당 계층만 수정하거나 교체할 수 있다.
그러나, 이런 구조 자체가 잘못 설계되거나 구현된 경우, 한 계층의 문제가 전체 시스템의 오류로 이어질 수 있다.
이런 경우 전체 시스템의 교체가 필요하고, 계층간의 의존성이 강할수록 이런 상황이 발생하기 쉽다.
프로토콜 계층화는 모듈성을 통해 통신 과정을 단순화하고 유연성과 확장성, 경제적인 부분에서 장점이 있지만, 설계와 구현이 어렵고 구조가 잘못 설계되어 있을 때는 전체 시스템 자체에 오류가 발생할 수 있다.
프로토콜 계층 간의 논리적 연결에 대해 생각해보자.
계층 간 통신 : 실제 물리적 연결이 없어도, 각 계층은 서로 정보를 교환할 수 있도록 논리적으로 연결되어 있다.
계층 간 논리적 연결 : 예를 들어, 송신자의 Transport 계층과 수신자의 Transport 계층은 서로 물리적으로 연결되어 있지 않다. 하지만 논리적 연결 관점에선 직접적으로 연결되어 있다. 즉, 통신의 시작과 끝은 논리적으로 연결 되어 있다.
TCP/IP 프로토콜은 인터넷에서 사용되는 핵심 프로토콜의 집합이다. TCP/IP는 현재 네트워크 통신의 표준이다. 이들은 계층적 구조를 가지며, 각 계층은 상호 작용하는 모듈로 구성되어 있어 특정 기능을 제공한다. TCP/IP는 네트워크 통신 과정에서 데이터를 어떻게 포장, 주소 지정, 전송, 라우팅하는지 정의한다.
TCP (Transmission Control Protocol) : TCP는 신뢰성 있는 데이터 전송을 목표하는 프로토콜이다. 송신지의 TCP는 데이터를 여러 패킷으로 나누어 전송하며, 목적지의 TCP는 받은 패킷을 재조립하여 데이터를 복원한다.
IP (Internet Protocol) : IP는 패킷이 올바른 목적지에 도달할 수 있도록 주소 지정과 라우팅을 담당하는 프로토콜이다. 각 장치는 고유한 IP주소를 가지며, IP는 이 주소를 사용하여 데이터 패킷을 올바른 목적지로 전송한다.
TCP/IP 프로토콜 계층이 두 호스트 간의 통신에 어떻게 관여하는지 보여주기 위해, 예시를 들어보자.
Physical Layer (물리 계층) : 실제 데이터의 전송 및 수신을 담당함. 데이터의 전송 및 수신은 Bit 단위로 이루어진다.
1). 이 계층은 네트워크의 전기적, 광학적, 물리적 구성 요소를 포함한다.
2). 구조화되지 않은 원시 비트 스트림 데이터를 물리 매체를 통해 송수신하는 방법을 제어함.
3). 상위 계층으로부터 캡슐화되어 내려온 신호를 최종적으로 운반한다.
Data Link Layer (데이터 링크 계층)
1). 이 계층은 데이터그램을 받아 링크를 통해 이동시키는 역할.
2). 유/무선의 LAN, WAN 등 다양한 링크 유형을 지원한다.
3). 데이터그램을 프레임이라는 패킷으로 캡슐화함.
4). 일부 링크 계층 프로토콜은 오류 탐지 및 수정 기능을 제공함.
Network Layer (네트워크 계층) : 데이터 패킷의 라우팅과 주소 지정을 담당함. (IP 프로토콜이 여기에 속함)
1). 출발지 컴퓨터와 목적지 컴퓨터 간의 연결을 생성한다.
2). 호스트 간의 통신 과정에서 패킷을 최적의 경로로 라우팅한다.
3). 경로에 있는 라우터들은 각 패킷에 대한 최적의 경로를 선택한다.
Transport Layer (전송 계층) : 데이터의 신뢰성 있는 전송을 담당. (TCP, UDP 프로토콜이 여기에 속함)
1). 호스트들의 전송 계층 간 논리적 연결은 end-to-end
2). 각 애플리케이션 프로그램은 자신의 요구 사항에 가장 잘 맞는 프로토콜을 사용
3). 오류 제어 및 흐름 제어 기능을 제공
Application Layer (응용 계층) : 사용자가 직접적으로 상호작용하는 응용 프로그램 (HTTP, FTP, SMTP 등)
1). 호스트들의 응용 계층 간 논리적 연결은 end-to-end
2). 통신은 두 프로세스(이 계층에서 실행되는 송신자와 수신자의 두 프로그램)간에 이루어짐.
3). 프로세스 간 통신을 담당하며, 하나의 프로세스가 다른 프로세스에게 요청을 보내고 응답을 받는다.
** 논리적 연결이 end-to-end라는 뜻은, 송신자의 해당 계층과 수신자의 해당 계층이 논리적으로 직접 연결되어있다는 뜻이다.
즉, 송신자와 수신자간의 해당 계층은 직접적으로 상호작용한다.
Encapsulation (캡슐화) : 데이터 송신 과정에서 이루어진다. 데이터를 전송하기 위해 각 계층에서 해당 계층의 헤더를 추가하는 과정이다. 이 헤더에는 해당 계층에서 필요한 제어 정보와 주소 정보 등이 포함된다. 각 계층은 자신의 헤더를 데이터에 추가하여 다음 계층으로 전달한다.
Decapsulation (역캡슐화) : 데이터 수신 과정에서 이루어진다. 송신측에서 추가한 헤더 정보를 해당하는 각 계층에서 제거하며 원래의 데이터로 복원하는 과정이다. 데이터가 수신 측의 물리 계층에 도착하면, 데이터는 계층을 타고 하위 계층에서 상위 계층으로 올라간다. 이때 각 계층은 자신의 헤더를 해석하고 필요한 처리를 수행한 뒤 다음 계층으로 데이터를 전달한다.
Addressing (주소 지정) : 데이터가 올바른 목적지로 전송되고, 송신자와 수신자 간에 효과적인 통신을 하기 위해 출발지와 목적지에 대한 주소를 지정하는 과정이다. 즉, 어떤 데이터가 어떤 계층 혹은 어떤 장치에 도착해야되는지를 지정해주는 것이다.
1). 논리적 통신 : 데이터를 전송할 때, 여러 계층을 거치게 된다. 논리적 통신이란, 이런 여러 계층 간의 데이터 전송 과정을 의미한다.
2). 주소의 필요성 : 어떤 통신에서든, 두 당사자 간의 통신을 위해서는 소스 주소(보내는 쪽의 주소)와 목적지 주소가 필요하다.
3). 주소 쌍 : 물리 계층은 데이터를 비트 단위로 통신하므로, 물리 계층을 제외한 나머지 계층의 주소가 필요하다.
3-1). 데이터 링크 계층 : MAC 주소를 사용. MAC 주소는 네트워크
인터페이스 카드(NIC)에 할당된 고유 식별자이다.
3-2). 네트워크 계층 : IP주소를 사용. 장치를 네트워크 상에서 식별하는 데 사용.
3-3). 전송 계층 : 포트 번호를 사용. 이는 특정 프로세스를 식별하는 데 사용.
Multiplexing : 하나의 계층에서 여러 상위 계층 프로토콜로부터 받은 데이터 패킷을 캡슐화 하는 과정을 의미한다.
Demultiplexing : 목적지에서 받은 데이터 패킷을 적절한 상위 계층 프로토콜로 분배하는 과정을 의미한다.
Open Systems Interconnection(OSI) 모델은 다양한 컴퓨팅 시스템 간의 상호 연결을 위해 고안된 모델이다. OSI 모델의 주요 목적은 서로 다른 시스템 간의 통신 과정에서 기본 하드웨어의 로직이나 구조의 변경 없이 통신을 원활하게 하는 것이다. 이를 위해 OSI 모델은 네트워크 통신 과정을 7개 계층으로 나누어, 각 계층이 특정 기능을 담당하도록 설계되었다.
Physical Layer : 데이터 전송을 위한 물리적 매체와 전기적 신호를 다룬다.
Data Link Layer : 네트워크 장치 간의 신뢰할 수 있는 데이터 전송을 보장한다.
Network Layer : 다른 네트워크 간의 데이터 전송 및 라우팅을 담당한다.
Transport Layer : 두 호스트 간의 신뢰성 있는 데이터 전송을 관리한다.
Session Layer : 통신 세션을 설정, 관리, 종료하는 역할을 한다. 세션 관리와 인증, 권한 부여가 이루어진다.
Presentation Layer : 데이터의 표현 형식을 관리하며, 암호화와 압축 등의 데이터 변환 작업을 수행한다.
Application Layer : 사용자와 가장 가까운 계층으로, 사용자가 네트워크 서비스에 접근할 수 있도록 한다.
OSI vs TCP/IP
1). OSI 모델은 7계층 모델이며, TCP/IP는 4계층 모델(혹은 5계층)이다. TCP/IP의 일부 계층은 OSI 모델의 몇몇 계층을 통합한 형태이다.
2). OSI에선 세션 계층이 통신 세션을 관리하고, 표현 계층이 데이터 형식 변환, 암호화 및 압축을 담당하지만, TCP/IP에서는 이런 기능이 응용 프로그램에 의해 처리되거나, 응용 계층과 전송 계층에서 처리된다.
3). OSI모델에서 어플리케이션, 표현, 세션 계층은 사용자와 직접적인 상호 작용에 중점을 두지만, TCP/IP 모델은 위 OSI의 3개 계층을 어플리케이션 계층에서 통합 처리한다. 이는 응용 프로그램이 네트워크 서비스를 직접 처리하고, 필요한 세션 관리 및 데이터 변환 기능을 내장할 수 있다는 것을 의미한다.
OSI 모델이 성공하지 못한 이유
1). OSI 모델이 완성되었을 때, TCP/IP는 이미 광범위하게 사용되고 있었다. 이를 OSI 모델로 변경하는 것은 막대한 비용과 노력이 필요했기 때문에, 이미 구축된 시스템과 네트워크를 변경하는 것은 어려운 일이었다.
2). OSI 모델은 이론적으로 잘 구성되어 있지만, 실제 구현에 있어서 표현 계층과 세션 계층이 명확하게 정의되지 않았다. 이 계층들에서 제공해야 할 서비스는 명시되어 있었지만, 실제 프로토콜, 상세한 설명, 해당 소프트웨어는 개발되지 않았다. 따라서 실질적인 적용에 어려움이 있었다.
3). OSI 모델을 구현한 일부 조직에서는 TCP/IP 프로토콜에 비해 크게 개선된 성능을 보이지 못했다. 인터넷 초기 단계에서는 효율성과 신뢰성이 중요한 요소였고, OSI 모델은 이러한 요구를 충족시키지 못했다.