미루다 미루다 이제서야 작성하는 포스팅...ㅋㅋㅋ
전공생이라면 혹은 정보처리기사를 공부해봤다면 다 들어봤을 OSI 7계층!
(다들 물데네전세표응 아시죠..?ㅋㅋㅋ)
나도 OSI 7계층에 대해서 배울 때 시험용으로 각 계층의 이름과 특징에 대해서 달달 외우고 넘어갔었다.
개발자로 직무를 정한 이상 자의든 타의든 네트워크에 관해 공부하게 된다.
네트워크를 공부하다 보면 프로토콜에 대해 많이 만나게 되고 공부하게 되는데 이때 OSI 7계층에 대한 기초가 없다면 수박 겉핥기식으로밖에 모르게 된다.
나도 처음 공부했을 때 계층에 대한 이해 없이 공부했었고, 그래도 된다고 생각했다.
(변명하자면 시험용으로 공부한거였음)
프로젝트를 진행하면서 네트워크 오류들과 마주하는 순간이 왔고, 그때마다 구글링해서 코드를 긁어서 해결했었다.
(왜냐면 설명을 봐도 이해를 못 했음....)
뭐 잘만 굴러갔으니 계층에 대한 이해의 필요성을 못 느끼기도 했고....
요새 다시 공부를 시작하면서 OSI 7계층과 같은 네트워크 모델에 대해 이해하고 프로토콜 등에 대해 다시 학습하니 이해하는 폭이 달라졌다.
역시 사람은 고생을 해봐야...ㅋㅋㅋ
OSI 7계층이란 위에서도 언급했지만 하나의 네트워크 통신 모델이다.
그리고 이게 중요한 이유는 ISO라는 국제표준화기구에서 만들었기 때문이다.
이름에서 알 수 있듯이 국제적인 표준을 정하는 기구에서 만들었기에
"네트워킹을 할 때는 OSI 7계층 모델을 기반으로 통신을 하렴!"
이라고 권장하고 있다.
우리가 앞으로 공부할 네트워크는 OSI 7계층을 기반으로 설명할 수 있다해도 무방하다.
통신 모델을 채택한다는 것은 하나의 약속이다.
즉, 서로 통신할 수 있게 서로 알아들을 수 있는 규칙을 정하는 것과 같다.
만약, 이런 과정이 없다면 A와 B가 통신하려해도 제조 회사마다 정의한 통신 규격이 달라 통신할 수 없을 것이다.
OSI 7계층은 위의 그림과 같이 구성되어 있다.
보통 네트워크를 설명할때 bottom-up, top-down 두 가지 방식으로 설명할 수 있다.
(게시물을 끝까지 보면 왜 두 가지 방식인지도 알 수 있다.ㅋㅋㅋ)
우리는 먼저 top-down 방식으로 살펴봐보자
1계층: Physical Layer = 물리 계층
2계층: DataLink Layer = 데이터링크 계층
3계층: Network Layer = 네트워크 계층
4계층: Transport Layer = 전송 계층
5계층: Session Layer = 세션 계층
6계층: Presentation Layer = 표현 계층
7계층: Application Layer = 응용 계층
(7계층: Application Layer -> 1계층: Physical Layer 순서로 살펴보자)
최상위 계층으로 사용자/어플리케이션이 네트워크에 접근할 수 있도록 해준다.
사용자를 위한 인터페이스를 지원하고, 사용자에게 보이는 유일한 계층이라고 할 수 있다.
예로는 우리가 메일을 전송하고, 인터넷에 접속하는 것을 들 수 있다.
응용 계층으로부터 전달받은 데이터를 디코딩하고 전송하는 데이터를 인코딩하는 계층이다.
코드 간의 번역을 담당해 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어주는 역할을 수행한다.
6 Layer가 항상 공부할 때마다 애매했는데 다음과 같은 상황으로 설명할 수 있을 거 같다.
메일 전송을 위해 메일을 쓰고 전송 버튼을 눌렀다.
top-down 방식에 포커싱해서 바라보자면, 우리가 쓴 메일은 한글로 적혀있는데 네트워크는 이런 한글을 이해할 수 없다.
그렇다면 이를 네트워크가 이해할 수 있는 형식으로 변환해줘야 하는데 이 과정을 수행하는 계층이다.
한 마디로 응용프로그램이나 네트워크를 위해 데이터를 "표현"하는 계층이다.
위의 예시에 덧붙여 데이터를 안전하게 전송하기 위해 암호화, 복호화하는 것도 여기서 처리된다.
세션 계층은 네트워크상 양쪽 연결을 관리하고 연결을 지속시켜주는 계층이다.
즉, 네트워크로 연결된 양쪽 응용 프로세스가 통신을 관리하는 방법을 제공한다고 말할 수 있다.
이 부분에 대해 잘 이해가 안 갈 수 있다.
2대의 기기, 컴퓨터 또는 서버 간에 "대화"가 필요하면 세션을 만들어야 하는데 그 작업을 처리하는 곳이라고 알아두면된다.
세션은 대화 창구? 대화 파이프? 같은 느낌으로 알고 넘어가자
- 추가하자면!
(지금은 모르고 넘어가도 되지만 TCP/IP 프로토콜에 대해 공부하면 다시 보게될 것이다.)
- TPC/IP 세션을 생성하고 삭제하는 계층이다.
- 통신하는 사용자들을 동기화하고 오류복구를 진행한다.
- 통신 연결은 포트기반으로 구성되어 연결된다.
- OS가 세션 계층에 속한다.
전송 계층은 이름처럼 전송과 관련된 일을하는 계층이다.
데이터를 전송하고, 전송 속도를 조절한다.
또한, 전송 중 발생한 오류를 처리한다.
(전송 제어, 흐름 제어, 오류 제어에도 여러 방식이 있다. 나중에 다뤄봐야지)
전송 계층은 포트 번호를 통해 도착지 컴퓨터의 최종 도착지인 프로세스까지 데이터가 도달하게 한다.
(포트 번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 겹치지 않게 가져야하는 정수값이다. 이 부분은 지금은 넘어가도 되나 나중에 생각난다면 다시 한 번 봐보길 추천한다.)
전송 계층에서 가장 대표적으로 다뤄지고 비교되는 프로토콜이 TCP와 UDP이다.
HTTP/HTTPS 프로토콜은 TCP 프로토콜을 사용하는 프로토콜이다.
이 부분도 차차 다뤄볼 것이다.
(재밌는 프로토콜...)
네트워크 계층은 데이터를 목적지까지 경로를 찾아 전송하는 계층이다.
경로를 찾기 위해서는 목적지의 주소를 알아야 한다.
네트워크에서는 이 주소를 IP라고 말한다.
(IP도 종류, 구성, 계산법 등 파고들면 재밌지만 여기서는 주소 정도로 알고 넘어가자)
목적지의 주소(IP)를 통해 데이터가 전송될 경로(Route)를 선택한다. (=Routing)
이러한 동작을 하는 장비를 라우터라고 한다.
데이터를 연결된 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층이다.
라우터에 대해 정말 정말 간단하게 나타내면 위의 그림과 같다.
위의 그림으로 네트워크 계층, 라우터에 대해 이해해보자.
나는 초록색 컴퓨터에서 메일로 '내 꿈은 짱짱맨 개발자야'라는 data를 빨간색 컴퓨터의 메일로 보낼거다.
(위에서 본 과정으로 한 번 이해를 해볼까?)
- Application Layer: 제공되는 인터페이스(메일)를 통해 '내 꿈은 짱짱맨 개발자야' 전송
- Presentation Layer: '내 꿈은 짱짱맨 개발자야'를 네트워크가 알아 볼 수 있는 data 형식으로 "표현"
- Session Layer: '내 꿈은 짱짱맨 개발자야' data를 목표 컴퓨터에 전송하기 위한 연결을 생성
- Transport Layer: 빨간색 컴퓨터의 최종 도착지인 메일의 포트 번호를 data에 더하고 data의 전송을 제어하며 data를 전송
- Network Layer: 초록색 컴퓨터에서 빨간색 컴퓨터까지 data를 전송하기 위해 IP를 가지고 경로를 탐색
(이 경우는 초록색 컴퓨터 -> 라우터 1 -> 라우터 3 -> 빨간색 컴퓨터)
=> 라우팅된 경로를 따라 data가 전달됨
라우팅 기법도 굉장히 다양한데 기회가 된다면 다뤄보겠다.
데이터링크 계층은 두 개의 직접 연결된 노드 사이(Point to Point)의 노드 간 데이터 전송을 제공한다.
Point to Point간 신뢰성 있는 전송을 보장하기 위한 계층이다.
물리적으로 할당 받은 주소 값을 사용하는데 이 주소를 MAC 주소라고 하며 데이터링크 계층에서는 MAC 주소를 가지고 통신한다.
MAC 주소는 네트워크 카드 하드웨어에 부여되는 고유한 물리적 주소이다.
즉, 네트워크 상에서 통신을 할때 서로를 구분하여 인식하기 위한 일종의 주소이다.
데이터링크 계층에서는 스위치라는 장비를 통해 목적지 MAC 주소의 장비로 data를 전송한다.
위의 라우터 그림에 노란색 박스가 생겼다.
여기서 노란색 박스는 스위치를 의미한다.
나중에 라우터와 스위치에 대해 자세하게 다루겠지만 여기서도 간단하게 짚고 넘어가자.
라우터는 IP 주소를 통해 경로를 찾는 장비이고, 스위치는 MAC 주소를 통해 data를 해당 장비에 전송하는 장비이다.
라우터는 네트워크 주소가 서로 다른 장비들을 연결할 때 사용하고, 원격지에 위치한 네트워크들을 연결하는 경우가 많다.
스위치는 MAC 주소와 포트 번호가 기록된 MAC 주소 테이블을 가지고 이 테이블을 통해 data를 전송할 기기를 찾는다.
(지금으로써는 여기까지만 알면 될거 같다. 나중에 다시 한번 라우터와 스위치에 대해서 다룰 예정이다.)
그렇다면 위의 그림을 기준으로 이해해보자면,
초록색 컴퓨터에서 data를 전송하면 목적지 IP 주소를 따라 라우터 3까지 data가 전송되고,
라우터 3과 연결된 스위치가 MAC 주소를 통해 빨간색 컴퓨터까지 data가 이동하게 된다.
라는 의문이 들 수 있다.
둘 다 고유한 주소라는 공통점이 있지만 IP 주소는 공인 IP와 사설 IP로 나눌 수 있다.
기존에 우리가 사용하는 IP인 IPv4는 32비트 길이의 식별자로 최대 12자리의 번호로 이루어져 있다.
인터넷 사용자 수가 급증함에 따라 IPv4주소가 고갈되기 직전에 다다랐다.
하지만 주소가 있어야 인터넷을 사용할 수 있으니... 이 문제를 해결하기 위해 IPv6가 등장했다.
IPv6는 128비트 길이의 식별자로 더 많은 주소를 부여할 수 있다.
사설 IP도 이러한 고갈 문제를 해결하기 위해 나온 방안 중 하나이다.
이러한 사설 IP는 자기 네트워크망 내부에서만 사용할 수 있다.
외부와 통신을 하면 공유기에 연결된 모든 네트워크 장비는 공인 IP 주소로 통신하게된다.
즉, 사설 IP로 외부와 통신하면 공인 주소로 변환되어 통신하므로 외부에서는 해당 네트워크는 찾을 수 있어도 해당 컴퓨터를 찾을 수 없게된다.
이때 MAC 주소는 유일한 주소로 겹치는 경우가 없어 위와 같은 문제를 피할 수 있다.
IP 주소는 보낸 주소에서부터 도착지 주소까지의 경로를 찾기 위해 필요한 주소로 볼 수 있다.
MAC 주소는 한 주소 내에서 다양한 기기들이 있을 때 해당 기기들이 어떤 기기들인지 식별하는 주소로 볼 수 있다.
물리 계층은 비트 단위의 data를 물리적으로 전송하기 위해 전기적 신호로 변환하는 계층이다.
전기 신호를 주고받는데 주 목적이 있어 데이터의 종류나 에러에 대해서는 신경쓰지 않는다.
포스팅이 이렇게 길어질 줄은 몰랐는데... 생각보다 길어졌다..ㅋㅋㅋㅋ
그래서 포스팅을 끊어가려고 한다.
top-down 방식을 통해 OSI 7계층에서 각 계층별 특징이랄까 컨셉을 살펴봤다.
우리는 지금
❗️이건 다음 포스트를 보면 알 수 있다❗️
그럼 다음 포스트를 쓰러 간다... 틀린 점이나 궁금한 점 혹은 다뤄줬으면 좋겠는 주제에 대해서는 언제나 환영이다.👋
최고입니다. 이해가 너무 잘되요