IT 엔지니어를 위한 네트워크 입문 - 3장 네트워크 통신하기

코코딩딩·2022년 6월 19일
1

네트워크

목록 보기
3/6
post-thumbnail

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

유니캐스트

  • 출발지와 목적지가 1:1로 통신

브로드 캐스트

  • 1: N 통신
  • 동일 네트워크에 존재하는 모든 호스트가 목적지
  • 유니캐스트로 통신하기 전에 상대방의 정확한 위치를 알기 위해서 사용합니다.
  • 기본적으로 로컬 네트워크 내의 모든 호스트에 패킷을 전달할 때 사용합니다.

멀티캐스트

  • 1:그룹(멀티캐스트 구독 호스트)통신
  • 하나의 출발지에서 다수의 특정 목적지로 데이터를 전송
  • 사내 방송, 증권 시세 전송, IP TV 등에서 사용 되며, 보통 일방향으로 전송할 때 사용.

애니캐스트

  • 최종 통신은 1:1로 유니캐스트와 동일하지만, 통신할 수 있는 후보자는 유니캐스트와 다릅니다.
  • 애니케스트는 같은 목적지 주소를 가진 여러 통신가능한 후보 호스트가 존재합니다.

BUM 트래픽

  • BUM 트래픽은 B(Broadcast), U(Unknown Unicast), M(Multicast)를 의미합니다.
  • Unknown Unicast는 유니캐스트여서 목적지 주소는 명확히 명시되지만 네트워크 동작은 브로드캐스트와 같을 때를 가르킵니다.
  • 이는 스위치가 목적지에 대한 주소를 학습하지 못한 상황이여서, 패킷을 모든 포트로 프러딩하는데 이런 유니캐스트를 Unknown Unicast라 합니다.
  • BUM 트래픽의 이해가 중요한 이유는 브로드캐스팅으로 동작하기에 네트워크의 성능저하를 일으키기 때문입니다.
  • NIC에서 도착지 주소를 확인하고 자신의 목적지가 아니면 패킷을 폐기하는 동작을 하는데, 브로드캐스팅으로 동작하는 BUM 트래픽에 의해서 불필요한 작업이 발생하기 때문입니다.

정리


MAC 주소

MAC 주소란?

  • MAC주소는 변경불가능 하며, 모든 NIC에 장비 출하시 할당되는 주소입니다.
  • OSI 7계층에서 2계층(데이터 링크계층)의 식별자 역할을 합니다.

MAC 주소의 구조

  • MAC 주소는 총 48비트로 구성되며 12자리의 16진수로 표현됩니다.
  • MAC 주소는 앞 24비트, 뒤 24비트로 나눠지는데, 앞의 비트는 제조사 코드를 표현하며, 뒤의 비트는 제조사에서 자체 할당된 코드입니다.

MAC주소의 동작

  • NIC는 MAC주소를 가지고 있는 전기신호를 받아 2계층의 데이터(패킷)로 변환합니다.
  • 이 패킷에서 해더 정보에서 도착지 MAC주소를 확인하고 자신이 갖고 있는 주소와 다르면 해당 패킷을 폐기합니다.
  • 해당 패킷이 목적지가 자신이거나, 브로드캐스트, 멀티캐스트와 같은 그룹 주소일 경우 자신이 처리해야할 패킷으로 인지하여 상위 계층으로 넘겨줍니다.
  • 본인에게 온 패킷, 브로드캐스트, 멀티캐스트로 온 패킷으리 경우 NIC가 자체적으로 패킷을 처리하는 것이 아니라 OS나 어플리케이션에서 처리 해야하므로 시스템 부하가 발생하는 경우도 있습니다.

IP 주소

IP 주소란?

  • IP 주소는 OSI 7계층에서 3계층의 식별자로 사용됩니다.
  • 2계층의 MAC주소가 물리적인 주소였다면, 3계층의 IP주소는 논리적인 주소입니다.
  • IP 주소는 레벨을 가지고 있습니다. 그룹의 의미하는 네트워크 주소와 호스트 주소로 나뉩니다.

IP 주소체계

  • IP 주소에는 32비트 IPv4체계와 128비트 IPv6체계가 있습니다.

  • IPv4 주소는 4개의 옥텟으로 구성되는데 이는 8비트단위로 나눠집니다.

  • IP주소는 10진수로 표기하므로 각 옥텟은 0~255까지의 값을 가질 수 있습니다.

  • IP주소는 네트워크 주소와 호스트 주소로 나눠지는데, 이를 구분하는 경계점은 구정되어있지 않습니다.

  • IP주소는 필요한 호스트 IP의 갯수에 따라서 네트워크 크기를 다르게 할당할 수 있습니다.

  • 이를 Class 체계라고 합니다.

  • A 클래스 : 네트워크 주소 256개 / 호스트 주소 16,777,216개

  • B 클래스 : 네트워크 주소 65,536개 / 호스트 주소 65,536개

  • C 클래스 : 네트워크 주소 16,777,216개 / 호스트 주소 256개

  • A 클래스는 첫번째 옥텟, B클래스는 두번째 옥텟, C 클래스는 세번째 옥텟에 네트워크 주소와 호스트 주소를 나누는 구분자를 가지고 있습니다.

  • 이를 서브넷 마스크라 합니다.

  • 클래스를 통해서 네트워크주소와 호스트주소를 나누면 얻을 수 있는 이점이 있습니다.

  • 네트워크 주소와 호스트주소를 나누는 구분점이 고정되어있으면 모든 네트워크는 같은 호스트 IP 숫자를 갖게 됩니다. 하지만 이를 나누는 구분점이 고정되어있지 않다면, 네트워크에서 사용할 호스트 IP의 숫자에 따라서 클래스를 사용하면 주소비용을 절약할 수 있을 것입니다.

  • IP주소의 맨 앞 옥텟의 주소를 보면 클래스를 주소를 구분할 수 있습니다.

  • 앞 옥텟의 주소
    0~127(0 0000000 ~ 0 1111111) : A 클래스, 127의 경우 자기자신의 의미하는 루프백 주소로 사용되므로 실제로는 1.0.0.0~126.255.255.255까지의 범위를 가집니다.
    128~191(10 000000 ~ 10 111111) : B 클래스
    192~223(110 00000 ~ 110 11111) : C 클래스

클래스리스

클래스리스 네트워크의 등장

  • 인터넷의 상용화로 인하여 클래스 풀 방식으로는 IP 주소 요구를 감당하기엔 역부족하였습니다.
  • 이론적으로 사용할 수 있는 IP의 갯수는 43억여개지만 실제로 사용할 수 있는 IP의 갯수는 이보다 훨씬 적습니다.
  • 전 세계의 사람이 하나의 IP를 가지기도 부족한 갯수이며, 클래스풀로 관리하면서 낭비되는 IP주소의 갯수도 많았습니다.
  • IPv4의 주소 부족 문제도 있지만 조직에서 A Class로 IP를 할당받고 사용하지 않으며 낭비하는 문제도 있었습니다.
  • 한 조직에서 A Class로 아이피를 할당받으면 안쓰는 IP라도 다른 조직에서 할당받을 수 없는 문제가 있습니다.
  • 클래스 리스는 이러한 배경에서 탄생하였습니다.
  • 클래스리스 네트워크는 클래스를 방식이 아닌 서브넷 마스크를 사용하여 네트워크 주소와 호스트 주소를 구분합니다.

클래스리스의 서브넷 마스크 표현

  • 서브넷 마스크는 IP주소와 네트워크 주소를 구분할 때 사용하는데, 2진수 숫자 1로 네트워크 주소를, 0으로는 호스트 주소를 표시합니다.
  • 서브넷 마스크는 255.0.0.0 처럼 10진수로 표현합니다,
  • 만약 103.9.32.146 주소에 255.255.255.0 서브넷 마스크를 사용하는 IP는 네트워크 주소가 103.9.32.0이고 호스트 주소는 0.0.0.146이 됩니다.
  • 서브넷 마스크가 2진수 1인 부분은 IP 숫자가 그대로 나타나고, 0인 부분은 모두 0으로 변경됩니다.

서브네팅

  • 서브네팅은 클래스풀 방식보다 네트워크를 더욱 쪼게서 사용하는 것의 의미합니다.
  • 이는 현대 클리스리스 네트워크의 가장 큰 특징입니다.
  • 옥텟 단위로 구분하는 서브네팅은 이해와운영이 쉽지만, 실제로는 더 잘게 네트워크를 2진수 1비트 단위로 분할하므로 이해하기 어려울 수 있습니다.
  • 서브네팅은 다음 두가지의 부분으로 고민할 거리가 있습니다.
    네트워크 설계자 : 어떻게 네트워크를 효율적으로 분할할 것인가?
    네트워크 사용자 : 네트워크에서 사용할 수 있는 IP범위가 어떻게 되는가?

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

  • 일반적인 자신이 속한 네트워크의 유효범위를 파악하는 방법은 다음과 같습니다.
    1. 내 IP를 2진수로 표현한다.
    2. 서브넷 마스크를 2진수로 표현한다.
    3. 2진수 AND 연산으로 서브네팅된 네트워크 주소를 알아낸다.
    4. 호스트 주소 부분을 2진수 1로 모두 변경해 브로드캐스트 주소를 알아낸다.
    5. 유효 IP범위를 파악한다. 서브네팅된 네트워크 주소+1은 유효 IP 중 가장 작은 IP이다.
    6. 브로드캐스트 주소-1은 유효 IP 중 가장 큰 IP이다.
    7. 2진수로 연산되어 있는 결괏값을 10진수로 변환한다.
  • 좀더 쉬운 서브네팅 방법은 다음과 같습니다.
    1. 서브넷 마스크를 2진수로 변환한다.
    2. 현재 서브넷이 가질 수 있는 최대 IP개수 크기를 파악한다. 2^6 = 64
    3. 64의배수로 나열하여 기준이 되는 네트워크 주소를 파악한다. 첫 블록은 0부터 시작한다. 각 네트워크의 마지막 주소가 브로드캐스트 주소가 된다. 이 주소는 다음 블록 네트워크 주소의 -1 수이다.
      0~63 / 64~127 / 128~191 / 192~255
    4. 103.9.32.146에서 호스트 주소 146이 속한 네트워크를 선택한다.
      128~191
    5. 필요한 주소를 정리한다.
      네트워크 주소 : 103.9.32.128(첫 번째 숫자)
      브로드캐스트 주소 : 103.9.32.191(마지막 숫자)
      유효 IP 범위 : 103.9.32.129 ~ 103.9.32.190(네트워크 주소와 브로드캐스트 주소 사이)

네트워크 설계자의 서브네팅

  • 네트워크 설계자는 네트워크 설계 시 다음 두가지 고민을 가집니다.

    1. 서브넷된 하나의 네트워크에 IP를 몇 개나 할당해야 하는가?(또는 PC는 몇 대나 있는가?)
    2. 서브넷된 네트워크가 몇 개나 필요한가?
  • 회사 네트워크 설계를 예로 서브넷 마스크를 어떻게 사용하는지 살펴보겠습니다.

  • 회사는 총 12곳의 지사가 있습니다.

  • 각 지사는 PC, 복합기, IP카메라를 운영하기 위해 최대 12개의 IP가 필요합니다.

    1. 서브넷된 하나의 네트워크에 12개 IP를 할당해야 한다.
    2. 네트워크는 2진수의 배수로 커지므로 4, 8, 16, 32, 64, 128, 256개 단위로 네트워크를 할당할 수 있다. 12개의 IP를 수용할 수 있는 가장 작은 네트워크는 16개이므로, 16개짜리 네트워크를 할당한다.
    3. 16개 짜리 네트워크는 네트워크 주소와 브로드캐스트 주소를 사용할 2개 IP를 제외해야 하므로 실제로 사용할 수 있는 IP는 14개이다. 이 유효 IP 개수는 필요한 12개에 포함되므로 사용 가능하다.
    4. 16개 짜리 네트워크 12개를 확보한다. 16의 배수를 0부터 나열해 네트워크 주소를 확인한다.
    5. 총 16개의 네트워크 중 12개 네트워크를 할당한다.

공인 IP와 사설 IP

  • 인터넷에 접속하려면 IP주소가 있어야하고 IP주소는 전세계에서 유일해야 하는 식별자입니다.
  • 이러한 IP를 공인 IP라 합니다.
  • 인터넷에 연결하지 않고 IP를 할당하는 경우 이를 사설 IP라고 합니다.
  • 사설 IP를 사용하면 인터넷에 직접 접속할 수 없지만 IP를 변환해주는 NAT에서 공인 IP로 변경 후에는 인터넷에 접속이 가능합니다.
  • 회사 내부 사설 네트워크를 구축할 때 NAT를 사용하여 인터넷에 연결하더라도 다른 사용자에게 할당된 IP를 사설 네트워크 주소로 사용하면 안됩니다.
  • 해당 IP를 공식으로 사용하는 네트워크로 접속할 수 없으므로, RFC에 명시된 사설 IP대역을 사용하는 것이 바람직합니다.

TCP와 UDP

  • TCP와 UDP는 IOS 7계층에서 4계층의 프로토콜입니다.
  • 이전의 계층 까지는 목적지를 찾아가기 위한 주소제공이 목적이었지만 4계층 프로토콜은 목적지 어플리케이션 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않도록 잘 조합해 원래 데이터를 만들기 위한 역할을 합니다.

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

  • 데이터를 보내고 받는 인캡슐레이션, 디캡슐레이션 과정에서 각 계층에서 정의하는 헤더가 추가되고, 여러 정보가 들어갑니다.
  • 이 정보 중 가장 중요한 것은 다음 두가지 입니다

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

  • 각 계층에서 정의하는 정보는 수신 측의 동일 계층에서 사용하기 위한 정보입니다. 2계층 헤더의 MAC주소 정보는 수신 측의 2계층에서 확인하고 사용합니다. 이는 3~4계층 모두 동일합니다.
  • 상위 프로토콜 지시자는 디캡슐레이션 과정에서 상위 계층의 프로토콜이나 프로세스를 정확히 찾아가기 위한 목적으로 사용됩니다. 2계층은 이더타입, 3계층은 프로토콜 번호, 4계층은 포트번호가 상위 프로토콜 지시자입니다.
  • 4계층 프로토콜의 목적을 이루기 위해서 TCP 프로토콜에서는 시퀀스 번호와 ACK 번호를 사용합니다.
  • TCP/IP 프로토콜 스택에서 4계층의 상위프로토콜 지시자는 포트번호입니다.
  • 일반적으로 TCP/IP에서는 클라이언트-서버 방식으로 서비스를 제공하고 이 둘을 구분해 개발합니다.
  • 2~3계층에서 상위프로토콜 지시자는 출발지와 도착지를 구분하지 않지만, 4계층에서는 이를 구분합니다.

TCP

  • TCP는 4계층 프로토콜로 정보유실 없는 통신을 보장하기 위해서 세션을 안전하게 연결하고, 데이터를 분할하고, 분할된 패킷이 잘 전송되었는지 확인하는 기능이 있습니다.
  • 패킷에 번호를 부여하고, 잘 전송이 되었는지에 대해서 응답합니다. 또한 수신자가 처리할 수 있는 전송크기를 고려하여 통신합니다.

패킷 순서(패킷순서, 응답 번호)

  • 패킷에 순서를 부여하는 것을 시퀀스 번호라 합니다.
  • 응답 번호를 부여하는 것은 ACK 번호라 부릅니다.
  • 이 두 번호가 상호작용해 순서가 바뀌거나 중가넹 패킷이 손실된 것을 파악할 수 있습니다.
  • 보내는 쪽에서 패킷에 번호를 부여하고 받는 쪽은 이 번호의 순서가 맞는지 확인합니다.
  • 받은 패킷 번호가 맞으면 응답을 주는데 이때 다음 번호의 패킷을 요청합니다.
  • 이 숫자를 ACK번호라고 부릅니다.
  • 송신 측이 1번 패킷을 보냈는데 수신 측이 이패킷을 잘받았다면 1번을 받았으니 2번을 달라는 표시로 ACK 번호 2를 응답합니다.
  • 위 그림을 단계별로 설명하면 다음과 같습니다
    1. 출발지에서 시퀀스 번호를 0으로 보냅니다(SEQ = 0)
    2. 수신 측에서는 0번패킷을 잘 받았다는 표시로 ACK에 1을 적어 응답합니다. 이때 수신측에서는 자신이 처음 보내는 패킷이므로 자신의 패킷에 시퀀스 번호 0을 부여합니다.
    3. 이 패킷을 받은 송신 측은 시퀀스 번호를 1로 (수신 측이 ACK번호를 1번패킷을 달라고 요청하였으므로), ACK 번호는 상대방의 0번 시퀀스를 잘 받았다는 의미로 시퀀스번호를 1로 부여해서 다시 송신합니다.

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

  • TCP는 일방적으로 패킷을 보내는 것이 아니라 상대방이 잘 받았는지 확인하기 위해서 ACK번호를 확인하고 다음 패킷을 전송합니다.
  • 이러한 패킷을 주고받는 과정에서 통신시간이 늘어나며, 송신자와 수신자 거리가 멀 경우 왕복 지연시간이 더욱 길어집니다.
  • 이때 작은 패킷 하나를 보내고 응답한다면 모든 데이터를 주고받는데 긴 시간이 걸릴 것입니다.
  • 그래서 데이터를 보낼 때는 한 패킷만 보내는 것이 아닌 많은 패킷을 한번에 보내고응답은 하나만 받습니다.
  • 네트워크 상대가 안좋아 패킷이 유실될 가능 성이 있으므로 적절한 송신량을 결정해야 하는데, 이때 한번에 데이터를 받을 수 있는 크기를 윈도사이즈라 합니다.
  • 그리고 네트워크 상황에 따라서 이 윈도 사이즈를 조절하는 것을 슬라이딩 윈도라 합니다.
  • TCP 헤더에서 윈도사이즈로 표현할 수 있는 최대크기는 2^16입니다.
  • 실제 64K만큼의 윈도 사이즈를 가질 수 있지만 이 사이즈는 현대 네트워크에서는 너무 작은 숫자입니다.
  • 더 큰 윈도우 사이즈를 사용하려해도 TCP 헤더는 변경이 불가능하므로, 이를 늘리지 않고 뒤에 숫자를 무시하는 방법으로 윈도 사이즈를 증가시켜 통신합니다.
  • TCP에서는 데이터 유실이 생미녀 윈도 사이즈를 절반으로 떨어트리고, 정상적인 통신이 되는 경우 서서히 하나씩 늘립니다.
  • 데이터를 윈도 사이즈로 보내고 메모리에 유지하다가 ACK 번호를 받은 후 통신이 잘된 상황인지 파악하고나서야 메모리에서 데이터를 제거합니다.
  • 만약 데이터 유실이 있는 경우 시퀀스 번호와 ACK 번호를 비교해가며 이를 파악하고 메모리에 유지해놓은 데이터를 이용하여 재전송하는 기능을 합니다.

3방향 핸드셰이크

  • TCP에서는 유실없는 안전한 통신을 위해 통신 시작 전, 사전 연결작업을 진행합니다.
  • 목적지에서 데이터를 받을 준비가 되어있지 않은데 전송한다면 데이터가 버려질 것입니다. TCP에서는 이러한 상황을 만들지 않기 위해서 미리 데이터를 보낼 수 있는지 확인하는 작업을 거칩니다.
  • 정확한 통신을 위해 3번의 패킷을 주고받으면서 서로 통신을 준비하는데, 이를 3방향 핸드셰이크라 합니다.
  • 3방향 핸드셰이크는 진행 상황에 따라 상태정보를 이름이 존재합니다.
  • LISTEN : 서버에서 서비스를 제공하기 위해 클라이언트의 접속을 받아들일 수 있는 상태.
  • SYN-SENT : 클라이언트에서 서버로 통신을 시도할 때 Syn 패킷을 보낸 상태. Syn패킷을 서버로 보냅니다.
  • SYN-RECEIVE : 서버에서 클라이언트의 Syn패킷을 받은 상태. Syn,Ack로 클라이언트에 응답합니다.
  • ESTABLISHED : Syn,Ack를 받은 클라이언트의 상태. Ack를 서버에 다시 보냅니다. 이를 받은 서버도 해당 상태로 변경합니다. 해당 상태는 서버와 클라이언트 간의 연결이 성공적으로 완려되었음을 나타냅니다.
  • TCP는 6가지의 플래그 비트를 가집니다. 이는 초기 연결, 응답, 정상종료, 비정상 종료 등의 용도로 사요사용됩니다.

    SYN : 연결 시작 용도. 연결이 시작될 때 SYN 플래그에 1로 표시해 보냅니다,
    ACK : ACK 번호가 유효할 경우 1로 표시해 보냅니다. 초기 SYN이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 ACK 플래그가 1로 표기됩니다.
    FIN : 연결 종료 시 1로 표시됩니다. 데이터 전송을 마친 후 정상적으로 양방향 종료시 사용합니다.
    RST : 연결 종료 시 1로 표시됩니다. 연결 강제 종료를 위해 연결을 일방적으로 끊었을 때 사용합니다.
    URG : 긴급 데이터인 경우 1로 표시해 보냅니다.
    PSH : 서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시할 때 사용합니다.

3방향 핸드셰이크 과정

  • 통신을 처음 시도할 때 송신자 플래그에 있는 SYN 필드를 1로 표기해 패킷을 보냅니다. 이때 자신이 사용할 첫 seq no를 적어 보냅니다.
  • 이를 받은 수신측에서는 SYN과 ACK 비트 플래그에 1를 표기해 응답합니다. 또한 자신이 사용할 시퀀스 번호를 적고 ACK 번호는 송신자가 보낸 시퀀스 번호에 1을 추가한 값을 넣어 응답합니다.
  • ACK 번호는 1번까지 잘 받았으니 10+1번을 달라는 의미입니다.
  • 수신자의 패킷을 받은 송신자는 연결 확립을 위해 다시 한번 응답 메세지를 보냅니다. 이제부터는 기존 메시지에 대한 응답이므로 SYN은 0, ACK는 1로 표기합니다. 또한 수신자가 ACK번호를 11으로 표기해 보냈으니 송신자는 시퀀스 번호를 11로 표기해 응답합니다. 그리고 수신자가 시퀀스번호를 20으로 보냈으니, 송신자는 AC번호를 20+1로 표기해 응답합니다

UDP

  • UDP는 데이터 유실, 패킷 순서에 대한 정렬 등의 기능이 없습니다.
  • UDP는 데이터 전송의 신뢰성을 보장하지 않습니다.
  • UDP는 실시간 스트리밍, 음성데이터와 같이 시간에 민감한 프로토콜이나 어플리케이션에서 사용합니다.
  • 멀티캐스트처럼 단방향으로 다수의 단말로 송신하는 경우에 사용합니다.
  • 즉, 데이터 전송의 신뢰성 보다 일부 데이터가 유실되더라도 계속 빠르게 전송해야할 경우 UDP를 사용합니다.
  • 만약 30프레임 중 1프레임이 유실되어 29프레임이 수신 된 경우 눈으로는 큰 어색함을 못느끼지만, TCP처럼 사라진 1프레임을 받기 위해서 화면이 일시정지된다면 네트워크 품질이 떨어진다 생각하게 될 것입니다.
  • UDP는 3방향 핸드셰이크 같은 과정은 없으며, 첫 데이터는 리소스 확보를 위한 인터럽트를 거는 용도로 사용하고 유실됩니다.
  • 혹은 연결확립은 TCP의 3방향 핸드쉐이크를 사용하고 이후 실제 데이터는 UDP를 이용하는 경우가 대부분입니다.

ARP

ARP란?

  • 2계층의 물리적인 주소인 MAC과 3계층이 논리적인 주소인 IP주소는 서로 연관성이 없습니다.
  • 하지만 통신을 위해서 두 주소를 사용하므로 이를 연계 시켜줄 메커니즘이 필요합니다.
  • 이때 사용되는 프로토콜이 ARP입니다.
  • 호스트에서 아무 통신이 없다가 처음 통신을 시도하면 패킷을 바로 캡슐화할 수 없습니다.
  • 목적지 IP주소로 통신을 시도하기 위해서는 MAC주소도 알아야 합니다. 이를 알아내려면 ARP 브로드 캐스트를 이용해 네트워크 전체에 상대방 MAC주소를 질의해야 합니다.
  • ARP 브로드캐스트를 받은 목적지는 ARP 프로토콜을 이용해 자신의 MAC 주소를 응답합니다.
  • 이 작업이 완료되면 출발지, 목적지 둘 다 상대방에 대한 MAC 주소를 학습하고 이후 패킷이 인캡슐레이션이 되어 전달할 수 있습니다.
  • 학습한 MAC주소는 ARP테이블에 일정 시간동안 저장됩니다. 일정 시간이 지나면 성능유지를 위해서 해당 테이블은 삭제됩니다.
  • 이때 유형 필드는 동적/정적으로 나눠집니다.
  • 이러한 ARP 테이블을 가지고 있지 않고 매번 ARP브로드캐스트를 한다면 네트워크에 부하를 줄 수 있습니다

ARP의 동작

  • ARP 패킷은 송신자 MAC주소, 송신자 IP 주소, 대상자 MAC주소, 대상자 IP주소의 네 가지 필드가 중요합니다.

  • 이 네 가지 필드를 이용해 ARP가 어떻게 동작하는지 살펴보겠습니다.

  • 서버 A에서 서버 B로 ping을 보내려 할 때, 서버 A에서는 3계층의 IP 주소까지만 캡슐화를 할 수 있고, MAC 주소는 모르기 때문에 2계층에서는 인캡슐레이션을 진행할 수 없습니다.

  • 서버 A는 목적지 서버 B의 MAC주소를 알아내기 위해서 ARP요청을 네트워크에 브로드캐스트합니다.

  • ARP 패킷을 네트워크에 브로드 캐스트할 때 아래 그림과 같이 필드를 채웁니다.

  • APR 패킷은 일반 2~3계층 패킷과 달리 출발지 IP/MAC, 전송자 IP/MAC, 대상자IP/MAC으로 필드를 구분해 표현합니다.

  • 출발지 MAC : 자신의 MAC 주소

  • 목적지 MAC : 브로드캐스트 주소(FF-FF-FF-FF-FF-FF)

  • 전송자 MAC : 자신의 MAC 주소

  • 전송자 IP : 자신의 아이피

  • 대상자 MAC : 00-00-00-00-00-00

  • 대상자 IP : 대상자의 IP 주소

  • 2계층의 목적지가 브로드캐스트이기에 ARP패킷은 같은 네트워크 안에 있는 모든 단말로 보내지고, 이를 수신한 단말은 ARP프로토콜 내용을 확인합니다.

  • 이때 ARP프로토콜의 대상자IP가 자신이 아니면 ARP 패킷을 버리고, 자신이라면 ARP 요청을 처리하고 그에 대한 응답을 보냅니다.

  • ARP응답을 보낼 때는 송신자와 대의 위치가 바뀝니다. ARP 요청을 처음 보냈던 서버A와 달리 서버B에서는 ARP 요청을 수신하면서 이미 A서버의 정보를 이용해 대상자 MAC, IP주소를 채울 수 있습니다. 그리고 자신의 MAC, IP 주소를 전송자 MAC, IP주소로 채워 응답합니다.

  • 응답 시에는 출발지와 도착지 MAC이 명시되어있으므로 유니 캐스트입니다.

  • 서버 A는 서버 B로 부터 응답받은 ARP 정보를 캐시 테이블에 갱신합니다. 이 캐시테이블은 정해진 시간 동안 서버 B와 통신이 없을 때까지 유지됩니다.

  • ARP 캐시 테이블이 갱신된 후에는 상대의 MAC주소를 알고 있으므로 도착지 MAC 주소필드에 입력하여 패킷을 보낼 수 있습니다.

GARP

  • GARP는 자신의 주소를 알릴 목적으로 사용됩니다
  • 이를 위해서 대상자 IP, MAC 필드에 자신의 주소를 채워 ARP요청을 보냅니다.
  • 또한 목적지 MAC주소는 브로드캐스트 MAC 주소를 사용합니다.
  • GARP를 사용해 동일 네트워크에서 자신의 IP, MAC주소를 알려주는 이유는 다음 3가지입니다.
    1. IP 주소 충돌 감지
    2. 상대방의 ARP테이블 갱신
    3. 고가용성 용도의 클러스터링, VRRP, HSRP

IP 충돌 감지

  • IP는 유일하게 할당되어야 하는 값이지만, 여러 이유로 누군가 같은 IP를 사용할 수도 있습니다.
  • IP충돌 시 통신이 되지 않으므로 이를 예방하기 위해서 누군가 같은 IP를 사용하는지 GARP를 통해 확인합니다.

상대방의 ARP 테이블 갱신

  • 가상 MAC주소를 사용하지 않는 데이터베이스 HA 솔루션에서 주로 사용합니다.
  • 데이터베이스 HA는 주로 두 데이터베이스 서버가 하나의 가상IP주소로 서비스합니다.
  • 두 데이터베이스는 엑티브-스텐바이로 동작합니다.
  • 엑티브 상태인 서버가 가상 IP주소 요청에 응답해 서비스하지만 MAC 주소는 가상주소가 아닌 실제 MAC주소를 사용합니다.
  • 위 그림 처럼 두대의 데이터베이스가 1.2 , 1.3 IP주소를 가지고 있고 가상 아이피인 1.1서비스를 한다고 가정해봅니다.
  • 하나의 단말에서 서비스 IP인 1.1과 통신하기 위해 브로드캐스트로 1.1에 대한 ARP 요청을 보냅니다.
  • DB-A와 DB-B 장비 모두 1.1에 대한 ARP 요청을 수신하고, 엑티브 역할을 하는 DB-A가 1.1에 대한 ARP 요청에 응답합니다.
  • 단말 1.1 IP 주소가 DB-A의 AA:AA:AA MAC주소를 가진 것으로 학습 후 통신합니다.
  • 만약 위 그림처럼 엑티브 장비가 동작하지 않을 경우 DB-B 장비가 엑티브로 동작해 1.1 IP주소에 대한 ARP 요청에 응답합니다.
  • 이때 1.1 IP주소를 가진 장비는 아직 DB-A의 MAC주소로 학습하고 있습니다. DB-B의 MAC주소를 학습하지 않는 이상 계속 DB-A로 패킷을 보낼 것입니다. 하지만 현재 DB-B가 엑티브 상태이므로 패킷이 정상적으로 전달되지 않아 네트워크에서 응답을 하지 않을 것입니다.
  • 이러한 문제를 위해 DB-A에서 DB-B로 엑티브상태가 변경될 경우 GARP 패킷을 보내 1.1 IP 단말에서 DB-B에 대한 MAC주소로 캐시테이블을 갱신시킵니다.

클러스터링, FHRP(VRRP, HSRP)

  • 앞에서 다룬 HA 솔루션과 다르게 가상 MAC을 사용하는 클러스터링, VRRP, HSRP와 같은 FHRP에도 GARP가 사용됩니다.
  • 데이터베이스 고가용성 솔루션에서의. GARP는 단말의 ARP 테이블을 갱신하는 게 목적이었다면, 클러스터링이나 FHRP의 GARP의 목적은 네트워크 스위치에 장비의 테이블의 갱신이 목적입니다.
  • 클러스터링에서 가상 MAC주소를 사용하는 경우, 단말은 APR 캐시 테이블에 가상 MAC주소를 캐시하고 이를 갱신하지 않습니다.
  • 하지만 클러스터링 중간에 있는 스위치의 MAC테이블은 엑티브가 변경되는 시점에 갱신이 피룡합니다.
  • 따라서 스텐바이가 엑티브로 역할이 변경되면 GARP를 전송하고 스위치에서 GARP패킷을 통해 MAC 테이블을 갱신합니다.

RARP

  • RARP는 Reverse ARP의 줄임말입니다. 즉 반대로 동작하는 ARP인데, GARP 처럼 ARP 프로토콜 구조는 같으나 필드에 들어가는 내용이 다르고 원래 목적과 반대로 사용됩니다.
  • RARP는 IP주소가 정해져있지 않는 단말이 IP 할당을 요청할 때 사용합니다.
  • ARP는 내가 통신해야할 상대방의 MAC주소를 모를 때 상대방 IP주소로 MAC 주소를 물어보기 위해 만들어진 프로토콜입니다.
  • RARP는 반대로 나 자신의 MAC주소를 알지만 IP가 아직 할다오디지 않아 IP를 서버에 어떤 IP주소를 써야하는지 물어볼 때 사용합니다.
    -현재는 BOOTP와 DHCP로 대체되어 사용되지 않습니다.

서브넷과 게이트웨이

  • 원격지 네트워크와 통신에 사용하는 장비를 게이트웨이라 부르고 3계층 장비(라우터와 L3스위치)가 이 역할을 할 수 있습니다.

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

  • 로컬네트워크에서는 ARP 브로드캐스트를 이용해 도착지 MAC 주소를 학습할 수 있고 이 MAC주소를 이용해 직접 통신할 수 있지만 원격 네트워크 통신은 네트워크를 넘어 전달되지 못하는 브로드캐스트의 성질 때문에 네트워크 장비의 도움이 필요합니다.
  • 이러한 장비를 게이트웨이라 하고 게이트웨이에 대한 정보를 PC나 네티워크 장비에 설정하는 항목이 '기본 게이트웨이'입니다.
  • 기본 게이트웨이는 3계층 장비가 수행하고 여러 네트워크와 연결되면서 적절한 경로를 지정해주는 역할을 합니다.
  • 목적지가 동일 네트워크냐, 원격 네트워크냐에 따라서 동작방식이 달라지므로 이를 파악하는 작업이 필요합니다.
  • 이때 서브넷 마스크가 사용됩니다. IP주소와 서브넷 마스크를 AND연산하여 나오는 값을 통해 목적지IP와 자신의 IP가 같은 네트워크 주소에 속하는지 파악할 수 있습니다.

2계층 통신 vs 3계층 통신

  • 2계층 통신은 로컬 네트워크 통신, 3계층 통신은 원격지 네트워크 통신이라 부릅니다.
  • 로컬 네트워크에서는 3계층의 장비를 통하지 않아도 통신이 가능합니다. 즉, 2계층 정보까지만 확인해 통신을 합니다.
  • 원격지 네트워크 통신은 3계층 장비의 도움이 없이는 통신이 불가합니다. 해당 패킷을 전송하는 네트워크 장비에서 3계층 정보까지 확인해야합니다.
  • 로컬 네트워크에 있는 단말간 통신은 직접적으로 이루어집니다. 상대 MAC주소를 알아내기 위해 ARP 브로드캐스트를 이용하고 상대 MAC주소를 알아내자마자 패킷이 캡슐화 되어 통신이 시작됩니다.
  • 원격 네트워크와 통신이 필요할 때는 단말이 자신이 직접 조낼 수 없는 위치에 목적지가 있다고 판단하고(서브네팅을 통해서 판단) ARP요청을 기본 게이트웨이의 IP주소로 요청합니다.
  • 게이트웨이에서 ARP 응답을 받은 단말은 도착지 MAC주소에 응답받은 기본 게이트웨이 MAC주소를 적어놓고 통신을 시작하니다.
  • 로컬 통신은 도착지 MAC 주소와 IP주소가 같은 반면, 원격지 통신은 도착지 MAC 주소와 도착지 IP 주소가 다릅니다.
  • 도착지 IP 주소는 통신의 실제 도착지이고 도착지 MAC주소는 기본 게이트웨이의 MAC 주소가 사용됩니다.

0개의 댓글