OSI는 7개 계층인데 왜 TCP/IP는 4개 계층일까?

네트워크를 처음 배우면 흔히 배우는 게 OSI 7 Layer나 TCP/IP 4 Layer 같은 네트워크의 모델들입니다. 이건 대체 뭐고 같은 컴퓨터 네트워크를 묘사하는데 왜 어떤 건 7개고 어떤 건 4개일까요?
예시를 들어 보겠습니다. 컴퓨터 네트워크와 비슷하게 인간의 인생도 엄청 복잡합니다. 정부에서 인간 (국민)들의 인생을 더 좋게 하기 위해 정책을 낸다고 해 보겠습니다. 사실 너무 막막합니다. 그도 그럴게 같은 사람이라는 카테고리로 묶여도 사람들은 너무 다릅니다. 사는 지역에 따라, 나이에 따라, 재산 수준에 따라, 욕망에 따라, 원하는 것도 필요한 것도 너무 다릅니다. 그래서 정부는 국민의 인생을 분류하기로 했습니다. 이른바 인생의 4 모델! 인생을 아래와 같이 4 단계로 구분했습니다.
- 아기
- 청소년기
- 성인
- 노년기
이렇게 하니 좀 알거 같습니다. 사람들을 위한 정책을 만들라고 하면 막막하고 어렵지만 청소년을 위한 정책, 노인을 위한 정책을 만들라고 하면 덜 막막해집니다. 이때 갑자기 어떤 학자가 말합니다. 다 같은 성인이라고 묶지만 취업을 못 한 청년을 위한 정책을 집중적으로 만들어야 합니다! 그럼 구분을 더 나누겠죠? 앞으로 사회가 변하면서 더 세세하게 나눌 수도 있습니다.
정리하자면, 인간의 생애를 1번에 이해하기에는 너무 복잡해서 필요한 목적에 따라 분류를 하고, 그 분류된 각각을 공략함으로서 인간 생애 전체를 대상으로 할 때에 비해 더 쉽게 이해하고 정책을 만들 수 있었습니다. 네트워크도 비슷합니다. 컴퓨터 네트워크라는건 1개의 거대한 시스템이지만, 이걸 1번에 이해하기는 너무 복잡하기 때문에 나눈 겁니다. 그리고 목적에 따라 4개로 나누는 게 좋을 수도 있고, 7개로 나누는 게 좋을 수도 있습니다.
네트워크의 전체적인 그림
컴퓨터와 컴퓨터를 연결하고 데이터를 주고 받으면, 그게 네트워크
네트워크가 뭘까 생각하면 엄청 복잡할 거 같지만 사실 의외로 간단합니다. 컴퓨터와 컴퓨터를 연결하고 데이터를 주고받기 위한 게 컴퓨터 네트워크입니다. 이걸 매우 먼 거리에서, 최대한 빠른 속도로 오류 없이 하려니깐 점점 복잡해져서 지금의 형태를 띠게 된 겁니다.
우선 아래부터 시작해 보겠습니다. 우리가 컴퓨터에서 마우스와 키보드 몇 번으로 쉽게 데이터를 주고 받을 수 있는 세상에 살고 있어서 잊을 수 있지만 컴퓨터와 컴퓨터를 연결해서 데이터를 주고받으려면 결국 컴퓨터를 물리적으로 연결해야 합니다. 이때 어떤 장비로 어떻게 연결하고... 이걸 연결하기 위해서는 어떤 기술을 쓰는지에 관한 게 네트워크 계층 (Network Layer)입니다.
이렇게 물리적으로 컴퓨터와 컴퓨터를 잘 연결하면 끝이 아닙니다. 멀리 있는 컴퓨터를 어떻게 찾아야 할까요? 미국과 한국에 있는 컴퓨터가 통신하고 싶다고 직접 선으로 연결할 수는 없습니다. 보통은 한국에 있는 컴퓨터가 여러 다른 컴퓨터를 일본에 있는 컴퓨터에 가고... 또 다른 컴퓨터들을 거쳐서 미국에 도착하고, 거기서도 다른 여러 컴퓨터를 거쳐서 결국 목적지에 도착합니다. 이렇게 네트워크에 컴퓨터 1대 1대에 주소를 부여하고 주소를 바탕으로 찾아가는 것에 관한 게 인터넷 계층 (Internet Layer)입니다.
이제 물리적으로 컴퓨터를 연결했고, 먼 곳에 있어도 찾아갈 수 있게 됐습니다. 하지만 큰 데이터를 보내야 한다면 어떨까요? 네트워크 장비 마다 한계가 있을 텐데 데이터가 커진다고 무작정 크게 보낼 수 없습니다. 그래서 쪼개서 보내야 합니다. 하지만 쪼개서 보내면 어떤 순서로 보냈는지, 혹시 쪼갠 조각이 일부 빠지지는 않는지 어떻게 알죠? 이렇게 큰 데이터라도 쪼개서 전송하고, 순서대로 도착하고, 잃어버리는 데이터가 없도록 잘 감시하는 역할을 하는 게 전송 계층 (Transport Layer)입니다.
마지막으로 이렇게 데이터를 서로 주고 받아도 사실 이 데이터들은 0과 1로 된 값들일뿐입니다. 이 데이터가 무엇을 의미하는지 약속을 하지 않으면 아무 의미가 없습니다. 실제 전송된 데이터에 의미를 부여하고 약속을 하는 게 응용 계층 (Application Layer)입니다.
이 모든 과정은 계층을 거칠 때 마다 Header에 추가적인 데이터를 붙여서 이루어집니다. (순서를 보장하기 위해 번호를 붙인다던가 하는 식)

네트워크 계층 (Network Layer)
컴퓨터와 컴퓨터를 하드웨어적으로 연결
- 대표적인 Protocol: Ethernet, Wi-Fi
인터넷 계층 (Internet Layer)
IP 주소를 기반으로 여러 컴퓨터를 거쳐 다른 컴퓨터를 찾아갈 수 있게 함
- 대표적인 Protocol: IPv4, IPv6, ICMP
전송 계층 (Transport Layer)
큰 데이터를 패킷(Packet)으로 쪼개서 전송하고 빠진 게 없는지, 순서대로 왔는지 감시
- 대표적인 Protocol: TCP, UDP
응용 계층 (Application Layer)
실제 온 데이터를 어떻게 쓰는지 의미 부여
- 대표적인 Protocol: HTTP, HTTPS, FTP, SMTP, POP3, IMAP, SSH, DNS
개발자가 정말 이런걸 알아야 할까?
사실 어떤 개발을 하느냐에 따라 다릅니다. 심지어 관련된 개발을 한다고 해도 반드시 기술의 원리를 이해해야만 쓸 수 있는 건 아닙니다. 하지만 개발자로서 긴 커리어를 쌓아 가면서 어떤 문제를 마주하게 될지 모르는데, 특히 웹 개발자라면 네트워크와 관련된 문제를 많이 마주칠 테니 알아둬서 나쁠 건 전혀 없습니다.
하지만 현실적으로 한정된 시간 내에서 정말 알아야 한다고 묻는다면... 아래 내용만 집중적으로 공부하기를 추천 드립니다. (백엔드 개발자 기준)
- 전체적인 큰 그림 가볍게 훝기
- Application Layer에서 자주 쓰는 Protocol 공부 (HTTP, HTTPS, FTP, SSH, DNS)
- IP 주소, TCP와 UDP 차이 등 기본적인 상식 공부
이 정도만 해도 개발자로서 살아가는 데 큰 문제는 없다고 느꼈습니다.
'CS 이론 > 🛰️ Networking' 카테고리의 다른 글
망분리 (Network Segregation), 왜 필요할까? (0) | 2023.09.27 |
---|---|
DHCP : 우리가 설정 없이 인터넷을 사용할 수 있는 이유 (0) | 2023.06.23 |
흔한 웹 취약성 총 정리 (CSRF, XSS, Injection) (0) | 2023.05.09 |
클라우드가 뭘까? IaaS, PaaS, SaaS 이건 또 뭘까? (0) | 2022.10.28 |
인터넷이 대체 뭘까? (0) | 2022.10.27 |