CS/네트워크

OSI 7계층이란?

Junuuu 2022. 4. 17. 21:08
728x90

OSI 7 계층이란?(What)

Open System Interconnection의 약자로 간단하게 "서로 다른 제조사 시스템 간의 호환성 해결"을 위해 ISO 국제표준 국가에 의해 재정되었습니다.

 

네트워크에서 통신이 일어나는 과정을 7단계로 구분한 것을 말합니다.

https://velog.io/@chae_eun/OSI-7%EA%B3%84%EC%B8%B5

 


OSI 7 계층의 등장 배경(Why)

정보통신산업 초기에 정보통신업체들이 자신만의 방법으로 자신들의 장비끼리만 통신이 되도록 만들다 보니 비슷한 기기임에도 제조사가 다르다는 이유로 서로 통신이 불가능했습니다.

 

예를 들어 한국인과 중국인이 만나면 서로 소통이 불가능합니다.

이때 영어라는 언어로 통일한다면 서로 소통이 가능할 것입니다.

 

따라서 표준을 정했기 때문에  OSI 7 계층을 지키는 통신장비들을 서로 호환이 가능해집니다.

 

또한 OSI는 7 계층으로 나누어져 있습니다.

 

이렇게 7 계층으로 나누어서 관리한다면 어떤 이점이 있을까요?

계층을 분리함으로써  각 계층은 독립적인 역할을 할 수 있습니다.

역할이 분리되면서 문제 발생 시 문제의 현상을 보았을 때 어떤 계층에 문제가 생겼는지도 파악할 수 있습니다.

 

모듈화의 측면으로 이해하면 좋습니다.

예를 들어 물리 계층에서 기술이 발전하여 다른 기술을 적용하여도 다른 계층에는 영향을 주지 않고 잘 동작합니다.

 

OSI 7 계층에 단점은 어떤 것이 있을까요?

많은 계층들로 인해 유발되는 딜레이로 발생하는 오버헤드가 존재합니다.

 

7 계층을 통한 데이터의 통신방법(How)

http://wiki.hash.kr/index.php/%ED%8C%8C%EC%9D%BC:%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%BA%A1%EC%8A%90%ED%99%94.jpg

사용자 데이터가 각 계층을 지나면서 하위 계층은 상위 계층으로부터 온 정보를 데이터 취급합니다.

그 데이터에 자신의 계층 특성을 담은 제어정보를 헤더화 시켜 붙이는 일련의 과정을 데이터 캡슐화라고 합니다.

 

응용계층부터 시작하여 OSI 계층을 차례로 내려오면 물리계층으로 데이터 캡슐화 과정이 발생합니다.

반대로 데이터를 받은 컴퓨터는 해당 데이터를 분석하면서 물리계층부터 시작하여 응용계층으로 올라가며 데이터 캡슐화 분해 과정이 발생합니다. 이러한 과정을 역 캡슐화라고 합니다.

 

최종적으로 데이터를 받는 컴퓨터에는 DATA가 도착하게 됩니다.


각 계층 자세히 알아보기

1 계층 : 물리 계층(Physical Layer) [비트 단위의 신호를 전기신호로 변환해 전송하는 계층]

컴퓨터는 2진법을 사용하고 0과 1을 사용합니다.

즉, 0과 1만 주고받을 수 있다면 각 컴퓨터들은 통신할 수 있습니다.

 

0과 1로 되어있는 데이터를 아날로그 신호(전기신호)로 바꾸어주는 하드웨어 계층입니다.

하드웨어 장치를 통해 실제 메시지를 전송하기 때문에 네트워크 스택의 최하위 수준으로 간주됩니다.

 

해당 계층은 네트워크 케이블과 구리 와이어에 대한 고정 구성 표준 및 물리적 설계를 정의합니다.

하드웨어 장치를 통해 컴퓨터 정보가 데이터 비트에서 전자 신호로 변환되고 전선으로 정보가 전달됩니다.

 

즉, 물리 계층은 두 컴퓨터 사이의 데이터의 인코딩, 디코딩을 지원하는 모듈입니다.

https://www.youtube.com/watch?v=1pfTxp25MA8&t=1591s


2 계층 : 데이터 링크 계층(DataLink Layer) [동일한 네트워크 내에서의 데이터 전송을 담당하는 계층]

데이터 링크 계층에 대해 알아보기 전에 네트워크가 어떻게 연결되어 있는지부터 알아야 합니다.

 

위의 그림처럼 컴퓨터와 컴퓨터가 연결되어있다면 좋겠지만 그렇게 되면 수많은 백만 개의 컴퓨터와 통신을 해야 한다면 백만 개의 전선이 컴퓨터 사이에 연결되어 있어야 합니다.

 

그래서 컴퓨터들을 계층구조로 연결하여 인터넷망을 구성합니다.

https://www.youtube.com/watch?v=1pfTxp25MA8&t=1591s

이때 여러 대의 컴퓨터가 동시에 데이터를 보내면 어떻게 될까요?

https://www.youtube.com/watch?v=1pfTxp25MA8&t=1591s

예를 들어 여러 데이터를 잘 구분해야 하기 때문에 송신자는 데이터의 앞 뒤에 특정한 비트열을 붙입니다.

 

예전의 이더넷 프로토콜은 CSMA/CD방식으로 동시에 한 케이블을 지나가는 데이터들이 문제이므로 데이터를 보내는 시점에 누군가 신호를 보내고 있다면 그것을 감지하여 대기하는 방식으로 진행되었습니다. 

 

하지만 스위치를 사용한다면 위의 방식처럼 LAN에서 충돌 도메인을 구분하는 역할을 하기 때문에 스위치에 동시에 2개 이상의 패킷이 수신되더라도 충돌이 발생하지 않습니다. (전이중 통신 방식)

 

즉, 데이터 링크 계층이란 같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈입니다.

이것을 다른 말로 하면 데이터 링크 계층은 Point to Point 간의 신뢰성 있는 전송을 보장하기 위한 계층입니다.

 

데이터 링크 계층이 제공하는 여러가지 기능들이 있습니다.

 

Service to neighbors

이웃한 1계층과 3 계층의 데이터를 받아 전송하는 역할을 수행합니다.

 

Framing

네트워크 계층(3계층) 데이터그램을 프레임 단위로 만들고 헤더와 트레일러를 추가합니다.

헤더에는 목적지, 출발지의 MAC 주소 그리고 이더넷 유형을 정의합니다.

트레일러는 비트에러를 감지합니다.

 

우리는 IP주소 밖에 가지고 있지 않은데 목적지의 MAC주소는 어떻게 찾을 수 있을까요?

ARP(Address Resolution Protocol), 주소 변환 프로토콜을 사용하여 목적지 컴퓨터의 IP주소를 이용하여 MAC 주소를 찾는데 사용합니다.

목적지의 MAC 주소를 모른다면 브로드캐스트를 통하여 ARP 요청을 하게 되면 지정된 IP주소를 가지는 컴퓨터만 응답을 하여 출발지 컴퓨터는 MAC 주소를 얻게 되고 이더넷 프레임을 만들 수 있습니다.

이후에 MAC 주소와 IP주소의 매핑 정보를 메모리에 보관하며 이를 ARP 테이블이라 부릅니다.

이후 데이터 통신은 ARP 테이블을 참고하여 전송됩니다. (캐싱느낌)

 

실제로는 목적지 컴퓨터와 바로 연결되어 있지 않기 때문에 목적지 컴퓨터로 가기 위한 중간 경로 스위치, 라우터의 MAC 주소를 탐색하면서 가게됩니다.

 

MAC 주소란?

랜카드를 제조할 때 지정되기 때문에 "물리 주소"라고도 불리며, 전 세계에서 고유한 번호가 할당됩니다.

MAC 주소는 48비트 숫자로 구성되어 있는데 앞 쪽 24비트는 랜 카드를 만든 제조사 번호이며, 뒤 쪽 24비트는 제조사가 랜 카드에 붙인 일련번호의 조합입니다.

 

이처럼 데이터 링크 계층에서 헤더와 트레일러를 붙여 프레임을 만들고 송신 측 PC에서 물리 계층으로 보내면, 물리계층에서 전기신호로 변환하여 네트워크로 진입하게 됩니다. 

 

반대로 수신 측 PC의 데이터 링크 계층에서 역 캡슐화를 통해 헤더와 트레일러를 해제시키고, 헤더에 포함된 MAC 주소를 확인한 후, 자신의 MAC 주소와 일치하면 데이터를 상위 계층으로 전송하지만 일치하지 않으면 바로 폐기합니다.

 

 

물리 계층(1 계층)에서 올라오는 비트 시그널 단위를 프레임 단위로 만들어주는 것도 프레이밍이라 합니다.

즉, 데이터 링크 계층은 물리계층(1계층)과 네트워크 계층(3계층) 사이에서 비트와 데이터그램을 프레이밍합니다.

https://bannavi.tistory.com/146

흐름 제어

데이터를 보내는 측과 받는 측간의 속도를 확인하여 이를 제어합니다.

 

데이터를 보내는 측의 속도가 상대적으로 빠를 때, 전송에 오류가 없다고 하더라도 특정 시점에서 수신하는 측은 프레임이 도착하자마자 처리할 수 있는 능력이 되지 않아서 일부 프레임이 손실됩니다.

 

따라서 데이터 링크 계층은 데이터를 받은 측의 속도가 느릴 때 데이터를 전송하는 측에 의해 막히지 않도록 속도를 규제합니다.

 

오류 제어

모든 프레임이 최종 목적지에 올바른 순서로 전달되었는지 확인하여 전송된 오류를 처리하는 것입니다.

미확인된 비연결형 서비스에서는 오류 제어가 문제 되지 않겠지만 확인된 연결 지향형 서비스에서는 문제가 될 수 있습니다.

 

따라서 오류를 검출하고 수정하는 기능이 필요합니다.

 

오류 검출은 단지 전송 중에 발생한 오류의 존재 여부만을 수신 측이 알 수 있도록 합니다.

예를 들어 패리티 검사, Checksum 등이 있습니다.

 

오류 수정은 오류가 존재한다면 어떤 부분이 잘못되었는지 까지 알 수 있도록 정보를 포함시켜 오류를 수정할 수 있도록 합니다.

예를 들어 해밍 부호(Hamming code)등이 있습니다.

 

스위치 구조

스위치는 데이터 링크 계층에서 동작하며 스위치 내부에는 MAC 주소 테이블이 존재합니다.

MAC 주소 테이블에는 스위치의 port번호와 해당 port에 연결되어 있는 PC의 MAC 주소가 매핑되어 있습니다.

 

송신 측 PC에서 프레이밍을 통해 데이터를 전송하게 될 때 스위치를 거칩니다.

이때 MAC 주소 테이블에 스위치의 port번호와 해당 기기의 MAC 주소가 매핑됩니다.

이러한 과정 속에서 MAC 주소 테이블이 채워지게 됩니다.

 

만약 MAC 주소 테이블에 수신 측 PC의 MAC 주소와 port가 매핑되어 있다면 다른 port로는 데이터가 전달되지 않고 수신측 PC로만 전달됩니다.

 

하지만 MAC 주소 테이블에 수신측 PC의 MAC주소와 port가 존재하지 않는다면 모든 연결된 port의 PC로 데이터를 전달하며 그 과정 속에서 MAC 주소 테이블을 채우게 됩니다.

 

데이터 링크 계층은 랜카드에 하드웨어적으로 구현되어있습니다.

즉, 데이터 링크 계층은 동일한 네트워크 내에서의 데이터 전송을 담당하는 계층입니다.

 


3 계층 : 네트워크 계층 [서로 다른 두 네트워크 간의 데이터 전송을 담당하는 계층]

네트워크 계층은 3 계층에 속하며 여러 개의 노드를 거칠 때마다 경로를 찾아주는 역할을 하는 계층입니다.

이때 여러 개의 노드를 거쳐 경로를 찾기 위한 주소는 IP주소로 대표됩니다.

IP주소는 컴퓨터마다 고유한 값을 가집니다. 

(google.com 대신에 아래의  IP주소를 입력하면 구글 홈페이지로 이동할 수 있습니다.)

반대로 google.com을 입력해도 해당 IP주소가 자동적으로 DNS를 통해 입력되기 우리는 IP주소를 통해서 통신하고 있습니다.

구글의 IP주소

네트워크 계층은 Routing, Congestion control의 기능을 수행합니다.

 

라우팅(Routing)이란?

어떤 네트워크 안에서 통신 데이터를 짜인 알고리즘에 의해 최대한 빠르게 보낼 최적의 경로를 선택하는 과정

https://www.youtube.com/watch?v=1pfTxp25MA8&t=1303s

A에서 B로 데이터를 보내기 위해서는 어떻게 해야 할까요?

우리가 그림을 직관적으로 보았을 때는 가 -> 마 -> 바 -> 라로 이동하면 됩니다.

 

하지만 컴퓨터 입장에서 살펴보겠습니다.

우선 B의 IP주소를 알아야 합니다.

B의 IP주소를 55.10.54.75라고 가정해보겠습니다.

https://www.youtube.com/watch?v=1pfTxp25MA8&t=1303s

위 그림처럼 IP주소와 결합된 데이터를 패킷이라고 부르겠습니다.

 

1. A가 라우터 (가)에게 패킷을 전달합니다.

2. 패킷을 받은 라우터 (가)는 목적지 IP주소를 확인합니다.

3. 라우터 (가)와 연결된 컴퓨터중에서는 IP주소가 55.10.54.75인 컴퓨터가 존재하지 않습니다.

4. 라우터 (가)는 자신과 연결된 유일한 라우터인 (마)에게 패킷을 전달합니다.

5. 라우터 (마)는 패킷을 B에 보내기 위해서 어떤 라우터로 이동해야 하는지 알아야 합니다. (이런 과정을 라우팅이 해결해줍니다)

6. 라우팅 과정에서 라우터 (마) -> (바) -> (라)로 이동하게 됩니다.

7. 라우터 (라)는 데이터의 목적지 IP주소를 확인하고 자신과 연결된 컴퓨터중에 55.10.54.75인 컴퓨터가 존재하기 때문에 해당 데이터를 전달합니다.

 

혼잡 제어(Congestion control)

혼잡이란 현재의 서브넷에 많은 패킷이 들어올 때 수행능력이 감소하는 것을 말합니다.

서브넷이란 하나의 네트워크가 분할되어 나눠진 작은 네트워크를 의미합니다.

결국 네트워크 계층은 서브넷들을 연결해주는 역할을 수행하는데 이때 특정 서브넷에 트래픽이 너무 많이 증가하게 되면 이를 감당할 수 없어지고 패킷 손실이 발생합니다.

네트워크 계층은 이러한 혼잡을 제어하는 역할을 수행합니다.

 

현재 3 계층까지 다루어보았는데 이를 그림으로 도식화하면 다음과 같은 통신이 일어납니다.

https://terms.naver.com/entry.naver?docId=3431874&cid=58437&categoryId=58437

3 계층은 OS 내부에 구현되어 있습니다.


4 계층 : 전송 계층 [사용자들 간 "신뢰성 있는 데이터 전송"을 담당하는 계층]

전송 계층이란 두 네트워크 간의 데이터 전송, 흐름 제어, 오류제어를 담당하는 계층입니다.

전송 계층은 사용자들이 신뢰성 있는 데이터를 주고받을 수 있게 함으로써 상위 계층들이 데이터 전달의 유효성이나 효율성을 신경 쓰지 않도록 해줍니다.

 

아까 2 계층에서 흐름 제어, 오류제어를 해주는데 4 계층과 어떤 차이가 있을까요?

4 계층의 흐름 제어는 종단을 연결하는 경로의 상태에 따라서 전송률을 결정합니다.

2 계층의 경우에는 내가 전송할 바로 다음의 네트워크만 보면 되지만 4 계층의 경우에는 통신하는 사이에 있는 모든 네트워크를 고려해야 합니다.

 

가장 잘 알려진 전송 프로토콜로는 TCP/UDP가 존재합니다.

TCP(Transmission Control Protocol) 프로토콜

패킷을 주고받기 전에 미리 연결을 맺어 가상의 경로를 설정하는 연결 지향형 프로토콜입니다.

신뢰성이 중요한 프로토콜로 패킷이 오류가 나거나 제대로 도착하지 않으면 재전송을 요청합니다.

또한 데이터의 수신 순서를 유지합니다.

연결의 설정하는 과정 3-way handshaking이 존재하며 연결을 해제하는 과정인 4-way handshaking이 존재합니다.

 

3-way handshaking

https://terms.naver.com/entry.naver?docId=3431875&cid=58437&categoryId=58437&expCategoryId=58437

1단계 : 두 시스템이 통신하기 전에 클라이언트는 포트가 닫힌 closed 상태, 서버는 해당 포트로 항상 서비스를 제공할 수 있는 Listen 상태입니다.

2단계 : 처음 클라이언트가 통신을 하고자 하면, 임의의 포트 번호가 클라이언트 프로그램에 할당되고 클라이언트는 서버에 연결하고 싶다는 의사 표시로 SYN Sent 상태가 됩니다.

3단계 : 클라이언트의 연결 요청을 받은 서버는 SYN Received 상태가 되고 클라이언트에게 연결을 해도 좋다는 의미로 SYN + ACK 패킷을 보냅니다.

4단계 : 마지막으로 클라이언트는 연결을 요청한 것에 대한 서버의 응답을 확인했다는 표시로 ACK 패킷을 서버에게 보냅니다.

 

4-way handshake

https://terms.naver.com/entry.naver?docId=3431875&cid=58437&categoryId=58437&expCategoryId=58437

1단계 : 통신을 하는 중에는 클라이언트와 서버 모두 Established 상태입니다.

2단계 : 통신을 끊고자 하는 클라이언트가 서버에 FIN 패킷을 보냅니다. 이때 클라이언트는 Close Wait상태가 됩니다.

3단계 : 서버는 클라이언트의 연결 종료 요청을 확인하고 클라이언트에게 응답으로 ACK 패킷을 보냅니다.

또한 서버도 클라이언트의 연결을 종료하겠다는 의미로 FIN 패킷을 보내고 Close Wait 상태가 됩니다.

4단계 : 마지막으로 클라이언트는 연결 종료를 요청한 것에 대한 서버의 응답을 확인했다는 의미로 ACK 패킷을 서버에 보냅니다.

 

UDP(User Datagram Protocol) 프로토콜

TCP와는 달리 데이터의 신뢰성 있는 전송을 보장하지 않습니다.

3-way handshake와 같은 별도의 연결이 필요하지 않고 패킷의 순서 등이나 손실 오류들을 고려하지 않기 때문에 속도가 빠른 장점이 있습니다.

예를 들어 빠른 속도가 중요한 실시간 방송 같은 곳에 사용됩니다.

즉, UDP는 비연결성, 비신뢰성 서비스입니다.

 

흐름 제어

stop - and wait 방식

한 번에 1개씩 프레임을 전송하는 방식

https://leejoongwon.tistory.com/42

슬라이딩 윈도우 프로토콜

파이프라이닝이라고도 하며, 서버 측 ack를 기다리지 않고 여러 패킷을 전송하는 방식

go back-n 방식

오류 제어

비트 에러

비트에 에러가 발생하는 경우입니다.

packet이나 segment가 잘 도착했는데 일부 bit가 바뀌어 도착했을 수 있습니다.

segment의 checksum을 계산하여 에러 유무를 판단합니다.

 

패킷 로스

패킷이 아예 손실되는 경우입니다.

timer를 두고 receiver가 일정 시간 동안 ack를 보내주지 않으면 패킷을 재전송합니다.

 

 

 

1,2,3 계층을 통해서 인터넷 상의 모든 컴퓨터가 서로와 통신할 수 있게 되었습니다.

데이터를 받는 수신자는 전 세계의 컴퓨터로부터 데이터를 받을 수 있게 되었습니다.

 

하지만 컴퓨터에서는 여러 개의 프로그램들이 실행되고 있습니다.

그러면 받은 데이터를 어떤 프로그램에게 전달해야 할까요?

 

하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들은 포트 번호라는 값을 가지고 있습니다.

포트 번호는 겹치지 않는 값을 가지고 있어야 합니다.

 

www.naver.com을 검색하였을 때는 사실 :80이라는 포트번호가 생략되어 있습니다.

만약 URI 주소창에 www.naver.com:81이라고 검색하게 되면 접근할 수 없습니다.

 

즉, 데이터를 받는 수신자는 포트번호를 기반으로 프로세스에게 데이터를 전달하게 됩니다.

이런 과정을 멀티플렉싱, 디멀티플렉싱이라 합니다.

 

4 계층은 OS 내부에 구현되어 있습니다.

 


TCP/IP 5 계층 : 응용계층 [사용자와 직접적인 상호작용을 하는 계층]

TCP/IP는 미국 국방부에서 정의한 네트워크 통신 표준 모델입니다.

TCP/IP와 OSI는 네트워크 통신 모델의 표준이라는 공통점이 있습니다.

이들의 가장 큰 차이는 TCP/IP는 OSI의 5,6,7 계층을 통합하여 더 간단하게 표현했습니다.

https://velog.io/@jwkim/cs-nw-osi-tcp-ip

가운데의 TCP/IP 모델은 최초로 정의된 TCP/IP 모델입니다.

하지만 인터넷 개발 이후 꾸준히 표준이 갱신되면서 하위 레이어가 다시 세분화되었으며 오른쪽의 TCP/IP Updated 모델이 탄생했습니다.

 

응용계층은 프로그램 구현체와 사용자 인터페이스를 의미합니다.

사용자가 네트워크 자원에 접근하는 방법을 제공합니다.

최종적으로 사용자가 볼 수 있는 유일할 계층으로 예를 들어 가상 터미널엔 텔넷, 구글의 크롬, 이메일, 서비스를 제공합니다.

HTTP, FTP, SSH, SMTP, POP 등 다양한 프로토콜이 활용됩니다.

 

우리가 대표적으로 사용하는 HTTP를 예시로 들어보겠습니다.

보통 우리가 어떤 Message를 전달하고 싶다면 우리는 HTTP 버전, 상태 코드, 헤더, 바디 등을 추가해서 Message를 전달합니다.

 

클라이언트 측 애플리케이션이 서버 측 애플리케이션과 통신하려면 응용 계층의 프로토콜을 사용해야 합니다.

웹사이트를 볼 때는 HTTP, 파일을 전송할 때는 FTP, 메일을 보낼 때는 SMTP, 메일을 받을 때는 POP3라는 프로토콜을 사용합니다.

 

 

마무리

1 계층~5 계층을 알아보며 어떻게 통신을 할 수 있는지 간략하게 알아보았습니다.

사실 깊게 들어가면 더 깊게 들어갈 수 있는 분야이기 때문에 해당 지식이 탄탄해졌을 때 더 깊게 학습해보고자 합니다.

OSI 7 계층은 거대한 소프트웨어의 구조를 설명해주는 하나의 아키텍처로 이해하면 될 것 같습니다.

출처

https://www.youtube.com/watch?v=1pfTxp25MA8&t=1591s(히히의 OSI 7 Layer)

http://wiki.hash.kr/index.php/OSI_7_%EA%B3%84%EC%B8%B5

https://doorbw.tistory.com/51(네트워크 OSI 7 계층 모델)

https://velog.io/@jewon119/TIL130.-Network-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%81%ED%81%AC-%EA%B3%84%EC%B8%B5DataLink-Layer(데이터 링크 계층)

https://terms.naver.com/entry.naver?docId=3431874&cid=58437&categoryId=58437(정보 보안 개론)

https://velog.io/@chae_eun/OSI-7%EA%B3%84%EC%B8%B5(OSI 7계층)

https://pasudo123.tistory.com/125(멀티플렉싱과디멀티플렉싱)

https://retro-blue.tistory.com/54(TCP/IP)

https://itstudyblog.tistory.com/295(TCP/UDP란?)

https://velog.io/@jwkim/cs-nw-osi-tcp-ip(OSI 7계층과 TCP/IP 5계층)