[Network] 네트워크 기초 이론 1강 — OSI 7계층은 개념, TCP/IP는 구현. 그 경계에 소켓이 있다
네트워크 기초 이론 시리즈 정리 — 1강. 참고: 널널한 개발자 TV, 네트워크를 배우려는 사람들을 위해 (재생목록, 총 43강)
네트워크 공부는 대개 OSI 7계층 암기로 시작한다. 그런데 그 순서가 왜 사람을 지치게 만드는지, 대신 무엇부터 봐야 하는지를 정리한다. 그리고 그 끝에서 소켓이 정확히 무엇인지에 도달한다.
개념과 구현 — abstraction과 implementation
먼저 구분해야 할 두 가지가 있다.
- 개념(abstraction) — 여러 실체에서 공통된 성질만 뽑아낸 틀
- 구현(implementation) — 그 틀에 해당하는 실제로 존재하는 것
"사람"은 개념이다. 개별 인물들은 그 개념의 구현이자 실체다. 개념은 실체들을 설명하기 위해 나중에 정리된 것이지, 실체보다 먼저 존재한 것이 아니다.
이 구분이 네트워크에서 그대로 적용된다.
| 해당하는 것 | |
|---|---|
| 개념 | OSI 7계층 |
| 구현 | TCP/IP, HTTP, 이더넷 … |
인터넷이 실제로 어떻게 도는지 알고 싶다면 알아야 할 대상은 구현 쪽이다. OSI 7계층은 그 구현들을 사후에 분류하기 위한 참조 모델이고, 그 자체로 동작하는 물건이 아니다.
그래서 학습 순서는 이렇게 잡는 편이 낫다.
- OSI 7계층은 분류 틀로만 알아둔다 — 계층 이름과 순서 정도
- 실제로 파고들 대상은 TCP/IP
- 웹을 다룬다면 HTTP
계층 정의를 외우는 데 시간을 쓰는 대신, 그 계층이 실제로 무엇으로 구현되어 있는지를 본다. 개념에 대한 정리된 감각은 구현을 충분히 본 다음에 따라온다.
두 가지 계층 모델 — OSI 7계층과 DoD 4계층
계층 모델은 하나가 아니다. OSI 7계층 외에 미 국방부(DoD)가 정리한 4계층 모델이 있고, TCP/IP 구현을 설명할 때는 이쪽이 더 잘 맞는다.
| OSI 7계층 | DoD 4계층 | 대표 프로토콜 |
|---|---|---|
| 7. 애플리케이션 | 애플리케이션 | HTTP, DNS, FTP |
| 6. 프리젠테이션 | 〃 | |
| 5. 세션 | 〃 | |
| 4. 트랜스포트(전송) | 트랜스포트(전송) | TCP, UDP |
| 3. 네트워크 | 네트워크(인터넷) | IP |
| 2. 데이터 링크 | 네트워크 액세스 | 이더넷, ARP |
| 1. 피지컬 | 〃 |
4계층 모델이 유리한 점은 두 가지다.
- 외울 계층이 줄어든다
- 실제 구현 단위와 경계가 더 잘 맞는다 — OSI의 5·6·7계층은 현실의 프로토콜에서 뚜렷하게 분리되지 않는 경우가 많다
계층을 부르는 말도 여럿이다. 네트워크 액세스 계층은 접근단으로 옮기기도 하고, 실무에서는 "네트워크 단", "전송단", "애플리케이션 단에서 보면" 같은 식으로 쓴다.
한 가지 주의할 점은 계층 번호는 OSI 기준이라는 것이다. HTTP를 "7계층 프로토콜"이라고 부르는 건 OSI 번호를 빌려 쓰는 관용이고, 4계층 모델에는 번호가 없다. L4 스위치, L7 로드밸런서 같은 말도 전부 OSI 번호다.
프로토콜은 어디에 있는가 — 컴퓨터의 3층 구조
"전송 계층", "네트워크 계층"이라는 이름은 개념이다. 그럼 그 개념은 컴퓨터 안 어디에 구현되어 있는가. 이걸 보려면 컴퓨터를 세 층으로 나눠야 한다.
| 층 | 내용 |
|---|---|
| 유저 모드 | 애플리케이션 — 우리가 실행하는 프로세스 |
| 커널 모드 | 운영체제 — 여기에 TCP/IP가 구현되어 있다 |
| 하드웨어 | NIC(랜카드) 등, 그리고 이를 제어하는 디바이스 드라이버 |
크게는 소프트웨어(유저 모드 + 커널)와 하드웨어로 나뉘고, 소프트웨어는 다시 시스템 소프트웨어와 애플리케이션으로 나뉜다.
핵심은 TCP/IP가 애플리케이션 안에 있지 않다는 것이다. 프로토콜 구현은 운영체제 커널에 들어 있고, 애플리케이션은 그것을 빌려 쓸 뿐이다. 그렇다면 유저 모드의 프로세스는 커널 안에 있는 그 구현에 어떻게 손을 대는가.
소켓
운영체제는 커널의 구성요소를 유저 모드에 노출할 때 파일의 형태로 추상화한다. 열고(open), 읽고(read), 쓰고(write), 닫는(close) 인터페이스를 씌우는 것이다. 디스크의 데이터든, 장치든, 파이프든 전부 같은 방식으로 다룬다.
네트워크 프로토콜도 마찬가지다. 그런데 이렇게 추상화된 대상이 네트워크 프로토콜일 때는 이것을 파일이라고 부르지 않는다.
커널에 있는 TCP/IP 같은 프로토콜을 유저 모드 애플리케이션이 접근할 수 있도록 파일 형태로 추상화한 인터페이스 — 이것을 소켓이라고 부른다.
이 정의가 유용한 이유는 소켓의 위치를 확정해 주기 때문이다. 소켓은 "네트워크 통신에 쓰는 무언가"가 아니라, 앞의 3층 그림에서 유저 모드와 커널의 경계선에 걸쳐 있는 손잡이다. 애플리케이션이 send()를 호출하면 데이터를 직접 전송하는 게 아니라, 커널에 구현된 TCP에게 "이걸 보내라"고 넘기는 것이다.
정의를 정확히 쓰려면 두 가지를 덧붙여야 한다.
- 소켓은 TCP 전용이 아니다. UDP 소켓, 로우 소켓, 같은 머신 안 프로세스끼리 통신하는 유닉스 도메인 소켓도 전부 소켓이다. TCP/IP 소켓은 그중 가장 흔한 경우다.
- "파일"이라는 표현이 문자 그대로 맞는 것은 유닉스 계열이다. 리눅스에서 소켓은 실제로 파일 디스크립터로 표현되고
read()/write()/close()가 그대로 통한다. 윈도우의 WinsockSOCKET은 커널 핸들이지만 파일 핸들과 동일한 체계는 아니다. 개념적 비유는 양쪽에 유효하고, API 수준에서는 다르다.
계층별 식별자
각 계층에는 그 계층에서 대상을 가리키는 식별자가 하나씩 있다.
| 계층 | 식별자 | 예 |
|---|---|---|
| 네트워크 액세스 | MAC 주소 (하드웨어 주소) | 00:1a:2b:3c:4d:5e |
| 네트워크 | IP 주소 | 192.168.0.10 |
| 전송 | 포트 번호 | 443 |
셋 다 "식별자"라는 같은 이름으로 묶이지만, 각각이 가리키는 대상은 서로 다르다.
그렇다면 이 셋은 각각 무엇을 식별하는가? 계층이 다르다는 것은 식별하는 대상의 종류가 다르다는 뜻이다. 다음 편에서 이어서 정리한다.
정리
- OSI 7계층은 개념, TCP/IP는 구현이다. 학습의 대상은 구현이고, OSI는 분류 틀로만 쓴다.
- 계층 모델은 OSI 7계층과 DoD 4계층 두 가지가 있고, TCP/IP를 설명할 때는 4계층이 더 잘 맞는다. 단, 계층 번호는 OSI 기준이다.
- 컴퓨터는 유저 모드 / 커널 / 하드웨어 3층이고, TCP/IP는 커널에 구현되어 있다.
- 소켓은 그 커널 프로토콜을 유저 모드에서 붙잡기 위한, 파일 형태로 추상화된 인터페이스다.
- 각 계층의 식별자는 MAC 주소 / IP 주소 / 포트 번호다.
댓글
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.