Frinee의 코드저장소

네트워크 통신하기

by Frinee
이 글은 고재성, 이상훈 저 - "IT 엔지니어를 위한 네트워크 입문"를 공부하고 정리하여 작성하였습니다.

 

1. 네트워크 통신 방식

  • 유니캐스트
    • 출발지와 목적지가 1:1로 통신
    • 실제 대부분의 통신이 이뤄지는 방식
  • 브로드캐스트
    • 동일 네트워크에 존재하는 모든 호스트와 통신하는 1:모든 통신
    • 유니캐스트 전, 상대방의 정확한 위치를 파악하기 위해 사용
  • 멀티캐스트
    • 하나의 출발지에서 다수의 특정 목적지로 데이터를 전송하는 1: 그룹 통신
    • IPTV처럼 다수에게 동시에 같은 내용을 전달해야 할 떄 사용
  • 애니캐스트
    • 다수의 동일 그룹 중 가장 가까운 호스트에서 응답하는 1:1 통신
    • 가장 가까운 DNS서버나 게이트웨이를 찾는 기능에 사용
    • IPv4에서는 일부 사용 가능하고 IPv6에서는 모두 가능
BUM 트래픽
트래픽 종류에 대한 내용을 다룰 때 사용되는 용어
B(Brodcast), U(Unknown Unicast), M(Multicast) 를 지칭함.
- 언노운 유니캐스트: 목적지 주소는 명확히 명시되어 있지만 스위치가 주소를 학습하지 못한 상황이어서 모든 포트로 전송하는 유니캐스트

 

 

2. MAC 주소

  • MAC(Media Access Control): 2계층에서 통신을 위해 네트워크 인터페이스에 할당된 고유 식별자
  • 이더넷과 와이파이를 포함한 대두분의 IEEE 802 네트워크 기술에서 2계층 주소로 사용

2.1. MAC 주소 체계

MAC 주소 체계

  •  한 제조업체에 하나 이상의 주소 풀을 주고 그 풀 안에서 제조업체가 자체적으로 MAC 주소를 할당
  • 주소 풀을 제조사 코드(Vendor code)라 하고 국제기구 IEEE에서 관리
  • 48비트의 16진수 12자리로 표현됨.
  • 앞의 24비트는 제조사 코드인 ‘OUI’
  • 뒤의 24비트는 제조사에서 자체적으로 할당하는 네트워크 장비 ‘UAA’
  • 장비를 생산할 때 하드웨어적으로 정해지기 때문에 BIA(Burned-In Address)라고도 부름
윈도우의 경우, Driver 상세 정보에서 MAC 주소 변경을 제공하여 변경이 가능하기도 함.

 

2.2. MAC 주소 동작

  • NIC는 전기신호를 데이터 형태로 변환하여 내용을 구분한 후 도착지 MAC 주소를 확인
  • 도착지 주소가 자기 자신이거나 멀티캐스트, 브로드캐스트와 같은 그룹 주소이면 상위계층으로 넘김
  • 이 경우 OS나 애플리케이션에서 처리하기 때문에 시스템에 부하가 작용
무차별 모드(Promiscuous Mode)
다른 목적지를 가진 패킷을 분석하거나 수집해야 하는 경우, 무차별 모드로 NIC 구성
네트워크 패킷 분석 애플리케이션 와이어샤크(Wireshark)에서 사용

 

 

3. IP 주소

  • 사용자가 변경 가능한 논리 주소
  • 주소가 네트워크 주소와 호스트 주소로 나뉨

3.1. IP주소 체계

  • IPv4의 경우 32비트, IPv6는 128비트이다.
  • IPv4 주소를 표시할 때 4개의 8비트 단위의 옥탯으로 나누고 “.”로 구분함.
  • 각 부분은 0 ~ 255 (0 ~ 2^8-1)의 값을 사용할 수 있음
  • 네트워크 주소: 호스트들을 모은 네트워크를 지칭하는 주소, 네트워크 주소가 동일한 네트워크를 로컬 네트워크라 함
  • 호스트 주소: 하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소
  • 클래스 구분

  • 그리고 첫번째 바이트에 있는 맨왼쪽 비트로 클래스를 구분하는데 이를 구분 비트라 한다.
클래스 구분비트 IP 주소 범위
A Class 0 0.0.0.0 ~ 127.255.255.255
B Class 10 128.0.0.0 ~ 191.255.255.255
C Class 110 192.0.0.0 ~ 223.255.255.255
D Class 1110 224.0.0.0 ~ 239.255.255.255
E Class 1111 240.0.0.0 ~ 255.255.255.255
  • 네트워크의 첫 주소는 네트워크 주소로 사용됨
  • 네트워크의 마지막 주소는 브로드캐스트 주소로 사용

 

3.2. 클래스풀과 클래스리스

  • 클래스 기반의 IP주소 체계를 클래스풀(Classful)이라 부름
  • 처음엔 좋았지만 호스트 숫자가 폭발적으로 증가하였음
  • IP 주소 부족과 낭비 문제를 해결하기 위해 3가지 보존, 전환전략을 내세움
    1. 단기대책: 클래스리스, CIDR(Classless Inter-Domain Routing) 기반의 주소 체계
    2. 중기대책: NAT, 사설 IP 주소
    3. 장기대책: IPv6
  • 특히 클래스 A를 받은 조직이 남은 호스트 개수만큼의 IP를 사용하지 못하면서 낭비가 커짐
  • 그래서 그냥 클래스 개념 자체를 버리는데 이를 클래스리스라 함.
  • 그로 인해 네트워크 주소와 호스트 주소를 구분할 수 없게 되었는데 이를 구분하기 위해 나온 구분자가 바로 서브넷 마스크(Subnet Mask)이다.

 

3.3. 서브네팅

IP주소  103.9.32.146 01100111  00001001  00100000  10 010010
서브넷 255.255.255.192 11111111 11111111 11111111 11 000000
네트워크 주소 103.9.32.128 01100111 00001001 00100000 10 000000
  • 원래 부여된 클래스의 기능을 무시하고 새로운 네트워크-호스트 구분 기준을 사용자가 정해 더 쪼개 사용하는 것을 말함
  • 현대 클래스리스 네트워크의 가장 큰 특징
  • 서브네팅에서 설계자의 서브네팅사용자의 서브네팅이 구분된다.
  1. 네트워크 사용자의 네트워킹
    1. 네트워크에서 사용할 수 있는 IP 범위 파악
    2. 기본 게이트웨이와 서브넷 마스크 설정이 제대로 되어 있는지 확인
  2. 네트워크 설계자의 네트워킹
    1. 서브넷된 하나의 네트워크에 IP를 몇 개나 할당해야 하는가?
    2. 그리고 서브넷된 네트워크가 몇 개나 필요한가?

3.4. 공인 IP와 사설 IP

  • 인터넷에 접속하고 전 세계에서 유일한 식별자로서의 역할을 하는 IP주소는 공인 IP라 한다.
  • 개인적으로 네트워크를 구축하여 사용하는 IP주소를 사설 IP라 한다.
  • 인터넷을 사용하지 않거나 NAT(Network Adress Tanslation) 기술을 사용할 경우 사설 IP 주소를 사용할 수 있음
  • 가정에서 사용하는 공유기가 대표적인 NAT 장비이다.네트워크 주소 IP 범위 클래스 크기  
    10.0.0.0/8 10.0.0.0 ~ 10.255.255.255 A클래스 1개
    172.16.0.0/12 172.16.0.0 ~ 172.31.255.255 B클래스 16개
    192.168.0.0/16 192.168.0.0 ~ 192.168.255.255 C클래스 256개
  • 회사 내부에서 사설 네트워크를 구축할 때 NAT를 사용하여 인터넷에 연결하더라도 다른 사용자에게 할당된 IP를 사설 네트워크 주소로 사용하면 안됨

 

4. TCP와 UDP

  • 4계층 프로토콜은 통신해야 할 패킷의 경로와 순서를 정확히 설정하는 역할을 수행

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

  • 인캡슐레이션과 디캡슐레이션에서 가장 중요한 정보는
    • 각 계층에서 정의하는 정보
    • 상위 프로토콜 지시자 정보
  • 각 계층에서 정의한 정보는 수신 측 동일계층에서 쓰기 위함

  • TCP와 UDP가 담당하며 애플리케이션에서 사용하는 프로세스를 정확히 찾아가고 데이터를 분할한 패킷을 잘 쪼개 보내고 잘 조립하는 것이 목적
  • 이를 위해 시퀀스 번호와 ACK 번호를 사용
  • 상위 프로토콜 지시자는 Port number로 지정
    • 웰노운(Well Known) 포트: ~1023번 번호, HTTP TCP(80), HTTPS TCP(443). SMTP TCP(25) 등
    • 애플리케이션 포트: 1024 ~ 49151번 번호
    • 동적,사설,임시 포트: 49152 ~ 65535번 번호, 자동 할당되거나 사설용도로 할당

4.2. TCP

  • 세션을 안전하게 연결하고 데이터를 분할하고 확인하는 기능이 있음
  • 패킷에 번호를 부여하고 잘 전송되었는지 응답
  • 수신자가 잘 받아 처리할 수 있는 전송크기도 고려해 통신
    • 패킷 순서, 응답 번호
      • 수신 측에게 잘 조합하도록 패킷 순서(시퀀스 번호)응답번호(ACK 번호)를 부여
    • 윈도 사이즈와 슬라이딩 윈도
      • 송신자와 수신자 거리가 멀어지면 왕복지연시간(RTT)이 늘어나므로 응답시간이 늘어남
      • 그래서 많은 패킷을 한꺼번에 보내고 응답을 하나만 받음
      • 효율적이지만 패킷 유실 가능성이 있음
      • 한꺼번에 받을 수있는 데이터 크기를 윈도 사이즈라 하며 네트워크 상황에 따라 윈도 사이즈를 조절하는 것을 슬라이딩 윈도라 함
      • TCP 헤더에서 윈도 사이즈로 표현할 수 있는 최대 크기는 2의 16제곱
      • TCP에 유실이 발생하면 윈도 사이즈를 절반으로 줄이고 정상적이면 하나씩 늘림
      • 네트워크 경합이 발생하면 윈도 사이즈가 작아져 속도가 느려짐

  • 3방향 핸드셰이크
    • 통신 시작 전 사전 연결작업 진행
    • 통신 전, 미리 받을 수 있는지 확인하는 작업을 거침
    • 3번의 패킷을 주고받으면서 통신을 서로 준비하는데 이를 3방향 핸드셰이크라 함.
    1. SYN 단계: 클라이언트는 서버에 클라이언트의 SIN을 담아 SYN을 보냄
    2. SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트 ISN + 1을 보냄
    3. ACK 단계: 클라이언트는 서버의 ISN + 1한 값의 승인번호를 담아서 서버에 보냄
    • 어떤 유형의 통신인지 구분하기 위해 헤더에 플래그(Flag)를 넣어 통신
    • 각각 1비트씩 나눠서 할당됨
      • SYN: 연결 시작용도, SYN 플래그에 1로 표시
      • ACK: 번호가 유효할 경우 1로 표시
      • FIN: 연결 종료 시 1로 표시, 정상적인 양방향 종료 시 사용
      • RST: 연결 종료 시 1로 표시, 연결 강제종료를 위해 사용
      • URG: 긴급 데이터인 경우 1로 표시
      • PSH: 서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 전달할 것을 지시할 때 사용

4.3. UDP

  • 4계층 프로토콜이 가져야 할 특징을 거의 갖지 않음
  • UDP는 데이터 전송을 보장하지 않는 프로토콜로 제한된 용도로 사용
  • 음성 데이터나 실시간 스트리밍 같이 시간에 민감하거나 멀티캐스트처럼 단방향으로 받기 어려운 경우 사용
  • 이런 경우 차라리 데이터가 유실되더라도 신소하게 통신하는 것이 더 낫기 때문에 UDP를 사용
  • 대신 UDP에서 첫 데이터는 리소스 확보를 위해 인터럽트를 거는 용도로 사용되고 유실됨

 

5. ARP

  • IP주소와 MAC주소를 연계하기 위해 사용되는 프로토콜
  • 2계층과 3계층의 관계없는 프로토콜에서 물리적 주소와 논리적 주소를 연결
  • 패킷을 보낼 때마다 ARP 브로드캐스트를 하면 효율이 떨어지기 때문에 메모리에 저장 후 재사용
  • 다량 ARP 요청을 이용한 공격에 대응하기 위해 ARP 테이블을 정적으로 유지시키는 경우가 많음

5.1. ARP 동작

  • 송신자 하드웨어 MAC 주소, 송신자 IP 주소, 대상자 MAC 주소, 대상자 IP 주소가 핵심 정보
  • 패킷의 출발지 IP와 목적지 IP를 알고 출발지(자신)의 MAC주소도 아는 상태.
  • 그런데 도착지의 MAC주소는 알 수가 없어.. 얘를 알아야 헤더를 달아서 캡슐화를 할텐데 그래서 물어봐야함.
  1. 상대방의 MAC 주소를 알기 위해 ARP 브로드캐스트를 통해 네트워크 전체에 상대의 MAC 주소를 질의
  2. 상대 서버 측에서는 MAC 주소를 채워주고 보낸 IP주소, MAC주소 정보가 이미 있기 때문에 유니캐스트로 응답
  3. 응답을 받으면 자신의 ARP 테이블을 갱신
  4. 정상적인 캡슐화를 해서 상대방에게 전달함.

5.2. GARP

  • GARP는 자신의 IP와 MAC 주소를 알릴 목적으로 사용
  • 대상자 IP 필드에 자신의 IP 주소를 채워 ARP 요청을 보냄
  • GARP의 목적지 MAC주소는 브로드캐스트 MAC주소를 사용함.
  • 자신의 IP 주소와 MAC 주소를 알려주는 이유
    1. IP 주소 충돌 감지
      1. 나의 IP를 다른사람이 사용하고 있을 수도 있기 때문에 IP 충돌로 인한 통신 장애를 예방하기 위해 알림
    2. 상대방의 ARP 테이블 갱신
      1. 가상 MAC 주소를 사용하지 않는 데이터베이스 HA 솔루션에서 주로 사용
      2. 데이터베이스는 보통 한쪽만 가동하고 한쪽은 액티브-스탠바이 상태로 대기
      3. 마스터 장비가 동작하지 않아 대기 장비를 사용하게 되었을 때, MAC 주소가 변경됐음을 미리 알림
    3. HA(고가용성) 용도의 클러스터링, VRRP, HSRP
      1. 가상 MAC을 사용하는 솔루션에서도 사용됨.
      2. 네트워크에 있는 스위치 장비의 MAC 테이블 갱신이 목적
  • 클러스터링: 데이터를 비슷한 특성을 가진 그룹으로 묶는 데이터 분석 기법

5.3. RARP

  • 반대로 동작하는 ARP로 MAC 주소를 활용해서 정해져 있지 않은 IP주소를 찾을 때 사용
  • 요즘은 BOOTP나 DHCP로 대체되어 사용되지 않음
  • BOOTP: 네트워크 장치가 IP 주소와 기본 설정 정보를 수동으로 할당받는 초기 프로토콜
  • DHCP: BOOTP를 확장하여 IP 주소와 네트워크 설정을 자동으로 동적으로 할당하는 프로토콜입니다.

 

6. 서브넷과 게이트웨이

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

  • 게이트웨이: 원격 네트워크 통신은 네트워크를 넘어 전달되지 못하기 때문에 이를 도와주는 역할 수행
  • 서브넷 마스크: 목적지가 자신이 속한 네트워크의 범위인지를 확인함.
프록시 ARP
: ARP를 대행해주는 기능 수행
서로 다른 네트워크에 있는 장치들이 같은 네트워크에 있는 것처럼 통신할 수 있도록 도와줌

6.2. 2계층 통신 vs 3계층 통신

  • L2 통신
    • 로컬 네트워크에서 통신하는 경우, 3계층의 네트워크 장비가 필요하지 않음
    • ARP 브로드캐스트를 하고 상대방의 MAC 주소를 알아내자마자 캡슐화되어 통신을 시작함
  • L3 통신
    • 원격 네트워크에서 통신할 경우, 해당 패킷을 전송하는 네트워크 장비에서 3계층 정보까지 확인해야 함
    • 목적지의 위치를 파악하고 ARP 요청을 게이트웨이 IP 주소로 요청

 

 

자료

  • IT 엔지니어를 위한 네트워크 입문 (고재성, 이상훈 저, 2020.10)

블로그의 정보

프리니의 코드저장소

Frinee

활동하기