개발하는 프로 국밥러
article thumbnail

IT 엔지니어를 위한 네트워크 입문

고재성, 이상훈님의 책을 보며 정리한 내용입니다.

문제가 될 시 해당글 삭제하겠습니다.


유니캐스트, 멀티캐스트, 브로드캐스트, 애니캐스트

  • 네트워크에서 출발지에서 목적지로 데이터를 전송할 때 사용하는 통신 방식에는 다음 4가지가 있다.
    ⇒ 출발지가 아닌 목적지 주소를 기반으로 구분한다.
    1. 유니캐스트 (실제로 사용하는 대부분의 통신 방식)
      • 1:1 통신
      • 출발지와 목적지가 1:1로 통신
    2. 브로트캐스트
      • 1:모든 통신
      • 동일 네트워크에 존재하는 모든 호스트가 목적지
      • 유니캐스트로 통신하기 이전 주로 상대방의 정확한 위치를 알기 위해 통신(ARP.. 이후 등장)
    3. 멀티캐스트
      • 1:그룹 통신
      • 하나의 출발지에서 다수의 특정 목적지로 네트워크 전송
      • 아프리카TV 와 같이 실시간 방송을 보기위해서 사용(단방향)
    4. 애니캐스트
      → 같은 목적지 주소를 가진 서버가 여러대이고 서버 한대를 선정해서 통신
      • 1:1통신
      • 다수의 동일 그룹(동일 네트워크) 중 가장 가까운 호스트에서 응답
      • 애니캐스트 주소가 같은 호스트들 중 가장 가깝거나 효율적으로 서비스 할 수 있는 호스트 1명과 통신하는 방식
      • 이런 특성을 사용해서 가장 가까운 DNS 서버(URL 을 IP로 변환)를 찾을 때 사용하거나, 가장 가까운 게이트웨이를 찾는 애니캐스트 게이트웨이 기능에 사용하기도 한다.

MAC 주소 (Media Access Control)

  • 2계층에서 통신을 위해 네트워크 인터페이스 카드(랜카드)에 할당 된 고유 식별자이다.
  • 네트워크에 접속하는 모든 장비는 MAC 주소라고 하는 물리적인 주소가 있어야 한다.
  • MAC 주소 체계
    • MAC 주소는 48비트의 16진수 12자리로 표현됩니다.
    • MAC 주소는 앞 24비트 뒤 24비트로 구분된다.
      • OUI : IEEE(전기전자공학자협회) 가 제조사에 할당하는 부분 (장비업체 코드번호)
      • UAA : 각 제조사가 네트워크 구성 요소에 할당하는 부분
    • MAC 주소는 BIA 상태로 네트워크 인터페이스 카드에 할당되어 있다.

MAC 주소 체계

MAC 주소 동작

  • 전기 신호가 들어오면 2계층에서 데이터 형태(패킷)로 변환하여 내용을 구분한 후 도착지 MAC 주소를 확인합니다. (전기신호 → 데이터 형태(패킷))
  • 만약 들어온 패킷의 도착지 주소가 자신의 MAC 주소와 다르면 그 패킷을 폐기한다.
    → 2계층 장비에서는 MAC 주소 정보를 파악할 수 있다.
  • 패킷의 목적지 주소가 자기 자신이거나(유니캐스트), 브로드캐스트, 멀티캐스트와 같은 그룹 주소이면 처리해야 할 주소로 인지해 패킷 정보를 상위 계층으로 넘겨준다. (3계층 : 네트워크 계층)

IP 주소

  • IP 주소를 포함한 다른 프로토콜 스택의 3계층 주소의 특징
    • 사용자가 변경 가능한 논리 주소
    • 주소의 레벨이 있다. 그룹을 의미하는 네트워크 주소와 호스트 주소로 나뉜다.

IP 주소 체계

IP 주소체계

  • IP 주소는 32 비트인 IPv4 주소이다. (IPv6 주소는 128 비트이다)
  • IPv4 주소를 표기할 때는 8비트 단위로 . 를 구분으로 나뉘며 각 구분을 옥텟이라고 부른다.
  • 각 옥텟은 10진수를 사용하므로, 0~255 의 값을 쓸 수 있다.
  • IP 주소도 두 부분으로 나뉜다. (IP 주소는 이 둘을 구분하는 구분점이 고정되어 있지 않다..)
    • 네트워크 주소 : 호스트들을 모은 네트워크를 지칭하는 주소. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 함
    • 호스트 주소 : 하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소
  • IP 주소 체계는 필요한 호스트 IP 개수에 따라 네트워크의 크기를 다르게 할당할 수 있는 클래스 개념을 도입했다.
  • 클래스 기반의 네트워크 분할 기법은 과거에 사용했던 개념으로 현재는 위에서 설명한 것처럼 클래스 기반으로 네트워크를 분할하지 않는다…

클래스풀과 클래스리스

  • 과거 클래스 기반 IP 주소 체계를 클래스 풀이라고 부른다.
  • 이 주소 체계는 IP 주소 초기에 확장성 있고, 주소 낭비가 적은 최적의 조건을 만들 수 있는 좋은 선택이었다.
  • 클래스 풀 주소 체계는 네트워크 주소와 호스트 주소를 구분 짓는 구분자 (서브넷 마스크) 가 필요 없다.
    → 맨 앞자리 숫자만 보면 자연스럽게 이 주소가 어느 클래스에 속해 있는지 구분할 수 있다.

클래스리스 네트워크 두두등장!

  • 인터넷이 상용화되면서 인터넷이 연결되는 호스트 숫자가 폭발적으로 증가했다.
  • 기존 클래스풀 기반 주소 체계는 확장성과 효율성을 모두 잡은 좋은 주소 체계였지만 기하급수적으로 늘어나는 IP 주소 요구를 감당하기에는 역부족이었다.
  • 이론적으로 사용할 수 있는 IP 개수는 43억개 이지만 낭비되는 IP가 많아서 실 사용 개수는 훨씬 적다.
    네트워크 주소를 계층화하고 분할하기 위해서 낭비되는 IP 가 매우 많았다.
  • 이를 위한 대책은 다음과 같다
    • 단기 대책 : 클래스 리스
    • 중기 대책 : NAT 기술을 통한 사설 IP 사용
    • 장기 대책 : 차세대 IP IPv6
  • IPv4의 가장 큰 문제는 주소 자체의 부족도 있지만, 상위 클래스를 할당받은 조직에서 낭비되는 IP가 너무 많았다.
    → A클래스를 할당받은 조직에서 100개의 IP만 사용한다면 엄청난 낭비가 발생한다..
    (클래스풀에서는 한개의 클래스 네트워크가 한 조직에게 할당되면 남는 IP 주소를 다른조직에 절대로 할당할 수 없다)
  • 이를 위해서 클래스 개념 자체를 버리는데 이를 클래스리스라고 부른다.
  • 클래스풀 네트워크는 앞 숫자를 보고 클래스를 확인한 후 네트워크 주소와 호스트 주소를 확인할 수 있었다.
  • 클래스리스 네트워크는 별도로 네트워크와 호스트 주소를 나누는 구분자를 사용해야 하는데, 이 구분자를 서브넷 마스크라 부른다. ex) 255.0.0.0 / 255.255.0.0 / 255.255.255.0
  • 클래스리스 네트워크에서 서브넷 마스크는 IP 주소와 네트워크 주소를 구분할 때 사용한다. ex) 103.9.32.146 주소에 255.255.255.0 서브넷 마스크를 사용하는 IP 네트워크 주소 : 103.9.32.0 호스트 주소 : 0.0.0.146
  • 클래스리스 기반 네트워크에서는 네트워크를 표현하는데 반드시 서브넷 마스크가 필요하다.

서브넷마스크

서브네팅

  • 원래 부여된 클래스의 기준을 무시하고, 새로운 네트워크-호스트 구분 기준을 사용자가 정해 원래 클래스풀 단위의 네트워크보다 더 쪼개 사용하는 것을 서브네팅이라고 부른다. (현대 클래스리스 네트워크의 가장 큰 특징)
    → 서브넷 마스크를 사용해 사용 가능한 네트워크를 표현하기 위한 방법 (클래스리스)

네트워크 사용자의 서브네팅

  • 네트워크 사용자는 이미 설계되어 있는 네트워크에서 사용할 수 있는 IP 주소 범위를 파악해야 한다.
  • 기존 클래스풀 기반 네트워크는 10진수로 구분되어 있어서 사용자가 이해하기 쉽지만, 대부분의 서브네팅(클래스리스)은 비트 단위로 분할되므로 이런 환경에 속해있을 경우, 내가 속해 있는 네트워크 범위를 파악하기 어렵다.
  • 일반적으로 자신이 속한 네트워크 범위를 구하는 방법(알아만두자..)
    1. 내 IP 를 2진수로 표현
    2. 서브넷 마스크를 2진수로 표현
    3. 2진수 AND 연산으로 서브네팅된 네트워크 주소를 알아낸다.
    4. 호스트 주소 부분을 2진수 1로 모두 변경해 브로드캐스트 주소를 알아낸다.
    5. 유효 IP 범위를 파악한다. 서브네팅 된 네트워크 주소 +1 은 유효 IP 중 가장 작은 IP 이다.
    6. 브로드캐스트 주소 -1 은 유효 IP 중 가장 큰 IP 이다.
    7. 2진수로 연산되어 있는 결과값을 10진수로 표현한다.

네트워크 설계자 입장

  • 네트워크 설계자 입장에서 서브넷마스크에 대해 고려해야 할 부분
    • 서브넷된 하나의 네트워크에 IP를 몇 개나 할당해야 하는가?
    • 서브넷된 네트워크가 얼마나 필요한가?
  • 이를 통해 설계된 네트워크는 사설 IP 대역을 사용해 충분한 IP 대역을 사용하는 것이 좋다.
    → 관리자 입장에서 여유로운 대역폭은 관리하기가 쉽다. (공인 IP는 인터넷에서 유일하게 사용되므로 사용할 수 있는 IP 가 제한되어 있고, 할당 받은 IP 를 사용하지 않을 경우 IP 할당 기관이 회수한다)
  • 네트워크를 단계적으로 잘 설계하면 관리하기 쉽고 네트워크 장비 성능도 향상된다.

공인 IP와 사설 IP

  • 공인 IP : 인터넷에 접속하려면 IP 주소가 있어야 하고, 이 IP 는 전 세계에서 유일해야 하는 식별자이다. (우리가 일반적으로 생각하는 IP)
    → 통신사업자로부터 IP 를 할당받거나, IP 할당기관에서 인터넷 독립기관 …. (절차가 존나게 복잡하다)
    → 인터넷에 연결하지 않고 개인적으로 네트워크를 구성한다면 공인 IP 주소를 할당 받지 않고도 구성할 수 있다.
  • 사설 IP : 인터넷에 연결하지 않고 개인적으로 네트워크를 구성할 때 사용되는 IP 주소. (공유기 IP를 사설 IP라고 볼 수 있다)
    인터넷에 접속하지 않거나 / NAT 기술(공유기나 회사 방화벽을 사용하는 경우)을 사용하는 경우 사설 IP를 사용하면 인터넷에 직접 접속하지는 못하지만 IP 를 변환해주는 NAT 장비에서 공인 IP로 변경 후 접속이 가능하다.
    가정에서 많이 사용하는 공유기는 NAT 장비의 역할을 하는 대표적인 예!!
    → 공유기는 스위치, 라우터 등 수 많은 하드웨어가 들어간 복잡한 장비이다.
  • 회사 내부에서 사설 네트워크를 구축할 때 NAT을 사용하여 인터넷에 연결하더라도 다른 사용자에게 할당된 공인 IP를 사설 네트워크 주소로 사용하면 안된다!!

TCP && UDP

4계층 프로토콜(TCP UDP)과 서비스 포트

  • 인캡슐레이션, 디캡슐레이션 과정 가운데 각 계층에서 정의하는 헤더가 추가되고 여러가지 정보가 들어갑니다.
    → 가장 중요한 두가지 정보
    • 각 계층에서 정의하는 정보
    • 상위 프로토콜 지시자 정보
  • 4계층의 목적은 애플리케이션에서 사용하는 프로세스를 정확히 찾아가고 데이터를 분할한 패킷을 잘 쪼개 보내고 잘 조립하는 것이다.
  • 4계층의 상위 지시자는 포트 번호이다.
    → 하위 계층과 달리 출발지와 목적지를 구분해 처리해야 한다.
    → 평소 우리가 표현하는 포트 번호의 기준은 서버의 포트이다.
    (잘 알려진 80,443,25 같은 포트번호는 웰 노운(모두가 잘 아는) 포트라고 부른다)

TCP

  • TCP 프로토콜은 신뢰할 수 없는 공용망에서도 정보유실 없는 통신을 보장하기 위해서 세션을 안전하게 연결하고
    데이터를 분할하고 분할된 패킷이 잘 전송되었는지 확인하는 기능
    이 있다.
  • 패킷의 번호(Sequence Number)를 부여하고 잘 전송 되었는지에 대해 응답(Acknowledge Number)합니다.
  • 또한, 한꺼번에 얼마나 보내야 수신자가 잘 받아 처리할 수 있는지 전송크기(Window Size)까지 고려한다.

윈도 사이즈와 슬라이딩 윈도

  • TCP 에 맞추어서 정보 유실 없는 통신을 보장하기 위한 패킷을 보내는 것까지 확인을 하다 보면 네트워크가 느려질 수 밖에 없다.
  • 때문에, 데이터를 보낼 때 패킷을 하나만 보내는 것이 아니라 많은 패킷을 한꺼번에 보내고 응답을 하나만 받는다.
  • 가능하면 최대한 많은 패킷을 한꺼번에 보내는 것이 효율적이지만 네트워크 상태가 않 좋으면 패킷 유실 가능성도 커지므로 적절한 송신량을 정해야 하는데, 한꺼번에 데이터를 받을 수 있는 크기를 윈도 사이즈라 하고, 네트워크 상황에 따라 윈도 사이즈를 조절하는 것을 슬라이딩 윈도 라고 한다.

3방향 핸드셰이크(3 way handshake)

  • TCP 에서 3번의 패킷을 주고받으며 통신을 서로 준비하는 과정을 3 way handshake 라고 부른다.

3 way handshake

UDP

  • UDP 에서는 4계층 프로토콜이 가져야 할 특징이 거의 없다.
  • TCP 에서 가져갔던 연결지향의 특징이 없다.
    → 때문에 UDP 헤더 내용은 거의 없다.
  • 데이터 통신은 데이터 신뢰성이 핵심이지만, UDP 는 그렇지 않기 때문에 제한된 용도로만 사용된다.
    (실시간 스트리밍 …)
  • 연결지향의 특징이 없기 때문에 속도가 빠르다는 장점이 있다.
  • 때문에, UDP 프로토콜을 사용하는 애플리케이션 대부분은 이런 상황을 인지하고 동작하거나 연결 확립만 TCP 프로토콜을 사용하고 애플리케이션끼리 모든 준비를 마친 후 실제 데이터만 UDP 를 사용하는 경우가 많다.

ARP(Address Resolution Protocol)

ARP 란?

→ IP 를 이용한 통신 시, 실제 통신에 사용되는 MAC 주소를 모르기 때문에 이를 알아내기 위한 프로토콜

  • 데이터 통신으로 위해 2계층 MAC 주소, 3계층 IP 주소가 사용되지만 두 계층을 전혀 연관성이 없다.
  • 두 개의 주소(계층)를 연계 시켜주기 위한 매커니즘에 사용되는 프로토콜이 ARP 이다.
    (TCP/IP 프로토콜 스택에 종속된 것이 아닌, 2/3계층 사이 주소를 연결할 때 사용)
  • 상대방의 맥 주소를 알아내기 위해서는 ARP 브로드캐스트를 통해 네트워크 전체의 상대방의 MAC 주소를 질의해야 한다.
  • ARP 브로드캐스트를 받은 목적지는 ARP 프로토콜을 이용해 자신의 MAC 주소를 응답한다.
  • 이 작업 이후 양방향에서 상대방의 MAC 주소를 학습하고 패킷이 인캡슐레이션이 되어 상대방에게 전달될 수 있다.

ARP 동작

  • ARP 패킷은 여러 가지 필드 중 ARP 데이터에 사용되는 송신자 하드웨어 MAC 주소, 송신자의 IP 주소, 대상자의 MAC 주소, 대상자의 IP 주소 필드가 중요하게 사용된다.
  • 서버 A 에서 B로 ping 을 보내려 할 때 목적지 MAC 주소를 알 수 없기 때문에 정상적인 패킷을 만들 수 없다.
  • 이를 위해 서버 A 는 ARP 요청을 네트워크에 브로드캐스트한다.
  • 같은 네트워크 안에 있는 모든 단말에서는 ARP 프로토콜 내용을 확인하는데, ARP 프로토콜 필드의 대상자 IP가 자신이 맞는지 확인해 자신이 아니면 ARP 패킷을 버린다.
  • 반대로 ARP 프로토콜 필드의 대상자 IP가 자신이 맞다면 요청을 처리하고, 그에 대한 응답을 보낸다.
    (이때 송신자와 수신자의 위치가 바뀌고 출발지, 목적지 MAC 주소를 알기 때문에 정상적인 패킷으로 응답한다.)
  • ARP 요청을 처음 보낼 때는 브로드스트 반면, ARP 응답을 보낼 때는 출발지와 목적지 주소가 명시되어 있는 니캐스트이다.
  • 서버 A는 서버 B로부터 ARP 응답을 받아 자신의 ARP 캐시 테이블을 갱신한다.
  • ARP 캐시 테이블에 갱신 된 후 상대방의 MAC 주소를 알고 있으므로 도착지 MAC 주소 필드를 완성해 ping 을 보낼 수 있다.

GARP

(ARP 인데 필드에 들어가는 내용이 다르고 원래 목적과 다르게 사용된다)

  • ARP 가 상대방의 MAC 주소를 알아내기 위해서 사용되는 반면에 GARP는 자신의 IP와 MAC 주소를 알리 목적으로 사용된다.
    → 로컬내에서!
    (GARP는 자신의 IP, MAC 주소를 알릴 목적으로 사용되기 때문에, 목적지 MAC 주소는 브로드캐스트 MAC 주소로 사용된다)
  • ARP 와 차이점은 송신자와 대상자 IP 주소가 자신으로 동일하다는 것이다.
  • GARP 를 사용해 동일 네트워크에 자신의 IP 주소와 MAC 주소를 알려주는 이유
    1. IP 주소 충돌 감지
      1. IP 주소는 유일한 값이어야 하지만 여러가지 이유로 인해 유일하지 않을 수도 있다.
      2. 이를 위한 IP 충돌로 통신이 안되는 것을 방지하기 위해서 자신의 네트워크에서 IP가 중복되는지 확인한다.
    2. 상대방 ARP 테이블 갱신??(어려워서 내용 패스~)
    3. 고가용성 용도의 클러스터링??(어려워서 내용 패스~)

RARP

(ARP 인데 필드에 들어가는 내용이 다르고 원래 목적과 다르게 사용된다)

  • 자신의 MAC 주소는 알지만 IP가 아직 할당되지 않아서 IP를 할당해주는 서버에게 어떤 IP 주소를 사용해야 하는지 물어 볼 때 사용된다.

서브넷과 게이트웨이

서브넷과 게이트웨이의 용도

  • 원격 네트워크 통신은 네트워크를 넘어 전달되지 못하는 브로드캐스트의 성질 때문에 네트워크 장비의 도움이 필요하다. (이 장비를 게이트웨이라고 한다!!)
  • 기본 게이트웨이는 3계층 장비가 수행하고 여러 네트워크가 연결되면서 적절한 경로를 지정해주는 역할을 한다.(라우터)
  • 가장 먼저 목적지가 자신이 속한 네트워크의 범위인지 확인하는 작업이 필요하다. (이를 통해 로컬에서 통신하는지 원격으로 통신하는지 정해야 한다) → 이 때 사용되는 것이 서브넷 마스크(서브네팅)이다!! (동일 네트워크 간의 통신인지 다른 네트워크간의 통신인지 구분하기 위해 사용되는 것이 서브넷 마스크이다!!)

2계층 통신 vs 3계층 통신

(정확한 표현은 로컬 네트워크 통신, 원격지 네트워크 통신이다)

  • 로컬 네트워크의 경우 라우터 같은 3계층 장비 없이 통신이 가능하다.
    • 상대방의 MAC 주소를 알아내기 위해서 ARP 브로드캐스트를 이용하고 상대방의 MAC 주소를 알아내자마자 패킷이 캡슐화되어 통신이 시작된다.
  • 원격 네트워크의 경우 3계층 장비 없이 통신할 수 없다.
    1. 단말이 자신이 직접 보낼 수 없는 위치에 목적지가 있다고 판단되면 ARP 요청을 기본 게이트웨이(라우터) IP 주소로 요청한다.
      서브네팅이 선행되어야 한다(자신이 속한 네트워크를 구해야 한다)
      → ARP 브로드캐스트를 하면, 게이트웨이가 답을 해준다.
    2. 게이트웨이에서 ARP 응답을 받은 단말은 도착지 MAC 주소에 응답 받은 기본 게이트웨의 MAC 주소를 적어 놓고 통신을 시작한다.
      → 도착지 IP : 내가 통신하고자 하는 원격 네트워크의 IP
      → 도착지 MAC : 응답 받은 기본 게이트웨이 MAC
  •  
profile

개발하는 프로 국밥러

@gugbab2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!