[Network] OSI 7 Layer
1. OSI 모델 vs TCP/IP 모델
현대의 인터넷은 OSI 모델이 아닌, TCP/IP 모델을 따르고 있다.
TCP/IP 모델이 업데이트되면서 기존의 OSI 모델과 Physical, DataLink, Network, Transport 계층까지는 동일하고 나머지 계층이 Application 계층으로 합쳐진 형태이다. 여기서는 TCP/IP Updated 모델에 맞춰서 설명을 한다.
2. 1계층: Physical Layer (물리 계층)
1) 두 대의 컴퓨터가 통신하려면?
(기본 아이디어) 모든 파일, 프로그램은 0과 1의 나열이므로 0과 1을 주고받을 수 있으면 두 PC간 모든 데이터를 주고 받을 수 있다.
(문제점) 실제로는 2가지 문제로 인해 올바르지 못한 신호(전선이 통과시킬 수 있는 범위의 주파수의 값만)이 전송된다.
1. 전자기파의 주파수 값이 고정적이지 않다.(주파수 범위: 0~무한대)
2. 전선은 모든 주파수를 다 통과시키지 못한다.
(결론) 0과 1을 아날로그 신호로 바꿔서 전송해야 한다.
2) Physical Layer 란?
- 0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려보내고(Encoding)
- 아날로그 신호가 들어오면 0과 1의 나열로 해석하여(Decoding)
- 물리적으로 연겨된 두 대의 컴퓨터가 0과 1의 나열을 주고 받을 수 있게 해주는 모듈
3) 1계층의 인코딩과 디코딩
- 인코딩: 원본 데이터를 encoder를 통해 아날로그 신호로 변조
- 디코딩: 변조된 아날로그 신호를 decoder를 통해 원본 데이터로 복원
4) Physical Layer 기술은 어디게 구현되어 있을까?
- PHY칩: 1계층 모듈은 하드웨어적으로 구현되어 있다.
3. 2계층: Data-Link Layer (데이터 링크 계층)
1) 여러 대의 컴퓨터가 통신하려면?
(가정) 서로 통신해야할 컴퓨터 A, B, C, D,, 가 있다.
(기본 아이디어) 두 컴퓨터는 전선으로 연결되어 있으면 데이터를 서로 주고 받을 수 있다.
(문제점) 통신하고 싶은 컴퓨터가 생길 때마다 자신의 컴퓨터와 다른 컴퓨터를 연결시켜야 하므로 2가지 문제점이 생긴다.
1. 전선, 전선을 꽂을 구멍이 많이 필요하다.
2. 통신하려는 컴퓨터가 많아질수록 비용 면에서 비효율적이다.
(결론) 전선 하나로 여러 대의 컴퓨터와 통신할 방법을 찾아야 한다.
(가정) 전기가 통하는 구리선에 여러 대의 컴퓨터가 연결되어있는 상태이다.
(기본 아이디어) 컴퓨터A에서 전자기파를 구리선으로 흘려보내면 모든 컴퓨터에 아날로그 신호가 전달된다.
(문제점) 컴퓨터A에서 컴퓨터B로 데이터를 보내기 위해서 나머지 컴퓨터(C, D,,,) 도 모두 데이터를 전달 받는다.
(결론) 무언가가 데이터를 전송해야할 목적지(컴퓨터B)를 확인해서 컴퓨터B에게만 데이터를 전달해준다.
→ 이것을 가능하게 해주는 것이 바로 스위치다. (e.g. 공유기)
(가정) 서로 다른 네트워크 2개가 구축되어 있다. 컴퓨터A는 스위치A에, 컴퓨터B는 스위치B에 연결되어 있다.
(기본 아이디어) 두 컴퓨터는 전선으로 연결되어 있으면 데이터를 서로 주고 받을 수 있다.
(문제점) 서로 다른 네트워크에 속한 컴퓨터A, 컴퓨터B가 전선으로 연결되지 않아 통신을 할 수 없다.
(결론) 컴퓨터A가 연결된 스위치A와 컴퓨터B가 연결된 스위치B를 전선으로 연결한다.
→ 스위치와 스위치를 연결해서 서로 다른 네트워크에 속한 컴퓨터끼리 통신이 가능하게 해주는 장비를 라우터라고 한다.
<인터넷>
1) 각 PC를 스위치(공유기)에 연결한다.
2) 각 스위치는 라우터로 연결한다.
3) 라우터는 라우터끼리 연결한다.
→ 전 세계의 컴퓨터들이 계층구조로 연결되어 있는 것을 인터넷이라고 한다.
(상황) 1계층의 기술만으로는 여러 대의 컴퓨터가 통신하도록 할 수 없었다.
(기본 아이디어) 데이터를 보낼 때, 데이터의 시작과 끝을 구분해야 올바른 데이터를 수신할 수 있다.
(결론) 송신자는 데이터의 앞 뒤에 특정한 비트열을 붙여 데이터를 전송한다.
2) Data-link Layer 란?
- 같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고 받기 위해서 필요한 모듈
- Framing은 Data-Link Layer에 속하는 작업들 중 하나다. (Framing = 원본 데이터를 감싸는 것)
3) 2계층의 인코딩과 디코딩
- 인코딩: 원본 데이터를 2계층 encoder를 통해 데이터의 앞 뒤에 특정한 비트열을 붙여 변조
- 디코딩: 1계층 decoder의 output을 2계층 decoder를 통해 플래그를 제거하고 원본 데이터로 복원
4) Data-link Layer 기술은 어디에 구현되어 있을까?
- 랜카드: 2계층 모듈도 1계층 모듈처럼 하드웨어적으로 구현되어 있다.
4. 3계층: Network Layer (네트워크 계층)
1) 더 많은 컴퓨터들 사이의 통신
각 컴퓨터들이 갖는 고유한 주소를 IP 주소라고 한다.
웹 브라우저 주소창에 url을 입력하면 ip 주소로 변환되어
(결론) 상대방의 IP 주소를 알아야 데이터를 보낼 수 있다.
우리가 보낼 데이터앞에 목적지의 IP 주소를 붙인 것을 패킷이라고 한다.
라우터는 패킷을 열어 목적지 주소 IP 주소를 확인한다.
2) Network Layer 란?
- 수 많은 네트워크들의 연결로 이루어지는 inter-network 속에서
- 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해,
- IP 주소를 이용해서 길을 찾고(routing)
- 자신 다음의 라우터에게 데이터를 넘겨주는 것(forwarding)
3) 3계층의 인코딩과 디코딩
- 인코딩: 원본 데이터를 3계층의 encoder를 통해 데이터 앞에 목적지 IP 주소를 붙여 변조
- 디코더: 2계층 decoder의 output을 3계층의 decoder를 통해 데이터 앞에 목적지 IP 주소를 제거하여 복원
4) Network Layer 기술은 어디에 구현되어 있을까?
- 운영체제의 커널: 소프트웨어적으로 구현되어 있다.
5. 4계층: Transport Layer (전송 계층)
이제 인터넷 상의 모든 컴퓨터가 서로와 통신할 수 있게 되었다.
데이터를 받고자 하는 프로세스들은 포트 번호(Port Number)를 가져야 한다.
포트 번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수값이다.
송신자는 데이터를 보낼 때, 데이터를 받을 수신자의 컴퓨터에 있는 프로세스 포트 번호를 붙여서 보낸다.
데이터 전송자는 수신자 컴퓨터의 프로세스 포트 번호를 알고 있어야 한다.
1) Transport Layer 란?
- Port 번호를 사용하여
- 도착지 컴퓨터(ip)와 최종 도착지인 프로세스(port)에 까지
- 데이터가 도달하게 하는 모듈
2) 4계층의 인코딩과 디코딩
- 인코딩: 원본 데이터를 4계층의 encoder를 통해 데이터 앞에 목적지 프로세스의 포트 번호를 붙여 변조
- 디코딩: 3계층의 decoder의 output을 4계층의 decoder를 통해 데이터 앞에 있는 목적지 프로세스의 포트 번호를 제거하여 원본 데이터로 복원
3) Transport Layer 기술은 어디에 구현되어 있을까?
- 운영체제 커널: 소프트웨어적으로 구현되어 있다.
6. 5계층: Application Layer
1) TCP/IP 소켓 프로그래밍(네트워크 프로그래밍)
운영체제의 Transport Layer 에서 제공하는 API를 활용해서 통신 가능한 프로그램을 만드는 것을 말한다.
- 소켓 프로그래밍 만으로도 클라이언트, 서버 프로그램을 따로 만들어 동작시킬 수 있다.
- TCP/IP 소켓 프로그래밍으로 누구나 자신만의 Application Layer 인코더와 디코더를 만들 수 있다.
- 누구든 자신만의 Application Layer 프로토콜을 만들어서 사용할 수 있다.
2) Application Layer 프로토콜인 HTTP의 인코딩과 디코딩
데이터 전송측: 서버 컴퓨터, 데이터 수신측: 클라이언트 컴퓨터 라고 가정하자.
- 인코딩: 원본 데이터를 HTTP encoder를 통해 데이터 앞에 status code,, 를 붙여 변조
- 디코딩: 4계층 decoder의 output을 HTTP decoder를 통해 데이터 앞에 있는 status code,,, 를 제거하고 원본데이터를 복원
7. 마치며
MVC 패턴은 소프트웨어 아키텍처 중 하나이다.
MVC와 마찬가지로 소프트웨어 아키텍처 중 Layered Architecture 라는게 있다.
Layered 아키텍처를 따르는 대표적인 예가 네트워크 시스템이다.
네트워크 시스템은 하나의 커다란 소프트웨어라고 할 수 있다.
OSI 7 Layer 모델은 거대한 네트워크 소프트웨어의 구조를 설명하는 것이다.