✦ IP의 한계 & 포트

◆ IP의 한계

  • IP → IP 단편화 & IP 주소 지정
  • IP 특징
    • ◆ 비신뢰성 프로토콜 (Unreliable Protocol) = 최선형 전달 (Best Effort Delivery) : 최선은 다하는데 보장은 못해~

    • IP 프로토콜 → 패킷이 수신지까지 제대로 전송 보장 X
    • 데이터 손상, 중복 패킷 전송 시에도 확인 X, 재전송 X
    • 순서대로 보장 X
    • ◆ 비연결형 프로토콜 (Connectionless Protocol)
    • 송수신 호스트 간 사전 연결 수립 작업 X
    • 그저 수신지 향해 전송
  • why? → 성능 떄문

◆ 전송 계층의 특징

  • IP 한계 보완 방법
    • ◆ 1. 연결형 통신 가능
    • TCP : 연결형 통신 지원.
    • ◆ 2. 신뢰성 통신 가능
    • TCP : 패킷 수신지까지 올바른 순서 확실히 전달 보장
      • 오류 제어, 흐름 제어, 혼잡 제어 기능 제공
  • 높은 성능 위해 연결, 신뢰 X 통신 지원 프로토콜 가능 → UDP

◆ 포트 (Port)

  • 특정 애플리케이션 식별 정보
  • 응용 계층 연결 다리
  • 패킷 최종 수신 대상 → 특정 애플리케이션 프로세스
    • ◆ 포트의 분류
    • 포트 번호로 특정 애플리케이션 식별
      • 패킷 내 수신지 포트 + 송신지 포트
      • 16 비트로 표현 (0 ~ 65535)
포트 종류 포트 번호 범위
잘 알려진 포트 0 ~ 1023
등록된 포트 1024 ~ 49151
동적 포트 49152 ~ 65535
  • 잘 알려진 포트 (Well Known Port) = 시스템 포트 (System Port)

    • 범용적 사용 애플리케이션 프로토콜 일반적 사용 포트 번호
20, 21 FTP
22 SSH
23 TELNET
53 DNS
67, 68 DHCP
80 HTTP
443 HTTPS
  • 등록된 포트 (Registered Port)
    • 시스템 포트보단 덜 범용적, but 흔히 사용 애플리케이션 프로토콜 할당 ex)
1194 OpenVPN
1443 Micro SQL Server DB
3306 MySQL DB
6379 Redis
8080 HTTP 대체
  • 동적 포트 (Dynamic Port) = 사설 포트 (Private Port), 임시 포트 (Ephemeral Port)

    • 특별 관리 X 포트 번호, 자유 사용 가능
    • 서버는 암묵적으로 정해짐
    • 클라이언트는 임의 번호 할당

    • IP 주소 : 포트 번호 형식으로 함께 표기

    • 로컬 포트 = 동적 포트 임의 번호
    • 443 : HTTPS 번호

◆ 포트 기반 NAT

  • NAT : IP 주소 변환 기술
    • 네트워크 내부 사설 IP 주소 ↔ 네트워크 외부 사용 공인 IP 주소
    • ◆ NAT 변환 테이블
    • NAT 테이블
    • 변환 대상 IP 주소 쌍 명시
네트워크 외부 네트워크 내부
1.2.3.4 192.168.0.5
1.2.3.5 192.168.0.6
  • 사설 IP 주소 1개 - 공인 IP 주소 대응
    • 많은 사설 IP 주소 변환 불가 → 포트 활용
  • ◆ NAPT (Network Address Port Translation) = APT (Address Port Translation)

  • 포트 기반 NAT
  • 포트 활용 1 공인 IP 주소 → 여러 사설 IP 주소가 공유
네트워크 외부 네트워크 내부
1.2.3.4 : 6200 192.168.0.5 : 1025
1.2.3.5 : 6201 192.168.0.6 : 1026
- 변환될 IP 주소 쌍 + 포트 번호 함께 기록

◆ 포트 포워딩 (Port Forwarding)

  • 네트워크 내 특정 호스트에 IP 주소 & 포트 번호 미리 할당.
  • 해당 IP 주소 : 포트 번호로 해당 호스트에게 패킷 전달
  • 네트워크 외부 → 네트워크 내부로 통신 시작 시 접속 정보 공개 위해 사용

◆ ICMP (Internet Control Message Protocol)

  • IP 패킷 전송 과정 피드백 메시지 (ICMP 메시지) 얻는 프로토콜
  • IP 비신뢰성, 비연결성 보완
  • 네트워크 계층 프로토콜
  • ICMP 메시지
    • 전송 과정 문제 상황 오류 보고
    • 네트워크 진단 정보 (네트워크 상 정보 제공)

✦ TCP & UDP

◆ TCP 통신 단계 & 세그먼트 구조

  • TCP (Transmission Control Protocol) : 신뢰성 통신 위한 연결형 프로토콜
  • TCP 통신 단계
    1. 연결 수립
    2. 데이터 송수신
      • 재전송 → 오류 제어, 흐름 제어, 혼잡 제어
    3. 연결 종료
  • MSS (Maximum Segment Size) : TCP로 전송 가능한 최대 페이로드 크기
    • TCP 헤더 제외
    • MTU : 헤더 크기 포함
  • TCP 헤더

    • 송신지 포트 (Source Port) / 수신지 포트 (Destination Port) : 송신지 or 수신지 애플리케이션 식별 포트 번호 명시
    • 순서 번호 (Sequence Number) : 송수신 세그먼트 올바른 순서 보장 위한 순서 번호 명시
    • 확인 응답번호 (Acknowledgment Number) : 상대 호스트 세그먼트 응답, 다음 수신 기대 순서 번호
    • 제어 비트 (Control Bits) : 플래그 비트 (Flag Bits), 현재 세그먼트 부가 정보
    • 윈도우 (Window Size) : 한 번에 수신하고자 하는 데이터 양 명시
    • ◆ 제어 비트
    • 8비트 구성
    • ACK : 세그먼트 승인 나타내는 비트
    • SYN : 연결 수립 위한 비트
    • FIN : 연결 종료 위한 비트
    • ◆ 순서 번호 & 확인 응답 번호
    • 순서 번호
      • 세그먼트 올바른 송수신 순서 보장
      • 세그먼트 데이터 첫 바이트에 부여
      • 초기 순서 번호 (ISN : Initial Sequence) : SYN 플래그 1 → 순서 번호 무작위 값
      • 초기 순서 번호 + 송신한 바이트 수 (떨어진 바이트 수)
    • 확인 응답 번호
      • 순서 번호 응답
      • 수신 순서 번호 + 1

◆ TCP 연결 수립 : 쓰리 웨이 핸드셰이크

  • Three-way-handshake : 세 단계로 나뉨
A → B SYN 세그먼트 A의 초기 순서 번호
SYN 비트 : 1
B → A SYN + ACK 세그먼트 B의 초기 순서 번호
A가 전송한 세그먼트 확인 응답 번호
SYN 비트 : 1
ACK 비트 : 1
A → B ACK 세그먼트 A의 다음 순서 번호
B가 전송한 세그먼트 확인 응답 번호
ACK 비트 : 1
  • 액티브 오픈 (Active open) : 처음 연결 시간 호스트의 연결 수립 과정
    • 연결 처음 요청 동작
    • by 클라이언트
  • 패시브 오픈 (Passive open) : 연결 요청 받고 요청 따라 연결 수립
    • by 서버

◆ TCP 연결 종료

  • Four-way handshake : 네 단계로 연결 종료
A → B FIN 세그먼트 FIN 비트 : 1
B → A ACK 세그먼트 A가 전송한 세그먼트 확인 응답 번호
ACK 비트 : 1
B → A FIN 세그먼트 FIN 비트 : 1
A → B ACK 세그먼트 B가 전소한 세그먼트 확인 응답 번호
ACK 비트 : 1
  • 액티브 클로즈 (Active Close) : 먼저 연결을 종료하려는 호스트에 의해 수행
  • 패시브 클로즈 (Passive Close) : 연결 종료 요청 받아들이는 호스트에 의해 수행

◆ TCP 상태

  • 상태 (State) : 현재 어떤 통신 과정 정보
  • TCP : 상태 유지 & 활용 → 스테이트풀 (Stateful) 프로토콜
연결 수립 X CLOSED, LISTEN
연결 수립 O SYN-SENT, SYN-RECEIVED, ESTABLISHED
연결 종료 과정 FIN-WAIT-1, CLOSE-WAIT, FIN-WAIT-2, LAST-ACK, TIME-WAIT, CLOSING
  • ◆ 연결 수립 X
  • CLOSED : 아무런 연결 X
  • LISTEN : 연결 대기 상태. SYN 세그먼트 기다리는 상태
  • ◆ 연결 수립 O
  • SYN-SENT
    • 액티브 오픈 호스트 SYN 세그먼트 전송
    • SYN + ACK 세그먼트 기다리는 상태
  • SYN-RECEIVED
    • 패시브 오픈 호스트 SYN + ACK 세그먼트 전송
    • ACK 세그먼트 기다리는 상태
  • ESTABLISHED
    • 연결 확립. 데이터 전송 가능
    • 두 호스트가 마지막 ACK 세그먼트 주고받음
  • ◆ 연결 종료
  • FIN-WAIT-1
    • 액티브 클로즈 호스트 FIN 세그먼트 전송 후 대기
  • CLOSE-WAIT
    • 패시브 클로즈 호스트 ACK 세그먼트 전송 후 대기
  • FIN-WAIT-2
    • FIN-WAIT-1 에서 ACK 세그먼트 받음
    • 상대 호스트 FIN 세그먼트 대기
  • LAST ACK
    • CLOSE-WAIT 상태에서 FIN 세그먼트 전송
    • ACK 세그먼트 대기
  • TIME-WAIT
    • 액티브 클로즈 호스트가 FIN 세그먼트 수신 + ACK 세그먼트 전송 후 상태
    • 일정 시간 후 CLOSED 상태로 전이
  • CLOSING
    • 동시에 연결 종료하려할 때

◆ UDP 데이터그램 구조

  • UDP (User Datagram Protocol) : 신뢰성은 떨어지지만 비교적 빠른 통신 가능
    • 연결 수립 · 해체, 재전송 통한 오류 제어, 혼잡 제어, 흐름 제어 수행 X
    • 상태 유지 · 활용 X → 스테이트리스 (Stateless) 프로토콜
  • 송 · 수신지 포트
  • 길이 : 헤더 포함 UDP 데이터그램 바이트
  • 체크섬 : 데이터그램 전송 과정 오류 발생 검사
    • 정보 훼손 판단 → 문제 있으면 폐기

✦ TCP의 오류 · 흐름 · 혼잡 제어

◆ 오류 제어 : 재전송 기법

  • 오류 검출
    1. 중복된 ACK 세그먼트 수신
    2. 타임아웃 발생
      • 재전송 타이머 (Retransmission timer) : TCP 세그먼트 송신 호스트가 지니는 값
      • 세그먼트 전송 시마다 타이머 시작 - 타임아웃 (Timeout) : 재전송 타이머 카운트다운 끝남
  • RTT(Round Trip Time) : 메시지 전송 후 답변 받는 데까지 걸리는 시간
  • 빠른 재전송 (Fast retransmit) : 재전송 타이머 만료 전 동일 ACK 세그먼트 3번 오면 해당 세그먼트 바로 재전송
  • 재전송 기법 : ARQ (Automatic Repeat Request)
    • 문제 발생 메시지 재전송 → 신뢰성 확보
    • ◆ Stop-and-Wait ARQ
    • 제대로 전달 확인 전까지 new 메시지 송신 X
    • 단순 but 높은 신뢰성 보장
    • 네트워크 이용 효율 ↓, 성능 ↓
    • ◆ Go-Back-N ARQ
    • 파이프라이닝 (Pipelining) : 연속해 메시지 전송 가능한 기술
    • 파이프라이닝 활용 → 여러 세그먼트 전송
    • 도중 잘못 전송 발생 시, 해당 세그먼트부터 다시 전송 = 누적 확인 응답 (CACK : Cumulative Acknowledgment)

    • ◆ Selective Repeat ARQ
    • 선택적으로 재전송
    • 수신 호스트에서 제대로 전송 받으면 ACK 세그먼트 송신
    • 제대로 전송 안된 메시지만 전송 =개별 확인 응답 (SACK : Selective Acknowledgement)

◆ 흐름 제어 : 슬라이딩 윈도우

  • 수신 버퍼 : 수신된 세그먼트가 애플리케이션 프로세스 의해 읽히기 전 임시 저장 공간
  • 버퍼 오버플로 (Buffer overflow) : 송신 양이 너무 많아 수신 버퍼 넘침
  • 흐름 제어 : 송신 호스트 → 수신 호스트 처리 속도 고려해 송수신 속도 균일 유지
  • 슬라이딩 윈도우 (Sliding Window)
    • 윈도우 (Window) : 송신 호스트가 파이프라이닝 할 수 있는 최대량
      • 확인 응답 없이도 한 번에 전송 가능한 양
    • 수신 호스트가 TCP 헤더 윈도우 필드로 받을 수 있는 데이터 양 전송 → 송신 호스트가 그 속도 맞춰 세그먼트 전송하는 것

◆ 혼잡 제어

  • 혼잡 (Congestion) : 많은 트래픽으로 패킷 처리 속도 ↓ or 유실 우려 있는 네트워크 상황
  • 혼잡 제어 : 혼잡 제어 위한 기능
  • 혼잡 윈도우 (Congestion Window) : 혼잡 없이 전송할 수 있을 법한 데이터 양 (이정도?)
  • 혼잡 제어 알고리즘 : 혼잡 제어 수행 방법
    • AIMD (Additive Increase / Multiplicative Decrease)
      • 합으로 증가, 곱으로 감소
      • 혼잡 감지 X → 혼잡 윈도우 RTT 마다 + 1
      • 혼잡 감지 O → 혼잡 윈도우 절반

      • ◆ 느린 시작 (Slow start)
      • 혼잡 윈도우 1부터 시작, 문제 없이 수신된 ACK 세그먼트 마다 +1
      • RTT 마다 2배씩 증가 → 초기 전송 속도 빠르게 확보
      • 느린 시작 임계치 (Slow start threshold)
      • 상황
타임아웃 발생 혼잡 윈도우 = 1, 느린 시작 임계치 = (혼잡 감지 혼잡 윈도우값) / 2
느린 시작 재개
혼잡 윈도우 ≥ 느린 시작 임계치 느린 시작 종료, **혼잡 회피 **수행
세 번의 중복 ACK 발생 (빠른 재전송 후) 빠른 회복 수행
- **◆ 혼잡 회피 (Congestion avoidance)**
- RTT 마다 혼잡 윈도우 1 MSS (Maximum Segment Size) 씩 증가
- 윈도우 크기 선형적 증가
- 타임아웃 발생 → 혼잡 윈도우 = 1, 느린 시작 임계치 = (혼잡 감지 혼잡 윈도우값) / 2 느린 시작 수행
- 세 번의 중복 ACK 발생 → (빠른 재전송 후) 혼잡 윈도우, 느린 시작 임계치 반토막 후 빠른 회복 수행
- **◆ 빠른 회복 (Fast Recovery)**
- 세 번 중복 ACK 세그먼트 수신 시, 느린 시작 스킵, 혼잡 회피 수행
- 타임아웃 발생 → 혼잡 윈도우 = 1, 느린 시작 임계치 = (혼잡 감지 혼잡 윈도우값) / 2 느린 시작 수행

글 이동

시리즈 이동

Comments