NakedFlower 님의 블로그

TCP, UDP, 포트 포워딩 본문

CS/네트워크

TCP, UDP, 포트 포워딩

nakedflower 2025. 10. 2. 21:20

포트 포워딩

 

 

 

 

 

 

 

 

 

 

네트워크 내 특정 호스트에 IP 주소와 포트 번호를 미리 할당하고,

[해당 IP주소 : 포트번호 ]로써

해당 호스트에게 패킷을 전달하는 기능 

 

 

 

공인 IP 주소 : 1234로 전송한 패킷은 192.168.100.100:1025로 전달
공인 IP 주소 : 4321로 전송한 패킷은 192.168.100.101:1026으로 전달

 


ICMP: IP프로토콜의 한계를 보완해주는 프로토콜

 

IP의 신뢰할 수 없는 비연결형 통신

  • IP의 전송 특성을 보완하는 ICMP
    • IP 패킷 전송 과정에 대한 피드백 메시지 제공
    • 피드백 메시지?
      1. 전송 과정에서 발생한 문제 상황에 대한 오류 보고
      2. 네트워크에 대한 진단 정보(네트워크상의 정보 제공)

1. 전송과정에서 발생한 문제 상황에 대한 오류 보고

 

ICMP 메시지 = 타입(type) + 코드(code)

  • 타입: ICMP 메시지 유형 번호
  • 코드: 구체적인 메시지 내용 번호
타입 이름(타입 번호) 코드 번호 코드 설명
수신지 도달 불가 (3) 0 네트워크 도달 불가
  1 호스트 도달 불가
  2 프로토콜 도달 불가: 수신자에서 특정 프로토콜을 사용할 수 없음
  3 포트 도달 불가
  4 단편화가 필요하지만 DF가 1로 설정되어 단편화할 수 없음
시간 초과 (11) 0 TTL 만료

2. 네트워크에 대한 진단 정보(네트워크상의 정보 제공)

타입 이름(타입 번호) 코드 번호 코드 설명
에코 요청 (8) 0 에코 요청
에코 응답 (0) 0 에코 요청에 대한 응답
라우터 광고 (9) 0 라우터 광고: 라우터가 호스트에게 자신을 알림

 

ICMP는 IP의 보조일뿐 : 신뢰성의 완전 보장X

IP의 한계를 극복하려면 전송 계층의 TCP를 이용해야 함

 

전송 계층의 가장 중요한 프로토콜 : TCP와 UDP

  • TCP(Transmission Control Protocol)
    • 신뢰할 수 있는 통신을 위한 연결형 프로토콜
  • UDP(User Datagram Protocol)
    • TCP보다 신뢰성은 떨어지지만 비교적 빠른 통신이 가능한 비연결형 프로토콜

 

TCP(연결 지향형 프로토콜) 통신 단계

  • TCP는 통신(데이터 송수신)하기 전에 연결을 수립하고 통신이 끝나면 연결을 종료

 

  1. 패킷을 주고 받기 전에 호스트 간에 연결을 수립
  2. 연결을 바탕으로 데이터 송수신이 이루어짐 -> 신뢰성 있는 전송을 위해 -> 재전송을 통한 오류제어, 흐름 제어, 혼잡 제어와 같은 기능 제공
  3. 송수신이 끝나면 연결 종료

MSS(Maximum Segment Size)

  • TCP로 주고 받는 패킷 사이즈 : Segment
  • 즉, MSS : TCP로 전송할 수 있는 최대 페이로드 크기(TCP헤더 크기 제외)

TCP 세그먼트 구조

 

송신지 포트, 수신지 포트

  • 송수신하는 포트 번호 (실행중인 어플리케이션 프로세스를 식별하는 번호) (16비트로 표현 가능)

 

  • 순서 번호(sequence number)
    • 순서 번호가 명시되는 필드
    • 순서 번호
      • 송수신되는 세그먼트 데이터의 첫 바이트에 부여되는 번호
      • 세그먼트의 올바른 송수신 순서를 보장하기 위한 번호
  • 확인 응답 번호(acknowledgment number)
    • 상대 호스트가 보낸 세그먼트에 대한 응답
    • 다음으로 수신하기를 기대하는 순서 번호가 명시

예를 들어 응용 계층으로부터 1900바이트 크기의 데이터를 전달받았다고 가정

 

편의상 MSS가 500바이트라고 가정

 

 

순서 번호 = 초기 순서 번호 + 송신한 바이트 수

  • 초기 순서 번호(ISN, Initial Sequence Number)는 무작위 값
  • 세그먼트 B의 순서 번호는 초기 순서 번호인 100에서 500바이트 떨어진 셈이므로 600
  • 세그먼트 C의 순서 번호는 초기 순서 번호로부터 1000바이트 떨어진 1100
  • 세그먼트 D의 순서 번호는 초기 순서 번호로부터 1500바이트 떨어진 1600

확인응답 번호에는

  • 수신자가 다음으로 받기를 기대하는 순서 번호 (일반적으로 '수신한 순서 번호 + 1')
  • 확인 응답 번호 값을 보내기 위해서는 제어 비트에서 승인을 나타내는 비트인 ACK플래그를 1로 설정 ("이 세그먼트는 확인응답번호를 포함하고 있습니다"를 나타내는 ACK라고 하는 비트를 1로 설정한 다음에 보내야함)
  • ACK플래그가 1로 설정된 세그먼트를 ACK세그먼트라고 부르기도 함

 

 

TCP 연결 수립과 종료

연결 수립 (3-way handshake)

 

제어비트(ACK, SYN, FIN 등)

  • 여러개의 비트의 조합으로 이루어진 필드
  • 각각의 비트는 각각의 고유한 의미를 가지고 있음
  • ACK : 세그먼트의 승인을 나타내기 위한 비트
  • SYN : 연결을 수립하기 위한 비트
  • FIN : 연결을 종료하기 위한 비트

 

  • TCP 연결 수립 
    송수신 방향 세그먼트 세그먼트에 포함된 주요 정보 비유
    A → B SYN 세그먼트 • 호스트 A의 초기 순서 번호 • 1로 설정된 SYN 비트 '연결 시작합니다.'
    B → A SYN + ACK 세그먼트 • 호스트 B의 초기 순서 번호 • 호스트 A가 전송한 세그먼트에 대한 확인 응답 번호 • 1로 설정된 SYN 비트 • 1로 설정된 ACK 비트 '네, 확인했습니다. 연결 시작해요'
    A → B ACK 세그먼트 • 호스트 A의 다음 순서 번호 • 호스트 B가 전송한 세그먼트에 대한 확인 응답 번호 • 1로 설정된 ACK 비트 '네, 확인했습니다.'
  • 액티브 오픈: 연결 시작 호스트의 연결 수립 과정
  • 패시브 오픈: 연결 수락 호스트의 연결 수립 과정

연결 종료 (4-way handshake)

→ 송수신 호스트가 각자 한번씩 FIN과 ACK를 주고받으며 TCP가 연결 종료

 

 

TCP 연결 종료 과정

송수신 방향 세그먼트 세그먼트에 포함된 주요 정보 비유
A → B FIN 세그먼트 • 1로 설정된 FIN 비트 '연결 끊을게요.'
B → A ACK 세그먼트 • 호스트 A가 전송한 세그먼트에 대한 확인 응답 번호 • 1로 설정된 ACK 비트 '네, 확인했습니다.'
B → A FIN 세그먼트 • 1로 설정된 FIN 비트 '이제 연결 끊어요.'
A → B ACK 세그먼트 • 호스트 B가 전송한 세그먼트에 대한 확인 응답 번호 • 1로 설정된 ACK 비트 '네, 확인했습니다.'

 

  • 액티브 클로즈 : 종료 시작 호스트의 종료 과정
  • 패시브 클로즈 : 종료 수락 호스트의 종료 과정

TCP 상태

상태(state) : 햔제 어떤 통신 과정에 있는지를 나타내는 정보

  • 스테이트풀 프로토콜(TCP) <-> 스테이트리스 프로토콜(대표적인 예로 UDP, HTTP)

 

 

 

 

 

 

 

TCP 상태의 유형

  1. 연결이 수립되지 않은 상태
  2. 연결 수립 과정에서 주로 볼 수 있는 상태
  3. 연결 종료 과정에서 주로 볼 수 있는 상태

 

상태 분류 주요 상태
CLOSED, LISTEN
SYN-SENT, SYN-RECEIVED, ESTABLISHED
FIN-WAIT-1, CLOSE-WAIT, FIN-WAIT-2, LAST-ACK, TIME-WAIT, CLOSING

 

연결이 수립되지 않은 상태

  • CLOSED : 아무런 연결이 없는 상태
  • LISTEN : 일종의 연결 대기 상태(SYN 세그먼트를 기다리는 상태)
    • -> 서버로서 동작하는 패시브 오픈 호스트는 일반적으로 LISTEN 상태 유지
    • -> LISTEN 호스트에게 SYN 세그먼트를 보내면 쓰리웨이 핸드셰이크 시작

연결 수립 상태

  • SYN-SENT
    • -> 연결 요청을 보낸 뒤 대기하는 상태
    • -> 액티브 오픈 호스트가 SYN 세그먼트를 보낸 뒤 그에 대한 응답인 SYN + ACK 세그먼트를 기다리는 상태
  • SYN_RECEIVED
    • -> 패시브 오픈 호스트가 SYN + ACK 세그먼트를 보낸 뒤 그에 대한 ACK 세그먼트를 기다리는 상태
  • ESTABLISHED
    • -> 연결이 확립되었음을 나타내는 상태

연결 종료 상태

  • FIN-WAIT-1
    • -> 일반적인 TCP 연결 종료 과정에 있어 FIN-WAIT-1은 연결 종료의 첫 단계
  • CLOSE-WAIT
    • -> 종료 요청인 FIN세그먼트를 받은 패시브 클로즈 호스트가 그에 대한 응답으로 ACK세그먼트를 보낸 후 대기하는 상태
  • FIN-WAIT-2
    • -> FIN-WAIT-1 상태에서 ACK 세그먼트를 받고 상대 호스트의 FIN세그먼트를 기다리는 상태
  • LAST-ACK
    • -> CLOSE-WAIT 상태에서 FIN세그먼트를 전송한 뒤 이에 대한 ACK세그먼트를 기다리는 상태
  • TIME-WAIT
    • -> 액티브 클로즈 호스트가 FIN세그먼트를 수신한 뒤, 이에 대한 ACK 세그먼트를 전송한 뒤 접어드는 상태
    • -> 패시브 클로즈 호스트는 마지막 ACK 세그먼트를 수신하면 CLOSED 상태로 전이
    • -> TIME-WAIT 상태의 액티브 클로즈 호스트는 일정 시간을 기다린 뒤 CLOSED 상태로 전이

netstat 명령어를 통해 TCP의 상태 확인 가능

 


UDP

 

 

UDP는 IP헤더를 감싸는 일종의 껍데기와 같음

 

 

UDP 데이터그램의 구조

  • UDP는 TCP와 달리 비연결형 통신을 수행하는 신뢰할 수 없는 프로토콜
  • 그래서 연결 수립 및 해제, 재전송을 통한 오류 제어, 혼잡 제어, 흐름 제어 등을 수행하지 않음
  • 상태를 유지하지도 않음 - 스테이트리스(stateless) 프로토콜
  • UDP는 TCP에 비해 적은 오버헤드로 패킷을 빠르게 처리
  • 주로 실시간 스트리밍 서비스, 인터넷 전화처럼 실시간성이 강조되는 상황에서 TCP보다 더 많이 쓰임

 

'CS > 네트워크' 카테고리의 다른 글

Domain Name Server  (0) 2025.10.03
오류 제어, 흐름 제어, 혼잡 제어  (0) 2025.10.03
전송 계층, NAT  (0) 2025.10.02
라우팅에 대하여  (0) 2025.10.01
IP의 핵심 기능  (0) 2025.10.01