- Published on
OSI 모델에 대해서 : 네트워크 - 2
- Authors
Tags
Previous Article
Next Article
Overview
인터넷이 만들어졌으나, 아직 넘어야할 산이 있습니다.
근본적으로 인터넷은 서로 다른 기술, 지리적-정치적 환경에서 만들어진 네트워크들을 연결해 만든 거대한 네트워크입니다.
기존의 작은 네트워크들은 각각의 환경에서 각각의 언어로 통신해왔습니다.
그런데 인터넷은 이러한 모든 네트워크를 아우르는 네트워크이니 모든 네트워크에서 범용적으로 통할 수 있는 언어를 만들어야만 했습니다.
우리는 이러한 언어를 통신 프로토콜이라 부르기로 했습니다.
우리가 흔히 접하고 듣는 HTTP, IP, WIFI, LTE, 5G 등등 많은 기술들도 사실은 인터넷 상의 표준 언어로 인정되어 오늘날 우리가 접할 수 있는 기술들입니다.
그런데 조금 신기한 점이 있습니다.
우리는 핸드폰이나 노트북으로 인터넷(브라우저)에 접속할 때 핸드폰 요금제를 통해 제공받는 lte나 5G를 쓰기도 하고 wifi를 쓰기도 합니다.
그런데 우리가 인터넷에 접속할 때는 약간의 속도 외에는 아무런 차이를 느끼지 못합니다.
분명 뭔가 달라지긴 했는데, 실제 사용 경험은 변함이 없는 겁니다.
이것이 어떻게 가능한 것일까요? WIFI를 쓸 때와 LTE를 쓸 때 요금을 쓰는 것 말고는 다른 점이 없는 걸까요?
복잡한 시스템을 설계할 때는 흔히 계층화를 하곤 합니다.
인터넷도 이러한 계층화를 통해 설계되었는데요.
OSI model은 인터넷의 계층화가 어떻게 이루어져야 하는지 개념적으로 설계한 표준 모델입니다.
OSI에 대해서 좀 더 자세히 알아보도록 하겠습니다.
OSI Architecture
Open System Interconnection Reference Model

OSI 모델은 인터넷의 통신을 7개의 계층으로 나누어 상이한 시스템이 서로 통신할 수 있는 개념적 표준을 제공합니다.
각 계층은 하위 계층을 통해 인터페이스를 제공받고, 다시 상위 계층에 인터페이스를 제공합니다.
이를 대략적으로 요약하면 아래와 같습니다.
- 데이터를 어떻게 전송할 것인가?
- 상대방을 어떻게 식별할 것인가?
- 데이터를 어떻게 표현할 것인가?
사실 OSI 모델은 인터넷의 설계와 구현이 어느정도 완료된 이후 나온 개념이라 실제 인터넷과 완벽하게 일치하지는 않습니다.
그러나 OSI 모델은 계층을 이용해 시스템에 대한 이해에 분명히 큰 도움을 줍니다.
또 OSI 모델 이후 인터넷의 발전은 OSI 모델을 준수하려 노력하기 때문에 OSI 모델은 꼭 공부해야할 개념입니다.
Physical Layer
OSI 7계층 가장 하위의 계층은 물리계층입니다.
물리계층은 한 마디로 포트와 포트의 연결에 대해서 담당한다고 말하면 좋을 것 같습니다.
포트는 신호를 주고 받는 출입구인데요.
물리계층은 이러한 포트 사이에서 어떤 매체를 통해 통신할 것인지, 0과 1은 어떻게 식별할 것인지 등을 책임지는 계층입니다.
따라서 이를 도식화하면 아래와 같습니다.
bitstream(010111101...) -> 물리계층 -> 아날로그 신호 -> 물리계층 -> bitstream
이 계층을 통해 어떤 디지털 데이터를 포트를 통해 연결된 상대방 컴퓨터로 전송하는 것이 보장됩니다.
물리계층은 왜 있는 걸까요?
만약 어떤 두 컴퓨터가 케이블로 연결되어 전기신호를 통해 통신한다고 생각해봅시다.
두 컴퓨터는 0과 1을 어떻게 주고받을까요?

그런데 만약 A 포트는 전압 5V일 때 1, 0V일 때 0으로 받아들이는데, B 포트는 반대로 받아들일 수도 있지 않을까요?
혹은 A포트는 1초 주기로 신호를 표현하여 101을 표현했는데, B포트에선 0.5초 간격으로 신호를 인식하여 110011로 데이터를 인식할 수도 있습니다.
혹은 어떤 포트는 1을 위해 아래와 같은 신호를 발생시킬지도 모릅니다.
또 언제부터 들어온 신호를 데이터라 볼 수 있을까요?

결국 신호라는 것을 서로가 어떻게 받아들이는지는 신호의 의미를 어떻게 정의하는지에 따라서 달라지는 부분입니다.
또한 신호가 실제 에너지의 형태로 표현될 때 물리적 특성도 고려되어야 할 겁니다.
물리 계층은 이러한 물리적 매개체를 통해 데이터를 어떻게 전송하고 표현할 것인지에 대해서 인터페이스를 정의하고 물리적 연결, 유지, 종료를 관리하는 계층입니다.
따라서 만약 두 포트가 같은 물리계층 프로토콜을 사용해 통신했다면 두 컴퓨터가 어떤 아날로그 신호를 주고받아 서로 같은 디지털 신호를 공유했음을 보장받을 수가 있습니다.
하나의 계층이 자신의 상위 계층에 전달하는 데이터의 이름을 PDU(Protocol Data Unit)이라 하는데요.
물리 계층의 경우 PDU는 bit 혹은 symbol이 됩니다.
Data Link Layer
하위 계층을 통해 직접적으로 연결된 장치와 장치 간에 비트를 주고받는 인터페이스를 제공받았습니다.
이제 데이터링크 계층은 인접한 장치들이 서로를 식별하고 신뢰성 있는 데이터 전송을 할 수 있도록 만드는 역할을 하는데요.
여기서 인접한 장치를 어떻게 정의해야 할까요?
사실 굉장히 모호한 개념이라 고민을 많이 했는데요.
저는 이것이 collision domain을 공유하는 둘 이상의 장치의 관계라고 생각합니다.
collision domain은 해당 영역을 공유하는 둘 이상의 장치가 동시에 데이터를 전송할 경우 데이터가 손실되는 영역을 말합니다.
예컨데 하나의 케이블로 연결된 두 컴퓨터가 있다면,
둘 중 하나의 컴퓨터가 데이터를 케이블로 보내고 있을 때, 나머지 컴퓨터는 동시에 데이터를 보낼 수 없습니다.
채널에 이미 상대방의 데이터가 송신 중이니까요.
여기선 두 컴퓨터만 얘기했으나 실제론 다수의 컴퓨터가 collision domain을 공유할 수 있습니다.
예컨데 허브라는 장치는 다수의 컴퓨터를 중앙에서 연결한 뒤, 한 컴퓨터가 보낸 신호가 약해지기 전 다시 한 번 재생성하여 다른 컴퓨터로 전달해주는 장치인데요.
이 허브는 그 동작이 매우 단순하여 만약 어떤 컴퓨터의 데이터를 받으면, 그 데이터를 나머지 연결된 모든 컴퓨터에게 분배합니다.
따라서 허브에 연결된 컴퓨터는 모두 collision domain을 공유하고 있는 것이지요.
데이터링크 계층인 이러한 영역에 연결된 컴퓨터들 사이에서 데이터의 송수신을 동기화하여 collision domain에 의해 데이터가 손실되는 걸 예방하는 역할을 수행합니다.
또 collision domain에 의해, 혹은 물리계층의 매체 특성에 의한 노이즈 등으로 손상된 데이터를 검출하고 재전송하는 역할도 수행합니다.
이러한 collision domain은 데이터의 병목현상을 만드는데요.
이 영역을 공유하는 통신이 동시에 일어나면 안되기 때문입니다.
충돌을 막기 위해선 어떻게 해야할까요?
아까 허브의 예에서는 모든 컴퓨터의 모든 통신이 collision domain을 공유했습니다.
목적지를 지정하여 데이터를 목적지로만 보낼 수 있다면 충돌을 줄일 수 있을 겁니다.
이런 동작을 도와주는 장치로 bridge와 switch가 등장합니다.

bridge와 switch 모두 유사하게 각각의 포트에서 일어나는 통신이 다른 포트의 통신에 영향을 주지 않습니다.
따라서 각 포트마다 각각의 collision domain만을 공유하게 됩니다.
대신 어떤 포트에 속한 컴퓨터가 다른 포트에 통신을 시도할 경우에만 두 포트가 하나의 collision domain에 속하게 됩니다.
조금 다른 얘기로 세었는데, 중요한 점은 목적지를 지정한다는 점입니다.
이러한 목적지를 지정하기 위해 각 장치마다 고유한 주소를 부여하는데
이것이 바로 MAC 주소입니다.
따라서 정리하면
데이터링크 계층은 하나의 collision domain을 공유하는 장치들(네트워크) 간의 통신에서 신뢰성을 확보하여 상위 계층에 인터페이스를 제공하는 책임을 집니다.
Network Layer
이제 작은 네트워크에서 물리적 특성을 고려해 서로를 식별하고 신뢰성 있는 통신을 할 수 있는 인터페이스는 모두 끝났습니다.
이제 네트워크 계층부터는 좀 더 광범위하고 추상적인 네트워크의 통신이 가능하도록 설계하는 단계입니다.
데이터링크 계층은 장치와 장치 간의 물리적 연결에서 신뢰성있는 통신을 제공해주었습니다.
네트워크 계층은 서로 다른 네트워크에 속한 두 장치가 서로 통신이 가능하도록 하는 역할을 담당하는데요.
이를 위해선 우선 서로를 식별할 수 있는 "주소"가 필요할 것 입니다.
그리고 만약 다른 네트워크에 속한 장치라면 우선 데이터를 그 네트워크로 보낼 수 있는 경로를 알아야 할 것 입니다.
데이터링크 계층에서 서로를 식별하기 위해 MAC 주소를 사용했었는데요.
이 MAC 주소는 각 장치마다 고유하게 부여되는 값이기에 서로 다른 네트워크에 있는 장치도 겹칠 걱정은 하지 않아도 괜찮습니다.
따라서 네트워크 계층에서도 MAC 주소를 사용할까요?
이론적으론 그래도 괜찮을 것 같지만, 실제론 네트워크 계층에서 사용하기 위한 주소를 따로 정의합니다.
이 주소는 MAC 주소와 달리 논리적인 주소의 개념인데요.
MAC 주소는 이를테면 주민등록번호와 비슷하게 부여됩니다.
제조사 번호, 모델번호 등으로 구성하여 장치마다 고유하게 식별할 수 있도록 합니다.
네트워크 계층은 대신 일종의 도로명 주소를 따로 부여하는데요.
철수의 주민등록번호만 가지고 철수를 찾는 것은 전국을 돌아다니며 전국민을 일일히 뒤져봐야 하는 일이겠지만, 도로명 주소를 알고 있으면 일련의 규칙에 따라 서울 -> 무슨 구 -> 무슨 동 -> 몇 번째 길목 이런 식으로 철수가 있는 곳을 찾아 갈 수 있겠죠.
네트워크 계층에서는 이러한 이점을 누리고자, 네트워크마다 어떤 주소를 부여합니다.
이제 어떤 장치의 네트워크 주소를 보고 일단 그 네트워크로 찾아가면, 장치를 찾는 것은 어렵지 않은 일이 되겠죠(데이터링크 계층에 의해 한 네트워크 안에서 서로 통신하는 인터페이스를 제공받으니까요!).
따라서 네트워크 계층은 네트워크 간의 경로를 설정하는 일도 책임집니다.
정리하면 네트워크 계층은 네트워크와 네트워크의 연결을 담당하여 네트워크(물리적 환경에)에 상관없는 통신 환경을 제공하는 계층이라고 할 수 있습니다.
Transport Layer
네트워크 계층을 통해 인터넷의 환경이 거의 완성됩니다.
어느 네트워크에 속해있건, 인터넷을 통해 서로 통신할 수 있는 환경이 보장되기 때문입니다.
그러나 네트워크 계층은 장치와 장치 간의 통신 채널만을 제공합니다.
현실에서 인터넷에 연결하는 일은 사실 어플리케이션(ex. 브라우저)을 통해 하는 것이 당연한데 말이죠.
전송 계층은 하위의 네트워크 계층으로부터의 통신을 상위의 어플리케이션에 연결하는 역할을 수행합니다.
따라서 진정한 의미의 end-to-end 통신이 이 계층에서 수립됩니다.
또한 네트워크 계층에서 부족했던 부분을 채우기 위해 연결 지향, 혼잡 제어, 흐름 제어 등 다양한 기능을 수행하게 됩니다.
Session Layer & Presentation Layer & Application Layer
남은 5, 6, 7 계층인 세션, 표현, 응용 계층인데요.
이 세 계층을 묶은 이유는 명확한 정의가 저로선 조금 힘들어서 입니다.
대략적으로 얘기해보면
세션 계층은 하위 계층으로부터 연결을 추상화하여 제공하고
표현 계층은 압축, 암호화 등 데이터의 표현에 대한 인터페이스를 제공합니다.
마지막으로 응용 계층은 유저와 가장 가까운 계층으로 실질적인 응용 서비스를 위한 다양한 인터페이스(HTTP, FTP, SSH 등)을 제공하게 됩니다.
OSI 모델은 네트워크 설계를 7개의 계층으로 나누어 체계적이고 범용적으로 사용될 수 있는 표준을 제공하는 개념적 모델입니다.
그러나 어떤 부분에선 명확하지 않고 모호한 부분도 많으며
현실과 완벽히 부합되지 않는 부분도 많이 있습니다.
어떤 프로토콜이 몇 계층인가?의 물음에서 명확히 답이 나오는 경우도 있지만 아닌 경우도 많이 있구요.
그래서 TCP/IP 기반으로 네트워크를 4계층으로 설명하는 모델도 있는데요.
OSI 1, 2 계층을 묶어 연결 계층.
3계층을 인터넷 계층(이름만 다릅니다.)
4계층을 전송계층
5,6,7 계층을 묶어서 응용 계층으로 표현하는 모델입니다.
사실 현실의 인터넷을 이해하는 것에 있어선 TCP/IP 모델이 더 도움이 될 것 같습니다.
그럼에도 OSI 모델의 세분화된 계층화는 앞으로의 네트워크 발전에 있어 중요한 가이드가 될 것이라 생각합니다.
또한 나중에 얘기할 TCP / IP 등 프로토콜의 이해에 있어서도 상당히 도움이 된다고 생각합니다.
마지막으로 계층화에 관한 몇 가지 얘기를 더하고 글을 끝내겠습니다.
Encapsulation and Decapsulation
Encapsulation:
각 계층에서 상위 계층의 데이터는 하위 계층에 의해 감싸질 데이터로 취급됩니다..Decapsulation:
수신 호스트에선 수신 데이터의 각 헤더를 벗겨내며 각 계층의 역할을 수행하고 최종적으로 Application으로 도달하게 됩니다.

Layer Interface

Component | Definition |
---|---|
SDU | N + 1 계층으로부터 도달하는 유저데이터. |
PCI | 다른 peer layer로 보내질 Header, Trailer. 해당 계층에서 수행할 기능(error detection, address 식별 등)에 대해 지시한다. |
PDU | SDU + PCI |
ICI | N에서 N-1 계층으로 이동할 임시 파라미터 |
IDU | 계층 간에 이동할 전체 정보 |
물리 계층의 PDU는 bit or symbol, 데이터링크 계층은 frame, network 계층은 packet 혹은 datagram, 전송 계층은 segment, 더 상위 계층은 데이터 혹은 메세지 등으로 지칭합니다.