본문 바로가기

Developer/Network

네트워크 통신 - TCP, UDP, ARP, 서브넷, 게이트웨이

<TCP와 UDP>

4계층에서 동작하는 프로토콜의 목적은 여러 애플리케이션 프로세스 중 통신해야 할 목적지 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않도록 잘 조합해 원래 데이터를 잘 만들어내기 위한 역할을 한다.

 

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

애플리케이션에서 사용하는 프로세스를 정확히 찾아가고데이터를 분할한 패킷을 잘 쪼개 보내고 조립하기 위해

TCP 프로토콜에서는 시퀀스 번호와 ACK 번호를 사용

 

TCP/IP 프로토콜 스택에서 4계층의 상위 프로토콜 지시자는 포트 번호는 출발지와 목적지를 구분해 처리해야한다.

 

웰 노운 포트 : HTTP TCP 80, HTTPS TCP 443, SMTP TCP 25

 

다양한 애플리케이션에 포트 번호를 할당하기 위해 Registered Port 범위인 1024 ~ 49151 범위를 사용하고,

동적, 사설, 임시 포트의 범위는 49152 ~ 65535 이다. -> IANA(Internet Assigned Numbers Authority) 에 등록되어 사용x

 

 

TCP에서 분할된 패킷을 잘 분할하고 수신 측이 잘 조합하도록

  • 패킷에 순서를 부여하는 것 : 시퀀스 번호
  • 응답 번호 부여하는 것 : ACK 번호

  1. 출발지에서 시퀀스 번호를 0으로 보냅니다. (SEQ = 0)
  2. 수신 측에서 0번 패킷을 잘 받았다는 표시로 ACK에 1을 적어서 응갑합니다.
    또한 자신이 처음보내는 패킷이므로 자신의 패킷에 시퀀스 번호 0을 부여
  3. 이 패킷을 받은 송신 측은 시퀀스 번호 1로 ,
    ACK번호는 상대방의 0번 시퀀스를 잘 받았다는 의미로 시퀀스 번호를 1로 부여해 다시 송신

 

송신자와 수신자가 먼 거리에 떨어져 있으면 왕복 지연시간(Round Trip Time, RTT)이 늘어나므로 응답을 기다리는 시간이 길어짐.

그리고 응답을 받아야만 하나를 더 보낼 수 있다면 모든 데이터를 전송하는데 긴 시간이 걸린다.

따라서, 최대한 많은 패킷을 한꺼번에 보내는 것이 효율적이지만 네트워크 상태가 안 좋으면 패킷 유실 가능성이 커지므로 적절한 송신량을 결정해야한다.

  • 윈도 사이즈 : 한 번에 데이터를 받을 수 있는 데이터 크기
    TCP에서 최대 윈도 사이즈는 2^16 (64K)
  • 슬라이딩 윈도 : 네트워크 상황에 따라 윈도 사이즈를 조절

 

3방향 핸드셰이크

TCP는 유실없는 안전한 통신을 위해 통신 시작 전, 사전 연결작업을 진행한다.

3번의 패킷을 주고받으면서 통신을 서로 준비

 

진행 상황에 따라 상태(State) 정보를 부르는 이름이 다르다.

LISTEN:  서버에서는 서비스를 제공하기 위해 클라이언트의 접속을 받아들일 수 있는  상태로 대기

SYN-SENT : 클라이언트에서 통신을 시도할 때 Syn 패킷을 보냄

SYN_RECEIVE : 클라이언터의 Syn을 받은 서버의 상태, Syn, Ack로 응답

ESTABLISHED : Syn, Ack 응답을 받은 서버는 그에 대한 응답을 다시 서버로 보냄
                         서버에서도 이 응답을 받고 ESTABLISED 상태로 변경

클라이언트와 서버 둘 다 ESTABLISHED 상태가 되면 연결 완료

 

3방향 핸드셰이크 과정에서는 기존 통신과 새로운 통신을 구분해야하고,

어떤 패킷이 새로운 연결 시도이고 기존 통신에 대한 응답인지 구분하기 위해 헤어데 플래그(Flag) 라는 값을 넣어 통신한다.

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

UDP

udp는 4계층 프로토콜이 가져야 할 특징이 거의없다.

3방향 핸드셰이크, 윈도 사이즈 등의 4계층 특징은 TCP에만 해당됨

UDP는 데이터 전송을 보장하지 않는 프로토콜이므로 제한된 용도로만 사용됨

-> 음성 데이터나 실시간 스트리밍과 같이 시간에 민감한 프로토콜이나 애플리케이션을 사용하는 경우,

     사내 방송, 증권 시세 데이터 전송 등 멀티캐스트처럼 단방향으로 다수의 단말과 통신

 

TCP UDP
연결 지향 (Connection Oriented) 비연결형(Connectionless)
오류 제어 수행 오류 제어 수행 안 함
흐름 제어 수행 흐름 제어 수행 안 함
유니캐스트 유니캐스트, 멀티캐스트, 브로드캐스트
전이중(Full Duplex) 반이중(Half Duplex)
데이터 전송 실시간 트래픽 전송

 

 

<ARP>

데이터 통신을 위해 2계층 물리적 주소인 MAC 주소와 3계층 논리적 IP 주소 두 개 사용 될 때, 두 개의 주소를 연계시켜 주기 위한 매커니즘 프로토콜

TCP-이더넷 프로토콜과 같이 3계층 논리적 주소와 2계층 물리적 주소 사이에 관계가 없는 프로토콜에서도 연결하기 위해 사용

하드웨어 타입(2계층) 프로토콜 타입 (3계층)
하드웨어 주소 길이
(2계층)
프로토콜 주소 길이
(3계층)
오퍼레이션 코드
송신자 하드웨어 주소(2계층) - MAC 주소
송신자 프로토콜 주소 (3계층) - IP 주소
대상자 하드웨어 주소 (2계층)
대상자 프로토콜 주소 (3계층) - IP주소

패킷 네트워크에서는 큰 데이터를 잘라 전송하므로 여러 개의 패킷을 전송해야함

패킷을 보낼 때마다 ARP 브로드캐스트를 수행하면 네트워크 통신의 효율성이 크게 저하되므로 메모리에 이 정보를 저장해두고 재사용

성능 유지를 위해서는 ARP 테이블을 오래 유지하는 것이 좋지만 논리 주소는 언제든지 바뀔 수 있으므로 일정 시간 동안 통신이 없으면 테이블 삭제

 

짧은 시간에 많은 ARP 요청이 들어오면 네트워크 장비에서 큰 부하가 작용하므로 해커들이 네트워크 장비 무력화할 다량의 ARP 공격 수행

 

ARP 패킷은 여러 가지 필드 중 중요한 데이터

  • ARP 데이터에 사용되는 송신자 하드웨어 MAC 주소
  • 송신자 IP 프로토콜 주소
  • 대상자 MAC 주소
  • 대상자 IP 프로토콜

 

<GARP>

ARP 프로토콜 필드를 그대로 사용하지만 내용을 변경해 원래 ARP 프로토콜의 목적과 다른 용도로 사용하는 GARP, RARP가 있다.

GARP

  • 대상자 IP필드에 자신의 IP주소를 채워 ARP 요청을 보냄
  • ARP가 상대방의 MAC 주소를 알아내기 위해 사용되고, GARP는 자신의 IP와 MAC 주소를 알릴 목적으로 사용
  • GARP의 목적지 MAC 주소는 브로드캐스트 MAC 주소 사용
  • 송신자 MAC은 자신의 MAC 주소, 송신자 IP주소는 자신의 IP주소, 대상자 MAC주소는 모두 0으로 표기, 대상자 IP주소는 자신의 IP 주소를 넣어 네트워크에 브로드캐스트

자신의 IP주소와 MAC 주소를 알려주는 이유

  • IP주소 충돌 감지
  • 상대방(동일 서브넷 상의 다른)의 ARP 테이블 갱신
  • HA(고가용성) 용도의 클러스터링, VRRP, HSRP

GARP 의 목적

  • GARP를 이용해서 IP주소 충돌을 감지할 수 있다.
  • 상대방(동일 서브넷에 있는)의 ARP 테이블 갱신
    • 가상 MAC 주소를 사용하지 않는 데이터베이스 HA(High Availability: 고가용성) 솔루션에 주로 사용
  • 클러스터링, FHRP(VRRP, HSRP)
    • 가상 MAC을 사용하는 클러스터링, VRRP, HSRP와 같은 FHRP에서도 GARP 사용
    • 스위치 장비의 MAC 테이블 갱신이 목적
    • 클러스터링에서 가상 MAC 주소를 사용하는 경우, 단말은 ARP 정보를 가상 MAC 주소로 학습하므로 단말의 ARP 테이블을 갱신할 필요가 없지만, 클러스터링 중간에 있는 스위치의 MAC 테이블은 마스터가 변경되었을 때 가상 MAC 주소의 위치를 적절히 찾아가도록 업데이트 해야하므로 마스터가 변경되는 시점에 MAC 테이블의 갱신 필요
    • 슬레이브가 마스터로 역할이 변경되면 GARP를 전송하고 스위치에서는 이 GARP를 통해 MAC 주소에 대한 포트 정보를 새로 변경해 MAC 테이블 갱신

<RARP>

 

Reverse ARP의 줄임말

GARP처럼 ARP 프로토콜 구조는 같지만 필드에 들어가는 내용이 다르고 원래 목적과 반대로 사용

IP 주소가 정해져 있지 않은 단말이 IP 할당을 요청할 때 사용

 

 

<서브넷과 게이트웨이>

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

 

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

 

서브넷 마스크 : 출발지와 목적지가 동일한 LAN 내에서 통신하는 것인지, 서로 다른 네트워크 간의 통신인지에 따라 통신 방식이 달라지므로 출발지에서는 먼저 목적지가 자신이 속한 네트워크 범위인지 확인하는 작업에 사용

원격지 통신은 ARP가 라우터를 넘어가지 못하는 브로드캐스트이므로 외부와 통신이 가능한 장비의 도움이 필요

 

로컬 네트워크에서 직접 통신할 경우, 라우터(3계층) 장비 도움 없이 통신 가능

 

같은 네트워크에 있는 단말 간 통신은 상대방의 MAC 주소를 알아내기 위해 ARP 브로드캐스트 이용, 상대방의 MAC 주소 알아내자마자 패킷이 캡슐화된 후 통신

외부 네트워크와 통신은, 자신이 직접 보낼 수 없는 위치에 목적지가 있다고 판단하고 ARP 요청을 기본 게이트웨이의 IP주소로 요청