[혼공네트] 4주차_전송 계층

🙈·2025년 7월 31일
0

IP의 한계

IP의 특징: unreliable, connectless

IP 패킷은 신뢰성이 없고 연결을 수립하는 과정이 없다.
⇒ 호스트 간의 연결이 이루어지지 않고 패킷이 수신됐다는 것을 보장할 수 없다.

왜? 그럴까?
빠른 전송 속도가 중요하다.
패킷 한 두 개 쯤 손실이 발생해도 큰 지장이 없다.

전송 계층에서 IP 한계 보완

  • TCP
    • 연결형 통신
      TCP의 경우 송수신할 두 호스트가 연결을 수립한다.
    • 신뢰성 있는 통신
      오류, 흐름, 혼잡 제어 등으로 패킷이 올바른 순서대로 전달되는 것을 보장한다.
  • UDP
    • TCP가 항상 좋은 것은 아니다. 빠른 전송이 필요한 경우 사용할 수 있다.
    • 비연결형 통신
    • 신뢰할 수 없는 통신

포트(port)

패킷은 실행 중인 특정 프로세스까지 전달되어야 한다.
한 호스트 내에서 각 프로세스를 구분할 수 있는 정보가 바로 포트이다.

포트 번호는 16bit로 표현
⇒ 216개 존재
⇒ 0 - 65536

e.g.)

  • 22번: ssh
  • 80번: http
  • 443번: https
  • 3306: MySQL 데이터베이스

NAT과 NAPT

IP 주소를 변환하는 기술이다.
LAN에서 사용되는 사설 IP ↔ WAN에서 사용되는 공인 IP
비교적 적은 공인 IP, 비교적 다수의 사설 IP ⇒ 모든 IP 주소를 일대일 매칭하는 것은 불가능

포트를 기반으로한 NAPT(Network Address Port Translation)이 해결 방안이 될 수 있다.
같은 공인 IP 주소를 서로 다른 사설 IP 주소로 식별하기 위해 NAT 테이블에 포트를 함께 기술하여 사용한다.

TCP

TCP 세그먼트 구조

한국어영어역할
순서 번호sequence number송수신하는 세그먼트의 올바른 순서를 보장
세그먼트 데이터의 첫 바이트에 부여되는 번호
확인 응답 번호acknowledgement number상대 호스트가 보낸 세그먼트에 대한 응답
다음 수신하기를 기대하는 순서 번호 명시
제어 비트control bits세그먼트에 대한 부가 정보(CWR-FIN)

제어 비트역할
ACK세그먼트의 승인을 나타내기 위한 비트
SYN연결을 수립하기 위한 비트
FIN연결을 종료하기 위한 비트

TCP 연결 수립 및 종료

TCP는 three-way handshake로 연결을 수립하고 four-way handshake 과정으로 연결을 종료한다.

위의 과정에서 TCP 상태만 살펴보면 아래 이미지와 같다.

오류 제어: 재전송 기법

TCP는 아래 두 가지 상황에서 오류가 발생했다고 판단하고 세그먼트를 재전송한다.

  • 중복된 ACK 수신
    • 클라이언트 측에서 송신 호스트가 보낸 특정 세그먼트를 받지 못한 경우, 다음 세그먼트를 전달해달라는 세그먼트를 여러 번 받게 된다.
  • 타임아웃
    • TCP 세그먼트를 송신하는 호스트는 재전송 타이머 값을 유지한다.
    • 이 타이머의 카운트다운이 끝날 떄까지 ACK 세그먼트가 오지 않으면(RTT를 넘길 경우) 타임아웃이 발생하고 세그먼트를 재전송한다.

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

호스트가 한 번에 받아서 처리할 수 있는 세그먼트의 양에는 한계가 있다.
따라서 송신 호스트가 수신 호스트의 처리 속도를 고려하며 송수신 속도를 균일하게 유지해야한다.
이때 슬라이딩 윈도우 알고리즘을 활용한다.

혼잡 제어

혼잡(congestion)이란, 트래픽이 많아 세그먼트가 유실되거나 처리속도가 늦어지는 현상을 말한다.
혼잡 윈도우란, 혼잡 없이 전송할 수 있는 데이터의 양을 말한다.
따라서 혼잡 윈도우를 적절히 설정하는 것이 중요하다.

혼잡 제어를 위한 가장 기본적인 알고리즘은 AIMD(Additive Increase/MultiplicativeDecrease)이다.
말 그대로 혼잡 감지 X ⇒ 혼잡 윈도우를 RTT마다 1 증가 / 혼잡 감지 ⇒ 혼잡 윈도우 반감

조금 더 정교한 알고리즘으로 아래 세 가지가 있다.

  • 느린 시작

    • 혼잡 윈도우를 1부터 시작해, 문제 없이 수신된 ACK 세그먼트 1개당 1씩 증가

    • 혼잡 감지 시

      상황 분류해결 방법
      타임 아웃혼잡 윈도우 = 1
      느린 시작 임계치를 이전의 절반으로 초기화
      느린시작 재개
      혼잡 윈도우 >= 느린 시작 임계느린 시작 종료, 혼잡 회피
      3번의 중복 ACK 세그먼트빠른 재전송 후 빠른 회복
  • 혼잡 회피

    • RTT마다 혼잡 윈도우를 1MSS만큼 증가
  • 빠른 회복

    • 세 번의 중복 ACK 세그먼트를 수신했을 때 느린 시작은 건너뛰고 혼잡 회피를 수행

숙제

필수 숙제

  1. Ch.04-1 확인 문제 1번
  • 비신뢰성
  • 비연결형
  1. Ch 04-2 확인 문제 2번
  • ACK

<참고 자료>

profile
개발 일기🌱

0개의 댓글