해당 주제를 선택한 이유
OSI 7계층이 나눠진 이유는?
⇒ 입사하고 싶은 모 기업의 실제 면접 질문

위 면접 질문의 답을 먼저 공개하자면 다음과 같다.
OSI 7 계층이 나눠진 이유는 통신이 일어나는 과정을 단계별로 알 수 있고, 특정한 곳에 이상이 생기면 그 단계만 수정할 수 있기 때문이다.
이 답을 외울 수도 있지만, 이번 기회에 OSI 7 계층이 무엇인지 이해하고 넘어가보자!
0. OSI 7 Layer란?
위키백과에는 다음과 같이 서술되어 있다.
OSI 모형(Open Systems Interconnection Reference Model)은 국제표준화기구(ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. 일반적으로 OSI 7 계층이라고 한다.
이것만으로는 쉽게 감이 오지 않는다.
각각의 계층이 무엇이며 하는 일은 무엇인지 알게 된다면 좀 더 잘 이해할 수 있지 않을까?
1. Physical Layer
모든 프로그램은 결국 0과 1의 나열이기 때문에 두 대의 컴퓨터가 통신하기 위해선 결국 0과 1만 주고 받으면 된다.
이를 위해선 아래와 같은 디지털 신호를 전선으로 보내게 될 것이다.
그러나, 실상은 불가능하다. 디지털 신호를 통과시킬 수 있는 전선이 없기 때문이다.
이유
수직선과 수평선이 있는 전자기파는 항상 0에서 무한대 Hz의 주파수 범위를 가진다.
하지만 전선이 통과시킬 수 있는 주파수의 범위는 항상 한정적이기 때문에 이러한 전기 신호를 통과시킬 수 있는 전선은 없다.
따라서, 디지털 신호를 전송하기 위해선 아날로그 신호로 바꾸는 과정이 필요하다. (encoding)
이에 따라 수신 측에서는 아날로그 신호를 디지털 신호로 바꾸는 과정이 필요하다. (decoding)
이것을 하는 계층이 Physical Layer다.
Physical Layer란?
물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고 받을 수 있게 해주는 모듈이다.
Physical Layer가 하는 일
encoder와 decoder가 encoding, decoding을 한다.
encoder, decoder는 함수라고 보면 이해하기 쉽다. (사실은 함수가 아닌 회로)
encoder는 0과 1로 이루어진 원본 데이터를 input으로 받아 output으로 변조된 아날로그 신호를 산출한다.
반대로, decoder는 아날로그 신호를 input으로 받아 output으로 해석된 원본 데이터를 산출한다.
Physical Layer는 어디에 구현되어 있을까?
- PHY 칩
- 1계층 모듈은 하드웨어적으로 구현되어 있다.
2. Data-Link Layer
사전 지식
여러 대의 컴퓨터가 통신하려면?
스위치
먼저, 스위치가 필요하다.
스위치란 일종의 컴퓨터로서 데이터의 목적지를 확인해 그곳으로 보내준다.
스위치가 없다면 여러 대의 컴퓨터를 연결할 수도 없고 원하는 곳에만 보낼 수도 없다.
한 네트워크(인트라넷) 내에서 스위치를 통해 여러 컴퓨터가 통신을 할 수 있다.
라우터
서로 다른 두 네트워크에 속한 컴퓨터끼리 통신을 하려면 라우터가 필요하다.
라우터는 스위치와 스위치를 연결해 그러한 통신을 가능하게 해준다.
우리가 잘 알고 있는 공유기가 라우터의 한 종류이다.
라우터와 라우터를 라우터로 연결하여 여러 네트워크 간 통신이 가능한데, 이러한 방식으로 전세계의 컴퓨터를 연결한 것이 인터넷이다.
1계층만으로는 여러 대의 컴퓨터가 통신할 수는 없다.
만약, 한 번에 여러 대의 컴퓨터에게서 데이터를 받았다면 이 데이터들을 어떻게 올바르게 끊어 읽을 수 있을까?
이를 위해 송신자는 데이터의 앞 뒤에 특정한 비트열을 붙인다. (framing)
Data-Link Layer란?
framing과 같은 작업을 통해 같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고 받을 수 있도록 하는 모듈이다.
Data-Link Layer는 어디에 구현되어 있을까?
- 랜카드
- 1계층 모듈처럼 하드웨어적으로 구현되어 있음.
3. Network Layer
특정 컴퓨터에게 데이터를 송신하기 위해선 그 컴퓨터의 IP 주소를 알아야 한다.
IP 주소를 아는 법 중 하나는 상대방의 도메인을 알아내는 것이다. (DNS가 도메인을 IP로 변환시켜 준다.)
데이터는 패킷의 형태로 보내진다.
이 패킷 내부에 IP 주소를 포함하여 전송된다.
라우터는 패킷을 열어 목적지의 IP 주소를 확인한 후 자신과 연결돼있는 컴퓨터 중 해당 IP 주소를 가진 컴퓨터가 없으면 올바른 방향의 라우터로 패킷을 보낸다.
만약 자신과 연결돼있는 컴퓨터 중 해당 IP 주소를 가진 컴퓨터가 있다면 해당 컴퓨터로 패킷을 보낸다.
Network Layer란?
수많은 네트워크들의 연결로 이루어지는 inter-network 속에서 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해 IP 주소를 이용해서 길을 찾고(routing), 자신 다음의 라우터에게 데이터를 넘겨주는 일(forwarding)을 하는 모듈이다.
Network Layer는 어디에 구현되어 있을까?
- 운영체제의 커널
- 소프트웨어적으로 구현되어 있음.
4. Transport Layer
컴퓨터에서 실행되고 있는 프로그램 즉, 프로세스들에 전송 받은 데이터들을 나누어 주려고 한다.
그런데, 어떤 데이터를 어떤 프로세스에게 줘야 할지 어떻게 알 수 있을까?
이를 위해선 먼저, 데이터를 받고자 하는 프로세스들은 포트 번호를 가져야 한다.
포트 번호란 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야 하는 정수 값이다.
그리고 송신자는 데이터를 보낼 때 데이터를 받을 수신자 컴퓨터의 프로세스의 포트 번호를 붙여서 보내야 한다.
Transport Layer란?
포트 번호를 사용하여 목적지 컴퓨터의 최종 도착지인 프로세스에까지 데이터가 도달하게 하는 모듈
Transport Layer는 어디에 구현되어 있을까?
- 운영체제의 커널
- 소프트웨어적으로 구현되어 있음.
5. Application Layer
왜 Session Layer와 Presentaion Layer는 생략?
OSI vs TCP/IP
사실 현대의 인터넷은 OSI 모델이 아니라 TCP/IP 모델을 따르고 있다.
TCP/IP 모델도 OSI 모델과 마찬가지로 네트워크 시스템에 대한 모델이다.
현대의 인터넷이 TCP/IP 모델을 따르는 이유는 OSI 모델이 TCP/IP 모델과의 시장 점유 싸움에서 졌기 때문이다.
TCP/IP

OSI의 5~7계층이 하나의 계층이 됐다.
그리고 업데이트가 되며 1~3 계층도 조금 바뀌었다.
1~3 계층이 OSI와 같아진 것이다.
그래서 OSI를 알면 TCP/IP의 1~4계층을 알 수 있고, 쓰이지 않는 OSI의 5~6 계층은 알지 않아도 된다.
오늘날 TCP/IP 오리지널보다 업데이트 버전이 더욱 많이 사용되고 있기 때문이다.
TCP/IP 소켓 프로그래밍
운영체제의 Transport layer에서 제공하는 API를 활용해서 통신 가능한 프로그램을 만드는 것을 TCP/IP 소켓 프로그래밍, 또는 네트워크 프로그래밍이라고 한다.
소켓 프로그래밍만으로도 클라이언트, 서버 프로그램을 따로따로 만들어서 동작시킬 수 있다.
뿐만 아니라, TCP/IP 소켓 프로그래밍을 통해서 누구나 자신만의 Application Layer 인코더와 디코더를 만들 수 있다.
누구든 자신만의 Application Layer 프로토콜을 만들어서 사용할 수 있다는 뜻이다.
Application Layer도 다른 Layer들과 마찬가지로 인코더와, 디코더가 있다.
대표적인 Application Layer 프로토콜인 HTTP로 인코딩 & 디코딩 과정을 살펴보자.
느낀 점
네트워크의 아주 기초적인 개념을 알게 된 것 같다.
네트워크와 관련하여 어떤 강의를 봐도 와닿지가 않았던 부분들이 이제는 훨씬 잘 와닿을 것 같다.
앞으로 이를 기반으로 더 깊은 내용을 공부할 것이다.