히히의 OSI 7 Layer를 보고 주관적으로 정리한 내용입니다.
이런 사람이 들으면 좋아요
- 네트워크에 대해 거의 모르는 사람
- OSI 7계층이 무너지 모르는 사람
- 프로그래밍이 뭔지는 아는 사람
- 네트워크에 대해 궁금한 사람
시작하기에 앞서
- 요약적 추상적 설명은 피하고자 함
- 1계층부터 차례대로 진행
1계층 물리 계층 (Physical Layer)
1. 두 대의 컴퓨터가 통신하려면?
- 모든 파일과 프로그램은 0고 1의 나열 -> 결국 0과 1만 주고받을 수 있으면 된다.
- 1을 보낼 때는 +5v의 전기를 전선으로 흘려보내고, 0을 보낼 때는 -5V의 전기를 전선으로 흘려보내면 0과 1의 전송이 가능할 것이다.
- 0과 1을 주고받을 수 있으면 모든 데이터를 주고받을 수 있으므로 두 컴퓨터는 모든 데이터를 주고받을 수 있음

- 그러나 이 간단한 아이디어는, 실제에서는 잘 동작하지 않았음
전자기파를 표현하는 함수
- 주파수란? 1초당 진동한 진동 횟수 [단위: Hz(헤르츠)]
- 위 그림의 주파수는 1초간 4번 진동하기 때문에 4Hz

- 이런 전자기파는 주파수 값이 숫자 하나로 고정되지 않음
- 위의 전자기파는 파동이 진행되는 동안 주파수 값이 계속 변함
- 이 전자기파의 주파수 최소값이 1Hz, 최대값이 10Hz라고 가정
- 그런데 전선은 모든 주파수를 다 통과 시키지는 못함

- 앞서 두 대의 컴퓨터가 통신하려면 0과 1을 주고받을 수 있으면 된다고 했음
- 두 대의 컴퓨터는 다음고 같은 전자기파를 주고받을 수 있으면 됨

- 그런데 수직선과 수평선이 있는 전자기파는 항상 0 ~ 무한대 Hz의 주파수 범위를 가짐
- 이런 전기신호를 통과시킬 수 있는 전선은 없음!! -> 신호를 아날로그로 바꿔서 전송해야 함

그래서 결국 Physical Layer란?
- 0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려 보내고(encoding), 아날로그 신호가 들어오면 0과 1의 나열로 해석하여(decoding), 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈(module)
Physical Layer 기술은 어디에 구현되어 있을까?
- PHY 칩
- 1계층 모듈은 하드웨어적으로 구현되어 있음!!
Data-Link Layer 시작하기 전에...
2. 여러 대의 컴퓨터가 통신하려면?
- 다른 컴퓨터와 통신하려 할 때마다 전선을 따로 추가하는 것은 통신하려는 컴퓨터가 많아질수록 비용면에서 비효율적임 -> 전선 하나를 가지고 여러 대의 컴퓨터와 통신할 방법을 모색해야 함

- 예림 -> 혜림으로 신호를 보낼 때, 구리선을 타고 모든 컴퓨터로 전달됨
- 스위치를 사용하면 혜림한테만 신호를 보낼 수 있음

- 서로 다른 네트워크에서 예림이가 혜림이에게 데이터를 보내고 싶을 때, 전선으로 연결되어 있지 않아서 통신할 수 없음

- 스위치와 스위치를 연결해서 서로 다른 네트워크에 속한 컴퓨터끼리 통신을 가능하게 만들어주는 장비를 라우터라고 함 - 엄밀히 따지면 스위치 + 라우터인 L3스위치 이지만 그냥 라우터라고 생각..

- 이때 초록색 기계는 우리가 잘 알고 있는 공유기에 해당함

- 라우터를 이용해서 라우터와 라우터를 연결할 수 있음
- 이런식으로 전 세계의 컴퓨터들을 연결한 것을 인터넷이라고 함

- 나라끼리 연결되는 최상위 케이블은 해저 케이블로 바다 안에 있음
- 스위치로 연결된 컴퓨터에서 다른 컴퓨터들이 예림이한테 거의 동시에 데이터를 보냈을 때, 예림이는 붙어있는 데이터를 받게 됨
- 잘못 끊어 읽으면 전혀 다른 데이터가 되기 때문에 송신자는 데이터의 앞 뒤에 특정한 비트열을 붙임


- 이렇게 해서 예림이는 여러 잘송지로부터 전달받은 데이터를 잘 끊어 읽을 수 있음

그래서 결국 Data-link Layer란?
- 같은 네트워크에 있는 여러대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈
- Framing은 Data-link Layer에 속하는 작업들 중 하나 - 앞에서 1111/0000을 사용해 원본 데이터를 감싼것을 Framing이라고 함
2계층과 1계층을 아우른 데이터 인코딩/디코딩 과정
- 2계층 encoder에서 data의 앞뒤에 특정한 비트열을 붙임
- 1계층 encoder로 들어가 아날로그 신호로 변경
- 전선을 타고 아날로그 신호가 이동
- 1계층 decoder로 들어가 해석된 데이터로 변경
- 2계층 decoder로 들어가 앞, 뒤 플래그가 제거되고 data가 나옴

Data-link Layer 기술은 어디에 구현되어 있을까?
- 랜카드
- 2계층 모듈도 1계층 모듈처럼 하드웨어적으로 구현되어 있음
Network Layer
3. 더 많은 컴퓨터들 사이의 통신
- A -> B로 데이터를 전송할 때, A는 데이터 앞에 목적지 주소(B의 주소)를 붙임
- 이와 같이 각 컴퓨터들이 갖는 고유한 주소를 IP주소라고 함
- 목적지 IP + data를 패킷 이라고 부름

A->B의 여정
- A가 라우터 가에게 패킷 전달
- 가는 패킷을 열어서 목적지 IP 주소를 확인 - 자신과 연결된 컴퓨터 중에는 해당 IP가 없기 때문에 데이터를 다시 포장 한 후, 라우터 마에게 전달
- 마도 패킷을 열어 목적지 주소를 확인 - 패킷을 B로 전달하려면 어느 전선으로 패킷을 보내야 하는지 알아내야 함(라우팅)
- 라우팅을 통해 경로를 알아낸 마는 패킷을 포장해 바로 전달
- 바는 마가 했던 것과 같은 방법으로 라에게 패킷을 전달
- 라는 자신과 연결된 컴퓨터 중에 55.10.54.75인 컴퓨터를 알고 있어서 패킷을 B에게 전달
그래서 결국 Network Layer란?
- 수 많은 네트워크들의 연결로 이루어지는 inter-network 속에서
- 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해
- IP 주소를 이용하여 길을 찾고 (routing)
- 자신 다음의 라우터에게 데이터를 넘겨주는 것 (forwarding)
인코딩/디코딩 과정
- 3계층 encoder에서 앞에 목적지 IP주소를 붙임 (구조체나 객체라고 생각)
- 2계층 encoder로 들어가서 (목적지 IP + (data))의 앞 뒤에 특정한 비트열을 붙임
- 1계층 encoder로 들어가 아날로그 신호로 변경
- 전선을 타고 아날로그 신호가 인접한 라우터로 이동
- 1계층 decoder로 들어가 0과 1로 해석
- 2계층 decoder로 들어가 앞, 뒤 플래그가 제거
- 3계층 decoder로 들어가 IP 주소를 사용하고 data만 남음
- 다시 1~3 과정 진행 후 다음 순서 라우터에게 전달

Network Layer 기술은 어디에 구현되어 있을까?
- 운영체제의 커널에 소프트웨어적으로 구현되어 있음
Transport Layer
- 이제 인터넷 상의 모든 컴퓨터가 서로와 통신할 수 있게 되었음 - 데이터를 받는 수신자는 전 세계의 컴퓨터로부터 데이터를 받음
- 컴퓨터에 여러 개의 프로그램들이 실행되고 있을 때(=프로세스), 어떤 데이터를 무슨 프로세스에게 줘야할 지 컴퓨터는 어떻게 알 수 있을까?
- 먼저, 데이터를 받고자 하는 프로세스 들은 포트 번호(Port Number) 라는 것을 가져야 함
- 포트 번호란 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수 값임
- 송신자는 데이터를 보낼 때 데이터를 받을 수신지 컴퓨터에 있는 프로세스의 포트 번호를 붙여서 보냄
- 포트 번호를 보고 해당하는 프로세스에게 전달

그래서 결국 Transport Layer란?
- Port 번호를 사용하여
- 도착지 컴퓨터의 최종 도착지인 프로세스까지
- 데이터가 도달하게 하는 모듈
인코딩/디코딩 과정
- 4계층 encoder에 들어가서 포트번호를 붙임 port+(data)
- 3계층 encoder에 들어가서 목적지 IP주소를 붙임 목적지IP+(port+(data))
- 2계층 encoder에서 비트열 더한 후 1계층에서 아날로그 신호로 변경 후 이동
- 아날로그 신호 해석 -> 비트열 제거 목적지IP+(port+(data))
- 3계층 decoder에서 목적지 IP 제거 port+(data)
- 4계층 decoder에서 port 번호를 활용해서 해당 프로세스에게 전달

Transport Layer 기술은 어디에 구현되어 있을까?
- 운영제체의 커널에 소프트웨어적으로 구현되어 있음
Application Layer
OSI 모델 vs TCP/IP 모델
- 사실 현대의 인터넷은 OSI 모델이 아니라 TCP/IP 모델을 따르고 있음
- TCP/IP 모델도 OSI 모델과 마찬가지로 네트워크 시스템에 대한 모델임
- 현대의 인터넷이 TCP/IP 모델을 따르는 이유는 OSI 모델이 TCP/IP 모델과의 시장 점유 싸움에서 졌기 때문

- TCP/IP 모델이 업데이트 되면서 변경됨
- Transport 아래의 계층은 OSI 모델과 같아짐
- 오늘 날 TCP/IP Updated 모델이 더 많이 사용됨

- TCP/IP 소켓 프로그래밍
- 운영체제의 Transport layer에서 제공하는 API를 활용해서 통신 가능한 프로그램을 만드는 것을 TCP/IP 소켓 프로그래밍, 또는 네트워크 프로그래밍 이라고 함
- 소켓 프로그래밍 만으로도 클라이언트, 서버 프로그램을 따로따로 만들어서 동작 시킬 수 있음
- 뿐만 아니라, TCP/IP 소켓 프로그래밍을 통해서 누구나 자신만의 Application Layer 인코더와 디코더를 만들 수 있음 -> 누구든 자신만의 Application Layer 프로토콜을 만들어서 사용할 수 있음
- Application Layer도 다른 Layer들과 마찬가지로 인코더, 디코더가 있는데 대표적인 Application Layer 프로토콜인 HTTP로 인코딩/디코딩을 조금만 살펴보자
인코딩/디코딩 과정
- HTTP encoder에 들어가서 앞에 스테이터스 코드를 붙임 status code+(data)
- 4계층에 encoder에 들어가서 포트번호를 붙임 port+(status code+(data))
- 3~1계층 encoder를 통해 아날로그 신호가 되어 목적지로 이동
- 1~3계층을 decoder를 통해 아날로그 신호 -> 비트열 제거 -> 목적지 IP 제거 status code+(port+(data))
- 4계층 decoder를 통해 포트번호를 제거 status code+(data)
- 5계층 decoder를 통해 status code 제거 data

마치며...
- MVC 패턴은 소프트웨어 아키텍처 중 하나
- MVC와 마찬가지로, 소프트웨어 아키텍처 중에 Layered Architecture 라는게 있음
- Layered 아키텍처를 따르는 대표적인 예가 네트워크 시스템임 -> 네트워크 시스템은 하나의 커다란 소프트웨어라고 할 수 있음
- OSI 7 Layer 모델은 거대한 네트워크 소프트웨어의 구조를 설명하는 것
https://youtu.be/1pfTxp25MA8 [10분 테코톡] 🔮 히히의 OSI 7 Layer