[Network] – “네트워크 둘러보기”

[Network] – “네트워크 둘러보기”

8월 10, 2023

네트워크 구성도

컴퓨터 네트워크(computer network) 또는 컴퓨터망(문화어: 콤퓨터망)은 노드들이 자원을 공유할 수 있게 하는 디지털 전기통신망의 하나이다. 즉, 분산되어 있는 컴퓨터를 통신망으로 연결한 것을 말한다.

https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

오늘은 간단하게 네트워크를 둘러보는 시간을 가지겠습니다. 이 포스트를 보고 계시는 여러분들과, 지금 이 순간 블로그에 글을 작성하는 저, 그리고 어딘가에서 가치 높은 기술 블로그 포스트를 작성하고 계시는 분들 모두 네트워크를 사용하고 있습니다. 네트워크 서비스를 사용하는 입장인 것이죠. 이 블로그가 호스팅되는, 어디엔가 켜져 있는 컴퓨터는 네트워크 서비스를 제공하는 입장이 됩니다.

서비스를 받는 입장에서, 우리는 랜 카드, 랜 케이블을 이용해서 유선으로 네트워크에 연결하거나, 혹은 무선 랜 카드, 무선 신호를 보낼 수 있는 매체인 공기를 통해서 무선으로 네트워크에 연결합니다.

네트워크 서비스를 제공하는 입장을 생각해보자면 데이터 센터가 있습니다.

데이터 센터는 애플리케이션과 서비스를 구축, 실행, 제공하고, 이러한 애플리케이션 및 서비스와 연관된 데이터를 저장 및 관리하기 위한  IT 인프라를 보관하는 물리적 방, 건물 또는 시설입니다.

데이터 센터는 최근 몇 년 동안 한 회사만 사용할 수 있도록 기존 IT 인프라를 보관하는 사적으로 소유되고 엄격하게 통제되는 온프레미스 시설에서 여러 회사 또는 고객이 공동으로 사용하도록 가상화된 IT 인프라를 보관하는 클라우드 서비스 제공업체가 소유한 원격 시설 또는 시설들의 네트워크로 진화했습니다.

https://www.ibm.com/kr-ko/topics/data-centers

데이터 센터 네트워크는 안정적이고 빠른 대용량 서비스를 제공해야 합니다. 그렇게 하려면 다양한 이중화 기술과 높은 통신량을 수용할 수 있어야 하죠.

이러한 요구 사항을 충족하기 위해 기존에는 Core switch, Distribution layer switch, Access switches 로 구성된 3계층 구성을 사용했습니다. 하지만 최신 데이터 센터에서는 Spine leaf 구조로 변화되었죠. 이러한 내용들은 다음 포스팅에서 다뤄 보도록 하겠습니다.

프로토콜

Spring, Django 와 같이 웹 프레임워크라고 불리는 것들을 이용해 API 를 작성하거나, 웹 페이지를 만들어보신 경험이 있는 분들은 프로토콜이라는 단어가 굉장히 익숙하실 것입니다. HTTP 로 불리는 것과도 익숙하실 것이구요. 규정과 규약, “이렇게 보내면 이렇게 알아들어” 와 같은 규약들을 프로토콜이라고 합니다. 그리고 최근의 여러 프로토콜 기술들은 이더넷 기반 TCP/IP 기반으로 변경되고 있죠.

네트워크 자원은 한정적입니다. 자원이 한정적이라면 우리는 같은 내용을 보내거나 받아도 최대한 그것을 효율적인 방식으로 정의해야 합니다. 그렇다 보니 대부분의 프로토콜이 2진수 기반으로 만들어졌죠. 최소한의 비트로, 최대한 치밀하게 약속을 정의해야 했던 겁니다.

하지만 우리에게 익숙한, SMTP, HTTP 와 같은 프로토콜들은 문자 기반이죠. 애플리케이션 수준에서 수행되는 프로토콜들은 비트 자체가 아닌 문자를 이용해서 헤더 등을 표현하고 전송합니다. 개발자 도구를 열면 바로 보이는 그것들이죠!

TCP/IP 는 보통 묶여서 불립니다. 그것들은 별도 계층에서 동작하는 각각의 프로토콜이지만 함께 사용되죠. 이러한 것들을 프로토콜 스택이라고 하는데, 이 스택의 부분 – 애플리케이션 계층, 트랜스토프 계층, 네트워크 계층, 피지컬 계층 등에 대한 부분들도 다음 포스팅의 책임으로 남겨두겠습니다.

OSI – Open Systems Interconnection Reference Model , TCP/IP

OSI-7 Layer: 복잡한 데이터 전송 과정을 나누자

OSI 모형(Open Systems Interconnection Reference Model)은 국제표준화기구(ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. 일반적으로 OSI 7 계층이라고 한다.

https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95

OSI Model 은 “네트워크 프로토콜을 표준화하여, 서로 다른 벤더와 시스템 간의 상호 운용성을 위한 프레임워크를 만들자” 라는 목적 아래 개발되었습니다. 보통 네트워크 프로토콜을 이해하고, 개발하기 위한 참조 도구로 설계되어 서로 다른 시스템이 기본 하드웨어나 소프트웨어에 관계없이 통신할 수 있게끔 하는 역할을 합니다. 마치 TCP/IP, Wi-Fi 와 같은 많은 최신 네트워크 프로토콜 및 기술이 그것을 엄격하게 지키진 않지만, 영향을 많이 받은 것처럼 말이죠.

위의 그림은 복잡한 데이터 전송 과정을 레이어별로 나눈 것입니다. 아래의 네 개의 계층을 Data Flow Layer 라고 하며, 이들의 관심하는 말 그대로 데이터가 잘 흘러가게끔 하는 것입니다. 애플리케이션을 개발하는 개발자들이 그리 초점을 두지 않는 곳이기도 하죠. 반대로 애플리케이션 레이어는 네트워크 엔지니어들이 초점을 맞추는 곳이 아니기도 합니다.

TCP/IP – 이론보다 실용성에 중심을

현대 네트워크는 대부분 TCP/IP 와 이더넷을 중심으로 이루어져 있습니다. 개발자가 고려해야 할 계층, 네트워크 엔지니어가 고려해야 할 계층을 조금 더 명확하게 나타내었습니다.

7계층으로 구분되는 OSI 모델과는 달리 TCP/IP 모델은 4계층으로 구분됩니다. 상위 3개의 계층을 하나의 애플리케이션 계층으로, 아래 두 개의 계층을 하나의 네트워크 계층으로 구분하죠. TCP/IP와 OSI-7 계층을 조금 더 깊게 이해하기 위해서, 각각의 OSI-7 계층이 어떤 역할을 수행하는지, 주요 관심사는 무엇인지를 알아보도록 하겠습니다.

1계층: Physical Layer

가장 아랫부분을 차지하는 1계층은 물리 계층으로, 주로 전기 신호를 전달하는 데에 관심이 있습니다. 허브, 리피터, 케이블, 커넥터, 트랜시버, 탭과 같은 물리 장치들을 이용해 전기 신호를 그대로 전달하는 것이 그 목적입니다. 전기 신호가 들어오면, 1계층의 장비들은 전기 신호가 들어온 포트를 제외하고 모튼 포트에 같은 전기 신호를 전달하게 됩니다.

허브. 여러 대의 컴퓨터와 네트워크 장비들을 연결하는 장치http://wiki.hash.kr/index.php/%ED%97%88%EB%B8%8C

2계층: Data Link Layer

2계층의 주요 관심하는 1계층으로부터 들어온 전기 신호를 모아 우리가 알아볼 수 있는 데이터 형태로 처리하는 것입니다. 1계층이 전기 신호를 잘 전달하는 것에 관심이 있던 것과는 다르게, 2계층은 주소 정보를 정의하고 정확한 주소로 통신이 되도록 하는 데에 초점이 맞추어져 있습니다. 출발한 곳은 어디인지, 도착할 곳은 어디인지, 나에게 보낸 것은 맞는지, 내가 처리하는 지에 대해 검사한 후 데이터 처리를 수행하게 됩니다.

주소 체계가 생기며, 2계층은 여러 통신이 한꺼번에 이루어지는 것을 구분하기 위한 기능이 정의됩니다. 전기 신호를 모아 알아볼 수 있는 데이터 형태로 처리하므로, 이 데이터가 어떤 문제가 있는지를 검사하고 고치는 역할까지 수행할 수 있죠. 주로 신뢰할 수 있는 이더넷 기반 네트워크의 2계층에서는 에러를 탐지하는 역할만 수행합니다.

2계층은 “도착할 곳은 어디인지” 에 대한 검사를 수행한다고 했습니다. 즉 “도착할 곳에서 이를 받을 수 있는가?” 를 확인하는 작업부터 수행한다는 것을 의미합니다. 이를 Flow Control 이라고 합니다.

데이터 통신에서 흐름 제어(flow control)는 더 빠른 송신자가 느린 수신자를 제압하지 못하도록 두 노드 간 데이터 전송 속도를 관리하는 과정이다. 수신 노드가 전송 노드의 데이터에 제압되지 않도록 수신자가 전송 속도를 제어할 수 있는 매커니즘을 제공한다. 흐름 제어는 혼잡이 실제로 발생할 때 데이터의 흐름을 통제하기 위해 사용되는 혼잡 제어와는 구별된다.[1]

https://ko.wikipedia.org/wiki/%ED%9D%90%EB%A6%84_%EC%A0%9C%EC%96%B4

2계층의 주요 장비는 네트워크 인터페이스 카드, 그리고 스위치입니다. 2계층에서는 MAC 주소라고 불리는 주소 체계가 존재하고, 네트워크 인터페이스 카드, 스위치 모두 그것을 이해할 수 있습니다. 각각의 장비들은 아래의 역할을 수행합니다.

네트워크 인터페이스 카드:

  1. 전기 신호를 데이터 형태로 만듦
  2. 목적지, 출발지 MAC 주소를 확인
  3. 네트워크 인터페이스 카드의 MAC 주소를 확인
  4. 목적지 주소와 네트워크 인터페이스 카드가 가지고 있는 주소가 일치하면 데이터를 처리, 그렇지 않다면 폐기

네트워크 인터페이스 카드에는 고유의 MAC 주소가 존재하므로 데이터로 바뀐 전기 신호의 목적지, 출발지 주소를 확인한 후 자신에게 들어오는 것이 맞는지를 확인한 후 그것을 처리하는 역할을 수행합니다.

스위치:

  • MAC 주소를 보고, 통신해야 할 포트를 지정해 내보냄

스위치는 단말의 MAC 주소, 연결된 포트를 알 수 있습니다. 해당 데이터를 기반으로 단말들이 통신할 때 포트를 적절히 필터링하고 포워딩하는 역할을 해 주죠. 1계층의 허브가 모든 포트에 같은 전기 신호를 전달하는 것과 상당히 다릅니다.

3계층: Network Layer

네트워크 계층인 3계층은 여러 네트워크에서 데이터 패킷의 논리적 주소 지정 및 라우팅에 중점을 두는 계층입니다. 데이터 전송을 위한 최적 경로를 결정하고 해당 경로로 패킷을 전송하는 역할을 합니다.

3계층의 주요 특징은 IP 주소와 같은 논리적인 주소가 정의된다는 것입니다. MAC 이 물리적인 주소라면, IP 는 논리적인 주소인데 IP주소는 사용자가 환경에 맞게 변경해 사용할 수 있고, 구조가 “네트워크 주소 부분.호스트 주소 부분” 으로 나뉜다는 특징이 있죠. 3계층의 단말들은 해당 네트워크 주소 정보를 이용해 “내가 속한 네트워크는 어디이고, 원격지 네트워크는 어디이고, 원격지 네트워크로 가려면 어디로 가야 하는지 결정” 하는 역할을 수행합니다. 바로 라우터가 그 역할을 수행하는데, 라우터는 3계층의 IP 주소를 정확하게 이해하고 경로를 결정한 다음 해당 경로로 패킷을 전송합니다.

4계층: Transport Layer

이쯤에서 위에서 봤던 그림을 한 번 더 확인해 봅시다. Transport Layer 는 상위 계층(그림에서, 우상단의 Application Layer) 과 가장 맞닿아 있네요.

4계층인 Transport Layer 는 데이터들이 정상적으로 잘 보내지도록 확인하는 역할을 수행합니다. 3계층까지는 전기 신호를 해석하고, 확인하고, 보내는 데에 집중한다면 4계층에서는 패킷(정보 기술에서 패킷 방식의 컴퓨터 네트워크가 전달하는 데이터의 형식화된 블록) 이 유실되거나 순서가 바뀌지 않는지를 확인하고, 만약 그런 일이 발생한다면 바로잡아 주는 데에 관심이 있습니다. 4계층에서는 패킷을 분할할 때 패킷 헤더에 보내고 받는 순서 정보를 적어 통신하므로, 유실되거나 뒤바뀌더라도 바로잡을 수 있습니다. 각각 보내는 순서, 받는 순서, 애플리케이션을 구분할 수 있는 번호들을 Sequence Number, ACK Number, Port Number 라고 합니다.

4계층의 주요 장비로는 로드 밸런서, 방화벽이 있습니다. 부하를 분산하고 보안 정책을 수립한 후 그것에 따라 패킷을 통과하거나 차단시키는 역할을 수행하게 됩니다.

5계층: Session Layer

5계층은 응용 프로그램 간의 통신 세션을 설정하고 관리하고, 종료하는 데에 관심이 있습니다. TCP/IP 세션을 만들고 없애는 책임을 수행하게 되죠. 예상치 못한 에러로 통신이 중단되는 경우가 있다면, 그것을 복구하고 통신을 재전송하는 역할도 수행합니다.

6계층: Presentation Layer

6계층은 서로 표현 방식이 다른 애플리케이션 및 시스템 간의 통신을 돕기 위해서 데이터들을 하나의 통일된 구문 형식으로 변환시키는 데에 관심이 있습니다. 전자 우편을 위한 인터넷 표준 포맷인 MIME 인코딩, 암호화, 압축과 같은 동작들이 6계층에서 이루어집니다.

7계층: Application Layer

최상위 계층인 애플리케이션 계층은 애플리케이션의 프로세스를 정의하고 서비스를 수행하는 데에 관심을 두고 있습니다. 해당 계층의 프로토콜 중 대표적인 것은 HTTP, SMTP, FTP, TELNET 등이 있습니다.

Encapsulation & Decapsulation

위에서 하위 계층에서 상위 계층으로 데이터가 흘러가는 과정, 특히 “각 계층이 어디에 큰 관심이 있는가?” 를 읽어보셨다면 상위 계층에서 하위 계층으로 데이터를 보낼 때, 결과적으로 데이터는 물리 계층을 통해서 전기 신호 형태로 전송되고, 그 데이터는 다시 하위 계층에서 상위 계층으로 데이터를 보내게 된다는 것을 이해하실 수 있을 것입니다. 일련의 “상위 계층에서, 하위 계층을 통해서 데이터를 보내는 과정” 을 “인캡슐레이션”, 반대로 “하위 계층부터, 상위 계층으로 데이터를 보내는 과정” 을 “디캡슐레이션” 이라고 합니다.

패킷(packet, 문화어: 파케트, 소포)은 정보 기술에서 패킷 방식의 컴퓨터 네트워크가 전달하는 데이터의 형식화된 블록이다. 패킷은 제어 정보와 사용자 데이터로 이루어지며[1], 이는 페이로드라고도 한다. 패킷을 지원하지 않는 컴퓨터 통신 연결은 단순히 바이트문자열비트를 독립적으로 연속하여 데이터를 전송한다. 데이터가 패킷으로 형식이 바뀔 때, 네트워크는 장문 메시지를 더 효과적이고 신뢰성 있게 보낼 수 있다.

https://ko.wikipedia.org/wiki/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC_%ED%8C%A8%ED%82%B7

현대 네트워크는 대부분 패킷을 기반으로 이루어져 있습니다. 데이터를 패킷으로 나누었기 때문에, 하나의 통신이 회선 전체를 차지하지 않고 동시에 여러 단말들을 통신하게끔 할 수 있죠. 데이터를 패킷으로 쪼개 보내면, 받는 쪽에서는 해당 데이터를 다시 큰 것으로 만듭니다.

이렇게 데이터 플로 계층(1계층부터 4계층) 으로 데이터가 내려보내지며 분할되는 과정을 인캡슐레이션이라고 합니다. 인캡슐레이션 과정에서 데이터는 쪼개지고 데이터 전송을 위한 정보를 헤더에 붙여넣게 됩니다.

반대로 이를 받는 쪽에서는, 인캡슐레이션 과정에서 쪼개진 데이터를 데이터 형태로 만들어 상위 계층으로 올리게 되는데, 이를 디캡슐레이션이라고 합니다. 인캡슐레이션 과정에서 데이터 정보를 헤더에 붙여넣는 것과 반대로 각각 계층이 올라감에 따라서, 필요 없는 헤더 정보는 벗겨내고 올려보내 주는 역할을 수행하게 되죠.

요약

  • 네트워크가 어떻게 구성되어 있는지, 간단한 구성도를 통해서 알아보았습니다.
  • OSI-7 Layer 가 무엇인지에 대해서 알아보고, 각 계층이 어떤 일을 수행하는지에 대해서 알아보았습니다.
  • TCP-IP 프로토콜 스택이 무엇인지에 대해서 알아보고, 그것과 OSI-7 Layer 이 어떤 차이를 가지는지에 대해서 알아보았습니다.
  • 데이터를 전송하며 이루어지는 Encapsulation 과정과 데이터를 송신하며 이루어지는 Decapsulation 과정에 대해서 알아보았습니다.

Leave A Comment

Avada Programmer

Hello! We are a group of skilled developers and programmers.

Hello! We are a group of skilled developers and programmers.

We have experience in working with different platforms, systems, and devices to create products that are compatible and accessible.