네트워크 통신하기

Jaca·2022년 7월 25일
1

통신 방식

네트워크에서 출발지에서 목적지로 데이터를 전송할 때 사용하는 방식은
유니캐스트, 멀티캐스트, 브로드캐스트, 애니캐스트 가 있다.

각 통신 방식은 다음과 같다.

  • 유니캐스트
    - 1:1 통신
    • 출발지와 목적지가 1:1로 통신
  • 브로드캐스트
    - 1:모든 통신
    • 동일 네트워크에 존재하는 모든 호스트가 목적지
  • 멀티캐스트
    - 1:그룹 통신
    • 하나의 출발지에서 다수의 특정 목적지로 데이터 전송
  • 애니캐스트
    - 1:1 통신
    • 다수의 동일 그룹 중 가장 가까운 호스트에서 응답
    • IPv4에서는 일부 기능 구현, IPv6은 모두 구현 가능

유니캐스트는 출발지와 목적지가 명확히 하나로 정해져 있는 1:1 통신 방식이다.
실제로 사용하는 대부분의 통신은 유니캐스트 방식을 사용한다.

브로드캐스트는 목적지 주소가 모두로 표기되어 있는 통신 방식이다.
유니캐스트로 통신하기 전, 주로 상대방의 정확한 위치를 알기 위해 사용된다.

멀티캐스트는 멀티캐스트 그룹 주소를 이용해 해당 그룹에 속한 다수의 호스트로 패킷을 전송하기 위한 통신 방식이다.
사내 방송이나 증권 시세같이 단방향으로 다수에게 동시에 같은 내용을 전달해야할 때 사용된다.

애니캐스트는 애니캐스트 주소가 같은 호스트들 중에서 가장 가깝거나 효율적으로 서비스할 수 있는 호스트와 통신하는 방식이다.
이런 애니캐스트 게이트웨이의 성질을 이용해서 가장 가까운 DNS 서버를 찾을 때 사용하거나 가장 가까운 게이트웨이를 찾는 애니캐스트 게이트웨이 기능에 사용하기도 한다.
최종 통신은 1:1로 유니캐스트와 애니캐스트가 동일하지만 통신할 수 있는 후보자는 다르다.
유니캐스트는 출발지와 목적지가 모두 한 대씩이지만 애니캐스트는 같은 목적지 주소를 가진 서버가 여러 대여서 통신 가능한 다수의 후보군이 있다.

BUM 트래픽

트래픽의 종류중에 BUM 트래픽이라는 것이 있다.
이는 Broadcast, Unknown Unicast, Multicast를 지칭한다.
이 세 가지는 서로 다른 종류의 트래픽이지만 네트워크에서의 동작은 서로 비슷하다.

Unknown Unicast는 유니캐스트여서 목적지 주소는 명확히 명시되어 있지만 네트워크에서의 동작은 브로드캐스트와 같을 때 가리킨다.
주로 스위치가 목적지에 대한 주소를 학습하지 못한 상황이어서 패킷을 모든 포트로 플러딩하는데 이런 유니캐스트를 언노운 유니캐스트라고 한다.

BUM 트래픽은 유니캐스트이지만 실제로 겉으로 보이는 동작 방식은 브로드캐스트에 가깝기 때문이다.
전달 받는 모든 단말은 유니캐스트이기 때문에 도착지 주소를 확인하고 패킷을 폐기하지만,
네트워크 입장에서는 네트워크 자원을 쓸데없이 사용하므로 네트워크상에서 불필요한 BUM 트래픽이 많아지면 네트워크 성능이 저하될 수 있다.

MAC 주소

MAC 주소는 2계층에서 통신을 위해 네트워크 인터페이스에 할당된 고유 식별자이다.
MAC 주소는 이더넷과 와이파이를 포함한 대부분의 IEEE 802 네트워크 기술에서 2계층 주소로 사용된다.
네트워크에 접속하는 모든 장비는 MAC 주소라는 물리적인 주소가 있어야 하고 이 주소를 이용해 서로 통신한다.

MAC 주소 동작

NIC는 자신의 MAC 주소를 가지고 있고 전기 신호가 들어오면 2계층에서 데이터 형태로 변환하여 내용을 구분한 후 도착지 MAC 주소를 확인한다.
만약 도착지 MAC 주소가 자신이 갖고 있는 MAC 주소와 다르면 그 패킷을 폐기한다.
패킷의 목적지 주소가 자기 자신이거나 브로드캐스트, 멀티캐스트와 같은 그룹 주소이면 처리해야할 주소로 인지해 패킷 정보를 상위 계층으로 넘겨준다.

도착지 주소가 일치하지 않아 NIC에서 자체적으로 패킷을 폐기하는 경우와 달리 본인의 주소, 브로드캐스트 주소는 NIC 자체적으로 패킷을 처리하는 것이 아니라 OS나 애플리케이션에서 처리해야 하므로 시스템에 부하가 작용한다.

IP 주소

대부분의 네트워크가 TCP/IP로 동작하므로 IP 주소 체계를 이해해야 한다.

IP 주소를 포함한 다른 프로토콜 스택의 3계층 주소는 다음과 같은 특징이 있다.
1. 사용자가 변경 가능한 논리 주소이다.
2. 주소에 레벨이 있다.

IP 주소 체계

우리가 흔히 사용하는 IP 주소는 32비트인 IPv4 주소이다.
IP는 v4, v6가 있으며 v6는 128비트이다.

IP 주소에는 네트워크 주소와 호스트 주소 두 부분으로 나눈다.

  • 네트워크 주소
    - 호스트들을 모은 네트워크를 지칭하는 주소. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 한다.
  • 호스트 주소
    - 하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소

MAC 주소는 24비트씩 절반으로 나뉘지만
IP 주소의 네트워크 주소와 호스트 주소는 이 둘이 구분하는 경계점이 고정되어 있지 않다.
IP 주소 체계는 필요한 호스트의 IP 개수에 따라 네트워크의 크기를 다르게 할당할 수 있는 클래스의 개념을 도입했다.

ClassIP 주소의 첫 비트범위IP 주소의 범위
A Class0XXXXXXX0~1270.0.0.0 ~ 127.255.255.255
B Class10XXXXXX128~191128.0.0.0 ~ 191.255.255.255
C Class110XXXXX192~223192.0.0.0 ~ 223.255.255.255
D Class111XXXXX224~239224.0.0.0 ~ 239.255.255.255
E Class1111XXXX240~255240.0.0.0 ~ 255.255.255.255

네트워크 주소와 호스트 주소를 나누는 구분자를 가지고 있는데, 이를 서브넷 마스크라고 한다.

IP 주소가 도입한 클래스의 개념은 다른 고정된 네트워크 주소 체계에 비해 주소를 절약할 수 있다는 장점이 있다.
네트워크의 크기가 모두 같은 경우, 큰 네트워크를 필요로 하는 조직은 네트워크를 여러 개 확보해야 하는 어려움이 있고 연속된 네트워크를 할당받기 어렵다.
작은 네트워크가 필요한 조직의 입장에서는 IP가 낭비될 수 있다.

클래스 리스 네트워크

인터넷이 상용화되면서 인터넷에 연결되는 호스트 숫자가 폭발적으로 증가하며,
기존 클래스풀 기반의 주소 체계는 확장성과 효율성을 모두 잡는 좋은 주소 체계였지만 IP 주소 요구를 감당하기에는 부족하기 때문에 클래스 리스(CIDR) 기반의 주소 체계가 등장하였다.

원래 부여된 클래스의 기준을 무시하고 새로운 네트워크-호스트 구분 기준을 사용자가 정해 원래 클래스풀 단위의 네트워크보다 더 쪼개는 것을 서브네팅이라고 한다.

공인 IP와 사설 IP

인터넷에 접속하려면 IP 주소가 있어야 하고 이 IP는 전 세계에서 유일해야 하는 식별자이다.
이런 IP를 공인 IP라고 한다.

하지만 인터넷에 연결하지 않고 개인적으로 네트워크를 구성한다면 공인 IP 주소를 할당받지 않고도 네트워크를 구축할 수 있다.
이때 사용하는 IP 주소를 사설 IP 주소라고 한다.

사설 IP 주소를 사용하면 인터넷에 직접 접속할 수는 없지만 NAT 장비를 통해 공인 IP로 변경하면 접속이 가능하다.

TCP와 UDP

앞에서 설명한 2계층과 3계층은 목적지를 정확히 찾아가기 위한 주소 제공이 목적이었지만,
4계층에서 동작하는 프로토콜은 만들어진 목적이 조금 다르다.
목적지 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않도록 잘 조합해 원래 데이터를 잘 만들어내기 위한 역할을 한다.

TCP

TCP는 정보유실 없는 통신을 보장하기 위해 세션을 안전하게 연결하고 데이터를 분할하고 패킷이 잘 전송되었는지 확인한다.
패킷에 번호(Sequence Number)를 부여하고 잘 전송되었는지에 대해 응답(Acknowledge Number)한다.
또 한꺼번에 상대방이 받을 수 있는 크기(Window Size)까지 고려해 통신한다.
TCP의 여러 역할 덕분에 네트워크 상태를 심각하게 고려하지 않고 특별한 개발 없이도 쉽고 안전하게 네트워크를 사용할 수 있다.

시퀀스, 액크, 슬라이딩 윈도우

TCP에서는 분할된 패킷을 잘 분할하고 수신 측이 잘 조합하도록 패킷에 순서를 주고 응답 번호를 부여한다.
순서와 응답을 상호작용해 순서가 바뀌거나 누락된 패킷을 파악한다.

TCP는 일방적으로 패킷을 보내는 것이 아니라 상대방이 잘 받았는지 확인하기 위해 ACK 번호를 확인하고 다음 패킷을 전송하는데,
이 패킷을 주고 받는 것 자체가 통신 시간을 늘리지만 송신자와 수신자가 먼 거리에 떨어져 있으면 왕복 지연시간(Round Trip Time, RTT)이 늘어나므로 응답을 기다리는 시간이 더 길어진다.
데이터를 보낼 때 패킷을 많이 보내는 것이 효율적이지만 네트워크 상태가 안 좋으면 패킷 유실 가능성이 커지므로 적절한 송신량을 결정해야 하는데 한 번에 데이터를 받을 수 있는 데이터 크기를 윈도우 사이즈라고 하고 네트워크 상황에 따라 이 윈도우 사이즈를 조절하는 것을 슬라이딩 윈도우 라고 한다.

3 웨이 핸드쉐이크

TCP에서는 유실없는 통신을 위해 통신 전 확인 작업을 거친다.
패킷 네트워크에서는 동시에 많은 상대방과 통신하기 때문에 통신 전, 각 통신에 필요한 리소스를 미리 확보한다.

위 과정이 생기다보니 통신과 새로운 통신을 구분하기 위해 헤더에 Flag 값을 추가 시킨다.

UDP

UDP는 TCP와 달리 4계층 프로토콜이 가져야 할 특징이 거의 없다.
UDP는 데이터 전송을 보장하지 않는 프로토콜이므로 제한된 용도로만 사용한다.
UDP는 3 웨이 핸드쉐이크같은 절차도 없다. 대신 첫 데이터는 리소스 확보를 위해 인터럽트를 거는 용도로 사용되고 유실된다.
그래서 UDP 프로토콜을 사용하는 애플리케이션이 대부분 이런 상황을 인지하고 동작하거나 연결 확립은 TCP 프로토콜을 사용하는 경우가 많다.

ARP

MAC 주소와 IP 주소는 실질적으론 관계가 없다.
실제로 통신은 IP 주소를 기반으로 일어나고 MAC 주소는 상대방의 주소를 자동으로 알아내 통신하게 된다.
이때 상대방의 MAC 주소를 알아내기 위해 사용되는 프로토콜이 ARP이다.

호스트에서 아무 통신이 없다가 처음 통신을 시도하면 패킷을 바로 캡슐화할 수 없다.
통신을 시도할 때 출발지와 목적지 IP 주소는 미리 알고 있어 캡슐화하는 데 문제가 없지만 상대방의 MAC 주소를 얼 수 없어 2계층 캡슐화를 수행할 수 없다.
그래서 ARP 브로드캐스트를 이용해 상대방의 MAC 주소를 질의한다.

ARP 브로드캐스트를 받은 목적지는 APR 프로토콜을 이용해 자신의 MAC 주소를 응답한다.
이 작업 후 양 쪽다 상대방의 MAC 주소를 학습하고 패킷을 정상적으로 전달할 수 있다.

GARP

일반적인 ARP 외에도 ARP 프로토콜 필드를 그대로 사용하지만 내용을 변경해 원래 ARP 프로토콜의 목적과 다른 용도로 사용하는 GARP, RARP같은 프로토콜도 있다.
GARP는 대상자 IP 필드에 자신의 IP 주소를 채워 ARP 요청을 보낸다.
GARP는 자신의 IP와 MAC 주소를 알리기 위해 사용한다.

GARP를 사용하는 이유는
1. IP 주소 충돌 감지
- 같은 네트워크 망 안에서 IP 주소 충돌을 방지하기 위해서 이미 사용되고 있는지 GARP를 통해 확인할 수 있다.
2. 상대방(동일 서브넷에 있는)의 ARP 테이블 갱신
- 같은 네트워크 망 내부에 존재하는 단말들의 ARP 테이블을 갱신하는 것이다.
3. HA 용도의 클러스터링, VRRP, HSRP
- '상대방 ARP 테이블 갱신'은 단말의 ARP 테이블을 갱신하는 것이 목적이였던 반명, 이것은 네트워크에 있는 스위치 장비의 MAC 테이블 갱신이 목적이다.

RARP

RARP는 IP 주소가 정해져 있지 않은 단말이 IP 할당을 요청할 때 사용한다.
아직 IP가 할당되지 않아 IP를 할당해주는 서버에 어떤 IP 주소를 써야 하는지 물어볼 때 사용한다.

서브넷과 게이트웨이

원격지 네트워크와의 통신에 필요한 장비를 게이트웨이라 부르고 3계층 장비(라우터, L3 스위치)가 이 역할을 할 수 있다.

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

로컬 네트워크에서는 ARP 브로드캐스트를 이용해 도착지 MAC 주소를 학습할 수 있고 MAC 주소를 이용해 직접 통신할 수 있지만 원격 네트워크 통신은 네트워크를 넘어 전달되지 못하는 브로드캐스트의 성질 때문에 네트워크 장비의 도움이 필요하다.

게이트웨이는 3계층 장비가 수행하고 여러 네트워크와 연결되면서 적절한 경로를 지정해주는 역할을 한다.

동일한 LAN 내에서 통신인지, 서로 다른 네트워크 간의 통신인지에 따라 통신 방식이 달라지므로 출발지에서는 먼저 목적지가 자신이 속한 네트워크의 범위인지 확인하는 작업이 필요하다.

이때 사용되는 것이 서브넷 마스크이다.
자신의 IP와 서브넷 마스크를 and 연산을 통해 로컬 통신인지 원격지 통신인지 구분한다.
로컬 통신은 단순한 ARP 요청으로 목적지를 찾아 통신할 수 있지만 원격지 통신은 ARP가 라우터를 넘어가지 못하는 브로드캐스트이다.

2계층 통신 VS 3계층 통신

통신하는 출발지와 도착지가 같은지 다른지에 따라 ARP 동작 방식이 다르다.

같은 네트워크의 통신은 직접 MAC 주소를 알아내기 위해 ARP 브로드캐스트를 이용하고,
외부 네트워크와의 통신은 단말이 직접 자신이 보낼 수 없는 위치에 목적지가 있다고 판단하고 ARP 요청을 기본 게이트웨이 IP 주소로 요청한다.

게이트웨이에서 ARP 응답을 받으면 IP는 원본의 도착지 IP 주소를 사용하지만, 도착지 MAC 주소에 응답 받은 기본 게이트웨이의 MAC 주소를 넣고 통신을 한다.

profile
I am me

0개의 댓글