Home [CS] Network - OSI, TCP/IP 모델
Post
Cancel

[CS] Network - OSI, TCP/IP 모델

네트워크 계층 모델

우리가 주고받는 HTTP통신을 생각해볼게요. 이 HTTP통신은 불과 몇 초만에 끝나지만, 그 내부를 들여다보면 많은 처리들이 있습니다.

인터넷에 접속하면 TCP연결을 해야하고, 이 연결을 위해 3-way handshaking이 필요하며, 데이터가 중간에 소실되면 이를 감지하고 재전송을 요청하고, 데이터의 크기가 크면 나누어 보내고… 네트워크 전송에는 많은 작업들이 들어갑니다.

이 작업들은 모두 한 곳에서 처리되는게 아니라 여러 계층으로 나누어 처리됩니다. 이렇게 하면 네트워크 처리가 체계/단순화되고 이해하기 쉬워집니다. 그리고 필요에 따라 일부 기능만 지원하도록 할 수도 있습니다. 모든 네트워크 장비에 저런 기능들을 모두 넣으려면 비용이 많이 들겁니다. 계층이 명확하게 나누어져 있으면 일부 장비(스위치, 라우터 등)들은 쉽게 필요한 최소한의 기능만 포함하여 비용을 절감할 수도 있습니다.

이렇게 계층을 나누어 네트워크를 규격화한 모델을 네트워크 계층 모델이라고 합니다. 예시로는 OSI 7계층 모델, TCP/IP모델이 있습니다.

어떻게 계층화되어 있는가?

layered-network

네트워크 계층 구조에서는 데이터 통신을 할 때 보내는 입장에서는 3 - 2 - 1계층을 거쳐 데이터를 한번씩 인코딩합니다. 가공된 데이터를 보내고 받을 때는 1 - 2 - 3계층을 넘어오면서 한번씩 디코딩하여 데이터를 받습니다. 최종에는 전송자가 보낸 데이터를 온전하게 받게됩니다.

이 계층은 중간에 특정 계층이 생략될 수 없다는 특징이 있습니다. 예를 들어 전송할 때 2계층이 생략되었다고 가정해볼게요. 그러면 받는 입장에서는 2계층을 통과할 때 문제가 발생합니다. 모든 네트워크 장비는 중간에 계층이 생략되어있지 않다고 가정하고 만들어집니다.

대신 상위 계층은 생략될 수 있습니다. 전송하는 측에서 1~5계층을 통과해 보냈다고 해도, 받는 측에서는 1~3계층만 있어도 됩니다. 이때 받는 쪽에서는 4~5계층에 해당하는 헤더는 해석할 수 없습니다.

OSI 7계층

osi-layered-network

OSI 7계층은 표준 참조 모델로, 7개의 계층으로 되어있습니다. 전송할 때는 각 계층에서 하나씩 헤더가 붙고, 수신할 때는 헤더를 하나씩 해석하여 처리합니다. 한 계층씩 살펴보겠습니다.

1계층 (Physical Layer)

1계층은 실제 데이터를 주고받는 계층입니다. 동축 케이블, 광섬유, USB등이 있습니다.

이 계층에서는 실제 데이터를 0과 1로 구분하여 주고받습니다. 즉, 비트 단위로 주고받습니다. 1계층 만으로는 오류 검사나 재전송 등을 하지 않고 오직 송수신만 합니다.

2계층은 데이터의 흐름을 관리하는데, 특히 동일 네트워크의 장치들 끼리의 통신을 처리하는 계층입니다. 데이터를 동시에 하나의 케이블로 주고받게도 할 수 있는데 (half-duplex) 이게 가능한 이유는 2계층에서 프레임으로 데이터들을 구분하기 때문입니다. 대표적으로 Ethernet 프로토콜이 있습니다.

이 계층에서는 MAC 주소를 사용합니다. 이 주소를 통해 어떤 장비에 전달되어야 하는지 판단합니다. L2 (2계층)스위치는 MAC 주소를 통해 특정 포트에만 데이터를 전송합니다.

따라서 2계층 이상 장비는 데이터 전송시 반드시 MAC주소가 필요합니다. 우리는 보통 IP통신하는게 익숙할건데요. 이때도 MAC주소가 필요합니다. 같은 네트워크에서의 통신은 실제 해당 장비의 MAC주소를 통해 통신합니다. 물론 처음에는 IP만 알고있지 MAC은 모릅니다. 그래서 ARP 프로토콜을 통해 상대의 MAC주소를 확인하고 통신을 시작합니다. ARP 프로토콜로 확인한 MAC주소는 컴퓨터의 ARP 테이블에 캐싱되어 계속 사용됩니다.

여담으로 스위치에 전달된 MAC주소가 FF:FF:FF:FF:FF:FF인 경우에는 모든 장비에 전송합니다. 이걸 broadcast라고 합니다. ARP프로토콜을 전송할 때 이 broadcast를 사용합니다.

3계층 (Network Layer)

3계층은 데이터를 서로 다른 네트워크 장비간 빠르게 전달하는 라우팅 기능을 제공합니다. 2계층까지는 하드웨어로 구현됐지만, 3계층부터는 소프트웨어로 구현됩니다. 우리는 인터넷을 하면서 같은 LAN으로 연결된 컴퓨터뿐만 아니라, 미국에 있는 컴퓨터에도 접속할 수 있습니다. 이게 가능한 이유는 3계층의 라우팅 기능덕분입니다. 2계층까지는 같은 네트워크끼리의 통신이라면, 3계층은 다른 네트워크 끼리의 통신을 지원합니다. 대표적으로 IP, ICMP 프로토콜이 있습니다.

기본적으로 3계층은 오류 발생에 대한 책임을 지지 않습니다. 데이터가 중간에 손실되거나 오류가 발생해도 확인할 수 없습니다. 어느정도 신뢰성을 보장받아야 한다면 4계층이 필요합니다. IP의 이런 점을 보완해주는 TCP와 주로 함께 사용됩니다. 이 경우에는 IP는 데이터 전달을, TCP는 신뢰성 보장을 담당하죠.

이 계층에서는 라우팅뿐만 아니라 단편화를 수행하기도 합니다. 예시로, IP프로토콜의 경우 장비의 MTU를 초과하는 크기의 데이터를 전송할 때 데이터를 분할하여 전송합니다.

구체적으로 다른 네트워크인 경우에는 게이트웨이(라우터)를 통해 통신합니다. 이때는 데이터를 전송할 때 게이트웨이의 MAC주소를 기입하고 게이트웨이로 데이터를 전송합니다. (물론 MAC 주소를 모르면 ARP를 통해 먼저 주소를 찾고 전송합니다.) 그러면 게이트웨이는 IP주소를 확인하고, 이 데이터를 보낼 다음 라우터를 찾습니다. 그리고 헤더의 MAC주소를 찾은 라우터의 MAC으로 변경하여 전송합니다. 이 과정이 연쇄적으로 일어나며 최종적으로는 목적지에 도달합니다.

4계층 (Transport Layer)

4계층은 데이터를 다중화하고 정확하게 보내는 역할을 수행합니다. 데이터에 오류가 없는지 확인할 수 있고, 다중화 기능도 제공합니다. 포트 번호를 통해 하나의 장비에서 여러 종류의 데이터를 동시에 주고받을 수 있게 합니다. 우리는 인터넷을 하면서 동시에 카톡도 하고 유튜브도 볼 수 있죠.

대표적인 프로토콜로는 TCP, UDP 등이 있습니다.

TCP

  • 연결형 통신으로, 각 장비를 확실하게 연결을 맺고 통신한다.
  • 연결시에는 3-way handshake, 연결을 끊을 때는 4-way handshake를 수행한다.
  • 연결된 동안 데이터를 송수신할 수 있고, 데이터의 순서와 신뢰성을 보장한다.
  • ACK를 통해 데이터가 잘 수신되었는지 확인하고, 전달에 문제가 생기면 재전송을 요청하기도 한다.
  • 수신측에서 데이터 오버플로우가 발생하지 않도록 혼잡 제어를 수행한다.
  • 신뢰성 보장을 위한 여러 작업이 포함되므로 UDP에 비해 속도가 느리다.

UDP

  • 비연결형 통신으로, 연결없이 통신한다.
  • 신뢰성이 낮다. 최소한의 오류 체크만 하고 수신 여부는 확인하지 않는다.
  • 전송 순서가 보장되지 않는다.
  • 속도가 빠르다.

5계층 (Session Layer)

5계층에서는 데이터 통신을 위한 논리적 연결을 담당합니다. 이 계층에서의 중요한 역할은 동기화입니다. 서로 통신을 동의하는 논리적인 공통 처리가 수행됩니다. 예를 들면 인증/허가가 있습니다.

그리고 우리는 직접 소켓을 사용해서 4계층을 활용해 데이터를 보낼 수 있습니다.

6계층 (Presentation Layer)

6계층에서는 데이터의 압축이나 변환이 이루어집니다. 두 통신 장치가 서로 일관되게 데이터를 주고받게하는 기능을 수행합니다. 예를 들면 암호화나 데이터 변환 등이 있습니다.

Windows의 경우에는 SMB를 사용하여 디렉터리나 장치를 공유합니다. Apple 제품도 AFP 프로토콜을 사용해서 SMB와 유사한 기능을 사용할 수 있습니다. 이런 서비스들이 두 통신 장치간 데이터의 형태를 동기화 시켜주는 프로토콜입니다.

7계층 (Application Layer)

7계층은 응용프로그램과 관련된 서비스를 처리합니다. 대표적으로 HTTP, FTP, DNS등이 있어요. 실제로 사용자와 가장 가까운 계층입니다. 사용자가 네트워크를 사용하는 프로그램을 실행하면, 추상화된 형태로 통신할 수 있게 돕습니다. 쉽게 사용할 수 있도록 웹 브라우저나 터미널 같은 인터페이스를 제공하기도 합니다.

TCP/IP 4계층

tcp-ip

TCP/IP 계층 모델은 OSI 계층과 같이 계층형 모델입니다. 아이러니하게도 OSI계층이 표준이지만, 요즘 대부분의 인터넷 프로토콜 스텍은 TCP/IP를 따릅니다.

OSI 7계층과 거의 유사합니다. 다만 Session, Presentation, Application 영역이 TCP/IP에서는 Application영역으로 합쳐져 있죠. 저 영역은 명확하게 구분되어있지 않는 것 같습니다.

반면 Data-Link와 Physical Layer도 합쳐져 있습니다. 개인적인 생각으로 이 부분은 명확하게 구분지어야 한다고 생각합니다. 그 역할이 뚜렷하게 구분되어있기 때문입니다. (단순 전송, 흐름 제어)

참고

  1. https://ko.wikipedia.org/wiki/%EC%84%B8%EC%85%98_%EA%B3%84%EC%B8%B5
  2. https://www.youtube.com/watch?v=1pfTxp25MA8&t=596s&pp=ygULb3NpIDfqs4TsuLU%3D
  3. https://www.youtube.com/watch?v=y9nlT52SAcg&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=4&pp=iAQB
  4. http://wiki.hash.kr/index.php/OSI_7_%EA%B3%84%EC%B8%B5
This post is licensed under CC BY 4.0 by the author.