> [!abstract] Introduction > 네트워크를 공부하다 보면 반드시 듣게 되는 용어 중 하나가 바로 OSI 7계층입니다. OSI 7계층은 도대체 무엇이고, 네트워크와 무슨 상관이 있는 걸까요? 이번 글에서는 OSI 7계층, 혹은 OSI 모형이라 불리는 개념에 대해 알아보겠습니다. # OSI 7계층 OSI 모형*Open Systems Interconnection Reference Model*이란 국제표준화기구*International Organization for Standardization, ISO*[^iso-abbreviation]에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 7개의 계층*layer*으로 나누었기에 OSI 7계층으로 불리기도 한다. 그런데 계층이 구체적으로 뭘까? 프로토콜과 계층은 무엇이고 왜 여러 개의 계층이 있는 걸까? 프로토콜이 무엇이고 계층이 왜 있는지부터 출발해 왜 OSI 모형과 같은 표준 모델이 컴퓨터 네트워크에 필요한지 알아보자. ## Protocol 네트워크에서 프로토콜*protocol*은 데이터의 서식을 지정하고 그에 맞게 데이터를 처리하기 위한 규칙의 모음집이다. 그래서 네트워크 안에서 컴퓨터가 사용하는 소프트웨어와 하드웨어가 서로 달라도 같은 프로토콜을 사용한다면 서로 통신할 수 있다. 네트워크 프로토콜을 설계할 때 고려해야 할 주요 기준으로는 신뢰성*reliability*, 자원의 분배*resource allocation*, 진화 가능성*evolvability*, 보안*security* 등이 있다. ### Reliability 네트워크의 프로토콜을 설계하는 기준 중 하나는 바로 신뢰성*reliability*이다. 여기서 신뢰성이란 네트워크 자체의 신뢰성, 즉 네트워크를 구성하는 컴퓨터들을 신뢰할 수 없을 때에도 네트워크가 올바르게 작동하는 정도다. 그래서 신뢰성이 높은 네트워크란 네트워크에 참여하고 있는 컴퓨터들을 신뢰할 수 없어도 올바르게 동작하는 네트워크다. 이런 네트워크에서는 오작동을 감지하고 제대로 작동할 때까지 재전송하거나 잘못 전송된 메시지를 교정하는 기능, 그리고 신뢰할 수 없는 경로를 피해 올바른 경로로 데이터가 이동하도록 자동으로 경로를 보정하는 라우팅*routing* 등이 포함된다. ### Resource Allocation 네트워크의 프로토콜을 설계하는 또다른 기준은 자원의 분배*resource allocation*다. 네트워크의 규모가 커질 수록 트래픽 정체나 주소 부족 혹은 트래픽 손실과 같은 문제가 커지기 쉬운데, 이로 인해 네트워크는 크기가 커져도 잘 작동할 수 있도록*scalable* 설계되어야 한다. 이를 위해 통계적 다중화*statistical multiplexing*를 통해 네트워크의 대역폭을 유동적으로 활용하거나 병목 현상을 막기 위해 피드백을 주고받는다. ### Evolvability 네트워크의 프로토콜을 설계할 때는 당장의 모습 뿐만 아니라 미래의 모습도 생각하면서 설계해야 한다. 시간이 지나면서 네트워크는 커지고 기존의 네트워크에 새로운 설계를 접목하기 때문에 확장에 용이한 구조로 설계되어야 하는데, 이렇게 네트워크를 설계하는 기준을 진화 가능성*evolvablity*이라 부른다. ### Security 네트워크 설계에서 빠질 수 없는 기준이 바로 보안*security*이다. 네트워크를 헤집는 여러 종류의 위협으로부터 네트워크를 지킬 필요가 있다. 이를 위해서는 기밀성*confidentiality*, 인증*authentication*, 그리고 통합*integrity*을 제공하는 기술이 필요하다. ## Layer 물론 위에서 말한 기준을 지키면서 네트워크를 설계하기란 쉬운 일이다. 컴퓨터 네트워크를 덜 복잡하게 설계하기 위해 대부분의 네트워크는 여러 계층*layer*이 층층이 쌓여 있는 구조로 설계된다. 계층의 수나 이름, 내용, 기능은 네트워크마다 다를 수 있지만 각 계층의 목적은 상위 계층이 하위 계층의 구조를 몰라도 하위 계층과 통신할 수 있도록 하는 것이다. ![[LayersProtocolsAndInterfaces.png]] 여기서 핵심은 기기 간 통신에서 데이터가 한 기기의 $n$번째 계층에서 다른 기기의 $n$번째 계층까지 바로 이동하는 일은 없다는 것이다. 대신 각 계층은 맨 밑에 도달할 때까지 데이터와 데이터에 대한 정보를 바로 아래에 있는 계층에게 전달한다.[^physical-medium] 계층과 계층 사이에는 인터페이스*interface*가 있어서 상위 계층이 하위 계층에 접근하는 수단을 정의한다. 덕분에 계층 하나를 전혀 다른 구현을 가진 계층으로 바꿔도 인터페이스만 유지된다면 상위 계층에서 접근할 때 큰 차이가 없다. 이러한 레이어와 프로토콜의 집합을 네트워크 아키텍처*network architecture*라 부르고, 특정 시스템에서 사용되는 프로토콜의 집합을 프로토콜 스택*protocol stack*이라 부른다. ## 구조 여기까지 오면 OSI 모델이 무엇인지 알 수 있을 것이다. OSI 모델은 다양한 계층에서 사용되는 프로토콜을 표준화하기 위한 모델이며, 총 7개의 계층으로 구성되어 있다. OSI 7계층의 간략한 구조는 아래와 같다. ![[OSIModelSimple.png]] 이 모델에서 사용자는 프로세스 뒤에 있고, 데이터는 End System 1에서 End System 2로 이동한다. 사용자가 프로세스를 통해 데이터를 입력하면, 그 데이터가 다음과 같이 최상위 계층에서 최하위 계층까지 내려간 다음 케이블 등의 물리적 전송 수단*Physical transmission medium*을 통해 데이터가 End system 2로 넘어가고, 이렇게 넘어간 데이터는 다시 End System 2의 최하위 계층부터 최상위 계층까지 올라가 프로세스에게 전달된다. 이제 OSI 모델의 구조를 조금 더 자세하게 살펴보자. OSI 모델의 각 계층은 추상화가 새로 필요할 때마다 만들어지며, 각 계층은 중복되지 않고 그 수가 너무 많지 않도록 잘 정의된 함수들을 수행해야 한다. 각 계층의 함수는 국제적으로 표준화된 프로토콜을 수행하며 계층 간의 경계는 인터페이스의 정보 흐름을 최소화하는 방향으로 정해진다. ![[OSIModel.png]] 현재로서는 7개의 계층이 있으며 각각 물리*Physical*, 데이터 링크*Data link*, 네트워크*Network*, 트랜스포트*Transport*, 세션*Session*, 프레젠테이션*Presentation*, 그리고 애플리케이션*Application* 계층이라 불린다. 각 계층은 추상화의 정도를 나타내며, 각 계층마다 사용하는 프로토콜, 그리고 교환하는 데이터의 단위가 다르다. ### 하위 계층과 상위 계층 OSI 7계층은 다시 두 가지 계층으로 나눌 수 있는데, 1~4계층, 즉 물리-데이터 링크-네트워크-트랜스포트 계층을 합쳐 **데이터 플로 계층***Data Flow Layer* 혹은 **하위 계층***Lower Layer*이라 부르고, 나머지 세션-프레젠테이션-애플리케이션 계층을 합쳐 **애플리케이션 계층***Application Layer* 혹은 **상위 계층***Upper Layer*이라 부른다. 데이터 플로 계층은 데이터를 상대방에게 잘 전달하는 역할을 가지고 있으며, 애플리케이션 계층은 데이터 플로 계층을 고려하지 않고 데이터를 표현하는 데 초점을 맞춘다. # Encapsulation & Decapsulation 그런데 여기서 궁금한 포인트가 하나 더 있을 것이다. 데이터의 단위라니, 그게 무슨 소리일까? 앞서 보았듯이 OSI 모델에서의 통신 과정은 기본적으로 계층에서 계층으로 데이터를 옮기는 것이다. 이때 현대 네트워크는 데이터를 **패킷***packet*이라는 단위로 쪼개어 보내는데, 이런 기법으로 하나의 통신이 네트워크 전체를 점유하지 않고 동시에 여러 단말이 통신할 수 있도록 해준다. 그렇다면 데이터를 패킷으로 쪼개는 일이 여러 단말이 통신할 수 있는 상황으로 연결되는 이유는 무엇일까? ![[OsiReferenceModel.png]] 원본 데이터를 하나의 큰 덩어리라고 생각해보자. 그런데 네트워크를 통해 이 데이터 전체를 전송하는 일은 여러모로 좋지 않다. 우선 데이터의 크기가 네트워크가 한번에 보낼 수 있는 양을 넘어설 수가 없기 때문에 데이터의 크기에 제약이 따른다. 그리고 데이터를 한꺼번에 보냈다가 중간에 손상되거나 유실되기라도 하면 데이터 전체를 다시 보내야 하고, 무엇보다 다른 단말이 제대로 네트워크를 사용하지 못한다. 그래서 데이터를 주는 쪽에서 데이터 데이터를 받는 쪽에서는 패킷을 다시 큰 데이터 형태로 결합해 사용한다. 애플리케이션 계층에서 물리 계층까지 패킷을 내려보내면서 패킷에 **헤더***header*라 불리는 정보를 덧붙이게 되는데, 이 과정을 **인캡슐레이션***Encapsulation*이라 부른다. 데이터를 받는 측에서는 이렇게 인캡슐레이션 과정을 거친 데이터를 역순으로 해체하게 되는데, 이 과정을 **디캡슐레이션***Decapsulation*이라 부른다. 디캡슐레이션 과정에서는 데이터에 붙어있는 헤더를 해체하며 헤더에 적힌 정보를 토대로 패킷을 재조합한다. # OSI 모델과 TCP/IP 모델의 관계 OSI 모델 이상으로 언급되는 표준 네트워크 모델이 있는데 바로 TCP/IP 모델이다. TCP/IP 모델은 OSI 모델과 아주 중요한 차이점을 가지는데, OSI 모델이 기대와 달리 실제 네트워크에 구현되는 단계까지는 가지 못했던 반면 TCP/IP 모델은 현대 네트워크에 실제로 적용되어 있는 모델이다. 둘을 비교하면 아래와 같다. ![[OSIAndTCPIP.png]] TCP/IP 모델은 OSI 모델을 계승한다. TCP/IP 모델에는 링크*Link*, 인터넷*Internet*, 트랜스포트*Transport*, 애플리케이션*Application* 계층 밖에 없으며 컨셉의 구현도 상대적으로 약하고 나머지 계층은 모델에도 없지만 오늘날 네트워크 설계에서 사실상의 표준으로 작동하고 있다. 그렇다면 OSI 모델은 왜 TCP/IP 모델에 밀려난 것일까? ## Bad Timing 일단 타이밍이 좋지 않았다. 표준 모델이 정립되는 시기는 그 모델의 성공 여부에서 아주 핵심적인 요인인데, 그 이유는 아래의 그래프를 통해 확인할 수 있다. 아래 그래프는 새로운 연구 주제에 대한 활동과 시간의 관계를 나타낸 그래프인데, '연구'*Research*와 '막대한 투자'*Billion dollar investment*라는 두가지 봉우리가 있고 그 사이의 골짜기에 '표준'*Standards*이라고 적혀있는 것을 볼 수 있다. 보통 새로운 연구 주제가 등장하면 연구자들이 시간과 노력을 쏟아부어 연구를 하고 그 흐름이 잠잠해지고 나면 기업들이 이 연구 성과를 발견하고 막대한 돈을 쏟아붓기 시작한다. 표준 모델이 성공하기 위해서는 이 두 봉우리 사이의 아주 적절한 시간대에 선언되어야 한다. ![[TheApocalypseOfTheTwoElephants.png]] 충분한 연구 성과가 나오기도 전에 표준이 발표되어 버리면 실제 기술에 대한 이해도가 떨어지는 나쁜 표준이 되고, 너무 늦게 발표되어 버리면 기업들이 이미 알아서 자기들의 표준을 정립하기 위해 투자를 하고 있는 상황이 되어버려 표준이 되지 못한다. OSI 모델은 후자에 해당하는데, OSI 모델이 발표될 즈음에는 이미 연구 기관 등에서 TCP/IP 프로토콜들이 널리 사용되고 있었다. 당연히 이미 꾸려진 생태계를 벗어날 이유는 없었고, 그렇게 OSI 모델은 실패했다. ## Bad Design OSI 모델이 실패한 두번째 이유는 모델과 프로토콜 모두 실패한 설계였기 때문이다. 계층의 수는 너무 많았고, 각 계층이 균형 잡혀 있는 것도 아니었으며, 구현하기도 어렵고 운영하기도 어려웠다. 여기에 더해 주소 지정, 오류 제어, 흐름 제어와 같은 기술들이 각 계층에 중복되어 등장했으니, OSI 모델은 실제로는 매력적인 요소가 아니었다. ## Bad Implementations OSI 모델은 그 자체로 너무 복잡하고 거대한 모델이었다. 당연히 초기 구현이 잘 될 리가 없었고, 이는 곧 OSI 모델을 따르는 프로토콜 기술들에 대한 안좋은 이미지로 이어졌다. 한번 이미지가 생기면 바뀌기 힘든 법, 버클리 유닉스의 일부로 처음 등장했고[^tcp-ip-performance] 꽤 좋은 성능을 보여준 TCP/IP에 밀릴 수밖에 없었다. # However...! 그럼에도 불구하고 OSI 모델이 지금까지 많이 언급되는 이유는 TCP/IP 모델이 OSI 모델의 가장 중요한 구조인 프로토콜 레이어링*Protocol Layering*을 계승하기 때문이다. 그 덕분에 OSI 모델은 지금까지도 네트워크를 설명할 때 매우 유용한 교보재로 남아있으며, 실제 프로토콜과는 별개로 네트워크의 전체적인 구조를 이해하는 데 필요한 관문으로 남아있다. --- # 출처 - Tanenbaum, A.S., Feamster, N. and Wetherall, D.J. (2021) _Computer Networks_. 6th edn. Pearson. [^iso-abbreviation]: 그 어떤 언어에서도 두문자를 줄여 ISO가 나오지는 않지만, 그리스어로 "평등함"을 뜻하는 ίσος(ísos, 이소스라고 발음한다)를 가져와 전세계 공통 약칭을 ISO로 정했다. [^physical-medium]: 물론 그림상 맨 밑을 의미한다. 실제로는 물리적 매개체*physical medium*바로 위의 계층이다. [^tcp-ip-performance]: 성능도 나쁘지 않은데 무료였다는 소리다. 쓰지 않을 이유가 없다.