[CS 스터디]네트워크-OSI 7계층

old_dorim·2022년 10월 9일
0

네트워크와 API

목록 보기
2/3

OSI 7 계층

네트워크는 네트워크 프로토콜이 통신하는 구조를 7개의 계층으로 분리하여 각 계층간 상호 작동하는 방식을 정해 놓은 것이다.

1계층-물리계층(Physical Layer)

디지털 데이터를 아날로그 신호로 바꾸는 모듈. 하드웨어로 PHY칩으로 구현된다.

encoding 모듈
데이터를 아날로그 신호로 (전선으로 보낼 수 있게)바꾸어내보낸다.

decoding 모듈
아날로그 신호를 데이터로 해석한다.


두 컴퓨터를 전선으로 연결하여 1, 0 전기 신호를 주고 받는다. 이렇게 0, 1을 주고 받을 수 있다면, 컴퓨터의 모든 데이터를 주고 받을 수가 있게 될 것이다.

전기전자공학 기초에서 알 수 있을 어떤 사항들에 의하여, 우리는 딱 1 신호, 0 신호를 보내는 것은 불가능하다. 5v는 1, -5v는 0이라고 했을 때 딱딱 5, -5v만 보내는 것은 불가능하다. 그러므로 우리는 0과 1을 아날로그 신호로 바꿔서 보내고(encoding), 그 아날로그 신호를 0과 1로 바꾸는 과정(decoding)을 필요로 한다. 이 기능을 담당하는 게 물리 계층인 것이다.

이 모듈들은 함수인가요? 아니고 하드웨어적으로 구현되어있다. PHY칩이 해주는 일이다. 상위 계층의 패킷을 맨체스터 코딩과 차동 신호로 바꿔주는 역할을 한다고 한다. 그렇대요.

두 대의 컴퓨터는 그렇게 통신하면 되겠는데, 여러 대가 컴퓨터가 통신하려면 어떻게 해야할까? 2대를 연결하려면 전선 한 개, 3대를 연결하려면 전선 3개, 4대를 연결하려면 전선 6개 이렇게 각각 연결해야하나? 네이버에 요청 보낸다고 내 컴퓨터와 네이버를 연결하는 것은 너무 비싸고 어렵고 너무 많이 해야하므로 다른 방안을 고려했다. 전선 하나를 여러 대의 컴퓨터에 연결하는 것이다. 이렇게 연결한 부분을 **더미 허브**라고 한다. 이 허브에 연결된 컴퓨터에서 전선에 신호를 보내면, 연결된 컴퓨터 모든 곳에서 요청을 받게 된다. 하나의 전선에 연결 되어 있으니까. 근데 그건 너무 부담스럽고 보안 안 좋고... 그러니까 요청에 목적지를 쓰고 허브에서 목적지에만 요청을 보내도록 막는 역할을 하는 컴퓨터를 넣는다. 그런 기능이 있는 모듈을 **스위치**라고 한다. 이렇게 한 스위치, 허브에 연결된 네트워크를 **인트라넷**이라고 부른다.

한 요청 단위를 식별할 수 있게 플래그를 달아 감싸는 모듈. 하드웨어로 랜카드에 구현된다.

encoding 모듈
한 요청 단위를 식별할 수 있게 플래그로 감싼다.

decoding 모듈
한 요청 단위를 식별하여 플래그를 푼다.


이렇게 한 컴퓨터에 여러 컴퓨터가 요청을 보낼텐데, 요청을 어떻게 끊어읽어야할까?
예를 들어, 1번 컴퓨터가 0101, 2번 컴퓨터가 0111, 3번 컴퓨터가 1011을 보냈다면, 내 컴퓨터에는 010101111011 식으로 들어온다. 그냥 들어오는게 아니고 계속 들어올 것이다. 어떻게 구분할까? 요청마다 앞뒤에 요청의 시작과 끝을 의미하는 데이터를 넣어서 보낸다. 맨 앞에 무조건 00, 맨뒤에 무조건 11을 붙이는 것이다. 그럼 이 비트를 기준으로 요청을 끊어 읽으면 된다. 이걸 '프레이밍'이라고 한다. 보낸 게 여기서 여기까지에요라고 감싸주는 것이다.

이렇게 보내는 쪽에서 원본 데이터를 플래그로 감싸고, 받는 쪽에서 원본 데이터를 플래그 푸는 것 역할을 데이터 링크 계층에서 하게 된다.

이것도 하드웨어적으로 구현된다. LAN카드(컴퓨터 통신을 위해 쓰는 장비)에서 해준다.

이 인트라넷, 스위치끼리 연결될 수 있게 기능이 들어가면 **라우터**라고 한다. 그냥 라우터끼리도 연결할 수가 있고, 이런 식으로 컴퓨터들이 계층 구조로 다 연결된 게 **인터넷**이 된다. 최상위 라우터(나라끼리 연결하는 정도의 전선)는 해저에 깔리게 되고, 이런 전선들은 보통 나라에서 위탁받은 기업들이 관리한다.

3계층-네트워크 계층(Network Layer)

데이터가 가야하는 목적지인 컴퓨터 주소를 표시하는 모듈. 운영체제의 커널에 소프트웨어적으로 구현된다. 라우터, IP.

encoding 모듈
데이터에 감싸서 주소를 달아 객체(구조체)로 만든다.

decoding 모듈
모듈을 풀어서 주소와 데이터를 구분한다.


엄청 많은 컴퓨터가 연결되어 있을텐데, 어느 컴퓨터로 갈지 알기 위해 컴퓨터마다 있는 고유한 주소, ip를 데이터에 앞에 달아서 보낸다.

이렇게 주소가 달린 데이터를 컴퓨터가 연결된 라우터에 보내면, 라우터가 패킷(여러 헤더가 달린 감싸진 데이터, 통신 단위)을 까서 주소를 보고 어디로 보내야할지 확인한다. 자신과 연결된 컴퓨터이면 거기로 보내고, 아니면 다른 라우터로 넘기고, 다른 라우터가 확인하고, 넘기고... 하면서 결국 목적지에 도착한다.

그러니까

컴퓨터->라우터->상위 라우터상->상위 라우터->하위 라우터->하위 라우터->라우터->목적지 컴퓨터

식으로 가서 찾아야하는데, 최적의 루트를 찾는 것을 '라우팅'이라고 한다.

이렇게 많은 네트워크에 연결 속에서, 어디로 가야할지 찾는 걸 routing, 다른 라우터에게 넘겨주는 걸 forwarding이라고 한다.

라우터도 컴퓨터의 일종이라, 라우터를 지날 때마다 이 계층들을 다 지나서 다시 풀고 감싸고 한 다음에 다른 라우터나 컴퓨터로 보낸다.

4계층-전송 계층(Transport Layer)

컴퓨터에서 데이터가 어느 프로세스로 갈지 표시하는 모듈. 운영체제의 커널에 소프트웨어적으로 구현된다. TCP, UDP

encoding 모듈
포트 번호를 달아 데이터를 감싼다

decoding 모듈
포트 번호를 보고 데이터를 해당 프로세스로 보낸다


그래서 전세계의 컴퓨터가 연결되었다. 컴퓨터는 프로그램, 프로세스에 데이터를 넘겨줘야한다. 그런데 컴퓨터에 프로세스가 하나가 있는 게 아니다. 어느 프로세스로 갈 지 구분하기 위해 포트 번호를 둔다.

이렇게 어느 프로세스로 가야할지 포트 번호로 식별하여 해당 프로세스로 보내는 모듈인 것이다. 프로세스가 요청을 받고, 보내는 부분들을 담당한다.

거기에 데이터를 순차적, 안정적으로 보내는 부분을 담당한다.

OSI 모델(7계층으로 나누는 방식)과 TCP/IP 모델(5, 6, 7 계층을 application으로 퉁치는 모델)이 있는데, TCP/IP 모델을 더 많이 사용한다. 일단 3계층을 흡수한 Application layer를 소개하고, 아래에 쪼개서 소개하겠다.

5, 6, 7계층-응용 계층(Application Layer)

응용 프로그램에서 사용하기 편하게 맞춰 데이터에 규약을 추가하는 모듈. 소프트웨어적으로 Transport layer에서 제공하는 API에 맞춰 구현된다.

encoding 모듈
응용 프로그램에 맞는 네트워크 양식을 추가한다

decoding 모듈
응용 프로그램에 맞는 네트워크 양식에 맞춰 데이터를 읽어낸다


Transport layer에서 제공하는 API로 통신 가능한 프로그램을 만들 수가 있다. 이걸 TCP/IP 소켓 프로그래밍, 혹은 네트워크 프로그래밍이라고 한다. 그러니까 어플리케이션 레이어의 인코더 디코더를 만드는 걸 네트워크 프로그래밍이라고 한다. 어플리케이션은 누구나 만들 수 있다.

대표적인 응용 계층 프로토콜이 HTTP이다. 보내는 데이터에 메소드(GET, POST, PUT, DELETE)를 붙이고, 응답으로 보내는 데이터에 상태 코드(200, 400, 404, 500)등으로 감싸서 보낸다.

자주 쓰는 기존 프로토콜(HTTP)가 본인의 프로그램에서 수행하는 일과 잘 맞지 않거나, 성능을 너무 저하시킨다면, 이 계층은 프로그램에 맞춰 직접 구현해서 쓸 수 있다. 만들어 쓰는 사람 꽤 많다.

어플리케이션 계층에서 어떤 것들을 맡는지, 뭐가 필요할지 쪼개서 이해하면 좋아서 5,6,7도 간단하게 기능 위주로 작성했다.

5계층-세션 계층(Session Layer)

데이터가 통신하기 위한 논리적 연결을 담당한다. TCP/IP 세션을 만들고 없애는 책임을 지닌다. API, Socket

6계층-표현 계층(Presentation Layer)

데이터 표현에 대한 독립성을 제공하고 암호화하는 역할을 담당한다.
파일 인코딩, 명령어를 포장, 압축, 암호화

7계층-응용 계층(Application Layer)

최종 목적지로, 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다.

사용자 인터페이스, 전자우편, 데이터베이스 관리 등의 서비스를 제공한다.

참고 자료

https://www.youtube.com/watch?v=1pfTxp25MA8
우아한테크코스 테코톡을 정리했습니다

profile
미래엔 햄스터를 다운 받을 수 있겠지? 설치류니까...

0개의 댓글

관련 채용 정보