[네트워크] OSI 7계층

xoey·2024년 11월 12일

네트워크

목록 보기
1/10
post-thumbnail

1. OSI 7계층 모델?

1.1. OSI(Open Systems Interconnection) 7계층 모델

OSI(Open Systems Interconnection) 7계층 모델은 네트워크 통신에서 발생하는 복잡한 작업을 일곱 개의 독립적인 계층으로 나누어 설명하는 개념적 모델이다. 이는 네트워크 통신을 계층화해서 쉽게 이해하고, 각 계층 간의 상호작용을 설명하는 데 중점을 둔다. 주로 이론적 교육용 모델로 사용된다.

그런데 잠깐, 우리가 실제로 배우는 네트워크 모델은 5개 계층 밖에 되지 않는데, 왜 7계층일까?

1.2. TCP/IP 모델

그 이유는 오늘날 네트워크 통신에서 OSI 7계층 모델보다 TCP/IP 모델이 더 널리 사용되기 때문이다.

TCP/IP 모델은 실제 구현된 인터넷 프로토콜을 바탕으로 한 네트워크 모델이다. OSI 7계층과 다르게 5개의 계층으로 구성되어 있고, 이는 실제로 인터넷과 대부분의 네트워크 시스템에서 사용되는 모델이다.

TCP/IP 모델은 OSI 모델의 세션(Session)과 표현(Presentation) 계층을 응용 계층(Application Layer)에 통합하여, 계층 수가 5개로 줄어들었다. 이는 실제로 네트워크 통신에서 세션 관리나 데이터 변환 등의 기능이 주로 응용 계층에서 처리되기 때문이다.

또한 TCP/IP 모델은 네트워크에서 실제로 구현되는 프로토콜을 기반으로 만들어졌기 때문에, 효율적이고 실용적인 구조로 설계되었다. 7계층 구조가 이론적으로는 유용하지만, 네트워크 프로토콜의 구현에서는 과도한 복잡성을 피하기 위해 5계층으로 단순화된 것이다.

정리하자면, OSI 모델은 이론적으로는 우수하나 실제로 적용하기에는 복잡하고 표준화 속도가 느렸던 반면, TCP/IP 모델은 실용적이고 빠르게 구현되었기 때문에 인터넷과 네트워크의 실제 표준으로 자리 잡게 된 것이다.

그럼 이제 TCP/IP 모델의 각 계층에 대해 자세히 살펴 보자.

2. Physical Layer

컴퓨터가 데이터를 주고 받기 위해서는 어떻게 해야할까? 모든 파일과 프로그램은 결국 0과 1로 이루어진 데이터의 나열이다. 그렇다면, 두 대의 컴퓨터가 서로 0과 1만 주고받을 수 있다면 모든 데이터를 주고 받을 수 있을 것이다.

2.1. 데이터 전송의 기초: 0과 1의 전송

두 대의 컴퓨터를 전선으로 직접 연결한다고 가정해보자.

  • 1을 보낼 때: +5V의 전기 신호를 보낸다.
  • 0을 보낼 때: -5V의 전기 신호를 보낸다.

이 방식을 이용하면 이진 데이터, 즉 0과 1의 나열을 주고 받을 수 있다. 두 컴퓨터가 데이터를 교환할 수 있는 기본적인 환경이 마련된 것처럼 보인다.

2.2. 현실적인 문제: 신호 왜곡

하지만 이 간단한 방식은 실제로는 잘 동작하지 않는다. 그 이유는 전기 신호가 이상적인 조건에서만 전송되지 않기 때문이다.

파동은 왼쪽처럼 이상적인 sin파로만 전송되지 않는다. 전송되는 환경에 따라 오른쪽과 같이 왜곡되거나 변형된다.

예를 들어, 어떤 전선이 5-8Hz의 전자기파만 통과시킬 수 있다면, 1Hz에서 10Hz 사이의 다양한 주파수 성분을 가진 신호는 제대로 전달되지 못하고 일부 성분만 통과하게 된다. 결과적으로 도착하는 데이터는 엉뚱한 값이 될 가능성이 높아진다.

왜 이런 문제가 발생할까?

전자기파에는 다양한 주파수 성분이 포함되어 있다. 특히 수직선과 수평선으로 급격하게 변하는 신호(이진 데이터)의 경우 매우 넓은 주파수 대역(0~무한대)을 필요로 한다. 현실에서는 무한대의 주파수 범위를 전달할 수 있는 전선은 존재하지 않기 때문에, 이러한 신호를 그대로 보내는 것은 불가능하다.

2.3. 해결책: 아날로그 신호로 변환

따라서 실제 통신에서는 0과 1을 직접 전송하는 대신, 아날로그 신호로 변환하여 데이터를 전송한다. sin파나 cos파 같은 아날로그 신호는 전선에서 발생하는 주파수 제한 문제를 완화할 수 있다.

  • 인코딩(Encoding): 0과 1의 이진 데이터를 아날로그 신호로 변환하여 전송한다.
  • 디코딩(Decoding): 전송된 아날로그 신호를 다시 0과 1로 변환하여 데이터를 복원한다.

2.4. Physical Layer란?

이러한 과정을 담당하는 것이 바로 네트워크 1계층, 물리 계층(Physical Layer)이다. 물리 계층은 0과 1의 나열을 아날로그 신호로 변환하여 전선이나 기타 물리적인 매체를 통해 전달하고, 다시 아날로그 신호를 0과 1로 변환하여 데이터 통신을 가능하게 하는 모듈(module)이다.

물리 계층은 컴퓨터가 전기 신호를 통해 데이터를 전송하고 수신하는 기본적인 통신 방법을 제공하며, 네트워크의 가장 기초적인 부분을 담당한다.

물리 계층 기술은 PHY 칩이라고 불리는 하드웨어 장치에 의해 구현된다. 이 칩은 전기 신호의 인코딩과 디코딩을 처리하며, 주로 네트워크 장비나 컴퓨터의 네트워크 인터페이스 카드(NIC)에 내장되어 있다. 중요한 점은 물리 계층의 기능이 하드웨어적으로 구현된다는 것이다. 즉, 물리 계층은 우리가 프로그래밍 언어로 작성한 함수가 아니라 회로로 구성되어 동작한다.

3. Data-Link Layer

컴퓨터가 서로 데이터를 주고 받기 위해서는 단순히 물리적으로 연결되는 것만으로는 충분치 않다. 여러 대의 컴퓨터가 동시에 하나의 전선을 통해 통신하기 위해서는 추가적인 기술이 필요하다.

3.1. 여러 대의 컴퓨터와 통신하기

A와 B가 하나의 전선으로 통신하고 있다고 가정해 보자. 그런데 A가 C와도 통신하고 싶다면 어떻게 해야할까?

방법은 간단하다. A와 C 사이에도 전선을 하나 더 연결하면 된다.

그러나 이 방식은 컴퓨터 수가 늘어날 때마다 전선을 계속 추가해야 하는 비효율적인 방식이다. 새로운 컴퓨터와 통신할 때마다 새로운 전선과 연결 포트가 필요하기 때문이다.

이러한 비효율성을 해결하기 위해 전선 하나를 여러 대의 컴퓨터가 공유하면서도, 동시에 충돌 없이 통신할 수 있는 방법이 필요하다. 위의 그림처럼 전선 하나에 여러 대의 컴퓨터를 연결한 상황을 생각해 보자. 가운데 전선을 구겨서 상자에 넣으면 오른쪽과 같은 그림이 되는데, 이를 스위치(Switch)라고 한다.

위 그림과 같이 서로 다른 네트워크가 스위치와 스위치로 연결되어 서로 다른 네트워크에 속한 컴퓨터끼리 통신이 가능하게 해주는 장비를 라우터(Router)라고 한다. (엄밀히 해당 상자는 스위치+라우터로 구성된 L3스위치이지만, 뭉뚱그려 라우터라고 하자.)

이렇게 전 세계의 컴퓨터들이 계층구조로 연결되어 있는 것을 인터넷이라고 한다.

3.2. Framing

여러 대의 컴퓨터가 어떻게 통신할 수 있는지는 알겠다. 아래 그림과 같은 상황을 생각해 보자.

A에게 B, C, D가 거의 동시에 각각의 정보를 보내면, A는 010111110001이라는 데이터를 받게 된다.

A는 송신된 데이터의 시작과 끝을 명확히 알지 않으면 데이터가 꼬이게 된다. 이를 위해 프레이밍(Framing)이라는 작업이 필요하다. 송신자는 데이터를 끊어서 전송하기 위해 특정한 비트열을 데이터 앞뒤에 붙인다. 이 비트열은 데이터를 주고받는 컴퓨터들이 데이터의 구분을 명확하게 할 수 있도록 도와준다.

Data-Link Layer는 물리적으로 같은 네트워크에 연결된 여러 대의 컴퓨터들이 데이터를 원활하게 주고받을 수 있도록 도와준다. 이 계층에서는 데이터를 전송할 때 어디에서 시작되고 끝나는지 구분해야 하며, 데이터를 여러 부분으로 나눠서 전송하거나, 데이터 전송 중 오류가 발생하지 않도록 관리하는 역할을 한다.

Data-Link Layer의 기술은 네트워크 인터페이스 카드(NIC), 흔히 랜카드라고 불리는 장치에 구현된다. 이는 1계층의 물리적인 신호 처리를 담당하는 부분과 함께 하드웨어적으로 구현되어 있다.

1계층인 Physical Layer는 단순히 전기 신호를 매개체로 하여 데이터를 전송하는 기능을 담당한다. 이 계층에서는 데이터가 어떻게 전송되는지에 대한 규칙은 없고, 그저 신호를 주고 받기만 한다.

반면 Data-Link Layer는 단순히 신호를 주고 받는 것을 넘어서, 데이터를 프레임 단위로 나누고 이를 통제하여 충돌이나 오류 없이 전송할 수 있도록 관리한다. 즉, 물리적인 전송이 가능한 환경에서 안정적으로 데이터를 주고 받는 과정을 처리하는 것이다.

4. Network Layer

컴퓨터들이 서로 통신을 하기 위해서는 IP 주소를 알아야 한다. IP 주소는 컴퓨터가 가지는 고유한 주소로, 네트워크 상에서 데이터를 주고 받기 위해서는 상대방 컴퓨터의 IP 주소가 필수적이다.

예를 들어, 우리가 웹 브라우저에 www.naver.com을 입력하면, 이 주소는 실제 IP 주소로 변환되어 사용된다. 결국 우리는 웹사이트에 접속할 때 이미 그 사이트의 IP 주소를 사용하고 있는 셈이다.

4.1. 패킷(Packet)

네트워크 상에서 데이터는 패킷이라는 단위로 전송된다. 패킷은 단순히 데이터를 담는 그릇이 아니라, 상대방의 IP 주소와 데이터를 함께 담은 것을 의미한다. 따라서 A가 B에게 데이터를 보내려면 B의 IP 주소를 알고 있어야 하며, 그 IP 주소에 데이터를 전송하는 것이 패킷을 보내는 과정이다.

위 그림에서 A에서 B로 패킷을 보내는 과정을 생각해 보자.

패킷은 여러 라우터를 거쳐 이동해야 한다. 라우터는 네트워크 상에서 중간중간 위치하며, 패킷이 최종 목적지로 갈 수 있도록 경로를 찾아주는 역할을 한다.

예를 들어 A가 B에게 패킷을 보내기 위해 라우터를 통해야 하고, 그 다음 라우터를 거친다고 가정해 보자.
인간인 우리는 딱 그림을 보면 라우터로 가야한다는 것을 알 수 있다. 하지만 라우터는 스스로 패킷이 어디로 가야 할지 알고 있는 것이 아니라, 경로를 찾아주는 과정을 거쳐야 한다. 이 과정이 바로 라우팅(Routing)이다.

  • 라우팅(Routing): 목적지 컴퓨터의 IP 주소를 바탕으로 경로를 찾는 과정. 라우터는 자신과 연결된 네트워크를 분석하고, 목적지까지 최적 경로를 계산하여 패킷을 어느 방향으로 보낼지 결정한다.
  • 포워딩(Forwarding): 라우팅을 통해 결정된 경로를 바탕으로, 다음 라우터로 패킷을 실제로 전달하는 과정. 라우터는 패킷을 받아 다음 목적지로 넘기는 역할을 수행한다.

4.2. Network Layer란?

Network Layer는 네트워크 상에서 IP 주소를 사용하여 경로를 찾고, 그 경로를 따라 데이터를 목적지까지 전달하는 역할을 담당한다. 이는 네트워크의 복잡성과 관계없이 패킷이 목적지까지 도달할 수 있도록 해주는 중요한 계층이다.

네트워크 계층의 기능은 소프트웨어적으로 구현되어 있으며, 이는 운영체제의 커널에서 처리된다.

5. Transport Layer

이제 네트워크 레이어 덕분에 인터넷 상의 모든 컴퓨터가 서로 통신할 수 있게 되었다. 하지만 네트워크를 통해 데이터를 전송받는 컴퓨터는 여러 프로그램(프로세스)이 동시에 실행되고 있을 수 있다.

예를 들어, 한 컴퓨터에서 카카오톡과 크롬이 동시에 실행 중일 수 있다. 이때 컴퓨터는 어떤 데이터를 어떤 프로그램에 보내야 할지 어떻게 알 수 있을까?

5.1. 포트 번호(Port Number)

컴퓨터에서 실행 중인 여러 프로그램들이 네트워크 상에서 데이터를 주고 받기 위해서는, 각 프로그램이 고유한 포트 번호를 가져야 한다. 포트 번호는 각 프로세스가 데이터를 구분하여 받을 수 있도록 컴퓨터 내에서 서로 구별되는 정수값이다. 이를 통해 컴퓨터는 어떤 데이터가 어떤 프로세스로 가야하는지 정확히 알 수 있다.

이를 통해 송신자는 데이터를 보낼 때 수신자의 IP 주소뿐만 아니라, 수신자 프로그램의 포트 번호도 함께 붙여서 보내야 한다는 것을 알 수 있다. 이렇게 하면 수신자 컴퓨터는 데이터를 받은 후, 이 데이터를 정확히 어느 프로그램에 전달해야 할지 알 수 있다.

우리가 웹사이트에 접속할 때도 포트 번호가 사용된다. 예를 들어, 웹 브라우저에서 www.naver.com을 입력할 때, 실제로는 포트 번호 80이 생략되어 있다. 이 포트 번호는 HTTP 프로토콜에서 기본적으로 사용되는 포트 번호이다. 즉, 우리는 인지하고 있지 못하고 있었지만 네이버의 포트 번호를 알고 있는 것이나 마찬가지인 셈이다.

5.2. Transport Layer란?

Transport Layer는 네트워크 상에서 데이터를 전송할 때 IP 주소와 포트 번호를 사용하여, 데이터를 정확한 프로세스(즉, 실행 중인 프로그램)에 전달하는 역할을 한다.

이 계층에서는 두 가지 주요 프로토콜이 많이 사용된다.

  • TCP(Transmission Control Protocol): 데이터 전송의 신뢰성과 순서를 보장하는 프로토콜. 데이터를 보내는 도중 손실되면 재전송하고, 순서가 뒤바뀌지 않도록 관리한다.
  • UDP(User Datagram Protocol): 상대적으로 빠르게 데이터를 전송하지만 신뢰성을 보장하지는 않는 프로토콜. 실시간 스트리밍이나 게임 등에서 많이 사용된다.

전송 계층은 운영체제의 커널에서 소프트웨어적으로 구현되어 있다. 운영체제는 네트워크를 통해 들어온 데이터를 포트 번호를 기준으로 적절한 프로그램에 분배한다. 이를 통해 컴퓨터는 동시에 여러 프로그램이 실행 중이더라도, 각각의 프로그램이 자신에게 할당된 데이터를 문제없이 수신할 수 있게 된다.

6. Application Layer

6.1. Application Layer란?

Application Layer는 네트워크 통신의 최종 도착지인 프로세스 간의 데이터 교환을 다룬다. 이 계층에서는 다양한 애플리케이션 프로토콜들이 사용된다. 가장 대표적인 것이 HTTP, FTP, SMTP와 같은 프로토콜이다.

애플리케이션 계층에서도 다른 계층과 마찬가지로 인코딩과 디코딩 과정이 이루어진다. 예를 들어, HTTP는 웹 브라우저가 웹 서버와 데이터를 주고받을 때 사용하는 프로토콜로, 인코딩과 디코딩을 통해 요청과 응답을 주고 받는다.

6.2. TCP/IP 소켓 프로그래밍

TCP/IP 소켓 프로그래밍은 네트워크 프로그램을 작성할 때 Transport Layer에서 제공하는 API를 활용하여 프로그램 간 통신을 가능하게 한다. 이 소켓 프로그래밍을 통해 클라이언트와 서버 프로그램을 만들고, 데이터를 주고 받을 수 있다.

소켓 프로그래밍은 Transport Layer에서 네트워크 연결을 설정하고 데이터 전송을 담당하는 반면, Application Layer는 이 소켓을 이용해 실제로 주고 받을 데이터를 다루는 계층이다.

즉, 소켓 프로그래밍 자체는 Transport Layer에 속하지만, 이 소켓을 통해 주고 받는 데이터의 내용은 Application Layer에서 처리가 된다.


Reference

profile
[Roman 8:18] consider that our present sufferings are not worth comparing with the glory that will be revealed in us.

0개의 댓글