정보처리기사를 공부하면서 그냥 외우기만 했던 OSI 7계층에 대해서 이해하기 위해 공부한 기록입니다.
[10분 테코톡] 🔮 히히의 OSI 7 Layer 를 참고 하여 작성하였습니다.
ISO(국제 표준화 기구)에서 컴퓨터의 통신 표준 규격을 정하기 위해 만든 모델이 OSI 표준 모델이다.
OSI 모델은 OSI 7 Layers 라고도 하며, 7개의 계층으로 이뤄진 모델이다. 이 모델은 컴퓨터가 데이터를 송수신하는 과정을 7개의 계층으로 나누어서 표현한 모델이다.
전송할 때 7계층에서 시작하여 1계층으로 수행되고, 수신할 때는 그 반대의 과정을 거치게 된다.
차례대로 알아보자
0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려 보내고(encoding) 아날로그 신호가 들어오면 0 과 1의 나열로 해석해(decoding) 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고 받을 수 있게 해주는 모듈(module)
모듈이란?
프로그래밍 할때 만드는 함수라고 생각하면된다.
독립적으로 사용될 수 있는 코드 블록.
데이터 링크 계층 역시 하드웨어적으로 구현되어 있다.
서로 통신하고자 하는 컴퓨터마다 전선을 모두 연결하는 것은 비용적 측면에서 비효율적이므로 전선 하나르 가지고 여러 대의 컴퓨터와 통신할 수 있어야한다.
위와 같이 더미 허브를 통해 여러 대의 컴퓨터가 연결되고, 통신할 수 있게 된다.
하지만 만약 맨 왼쪽의 컴퓨터에서 맨 오른쪽의 컴퓨터에게 데이터를 전송시 중간에 있는 다른 컴퓨터도 해당 메시지를 읽을 수 있는 문제가 있다.
따라서, 더미 허브가 메시지의 목적지를 확인하여 정확히 목적지에만 메시지를 전달 할 수 있도록 구현한 것이 스위치이다.
그렇다면 만약 송신측 컴퓨터와 수신측 컴퓨터가 각각 다른 네트워크에 속한다면 어떻게 될까? 이를 위해서 라우터를 통해 서로 다른 네트워크끼리 연결시킬 수 있다. 라우터는 스위치의 기능도 하며, 우리가 익히 알고 있는 공유기가 라우터의 역할을 한다.
라우터와 라우터를 연결하여 전 세계의 컴퓨터들을 모두 연결한 것을 인터넷이라고 한다.
같은 네트워크(같은 스위치로 연결된) 에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈
Framing( 전송받은 데이터를 구분하여 받는 작업)은 Data-link Layer에 속하는 작업들 중 하나이다
위에서 여러 대의 컴퓨터가 통신하기 위해 특정한 비트열을 붙인다고 했는데 이러한 원본 데이터를 감싸는 행위를 Framing이라한다
송신측에서 보내고싶은 데이터가 2계층 인코더의 인풋으로 들어간 후, 앞 뒤에 데이터를 구분해주는 flag가 붙은 값이 반환된다.
위에서 2계층에서 프레이밍 된 데이터가 1계층 인코더의 인풋으로 들어간 후, 아날로그 신호로 변조되어 반환된다.
아날로그 신호가 전선을 타고 수신자의 컴퓨터에 1계층 디코더의 인풋으로 들어간 후, 원본 데이터가 해석되어 반환된다.
반환된 값이 2계층 디코더의 인풋으로 들어간 후 앞 뒤에 붙여진 flag가 제거되어 원본 데이터가 반환된다.
A컴퓨터가 B컴퓨터에게 데이터를 보내는 과정을 살펴보면
A는 데이터 앞에 목적지 주소인 B의 주소를 붙인다,이와같이 각 컴퓨터들이 갖는 고유한 주소를 IP주소라 한다, 요기서는 55.10.54.75가 IP주소이다.(상대방의 IP주소를 알고 있어야 메세지를 보낼 수 있다.)
A가 라우터 "가"에게 패킷을 보낸다. 그림에서 55.10.54.75로 감싸진 데이터를 패킷이라고 부른다.
"가"는 패킷을 통해 목적지 IP주소를 확인,"마"에게 패킷을 전달한다.(가와 연결된 컴퓨터 중에서는 B의 IP주소 컴퓨터가 없다)
"마"는 동일하게 패킷을 통해 목적지IP주소를 확인, 패킷이 B에 도착하려면 어느 전선으로 패킷을 보내야 하는지 알아내야 한다. 우리는 그냥 "바"에게 패킷을 줘야 한다는 것을 "마"가 알고있다고 가정한다.( 알아내는 과정은 라우팅을 자세히 배우면서 하자)
그렇게 "마"가 보낸 패킷이 "바"에 도착하고 "마"가 했던 똑같은 방법으로 라우터 "라"에게 패킷을 보낸다.
"라"는 자신과 연결된 컴퓨터 중 IP주소가 55.10.54.475 가 있다는 걸 알고, 패킷을 B에게 보낸다
수많은 네트워크들의 연결로 이루어지는 inter-network 속에서 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해, IP 주소를 이용해 길을 찾고 (routing) 자신 다음의 라우터에게 데이터를 넘겨주는 역할 (forwarding) 을 한다.
데이터는 데이터를 보내는 컴퓨터의 3계층 디코더에 들어가서 목적지 ip주소가 붙어서 나온다
(이는 구조체(객체)의 변수 중 하나에 데이터, 하나에 주소 가 있다고 생각해도 된다)
2계층 인코더에 들어가서 Framing이 된다
1계층 인코더에 들어가서 아날로그 신호가 되어 나온다
아날로그 신호는 전선을 타고 인접한 라우터에 들어간다
라우터의 1계층 디코더, 2계층 디코더, 3계층 디코더에 의해 데이터를 해석한다
해석된 데이터는 다시 3계층 인코더, 2계층 인코더, 1계층 인코더에 의해 데이터에 ip주소를 붙이고, Framing하게된다
이제 인터넷 상의 모든 컴퓨터가 서로와 통신할 수 있게 되었다
데이터를 받는 수신자는 전 세계의 컴퓨터로부터 데이터를 받을 것이고, 컴퓨터에서는 실행중인 프로세스들이 존재한다
이 때 받은 데이터들을 컴퓨터는 무슨 프로세스에게 나눠야 할 지 어떻게 알까?
이를 위해서 데이터를 받고자 하는 프로세스들은 포트 번호(Port Number)라는 것을 가져야 한다
포트번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야 하는 정수 값이다
그래서 송신자는 데이터를 보낼 때 데이터를 받을 수신자 컴퓨터에 잇는 프로세스의 포트 번호를 붙여서 보낸다.
위와 같이 전송자는 포트 번호도 미리 알고 보낸다.
이렇게 프로세스의 포트번호에 맞는 데이터를 할당해준다.
Port번호를 사용해 도착지 컴퓨터의 최종 도착지인 프로세스까지 데이터가 도달하게 하는 모듈
4계층의 인코더로 값이 들어가서 포트번호가 붙어서 나온다.
3계층 인코더로 값이 들어가서 목적지 컴퓨터 ip가 붙어 나온다
나머지는 같다.
세션계층 과 표현 계층을 설명하지 않은 이유가있다.
OSI는 7계층으로 이루어져있는데, 현대의 인터넷은 OSI 모델이 아닌,TCP/ip 모델을 따르고 있다. TCP/IP 모델도 OSI 모델과 마찬가지로 네트워크 시스템에 대한 모델이다.
그러면서 전의 데이터 링크 계층과 , 물리 계층을 설명한 이유는
TCP/IP 모델도 오리지널이 있고, 업데이트된 모델이 존재하기 때문이다.
그리고 오늘 날 업데이트 된 TCP/IP모델이 더 많이 사용된다
HTTP는 응용계층의 대표적인 프로토콜로서, 다른 계층과 마찬가지로 인코더와 디코더를 가진다.
따라서 송신측에서 HTTP 인코더에 데이터를 Input 값으로 넣으면 Status code, header, request 등의 값이 붙고, 해당 데이터가 4계층 인코더 Input 값으로 들어가서 포트번호를 가지게 되고, 1~3계층을 통과한다. 이렇게 전송된 데이터는 HTTP 디코더를 통과하여 원본 데이터를 수신측에 전달한다.