이론 정리/인프라

네트워크 입문 001

철매존 2022. 8. 17. 22:47
728x90

네트워크 시작하기

물리적 연결부터 네트워크 모든 것의 이론적 기반이 되는 OSI7계층, 그리고 패킷이 실제로 전송되는 인캡슐레이션(Encapsulation, 캡슐화) 과정까지 간단히 알아본다.

네트워크 구성도 살펴보기

네트워크는 크게 서비스를 받는 입장과 서비스를 제공하는 입장으로 나뉜다.
서비스를 제공하는 입장에서는 네트워크에 접속한 구성원 수, 필요한 네트워크 속도에 따라 여러 상황을 고려해야 한다.

홈 네트워크

홈 네트워크의 구성은 어떤 인터넷 회선을 연결하더라도 같다.
홈 네트워크를 구성하는 데는 모뎀, 공유기, 단말 간에 물리적 연결이 필요하다.

무선 연결은 무선 랜 카드와 무선 신호를 보낼 수 있는 매체(공기)가 필요하다.
유선 연결은 유선 랜 카드, 랜 케이블이 플요하다.

프로토콜

네트워크에서 통신할 때의 규약을 전에는 많은 프로토콜이 있었지만, 최근에는 여러 프로토콜 기술이 이더넷-TCP/IP기발 프로토콜로 변경되고 있다.

  • 물리적 측면
    • 데이터 전송 매체, 신호 규약, 회선 규격 등.
    • 이더넷이 널리 쓰인다.
  • 논리적 측면
    • 장치들끼리 통신하기 위한 트로토콜 규격.
    • TCP/IP가 널리 쓰인다.

프로토콜은 한정된 자원으로 통신을 수행해야 하기 때문에 최대한 적은 데이터를 이용해 효율적인 정의와 사용을 했어야 했다.
그렇기 때문에 대부분의 프로토콜이 문자 기반이 아닌 2진수 비트기반으로 만들어졌다.
최소한의 비트로 내용을 전송하기 위해서는 매우 치밀하게 서로 간의 약속을 정의해야 했다.

다만 애플리케이션 레벨의 프로토콜은 비트 기반이 아닌 문자 기발 프로토콜이 많이 사용된다(HTTP, SMTP등등..)
이들은 비트가 아닌 문자로 헤더, 헤더 값, 데이터를 표현한다.

텍스트 파일과 같은 데이터가 전달되기 때문에 비트 기반 프로토콜에 비해 효율성은 떨어지지만 다양한 확장이 가능하다.

TCP/IP는 보통 프로토콜이라고 부르지 않고 프로토콜 스택이라고 부른다.
TCP와 IP는 별도 계층에서 동작하는 프로토콜이지만, 두 개를 함께 사용하고 있는데, 이런 프로토콜 묶음을 프로토콜 스택이라고 부른다.
실제로 TCP/IP 프로토콜 스택에는 TCP와 IP뿐 아니라 UDP, ICMP, ARP, HTTP, SMTP, FTP같은 다양한 애플리케이션 레이어 포로토콜이 있다.

TCP/IP프로토콜 스택은 총 4개 부분으로 나뉘다.
물리 부분인 이더넷 외에 데이터가 목적지를 찾아가도록 해주는 네트워크 계층, 잘린 패킷을 데이터 형태로 잘 조합하도록 도와주는 전송 계층과 애플리케이션 계층으로 구성된다.

OSI7계층과 TCP/IP

OSI7계층과 TCP/IP스택은 복잡한 네트워크를 단계별로 나누어 이해하기 쉽도록 도와준다.

OSI 7계층

먼저 OSI7계층은 네트워크 데이터 통신을 설명할 때 반드시 필요한 개념이다.
OSI7계층이 네트워크 동작을 나누어 이해하고 개발하는 데 많은 도움이 되므로 네트워크의 주요 레퍼런스 모델로 활용되고 있지만, 현재는 TCP/IP 프로토콜 스택 기반으로 되어 있다.

복잡한 데이터 전송 과정을 OSI7계층으로 나누어 보면 이해하기 쉽다.
또한 계층별로 표준화된 프로토콜 템플릿을 통해 네트워크 프로토콜을 전부 개발하는 대신 계층별로 프로토콜을 개발해 네트워크 구성 요소들을 모듈화 할 수 있다.
모듈화된 요소는 기존에 개발된 프로토콜과 연동해 사용할 수 있다.

OSI7계층은 다시 두 가지 계층으로 나눌 수 있다.

  • 1~4계층
    • 데이터 플로 계층(Data Flow Layer)
    • 하위 계층
  • 5~7계층
    • 애플리케이션 계층(Application Layer)
    • 상위 계층

이러한 계층 분류는 계층의 역할과 목표에 따른 것이다.

애플리케이션 개발자는 애플리케이션 계층 프로토코로을 개발할 때에 하위 데이터 플로 계층을 고려하지 않고 데이터 표현에 초점을 맞춘다.

반대로 네트워크 엔지니어는 애플리케이션 계층을 잘 고려하지 않는다.

그래서 보통 애플리케이션 개발자는 Top-Down, 네트워크 엔지니어는 Bottom-Up형식으로 네트워크를 인식한다.

TCP/IP 프로토콜 스택

현대의 네트워크는 거의 대부분 TCP/IP와 이더넷으로 이루어져 있다.
기술과 표준을 만들 때 만들어진 역사적 배경이나 만든 조직, 프로토콜이 만들어진 목표에 따라 성향이 많이 반영되는데 TCP/IP는 이론보다 실용성에 중점을 둔 프로토콜이다.

TCP/IP모델은 4계층으로 구분한다.
OSI7계층은 계층을 데이터 플로 / 애플리케이션으로 구분하였는데, 이 분류는 애플리케이션 부분과 데이터 전달에 집중하는 하부 계층 구분이 목적이었다.
그러다 보니 자연스럽게 애플리케이션 개발자가 고려해야 할 부분과 서버 엔지니어가 \고려구분해야 할 부분이 구분되었는데 TCP/IP모델은 그 구분이 더 확연히 드러난다.

위의 사진처럼 구분한다.
이는 현실에 쉽게 반영하도록 간단히 구분하는 TCp/IP프로토콜 스택의 셩향 때문이다.

OSI7계층별 이해하기

이제 OSI 7계층을 계층별로 자세히 알아본다.
OSI7계층은 참조형 모델이고 실제로 사용하는 프로토콜은 TCP/IP 프로토콜 스택으로 구현되어 있지만, 조금 더 계층별로 자세히 다루기 위해서 일단 OSI7계층으로 나누어 설명한다.

1계층(피지컬 계층)

1계층은 물리 계층으로 물리적 연결과 관련된 정보를 정의한다.
주로 전기 신호를 전달하는 데에 초점이 맞추어져 있다.
1계층의 주요 항비로는 허브, 리피터, 케이블, 커넥터, 트랜시버, 이 있다.

허브리피터는 네트워크 통신을 중재하는 네트워크 장비이다.
케이블커넥터는 케이블 본체를 구성하는 요소이다.
트랜시버는 컴퓨터의 랜카드와 케이블을 연결하는 장비이다.
은 네트워크 모니터링과 패킷 분석을 위해 전기 신호를 다른 장비로 복제해 준다.

1계층에서는 들어온 전기 신호를 그대로 잘 전달해주는 것이 목적이므로 전기 신호가 1계층 장비에 들어오면 이 전기 신호를 재생성해서 내보낸다.
1계층 장비에는 주소의 개념이 없으므로 전기 신호가 들어온 포트를 제외하고 모든 포트에 같은 전기 신호를 전송한다.

전기 신호를 잘 보내는 것이 목적이므로 출발지와 목적지를 구분할 수 없다.

2계층(데이터 링크 계층)

2계층은 데이터 링크 계층으로 전기 신호를 모아 우리가 알아볼 수 있는 데이터 형태로 처리한다.
2계층은 전기 신호의 전달보다는 주소 정보를 정의하고 정확한 주소로 통신이 되도록 하는 데 초점이 맞추어져 있다.

출발지와 도착지를 확인하고 내게 보낸 것이 맞는지, 또는 내가 처리해야 하는지에 대해 검사한 후 데이터 처리를 수행한다.

2계층에서는 주소 체계가 생기면서 여러 통신이 한꺼번에 이루어지는 것을 구분하기 위한 기능이 주로 정의된다.
전기 신호를 모아 데이터 형태로 처리하므로 데이터에 대한 에러를 탐지하거나 고치는 역할을 수행할 수 있다.
과거에는 신뢰할 수 없는 미디어를 이용해 통신하는 경우도 많아 2계층에서 에러를 탐지하고 고치거나 재전송했지만 이더넷 기반 네트워크의 2계층에서는 에러 탐지 역할만을 수행한다.

  • 플로 컨트롤
    • 주소 체계가 생긴다는 의미는 한 명이 아닌 여러 명과 동시에 통신할 수 있다는 것이다. 즉 무작정 데이터를 던지는게 아니라 받는 사람이 현재 데이터를 받을 수 있는지 확인하는 작업부터 해야 한다는 것이다.

2계층에서 동작하는 네트워크 구성 요소는 네트워크 인터페이스 카드스위치이다.
2계층의 가장 중요한 특징은 MAC주소라는 주소 체계가 있다는 것이다.
2계층에서 동작하는 네트워크 인터페이스 카드와 스위치 모두 MAC주소를 이해할 수 있고 스위치는 MAC주소를 보고 통신해야 할 포트를 지정해 내보내는 능력이 있다.

네트워크 인터페이스 카드는 부르는 용어가 많다.
각 용어가 생긴 이유는 다양하지만 결국 PC나 서버에서 네트워크를 연결해주는 카드나 인터페이스를 지칭하는데 다음은 네트워크 인터페이스 카드를 지칭하는 다양한 예이다.

  1. NIC(Network Interface Controller / Network Interface Card)
  2. 네트워크 카드(Network Card)
  3. 랜 카드(lan Card)
    • 과거에 이더넷은 LAN(Local Area Network)에서만 사용되다 보니 네트워크 인터페이스 카드를 랜카드라도 부르게 되었다.
  4. 물리 네트워크 인터페이스(Physical Network Interface)
    • 물리적으로 컴퓨터의 내부와 외부를 연결해주는 중간 지점이라는 의미
    • 이렇게 부를 경우, 1계층 구성요소로 오해할 수 있다.
      • NIC는 2계층 구성요소이다.
  5. 이더넷 카드(Ethernet Card)라고 부른다.
    • 대부분의 네트워크가 이더넷으로 이루어져 있어 일반적인 네트워크 연결 시 이더넷을 연결하는 네트워크 인터페이스 카드가 사용되었고 이더넷 카드라는 명칭을 사용하기도 한다.
  6. 네트워크 어댑터(Network Adapter)라고 부르기도 한다.

네트워크 인터페이스 카드의 동작 방식은 다음과 같다.

  1. 전기 신호를 데이터 형태로 만든다.
  2. 목적지 MAC주소와 출발지 MAC주소를 확인한다.
  3. 네트워크 인터페이스 카드의 MAC주소를 확인한다.
  4. 목적지 MAC주소와 네트워크 인터페이스 카드가 갖고 있는 MAC주소가 맞으면 데이터를 처리하고 다르면 데이터를 폐기한다.

-> 네트워크 인터페이스 카드에는 고유 MAC주소가 있다. 입력되는 전기 신호를 데이터 형태로 만들고 데이터에서 도착지 MAC주소를 확인한 후 자신에게 들어오는 전기 신호가 맞는지 확인한다. 이후 자신에게 들어오는 전기 신호가 맞으면 이 데이터를 상위 계층에서 처리할 수 있도록 메모리에 적재한다.

스위치는 단말이 어떤 MAC주소인지, 연결된 포트는 어느 것인지 주소 습득(Address Learning)과정에서 알 수 있다.
이 데이터를 기반으로 단말들이 통신할 때 포트를 적절히 필터링하고 정확한포트로 포워딩해준다.
반면 1계층에서 동작하는 허브는 한 포트에서 전기 신호가 들어오면 전체 포트로 전기 신호를 전달하다 보니 전체 네트워크에서 동시에 오직 하나의 장비만 데이터를 보낼 수 있다.
스위치의 적절한 필터링과 포워딩 기능으로 통신이 필요한 포트만 사용하고 네트워크 전체에 불필요한 처리가 감소하면서 이더넷 네트워크 효율성이 크게 향상되었고, 이더넷 기반 네트워크가 급증하는 계기가 되었다.

3계층(네트워크 계층)

3계층에서는 IP주소와 같은 논리적인 주소가 정의된다.
데이터 통신을 할 때에는 두 가지 주소가 사용된다.
바로 MAC주소와 3계츠으이 논리적인 IP주소이다.
MAC주소와 달리 IP주소는 사용자가 환경에 맞게 변경해 사용할 수 있고 네트워크 주소 부분과 호스트 주소 부분으로 나뉜다.
3계층을 이해할 수 있는 장비나 단말은 네트워크 주소 정보를 이용해 자신이 속한 네트워크와 원격지 네트워크를 구분할 수 있고 원격지 네트워크를 가려면 어디로 가야 하는지 경로를 지정하는 능력이 있다.

IP주소는 주소를 나누는 구분점이 3개이므로 어디가 네트워크 주소이고 어디가 호스트 주소인지 구분하기 어렵다.

3계층에서 동작하는 장비는 라우터이다.
라우터는 3계층에서 정의한 IP주소를 이해할 수 있다.
라우터는 IP주소를 사용해 최적의 경로를 찾아주고 해당 경로로 패킷을 전송하는 역할을 한다.

4계층(트랜스포트 계층)

4계층은 앞서 보았던 1,2,3계층과 다른 역할을 한다.
앞에서 설명하였듯 OSI7계층은 데이터 플로 계층과 상위 계층 두 개로 이루어져 있다.

해당 설명에 따르면

하위 4개 계층은 데이터를 잘 쪼개 보내고 받는 역할을 중점적으로 고려하고
네트워크 애플리케이션에서 하위 4계층의 역할을 별도로 고민하지 않도록 도와준다.

애플리케이션에서는 데이터를 하위 4개 계층으로 내려보내기만 하면 이 데이터를 쪼개 정보를 붙여 목적지까지 잘 전달한다.

하위 계층인 1,2,3계층은 신호와 데이터를 올바른 위치로 보내고 실제 신호를 잘 만들어 보내는 데 집중한다.

실제로 4계층에서는 해당 데이터들이 정상적으로 잘 보내지도록 확인하는 역할을 한다.
패킷 네트워크는 데이터를 분할해 패킷에 실어보내다 보니 중간에 패킷이 유실되거나 순서가 바뀌는 경우가 생길 수 있다.
이 문제를 해결하기 위해 패킷이 유실되거나 순서가 바뀌었을 때 바로잡아 주는 역할을 4계층에서 수행한다.

4계층에서 패킷을 분할할 때 패킷 헤더에 보내는 순서와 받는 순서를 적어 통신하므로 패킷이 유실되면 재전송을 요청할 수 있고 순서가 뒤바뀌더라도 바로잡을 수 있다.
패킷에 보내는 순서를 명시한 것이 시퀀스 번호(Sequence Number)이고 받는 순서를 나타낸 것이 ACK번호(Acknowledgement Number)이다.
또한 장치 내의 많은 애플리케이션을 구분할 수 있도록 포트 번호를 사용해 상위 애플리케이션을 구분한다.

4계층에서 동작하는 장비로는 로드 밸런서방화벽이 있다.
이 장비들은 4계층에서 볼 수 있는 애플리케이션 구분자(포트 번호)와 시퀀스, ACK번호 정보를 이용해 부하를 분산하거나 보안 정책을 수립해 패킷을 통과, 차단하는 기능을 수행한다.

5계층(세션 계층)

양 끝단의 응용 프로세스가 연결을 성립하도록 도와주고 연결이 안정적으로 유지되도록 관리하고 작업 완료 후에는 이 연결을 끊는 역할을 한다.
우리가 흔히 부르는 세션을 관리하는 것이 주요 역할인 세션 계층은 TCP/IP 세션을 만들고 없애는 책임을 진다.
또한, 에러로 중단된 통신에 대한 에러 복구와 재전송도 수행한다.

6계층(프레젠테이션 계층)

표현 방식이 다른 애플리케이션이나 시스템 간의 통신을 돕기 위해 하나의 통일된 구문 형식으로 변환시키는 기능을 수행한다.
일종의 번역기나 변환기 역할을 수행하는 계층이고, 이런 기능은 사용자 시스템의 응용 계층에서 데이터의 형식상 차이를 다루는 부담을 덜어준다.
MIME인코딩이나 암호화, 압축, 코드 변환과 같은 동작이 이 계층에서 이루어진다.

7계층(애플리케이션 계층)

애플리케이션 프로세스를 정의하고 애플리케이션 서비스를 수행한다.
네트워크 소프트웨어의 UI부분이나 사용자 입,출력 부분을 정의하는 것이 애플리케이션 계층의 역할이다.
애플리케이션 계층의 프로토콜을 엄청나게 많지만 대표적인 프로토콜로는 FPT, SMTP, HTTP, TELNET이 있다.

인캡슐레이션과 디캡슐레이션

상위 계층에서 하위 계층으로 데이터를 보내면 물리 계층에서 전기 신호 형태로 네트워크를 통해 신호를 보낸다.
받는 쪽에서는 다시 하위 계층에서 상위 계층으로 데이터를 보낸다.
이렇게 데이터를 보내는 과정을 인캡슐레이션(Encapsulation), 받는 과정을 디캡슐레이션(Decapsulation)이라고 부른다.

현대 네트워크는 대부분 패킷 기반 네트워크이다.
패킷 네트워크는 데이터를 패킷이라는 작은 단위로 쪼개 보내는데 이런 기법으로 하나의 통신이 회선 전체를 점유하지 않고 동시에 여러 단말이 통신하도록 해준다.
데이터를 패킷으로 쪼개고 네트워크를 이용해 목적지로 보내고 받는 쪽에서는 패킷을 다시 큰 데이터 형태로 결합해 사용한다.

  • 인캡슐레이션
    • 데이터를 데이터 플로 계층으로 내려보내면서 패킷에 데이터를 넣을 수 있도록 분할한다.
    • 네트워크 상황을 고려해 적절한 크기로 데이터를 쪼개고 4계층부터 네트워크 전송을 위한 정보를 헤더에 붙여넣는다.
    • 헤더 정보는 4계층, 3계층, 2계층에서 각각 자신이 필요한 정보를 추가하는데, 이 정보는 우리가 알아볼 수 있는 문자가 아닌 미리 정의된 비트 단위로 쓴다.
      • 4계층에서 헤더를 추가하고 3계층에서 다시 필요한 헤더 정보를 추가하고 .... 이렇게 한다.
  • 디캡슐레이션
    • 받은 전기 신호를 데이터 형태로 만들어 2계층으로 올려보낸다.
    • 2계층에서는 송신자가 작성한 정보를 확인한다.
    • 만약 2계층에 적힌 정보 중 목적지가 자신이 아니라면 버린다.
      • 이 역할은 랜 카드가 담당한다.
    • 자신에게 온게 맞다면 3계층으로 올려보낸다.
      • 이 때 2계층의 헤더 정보는 필요없으니 벗겨내고 올려보낸다.
    • ..... 4계층까지 반복

이러한 작업은 2가지 정보 흐름으로 설명될 수 있다.

  • 인캡슐레이션, 디캡슐레이션 과정을 통해 데이터가 전송되는 과정
  • 각 계층 헤더를 이용해 송신자 계층과 수신자 계층 간의 논리적 통신 과정

실제로 데이터는 상위 계층에서 데이터 플로 계층으로, 즉 상위 계층에서 패킷 형태로 하나씩 인캡슐레이션되면서 내려오고 랜 카드에서 전기 형태로 변환되어 목적지로 전달된다.
이 전기 신호를 받은 목적지에서는 데이터 형태로 변환하여 상위 계층으로 올려주고 이 패킷들을 조합해 데이터 형태로 만들게 된다.
결국 주고받는 데이터 흐름을 간단히 표현하면 상위 -> 하위로, 다시 하위 -> 상위로 전달되는 흐름이다.

각 계층에서 인캡슐레이션 과정에서 수행했던 것처럼 현재 계층에서 추가하는 헤더 정보는 받는 상대방이 확인해야 하는 정보이다.

데이터를 인캡슐리이션하는 과정에서 헤더에 넣는 정보들이 꽤 많아 이를 모두 이해하기는 힘들다.
또한 프로토콜마다 특성이 달라 적어 넣는 정보가 다르므로 이 정보를 모두 이해하려면 많은 공부가 필요하다.
다만 이런 복잡한 정보들에도 규칙이 있으며 헤더에 두 가지 정보는 반드시 포함되어야 한다.

  • 현재 계층에서 정의하는 정보
  • 상위 프로토콜 지시자

현재계층에서 정의하는 정보는 앞에서 다루었던 OSI7계층의 각 계층에서의 목적에 맞는 정보들이 포함된다.
4계층의 목적은 큰 데이터를 잘 분할하고, 받는 쪽에서는 잘 조립하는 것이다.
그렇기 때문에 4계층에서는 데이터에 순서를 정하고 받은 패킷의 순서가 맞는지, 빠진 패킷은 없는지 등등을 점검하는 역할이 중요하며 이 정보를 헤더에 적어넣게 된다.

TCP/IP의 4계층 프로토콜인 TCP에서는 Sequence, ACKnowledgement번호 필드로 이 데이터를 표현한다.
3계층 헤더에는 3계층에서 정의하는 논리적인 주소인 출발지, 도착지 IP주소를 헤더에 적어 넣는다.
2계층은 MAC주소를 정의하는데 3계층처럼 2계층도 출발지, 도착지 MAC주소 정보를 헤더에 넣는다.

그럼 2번 상위 프로토콜 지시자는 왜 필요할까??
프로토콜 스택은 상위 계층으로 올라갈수록 종류가 많아진다. 3계층 프로토콜인 IP는 4계층에서 다시 TCP와 UDP로 나뉘고 그보다 더 상위 계층에서는 FTP, HTTP, MSTP, POP3등 더 다양한 프로토콜로 다시 나뉜다.

인캡슐레이션 과정에서는 상위 프로토콜이 많아도 문제가 없지만 디캡슐레이션 하는 목적지 쪽에서는 헤더에 아무 정보가 없으면 어떤 상위 프로토콜로 올려보내 주어야 할지 결정할 수 없다.
예를 들어 3계층에서 목적지 IP주소를 확인하고 4계층으로 데이터를 올려보낼 때 헤더에 상위 프로토콜 정보가 없다면 TCP로 보내야 할지, UDP로 보내야 할지 구분할 수 없다.
4계층에서 애플리케이션 계층으로 올려보낼 때에도 같은 문제가 발생한다.
이런 문제가 발생하지 않도록 인캡슐레이션 하는 쪽에서는 헤더에 상위 프로토콜 지시자 정보를 포함해야 한다.





각 계층마다 이 상위 프로토콜 지시자를 가지고 있지만 이름이 달라 4계층은 포트 번호(Port Number), 3계층은 프로토콜 번호(Protocol Number), 2계층은 이더 타입(Ether Type)이라고 부른다.

'이론 정리 > 인프라' 카테고리의 다른 글

네트워크 입문 002  (0) 2022.11.13
API프로토콜(REST, gRPC, GraphQL)에 대해  (0) 2022.10.30
OSI7계층  (1) 2022.10.30
TCP/UDP  (0) 2022.10.29
네트워크 인프라 기초 공부 및 정리  (0) 2022.08.18