TL;DR;
- Open Systems Interconnection(OSI)
- 네트워크 시스템과 통신을 설명하는 가상의 개념적 모델이자 표준 규약
- 각 계층마다 고유한 기능이 있으며, 프로토콜 또한 기능별로 구분
- Application, Presentation, Session, Transport, Network, Data link, Physical 로 7개 layers가 존재
- Application : 사용자가 네트워크에 접근할 수 있도록 인터페이스 제공, 데이터 송수신 과정 출발지이자 최종 목적지
- Presentation : 데이터의 형식 번역, 암호화 및 복호화
- Session : 세션 생성, 유지, 관리. 상대방과의 연결 확인 및 인증
Github TIL에 정리해놓고 블로그에는 나중에 올려야지 했던 것이 한세월이 지난 후에야, 드디어 글을 올리기로 결심했습니다.
각설하고 바로 본론 시작!
OSI 7 layers란?
먼 옛날(?) 1970년대 말에 ISO라는 단체에서 네트워크 통신에 대한 표준 모델을 발표했습니다.
당시에는 네트워크 통신망이 막 태동하던 혼란의 시대였습니다. 서로 다른 시스템끼리 통신을 하여 데이터를 교환하는 작업이 무척 어려웠죠. 정보 통신 서비스를 제공하는 통신업체들이 자기네 회사 장비끼리의 연결만 가능하도록 하고, 다른 업체 제품과 호환되는 기능은 대부분 지원하지 않았기 때문입니다. 아마 이때의 디지몬 세계는 군도에 가까운 형태였을 겁니다.
진시황이 춘추전국시대를 통일하면서 각종 도량형과 화폐에 대한 '표준'을 마련했듯, 혼란한 네트워크 세상을 하나로 묶으려면 표준안이 필요했습니다. 그리하여 국제표준화기구(ISO)는 OSI 7 layers라는 네트워크 통신 표준안을 만들었습니다. 서로 다른 제조업체의 컴퓨터, 통신 장비라도 네트워크 단에서는 상호 통신이 가능하도록 규약을 만든 것입니다.
규약을 어겼다고 벌점을 주거나 하진 않습니다만, 거의 모든 네트워크 통신이 OSI 모델 범주에 속하기 때문에 OSI 7 layers는 네트워크 통신을 이해하는 데 매우 유용한 모델입니다. 40년이 지난 지금까지도 컴퓨터 네트워크 전공 개론 서적에는 OSI 7 계층 모델이 빠짐없이 등장합니다.
Q: 왜 5개도 아니고 8개도 아니고 7개일까?
A: OSI 7 layers는 서로 다른 컴퓨터 기기가 네트워크를 형성하여 통신을 할 때 필요한 큰 기능을 7개로 구별하여 7 계층으로 설명한 것입니다. 필요하다면 일부 기능만 떼어내서 구현하는 것도 가능합니다. 예를 들어, 7개 중 3개 기능만 필요한 네트워크 통신 장비는 3 계층으로 기능이 구현되어 있겠죠? 대표적으로 통신 경로 상 중간 노드에 해당하는 라우터라는 장비는 7계층 중 Network, Data link, Physical 이렇게 3계층이 구현되어 있습니다.
다만 두 컴퓨터가(정확히는 서로 다른 컴퓨터의 프로세스가) 데이터를 주고 받으려면 해당 컴퓨터는 7계층이 모두 구현되어 있어야 합니다. 계층을 4개로 하든 2개로 하든, 적어도 OSI 7계층이 설명하는 7개 기능은 모두 구현되어 있어야 문제 없이 통신이 이루어진다는 뜻입니다. (다만 통신 목적과 방법에 따라 다른 일부 기능을 생략하거나 축소하는 것도 가능합니다.)
보통 OSI 모델을 설명할 때에는 Top-down 방식으로 접근해서 설명하는데요. 위에서 부터 한번 내려가봅시다!
Layer 7: Application Layer(응용 계층)
응용 계층은 사용자가 네트워크 시스템에 접속할 수 있도록 인터페이스를 제공합니다. 사용자 혹은 어플리케이션은 이 계층의 프로토콜을 통해 다른 사용자와 데이터를 주고 받을 수 있습니다. 비유하자면 우체통과 같은 계층이라 할 수 있습니다. 네트워크 시스템에서 사용자와 가장 가까운 계층이라 할 수 있겠네요.
편지가 어떤 경로로 상대방에게 전달되는지까지 우리가 알 필요는 없습니다. 그저 우리의 마음을 담은 편지가 잘 전달되기만 하면 됩니다. 응용 계층의 프로토콜은 이러한 전제 하에 사용됩니다. 사용자가 다른 사용자에게 데이터를 보내고 싶다면, 보내고 싶은 데이터를 정해진 봉투에 잘 담아두기만 하면 되는 것입니다. 보통 인터넷 환경에서 사용자가 자주 접하는 편지 봉투는 HTTP라는 프로토콜입니다.
꼭 편지만 보낼까요? 필요하다면 소포도 보내고, 택배도 보내겠죠. 필요한 규격의 상자만 잘 준비해서 내용물을 보내면 됩니다.
기능
- 사용자나 어플리케이션이 네트워크 시스템에 접근할 수 있도록 기능 제공
- 다른 종단으로부터 들어오는 정보를 받아 데이터를 사용자에게 보여줌
- 일반적인 응용 서비스를 수행
- ex) 메일 서비스, HTTP 웹 통신, 파일 전송 및 엑세스 등
대표 프로토콜
- FTP
- HTTP
- DHCP
- SMTP
- ...
Layer 6: Presentation Layer(표현 계층)
표현 계층은 일종의 번역 기능을 담당하는 계층입니다. 우리들의 언어와 컴퓨터 언어가 달라서 중간에 컴파일러와 같은 번역기가 필요하듯, 네트워크 시스템에서 서로 다른 환경의 시스템이 서로 다른 형식의 데이터를 주고 받으려면 서로에게 맞는 형식으로 데이터를 번역해주는 과정이 필요할 것입니다. 예를 들어, 유니코드로 이루어진 데이터 문서를 아스키 코드로 변환하는 작업이 표현 계층에서 이루어집니다.
데이터를 보낼 때에는 표준화된 네트워크 시스템에 따라 네트워크 전송에 적합한 포맷으로 데이터를 처리하여 네트워크로 전송하고, 데이터를 받을 때에는 전달된 데이터를 사용자의 시스템에 맞게 번역하여 응용 계층으로 전달합니다.
표현 계층은 단순히 번역만 하지 않고, 데이터를 암호화하거나 복호화하는 작업도 담당하는데요. 이처럼 데이터의 형식 상 차이로 인해 발생할 수 있는 통신 문제를 별다른 문제 없이 처리해주는 계층이 표현 계층입니다.
추가로 표현 계층에는 데이터를 압축하여 전달할 때 필요한 비트 수를 줄이는 기능도 있습니다.
기능
- 번역
- 암호화 및 복호화
- 데이터 압축
Layer 5: Session Layer(세션 계층)
세션 계층은 통신에 참여하는 양 끝단의 프로세스가 서로 연결되어 있음을 보증해주고, 이러한 연결을 관리하기 위한 기능을 제공하는 계층입니다.
만약 A와 B가 성공적으로 연결이 이루어졌다면 세션이 생성되는데, 이 세션을 통해 A는 지금 메시지를 받는 대상이 B라는 점을 확신할 수 있습니다. 엄마와 통화 중에 갑자기 아빠 목소리가 들리는 일은 없는 것처럼 세션이 연결되었다면 통신에 참여하는 프로세스끼리에 대해서만 연결이 이루어졌음을 뜻합니다.
세션은 연결을 관리하는 데 필요한 여러 기능을 제공합니다. 간단히 세션 기능에 대해 비유해서 상황 예시를 들어보겠습니다.
B가 A와 통화를 하고 있는데, A의 목소리가 계속 끊기는 경우
B: 왜 이렇게 자꾸 끊기지? 일단 끊고 나중에 다시 전화해야겠다
다시 통화 시도, A가 받음
B: 아까 목소리가 자꾸 끊기던데.
A: 엘리베이터 타서 그랬나봐. 아까 우리 무슨 얘기하고 있었지?
이처럼 세션은 연결에 문제가 발생하면 일단 연결을 끊고 다시 연결을 시도합니다. 연결이 성공하면 즉시 세션을 복구합니다.
A 프로세스와 B 프로세스가 서로 연결된 상태
B : 'A에게, 네가 저번에 요청했던 작업 진행 중임. 미리 결과 받을 준비해놔'. 여기에 도장 찍고 A에게 전송!
그러나 A가 받을 수 있는 메시지 허용량이 초과되어 B의 메시지를 받지 못함. B는 A가 받지 못했음을 알지 못하고 다음 메시지를 연달아 보냄
A : 뭐야? 갑자기 이렇게 보내는 게 어디있어? 미리 준비하라고 말을 해야지!
B : 저번에 보냈는데 못 받았어?
A : 못 받았음.
B : 그럼 준비 되면 말해. 다시 보내줄게.
세션 끼리 주고 받는 일련의 메시지들에는 일정한 간격으로 체크포인트가 설정됩니다. 만약 문제가 생겨서 메시지가 손실되었다면 서로가 인지하는 체크포인트 시점으로 동기화를 진행합니다. 체크포인트 지점 이전까지는 정상적인 통신이 이루어졌으니, 그 이후 시점부터 서로 간에 씽크를 맞추는 거죠. 그래서 이 작업의 이름도 Synchronization(동기화) 입니다. 우리의 일상을 돌이켜보아도, 어느 한쪽이 앞질러가면 말이 안통하잖아요? 소통을 할 때 서로 씽크를 맞추는 일은 컴퓨터에게도 중요한 일입니다.
기능
- 세션 생성, 유지, 종료
- 체크포인트 추가, 재동기화
- 통신 방식(half-duplex or full-duplex) 체크
Application, Presentation, Session Layer?
응용 계층, 표현 계층, 세션 계층까지는 사용자(응용 프로그램)가 담당할 수 있는 영역입니다. 즉 데이터를 보내는 사람 입장에서는 Application에서 Session까지 상대에게 데이터를 보내기 위한 준비 작업을 진행하고, 데이터를 받는 사람 입장에서는 Transport Layer로부터 전달된 상자의 포장을 Session 부터 Application 계층 순으로 뜯어서 내용물을 확인하는 것이죠. 데이터를 상대방에게 본격적으로 보내는 작업은 이후 Transport layer로부터 시작됩니다.
다음 글에서는 Transport Layer 부터 Physical Layer까지 살펴보도록 하겠습니다.