네트워크 지식은 전공지식이어서 그런가, 공부를 해도 해도 하루만 지나도 계속 까먹는다.
이번엔 진짜 잊지 않겠다는 마음으로 포스팅을 꼼꼼히 쉬운 언어로 해보려고 한다.
다른 사람들에게도 도움이 되면 좋겠다!
💋 OSI 7 Layer란?
OSI 7 계층은 네트워크 통신에서 기본이 되는 구조로, 네트워크 관련 기술을 공부하거나 개발할 때 중요한 개념 중 하나이다.
내가 어딘가 다른 컴퓨터로 데이터를 보내고 싶다 하면,
처음에는 가장 사람의 언어에 가까운 Application Layer부터 시작한다.
아래 계층으로 내려갈 수록 데이터를 전송할 수 있는 형태로 네트워크 개발자들이 정해놓은 수많은 약속에 따라 포장하고, 결국에는 전송 가능한 전선에 보내는 01010101의 형태로 만들어서 다른 컴퓨터로 보내게 된다.
이 1010101010 형태로 전기 신호를 받은 목적지의 컴퓨터는 역시, 약속된 규칙에 따라서 전기 신호를 사람이 이해할 수 있는 Application Layer의 형태의 데이터로 변환하게 된다.
OSI 7계층은 크게는 위의 과정을 효율적으로, 정보가 유실되지 않게, 꼬이지 않게 하기 위해서 각 계층이 최대한 효율적으로 협력하는 과정이다.
데이터를 보내는 컴퓨터에서 데이터를 010101 전기신호로 바꾸는 과정을 인코딩,
데이터를 받는 컴퓨터에서 전기신호를 사람이 읽을 수 있는 데이터로 변환하는 과정을 디코딩이라고 한다.
각 인코딩과 디코딩 단계의 수많은 약속들에 대해 공부하는 것이 네트워크 공부이고, 각 계층은 약속된 역할을 수행한다.
위 그림에서처럼 사람들은 이 과정을 7가지의 계층으로 나누어서 약속을 정해 놓았다.
좀 딱딱하게 OSI 7 Layer가 무슨 내용인지에 대해 특징을 설명해보겠다!
- Open Systems Interconnection Reference Model의 약자
- 네트워크 통신에서의 데이터 전송 과정을 7개의 계층으로 나눈 모델
- 물리 계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용 계층으로 구성
- 각 계층은 데이터 전송 과정에서 각자의 역할을 수행하며, 네트워크의 효율성과 안정성을 높여준다.
- 국제 표준화 기구(ISO)에서 개발된 모델이다.
이번 포스팅에서는 각 계층이 어떤 역할을 하는지에 대해서 소개해보려고 한다.
✔ Physical Layer
- 물리 계층으로, 진짜 말그대로 전선을 통해서 전기 신호를 주고받는 계층이다.
- 두 대의 컴퓨터가 통신하기 위해서는, 0과 1을 주고 받을 수 있으면 된다.
- 0과 1을 주고받기 위해서는, 두 컴퓨터를 전선으로 연결해서 서로에게 전기 신호를 통해서 0과 1을 주고받을 수 있으면 된다.
- 전선을 통해 전송되는 것은 아날로그 신호이다.
- encoding: 0과 1의 나열을 아날로그 신호로 바꿔 전선으로 흘려서 보낸다.
- decoding: 아날로그 신호가 들어오면 0과 1의 나열로 해석한다.
- 물리 계층을 통해 물리적으로 연결된 두 컴퓨터가 0과 1의 나열을 주고받을 수 있다.
1계층인 물리 계층을 통해서 2대의 컴퓨터가 통신할 수 있게 되었다.
✔ Data-link Layer
여러 대의 컴퓨터가 통신하기 위해서는 어떻게 해야할까?
매번 통신하고 싶은 컴퓨터와 전선을 연결하다보면, 전선도 많이 필요하고 전선을 꽃을 곳도 한정되어 있기 때문에 한계가 있다.
하나의 전선으로 여러 대의 컴퓨터와 통신하기 위해서 하나의 관통하는 전선에 여러 대의 컴퓨터를 연결한다면?
이제는 관통하는 전선에 연결된 모든 컴퓨터는 서로 전기 신호를 보낼 수 있으므로 통신이 가능하다!
여러 대의 컴퓨터와 공통으로 연결되어 있으면서, 오직 목적지로만 정보를 전달하는 것을 스위치라고 한다.
위 그림에서 하나의 스위치 아래에 연결된 컴퓨터(혹은 다른 기기들...)의 묶음을 네트워크, 혹은 이더넷이라고 할 수 있다.
그렇다면 서로 다른 스위치로 묶여있는 네트워크의 컴퓨터는 어떻게 통신할 수 있을까?
스위치와 스위치를 전선으로 연결하면 다른 스위치 네트워크에 속한 컴퓨터도 통신할 수 있다.
서로 다른 네트워크에 속한 컴퓨터끼리도 통신할 수 있게 하는 것을 라우터라고 한다.
라우터와 라우터를 서로 전선으로 연결하면, 이제는 서로 다른 라우터 네트워크에 속한 컴퓨터들도 서로 통신할 수 있게 된다.
이런식으로 전세계의 컴퓨터들을 연결한 것을 인터넷이라고 한다.
각 나라의 라우터를 연결하기 위해서 해저 케이블같이 엄청 큰 케이블이 바다 아래에 깔려 있다.
Data-link Layer는 같은 네트워크에 속한 (같은 스위치에 연결된) 여러 대의 컴퓨터들이 데이터를 주고받기 위한 계층이다.
데이터를 주고받을 때 보내고자 하는 0, 1의 아날로그 데이터의 앞뒤에 시작과 끝을 구분하기 위한 특정 숫자를 붙이게 되는데, 이 작업을 Framing이라고 한다.
참고로, 맨 앞에 붙이는 숫자를 프리앰블이라고 하는데 이것은 여러 데이터가 들어왔을 때 데이터의 시작의 타이밍을 잡기 위한 것이다. 그리고 맨 끝에 붙이는 숫자는 프레임 체크 시퀀스(FCS)라고 하는데, 오류 검출용 데이터를 붙이는 것이다.
위에서 설명한 것처럼 Framing 작업은 Data-link Layer에서 프리앰블, 스타트 프레임 딜리미터, FCS를 붙이는 작업이다.
Data-link Layer는 랜카드에 구현되어 있다.
✔ Network Layer
거대한 네트워크 속에서 하나의 컴퓨터가 다른 컴퓨터에 데이터를 보내는 계층이다.
각 컴퓨터들은 고유한 주소를 갖는데, 이것을 IP 주소라고 한다.
거대 네트워크에서 다른 컴퓨터의 IP 주소를 알아야만 데이터를 보낼 수 있다.
예를 들어, 네트워크 창에 URL로 www.naver.com을 검색한다면?
DNS 서버에서 대응하는 IP 주소를 찾을 수 있다. (DNS 내용이니 이 글에서 자세하게 설명하지는 않겠다!)
암튼 우리는 네이버 서버의 IP 주소를 알고 있는 것이다.
IP 주소 + 내가 보내고 싶은 데이터를 묶은 것을 패킷이라고 한다.
이렇게 생긴 패킷을 내 컴퓨터와 연결된 라우터로 보내보자!
라우터는 패킷을 열어 목적지의 IP 주소를 확인할 수 있다.
라우터는 큰 고민에 빠지게 된다. 연결된 전선 중 어떤 곳으로 패킷을 보내야 목적지에 갈 수 있을까..?
아래 그림처럼 수많은 라우터가 전선으로 얽히고 설켜 연결되어 있다면, 그렇게 전세계의 컴퓨터가 연결되어 있다면 어떡할까?
전세계 모든 컴퓨터를 들쑤시고 다니면서 혹시 IP 주소가 이거세요? 하고 다닐 수는 없을 것이다....
어느 곳으로 라우터가 패킷을 보낼지 최적화된 방법이 필요할 것 같다.
라우팅을 공부하면 이 방법에 대해 알 수 있다. 마치 길찾기처럼, 최적화해서 목적지를 찾아가는 방법이다.
이렇게 수많은 라우터를 거쳐가다가, 내 목적지 IP 주소와 직접 연결된 라우터를 찾게 되면 패킷을 성공적으로 보낼 수 있게 되는 것이다.
Network Layer는, 라우터로 묶인 네트워크가 계속해서 연결되는 inter-network 속에서 어딘가 있는 목적지 컴퓨터의 IP 주소만을 가지고 길을 찾고(라우팅), 목적지로 가는 다음 라우터로 데이터를 넘겨주는 것(포워딩)
네트워크 계층의 기술은 OS(운영체제)에 소프트웨어적으로 구현되어 있다.
앞서 설명한 1, 2계층은 모두 하드웨어적으로 구현되어 있는 것에 비해서 처음으로 소프트웨어적으로 구현되어 있다!
네트워크 계층으로 인해서, 라우터로 연결된 모든 컴퓨터, 즉 인터넷 상 모든 컴퓨터가 전선으로 이어져 서로 통신할 수 있게 되었다!
✔ Transport Layer
전송 계층이다.
하나의 데이터를 수신했다고 생각해보자...!
하나의 컴퓨터는 딱 하나의 프로세스만을 가지고 있지 않다.
여러 개의 애플리케이션을 실행중이라면, 내가 받은 데이터가 어떤 프로세스로 도착한 것인지 알 수 있어야 한다.
즉, 내가 받은 데이터 "안녕"이 카카오톡으로 온건지, 인스타그램 dm으로 온건지 등등 알 수 있어야만 한다.
이것을 구분하기 위해서는 포트번호가 필요하다.
포트번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 겹치지 않게 가지는 정수값이다.
데이터를 보내는 사람은, 목적지 컴퓨터의 프로세스 중 어떤 프로세스로 보내는 데이터인지까지 데이터에 함께 보내줘야 한다.
네트워크 검색창에 www.naver.com이라고 입력하는 것은 www.naver.com:80이라고 입력하는 것과 같다. (생략된 것)
따라서 우리는 이미 네이버의 포트 번호도 알고 있다.
전송 계층은, 포트 번호를 사용해서 도착지 컴퓨터의 최종 도착지인 프로세스에까지 데이터가 도착하도록 하는 방법이다.
전송 계층은 OS(운영 체제)에 소프트웨어적으로 구현되어 있다.
💋 OSI 7 Layer VS TCP/IP updated Layer
현재 사용하는 인터넷은 OSI 모델이 아니라, TCP/IP updated 모델을 많이 따르고 있다.
OSI 7 Layer의 5, 6, 7계층이 Application Layer 하나로 뭉쳐졌다.
점유율에서 이겼기 때문에 이 포스팅에서는 TCP/IP updated Layer를 기준으로 마지막 Application Layer에 대해서 설명하겠다!
✔ Application Layer
Application Layer의 대표적인 프로토콜은 HTTP이다.
클라이언트와 서버가 HTTP로 메세지를 주고받는 방식에 대해서는 백엔드 개발자라면 굉장히 익숙할 것이다.
이것에 대해서는 위의 링크나, 다른 글을 참고하면 정말 많은 자료가 있으니, 찾아보고 참고하면 좋을 것 같다!
아래는 각각 계층에 속하는 다양한 약속(프로토콜)들의 이름을 나타낸 그림이다.
💋 참고자료
- (책) 성공과 실패를 결정하는 1%의 네트워크 원리
- 총정리 네트워크 전체의 흐름
- [10분 테코톡] 히히의 OSI 7 Layer
'Computer Science > Network' 카테고리의 다른 글
[Network] Packet: 패킷의 개념, 생성 원리 (0) | 2023.12.01 |
---|---|
[Network] LAN vs WAN: 얼마나 넓은 범위의 네트워크여야 WAN이 될까? (0) | 2023.11.30 |
[Network] 네트워크 구조의 큰그림과 용어 (0) | 2023.11.28 |