네트워크 통신하기

네트워크 통신 방식에는 Unicast,BroadCast,Multicast,Anycast가 존재한다.

Unicast

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

BroadCast

  • 같은 네트워크에 존재하는 모든 host가 목적지 (1: 모든 통신)
  • local 네트워크 내에서 모든 host에게 패킷을 전달할 때 사용됨
  • IPv6에서는 브로드 캐스트가 존재하지 않고, 링크 로컬 멀티캐스트로 대체되어 사용되고 있다.

Multicast

  • 다수의 특정 목적지로 데이터 전송 (1: 멀티캐스트 구독 호스트들)

AnyCast

  • 가장 가까운 호스트 (1:1 통신인데, 목적지는 동일 그룹내 1개 호스트 )
  • 가장 가까운 DNS 서버 , Gateway를 찾는데 사용하기도 함
  • Unicast와 다르게 anycast는 같은 목적지 주소를 가진 서버가 여러대이다.

BUM 트래픽

  • B(broadcast) , U(Unknown unicast) , M(multicast) 을 지칭 , BUM 트래픽이 많으면 네트워크 성능 저하
  • unknown unicast는 스위치가 목적지 주소를 몰라 , 모든 포트로 전송하는데 이러한 unicast를 unknown unicast라고 함 (unicast지만, 마치 broadcast와 유사한 동작 )
  • 이더넷 환경에서는 ARP broadcast를 먼저 보내고 통신을 시작하므로 BUM 트래픽이 많이 발생하지 않음

MAC 주소

  • MAC주소는 변경할 수 없도록 하드웨어(네트워크 인터페이스 카드)에 고정되어 출하하므로, 네트워크 구성 요소마다 다른 주소를 가지고 있다.
  • BIA(Burned in address) : 하드웨어적으로 고정되어 나오는 주소므로 BIA라고도 부른다.
  • MAC 주소는 48bit의 16진수 12자리로 표현됨
  1. OUI : IEEE가 제조사에 할당하는 코드 영역
  2. UAA : 제조사 내에서 네트워크 구성 요소에 할당하는 부분
  • 가끔 제조사에서 동일한 UAA주소를 할당하는 경우가 있는데, 이떄는 MAC주소가 중복된다. 동일 네트워크 안에서만 겹치지 않으면 라우터에서 다른 네트워크로 넘겨줄때, 출발지와 도착지의 MAC주소가 변경되므로 동작하는데는 문제가 없다.

MAC 주소 동작 방식

  1. NIC은 자신의 MAC주소를 가지고 있고, 1계층을 통해 전기신호가 들어오면 이를 bit열(데이터 형태)로 변환해서 도착지 MAC주소를 확인한다.
  2. 도착지 MAC주소가 자신과 동일한 경우나 broadcast,multicast의 경우에는 상위 계층으로 패킷정보를 넘기고, 그렇지 않은 경우에는 패킷을 폐기한다.

broadcast,multicast의 경우에는 NIC에서 자체적으로 처리하는 게 아니라 OS나 app에서 처리함으로 시스템에 부하가 작용한다.


IP 주소

IP 주소는 3계층에서 사용되는 주소로서, 다음과 같은 특징을 가진다.

  • 사용자가 변경 가능한 논리적인 주소
  • 네트워크 주소와 호스트 주소로 나뉜다.

32bit v4, 128bit v6 두 버전이 있는데 흔히 v4를 사용한다.

네트워크 주소는 호스트를 모은 네트워크를 지칭하는 주소로, 네트워크 주소가 같은 네트워크를 local 네트워크라고 한다.
호스트 주소는 같은 네트워크 주소 내에 존재하는 각 호스트를 구분하기 위한 주소이다.

IP 주소 할당 방식 - classful address

IP 주소 체계는 과거에 필요한 호스트 IP 개수에 따라 네트워크의 크기를 다르게 할당할 수 있는 클래스 주소체계를 도입하였다.

IP 주소의 네트워크 부분을 8,16,24 bit로 제한했었고, 8,16,24 bit 서브넷 주소를 갖는 서브넷을 각각 A,B,C class라고 한다.

  • A class : 2^24 host 주소 (약 1600만개)
  • B class : 2^16 host 주소 (약 6만 5천개)
  • C class : 2^8 host 주소 (약 250개)

(ref- http://korean-daeddo.blogspot.com/2015/12/ip.html)

class 구분법

A,B,C class는 맨 앞 옥텟의 주소만 보고 구분할 수 있다.

  • A class : 맨 앞 bit가 0인 주소(00000000 ~ 01111111) , 1 ~ 127

예외로 127.0.0.1 주소는 루프백이다.

  • B class : 두번쨰 bit가 0인 주소 (10000000~ 10111111) , 128 ~ 191

  • C class : 세번쨰 bit가 0인 주소 (11000000 ~ 11011111) , 192 ~ 223

IP 주소 할당 방식 - classless address ,CIDR

classful 주소 체계의 문제점은 상위 class (A class) 를 할당받은 기관에서 호스트 주소를 전부 사용하지 못하면서 전체 IP 주소 자체의 부족현상이 나타남

따라서 class기반의 주소 체계를 버리고 현재는 CIDR(Classless Inter-Domain Routing)기반의 주소 체계를 사용함.

subnet mask

subnet mask는 IP주소와 네트워크 주소를 구분할 떄 사용하는데 2진수 숫자1은 네트워크 주소 , 숫자0은 호스트 주소로 표시한다.
보통 10진수를 사용해 255.0.0.0 , 255.255.0.0 같이 사용하며 255 부분이 네트워크 주소이다.

ex) Ipv4 주소 : 103.9.32.146 / subnet mask : 255.255.255.0 인 경우 네트워크 주소는 103.9.32.0이고, 호스트 주소는 0.0.0.146이다.

  • subnet mask 표기법 : bit로 표기할때는 보통 “IP주소/비트수”로 표기한다.

  • subnet의 구체적인 정의 : 호스트들이 하나의 라우터 인터페이스로 연결된 네트워크를 subnet을 구성한다고 하며, 고립된 로컬 네트워크 각각을 subnet 이라고 부른다.

subnetting

원래 부여된 classful 단위의 네트워크보다 더 쪼개 사용하는 것을 subnetting이라고 한다.
8bit 옥텟단위의 class를 1bit 단위로 네트워크를 분할하여 사용한다.

  • 네트워크 사용자 입장

네트워크 사용자는 이미 설계된 네트워크에서 사용할 수 있는 IP주소 범위를 파악할 수 있어야 한다. 네트워크 유효 범위를 파악하는 방법은 다음과 같다.

  1. 내 IP주소를 2진수로 변경
  2. Subnet mask를 2진수로 변경
  3. subnetting 된 네트워크 주소 파악 (AND연산)
  4. 호스트 주소 부분을 모두 1로 변경해 broadcast 주소 파악
  5. 최소 IP 주소(subnetting된 네트워크 주소 + 1 ) 와 최대 IP 주소 (broadcast주소 -1 ) 파악
  • 네트워크 설계자 입장

네트워크 크기를 고려해 subnet mask를 결정해야 한다. 예를 들면 subnet 된 network가 몇개 필요한지, subnet된 하나의 network에 몇개의 IP주소를 할당해야 하는지 고려해야 한다.

  • 좋은 네트워크 설계란 IP주소를 여유있게 보급해줄 수 있는 사설IP대역으로 네트워크 설계

공인 IP와 사설 IP

  • 공인IP : 전세계에서 유일해야 하는 식별자
  • 사설IP : NAT(Network address translation) 를 사용해서 특정 네트워크내에서만 유일한 IP주소

예를 들면 가정용 공유기에 NAT process가 돌아가고 있어서 공유기 내부망에서는 각각의 단말기가 유일한 IP주소를 가지고 있음

한가지 주의할점은 다른 기관에서 사용하는 공인IP주소를 회사 내부망에서 사용할 경우에는 같은 네트워크에 존재하는 것으로 인식하고 해당 공인IP에는 접속이 불가능해짐을 주의해야 한다.

4계층 protocol

  • TCP와 UDP는 4계층 프로토콜로, 4계층의 목적은 목적지를 찾아 가는 주소가 아니라, 목적지 내 process( port 번호 ) 를 정확히 찾아가고, 데이터를 분할한 패킷을 잘 쪼개고 , 조립하는 것이 목적이다.

  • TCP에서는 패킷을 분할 및 조합하기 위해서 시퀀스 번호와 Ack 번호를 사용한다.

  • TCP/IP protocol stack에서 상위 프로토콜 지시자는 포트 번호이다. 이떄 기준은 서버의 포트이다.

TCP

  • 패킷 도착 순서 보장

TCP에서는 분할된 패킷을 잘 분할하고, 수신 측이 잘 조합하도록 패킷에 시퀀스 번호를 주고, Ack 번호를 부여한다.
송신자 쪽에서 패킷에 번호를 부여해서 보내고 수신자 쪽이 정상적으로 패킷 유실없이 받았다면, 다음 번호의 패킷을 달라는 의미로 받은 패킷의 다음 시퀀스 번호(=ACK 번호)를 요청한다.
또한 데이터를 보내고 나서 ack번호를 받기 전까지는 메모리(송신 buffer)에서 데이터를 제거하지 않는다. ack가 오지 않으면 timer가 터져서 재전송한다.

ex) 1번 송신 -> 1번 수신, 2번 ACK -> 2번 송신 -> 2번 패킷 소실 -> 2번 패킷 재전송

  • 윈도우 사이즈

TCP에서는 성능 향상을 위해 하나의 패킷씩 주고 받는게 아니라 윈도우 사이즈만큼의 확인 응답(Ack) 없이 여러개의 패킷을 한꺼번에 송신한다. 윈도우에 포함되는 모든 패킷을 전송하고, 윈도우를 옮기고 다른 패킷을 전송하는 방식을 sliding window라고 한다.

TCP는 데이터 유실이 발생하면 윈도우 사이즈를 절반으로 떨어트리고, 정상적으로 통신이 되면 윈도우 사이즈를 하나씩 늘려가는식으로 네트워크 트래픽 과부하를 피한다.

  • 3 way handshaking

TCP에서는 상대 host와 논리적으로 연결되었음을 확인하고 통신을 시작하는데 이때 정확한 통신을 위해서 송신,수신 buffer 등 통신에 필요한 리소스를 확보하는 작업을 3 way handshaking 이라고 부른다 .

3번의 패킷을 주고 받으며 송신자와 수신자가 통신을 서로 준비한다,

  1. 서버는 서비스를 client에게 제공하기 위해서 client의 접속을 받아들일 수 있는 LISTEN 상태로 대기한다.
  2. client에서 첫 시퀀스 번호를 적은 SYN 패킷을 보내는데, 이떄 client 상태를 SYN-SENT 상태라고 한다.
  3. SYN 패킷을 받은 server 상태를 SYN-RECEIVE 상태라고 하며, server에서 사용할 시퀀스 번호를 적은 SYN 패킷과 ACK(client로 부터 받은 패킷의 시퀀스 번호+1) 패킷으로 응답한다.
  4. SYN,ACK패킷을 받은 client 상태를 ESTABLISHED 상태라고 하며, 이제 server와 client는 서로 연결된 상태이다.

SYN,ACK 패킷은 TCP 헤더에 flag 값으로 들어간다 (SYN인 경우, SYN flag == 1 , SYN이 아닌 경우 SYN flag == 0)

TCP flag 종류

  • TCP flag는 총 6가지(SYN,ACK,FIN,RST,URG,PSH)가 있으며 각 용도는 다음과 같다.
  1. SYN : 연결 시작 용도
  2. ACK : 기존 메시지에 대한 응답 용도
  3. FIN : 정상적인 양방향 종료
  4. RST : 연결 강제 종료
  5. URG : 긴급 데이터
  6. PSH : 서버측에서 전송할 데이터가 없거나, 데이터를 버퍼링 없이 application으로 즉시 전달할 것을 지시할 때 사용

UDP

TCP와 달리 4계층 protocol이 가져야 할 특징이 거의 없다. 신뢰성있는 데이터 전송을 보장해주지 않는다. (중간에 패킷 유실되어도 재전송해주지 않음 )

  • UDP 사용용도

음성 데이터 , 실시간 스트리밍과 같이 시간에 민감한 protocol이나, 사내 방송이나 증권 시세 데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답을 받기 어려운 환경에서 주로 사용된다.

이런 환경은 대부분 일부 데이터가 유실되더라도 시간에 맞추어 계속 전송되는 것이 중요한 서비스이다.

ARP (Address Resolution Protocol)

ARP 패킷 구조

  • 상대방의 MAC주소를 알아내기 위해 사용되는 protocol
  • 호스트에서 상대방 MAC주소를 모를때에는 바로 패킷을 캡슐화 할 수는 없음. 이떄 ARP broadcast를 이용해 네트워크 전체에 상대방의 MAC주소를 질의한다.
  • ARP broadcast를 받은 목적지는 ARP 프로토콜을 이용해 자신의 MAC주소를 응답한다.
  • 윈도 명령 프롬프트에서 arp -a 명령어를 통해서 PC의 ARP 테이블 정보를 확인 가능함. ARP protocol을 사용해 IP주소와 MAC주소를 매핑하면 “유형”필드에 동적으로 표기된다.

  • ARP broadcast 시마다, 네트워크에 트래픽을 줌으로, 메모리에 ARP table을 캐싱해두고 재사용

ARP 동작 방식

  1. 송신자는 수신자의 IP Address는 알고 있으나, 2계층 MAC주소를 몰라, 패킷을 완성하지 못해 전송하지 못함

  2. ARP broadcast 수행. 이때, 전송자 IP,MAC 주소는 자신의 주소로 채우고, 수신자 MAC 주소만 00-00-00-00-00-00 으로 채워 네트워크에 전송

  3. 각 네트워크내 단말들은 ARP 패킷을 보고 자신의 IP주소와 동일하지 않으면 패킷을 버림.
    자신의 IP 주소와 동일한 단말은 ARP 패킷의 모든 필드를 채워 unicast 통신방식으로 응답함

  4. 응답받은 단말은 자신의 ARP 캐시 테이블을 갱신하고, 일정 시간동안 해당 서버와 통신이 없을때까지 캐시 테이블을 유지한다.

GARP (Gratuitous ARP)

  • ARP가 상대방의 MAC주소를 알아내기 위해 사용되는 반면, GARP는 목적지 IP주소에 자신의 IP 를 넣고 목적지 MAC주소에는 브로드캐스트 MAC주소를 넣어서 자신의 IP주소와 MAC주소를 알릴용도로 사용된다.

GARP를 사용해 동일 네트워크에 자신의 IP주소와 MAC주소를 알려주는 이유는 다음과 같은 3가지이다.

  1. IP주소 충돌감지
  2. 상대방의 ARP 테이블 갱신

주로 가상 MAC주소를 사용하지 않는 데이터베이스 HA 솔루션에서 주로 사용된다. 두 대의 데이터베이스 서버가 하나의 가상 IP주소로 서비스하는데, 하나만 서비스 중이고, 하나는 대기중인 Active-Standby로 동작한다. Active 상태인 서버가 가상 IP 주소 요청에 응답해 서비스하지만, MAC 주소는 실제 Active 상태인 서버의 MAC주소를 사용한다.

만약 client가 ARP table을 캐싱하고 있는 상태에서 다른 데이터베이스 서버로 변경된 경우에는 실제 MAC 주소가 변경되므로, 통신되지 않는다. 이런 현상을 예방하기 위해, StandBy 상태의 장비가 Active 상태가 되면 GARP 패킷을 네트워크에 보내 Active 상태의 장비가 변경되었음을 client에게 알려고 , ARP table을 갱신해준다.

  1. HA(고가용성) 용도의 클러스터링 (VRRP,HSRP)

가상의 MAC주소를 사용하는 FHRP(First Hop Redundancy Protocol)에서도 GARP가 사용된다. 데이터베이스 HA 솔루션에서 client의 ARP 테이블을 갱신하는게 목표였다면 FHRP는 client의 ARP 테이블이 아닌 클러스터링 중간에 있는 스위치의 MAC 테이블을 갱신하는데 필요하다.

RARP (Reverse ARP)

  • IP주소가 정해져 있지 않는 단말이 IP할당을 요청할때 사용된다. 현재 DHCP로 대체되어 사용되지는 않는다.

GateWay

  • 로컬 네트워크 내에서는 ARP broadcast를 통해 MAC주소를 알 수 있고, 직접 통신(2계층 통신)이 가능하지만 다른 네트워크 간의 통신(3계층 통신)에서 ARP broadcast가 불가능하기 때문에 GateWay Router(3계층 장비)의 도움이 필요하다

  • 로컬 네트워크 통신을 2계층 통신 , 원격지 네트워크 통신을 3계층 통신이라고 부른다.

  • 로컬 네트워크 통신은 동일 네트워크 상에 존재하므로, ARP broadcast를 통해 MAC주소를 알아내고 직접 통신한다.

  • 원격 네트워크 통신은 게이트웨이 라우터의 도움없이 통신할 수 없는데, ARP 요청을 게이트웨이 라우터에게 보내고, 응답받은 게이트웨이 MAC주소를 채워넣어 통신을 시작한다.

  • 게이트웨이 라우터는 routing table을 보고 다음 홉에게 ARP 요청을 보내서, 응답받은 MAC 주소를 frame header에 붙여 다음 홉에게 패킷을 전달한다.

Comments