전송 계층

고성인·2025년 11월 13일

CS

목록 보기
16/17

IP의 한계

네트워크 계층의 IP는 신뢰할 수 없는 통신과 비연결형 통신을 수행한다는 한계가 존재한다.

신뢰할 수 없는 통신과 비연결형 통신

IP는 비신뢰성 프로토콜이자 비연결형 프로토콜이다.
신뢰할 수 없는 통신은 IP프로토콜이 패킷이 수신지까지 제대로 전송되었다는 것을 보장하지 않는다는 것을 의미힌다.
비연결형 통신은 송수신 호스트 간에 사전 연결 수립 작업을 거치지 않는 것을 의미한다.

이러한 통신을 사용하는 부분은 빠른 전송이 우선시 되는 실시간 동영상 스트리밍 같은 서비스에 이용된다.
패킷이 한두 개 손실되어도 큰 지장을 받지 않는다.

IP의 한계를 보완하는 전송 계층

전송 계층은 연결형 통신을 가능하게 하며 신뢰성 있는 통신을 가능하게 한다.
전송 계층의 연결형 프로토콜인 TCP는 두 호스트가 정보를 주고받기 전 연결을 수립하고 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어등을 통해 신뢰성 있는 통신을 가능하게 한다.

물론 전송 계층에는 비교적 빠른 성능을 위해 신뢰할 수 없는, 비연결형 통신을 지원하는 UDP프로토콜도 존재한다.

포트

패킷이 실행중인 특정 애플리케이션까지 전달되기 위해 특정 애플리케이션을 식별할 수 있는 정보가 필요한데, 이러한 정보를 포트라고 한다.

포트의 분류

전송 계층에서는 포트 번호를 통해 애플리케이션을 식별한다.
포트 번호는 0번부터 65535번까지 총 65536개가 존재하며, well known port, registered port, dynamic port 이렇게 세 종류로 나뉜다.

포트 기반 NAT

NAT란 사설 IP주소를 공인 IP주소로 변환하는 기술이였는데, 이러한 변환을 위해 주로 사용되는 것이 NAT 변환 테이블이다.

NAPT

포트 기반의 NAT를 NAPT 혹은 APT라고 부른다.
NAPT는 포트를 활용하여 하나의 공인 IP주소를 여러 사설 IP주소가 공유할 수 있도록 하는 NAT의 일종이다.
네트워크 외부에서 사용할 IP 주소가 같더라도 포트 번호가 다르면 네트워크 내부의 호스트를 특정할 수 있기 때문에 외부에서 사용할 IP주소를 N:1로 관리할 수 있다.

포트 포워딩

네트워크 내 특정 호스트에 IP주소와 포트 번호를 미리 할당하고, 해당 IP주소:포트 번호로써 해당 호스트에게 패킷을 전달하는 기능

ICMP

IP의 신뢰할 수 없는 전송과 비연결형 전송 특성을 보완하기 위한 프로토콜 중 하나로, 전송 과정에서 발생한 문제 상황에 대한 오류 보고와 네트워크에 대한 진단 정보가 있다.

TCP와 UDP

TCP는 신뢰할 수 있는 통신을 위한 연결형 프로토콜이고, UDP는 신뢰성은 떨어지지만 빠른 통신이 가능한 비연결형 프로토콜이다.

TCP통신 단계와 세그먼트 구조

TCP는 데이터를 송수신하기 전에 연결을 수립하고 통신이 끝나면 연결을 종료한다.
또한 데이터 송수신 과정에서 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등의 기능을 제공한다.

MSS

Maximum Segment Size의 약자로, TCP로 전송할 수 있는 최대 페이로드 크기를 의미한다.
TCP 헤더의 크기는 제외한 페이로드만의 크기이다.

TCP세그먼트의 헤더는 대표적으로 다음과 같은 것들을 포함한다.

  • 송수신지 포트
  • 순서 번호: 송수신되는 세그먼트의 올바른 순서를 보장하기 위해 세그먼트 데이터 첫 바이트에 부여되는 번호
  • 확인 응답 번호: 상대 호스트가 보낸 세그먼트에 대한 응답으로, 다음으로 수신하기를 기대하는 순서 번호
  • 제어 비트: 현재 세그먼트에 대한 부가 정보
  • 윈도우: 한 번에 수신하고자 하는 데이터의 양

제어 비트

제어 비트는 기본적으로 8비트로 구성되며, 대표적인 제어 비트로는 다음 세 개의 제어비트가 존재한다.

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

순서 번호와 확인 응답 번호

TCP의 신뢰성을 보장하기 위해 사용되는 필드로, 순서 번호는 세그먼트 데이터의 첫 바이트에 부여되는 번호를 의미한다.
MSS단위로 쪼개진 세그먼트의 순서번호는 무작위 값인 ISN(초기 순서 번호)가 생성되며, 이후의 순서 번호는 송신한 바이트 수를 더하며 정해진다.

확인 응답 번호는 수신자가 다음으로 받기 기대하는 순서 번호로, 일반적으로 수신한 순서 번호 + 1의 값으로 설정된다.

TCP 연결 수립과 종료

쓰리 웨이 핸드셰이크

TCP의 연결 수립은 쓰리 웨이 핸드셰이크라는 과정을 거친다.
호스트 A에서 B에게 연결을 수립한다 가정할 때 SYN -> SYN+ACK -> ACK 세 단계를 거쳐 연결을 수립한다.

포 웨이 핸드셰이크

데이터 송수신이 끝난 뒤 연결을 종료할때는 포 웨이 핸드셰이크라는 과정을 거친다.
호스트 A에서 B에게 연결을 종료한다 가정할 때 FIN -> ACK -> FIN -> ACK 총 네 단계를 거쳐 연결을 종료한다.

TCP 상태

TCP는 연결형 통신과 신뢰할 수 있는 통신을 유지하기 위해 다양한 상태를 갖는다.

연결이 수립되지 않은 상태

주로 CLOSED나 LISTEN상태를 유지한다.

  • CLOSED: 아무런 연결이 없는 상태
  • LISTEN: 일종의 연결 대기 상태

연결 수립 상태

TCP 연결 수립 과정에서는 주로 SYN-SENT, SYN-RECEIVED, ESTABLISHED 상태를 유지한다.

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

연결 종료 상태

TCP 연결 종료 과정에서는 주로 FIN-WAIT-1, CLOSE-WAIT, FIN-WAIT-2, LAST-ACK, TIME-WAIT, CLOSED상태를 유지한다.

  • FIN-WAIT-1: FIN세그먼트로 연결 종료 요청을 보낸 액티브 클로즈 호스트의 상태
  • CLOSE-WAIT: 종료 요청인 FIN세그먼트를 받은 패시브 클로즈 호스트의 상태로, ACK응답을 보낸 후 대기하는 상태
  • FIN-WAIT-2: FIN-WAIT-1상태에서 ACK세그먼트를 받은 상태로 상대 호스트의 FIN세그먼트를 기다리는 상태
  • LAST-ACK: CLOSE-WAIT상태에서 FIN세그먼트를 전송한 뒤 ACK세그먼트를 기다리는 상태
  • TIME-WAIT: 액티브 클로즈 호스트가 FIN세그먼트를 수신한 뒤 이에 대한 ACK세그먼트를 전송한 뒤의 상태, 일정 시간을 기다린 뒤 CLOSED상태로 바뀐다.

UDP 데이터그램 구조

UDP는 비연결형 통신을 수행하는 신뢰할 수 없는 프로토콜로 상태를 가지지 않는 스테이트리스 프로토콜의 일종이다.
UDP 데이터그램의 헤더는 송수신지 포트, 길이, 체크섬으로 이루어져 있다.

  • 송수신지 포트
  • 길이: 헤더를 포함한 UDP 데이터그램의 바이트가 담긴다.
  • 체크섬: 데이터그램 전송 과정에서 오류가 발생했는지 검사하기 위한 필드

TCP의 오류, 흐름, 혼잡 제어

TCP는 재전송을 기반으로 다양한 오류를 제어하고, 흐름 제어를 통해 처리할 수 있을 만큼의 데이터만 주고받으며, 혼잡 제어를 통해 네트워크가 혼잡한 정도에 따라 전송량을 조절한다.

오류 제어

TCP는 신뢰성을 보장하기 위해 잘못된 세그먼트를 재전송하는 방법으로 오류를 제어한다.

오류 검출과 재전송

TCP세그먼트에 오류 검출을 위한 체크섬 필드가 있지만 이것은 훼손 여부만 나타낼 뿐이고, 해당 값이 잘못되어도 수신측에서 폐기하기 때문에 송신 호스트는 문제를 인지할 수 없다.
따라서 TCP의 신뢰성을 위해서는 송신 호스트가 세그먼트에 문제가 발생하였는지 알 수 있어야 하며, 오류를 감지하면 해당 세그먼트를 재전송 할 수 있어야 한다.

TCP가 오류를 검출하고 세그먼트를 재전송 하는 상황은 다음과 같은 두 가지가 있다.
1. 중복된 ACK 세그먼트를 수신했을 경우
2. 타임아웃이 발생했을 경우

ARQ

수신 호스트의 ACK와 타임아웃 발생을 토대로 문제를 진단하고 재전송함으로써 신뢰성을 확보하는 방식을 의미한다.
대표적으로 다음과 같은 세 가지 방식이 존재한다.
1. Stop-and-Wait ARQ: 제대로 전달했음을 확인하기 전까지 새로운 메시지를 보내지 않는 방식으로 높은 신뢰성을 보장하지만 네트워크 이용 효율이 낮아질 수 있다.
2. Go-Back-N: 파이프라이닝 방식을 활용하여 여러 세그먼트를 전송하고, 도중에 잘못 전송된 세그먼트가 발생할 경우 해당 세그먼트부터 다시 전송하는 방식
3. Selective Repeat: 파이프라이닝 방식을 활용하여 여러 세그먼트를 전송하고, 도중에 잘못 전송된 세그먼트가 발생한 경우 해당 세그먼트만 재전송 하는 방식

흐름 제어

호스트가 한 번에 받아서 처리할 수 있는 세그먼트의 양에는 한계가 있기 때문에 파이프라이닝 기반의 Go-Back-N ARQ와 Selective Repeat ARQ가 정상으로 동작하려면 흐름 제어를 고려해야 한다.

슬라이딩 윈도우

TCP에서 흐름 제어를 위해 사용하는 기법으로, 윈도우란 송신 호스트가 파이프라이닝할 수 있는 최대량을 의미한다.

혼잡 제어

혼잡 제어는 많은 트래픽으로 인해 패킷의 처리 속도가 늦어지거나 유실될 우려가 있는 상황인 혼잡을 제어하기 위한 기능이다.

혼잡 윈도우

혼잡 없이 전송할 수 있을 법한 데이터양을 의미하며, 혼잡 제어 알고리즘을 통해 혼잡 윈도우의 크기를 결정한다.

  • AIMD: 혼잡 윈도우를 RTT마다 1씩 선형적으로 증가시키고, 혼잡이 감지되면 혼잡 윈도우를 절반으로 떨어뜨리는 동작을 반복하는 알고리즘
  • 느린 시작 알고리즘: 혼잡 윈도우를 1부터 시작해 문제없이 수신된 ACK세그먼트 하나당 slow start threshold라는 값까지 1씩 증가시키는 방법
    임계치 이상이 되거나, 타임아웃이 발생하거나, 중복된 세 번의 ACK세그먼트가 발생하면 다음과 같은 방식으로 동작한다.
  • 혼잡 회피 알고리즘: RTT마다 혼잡 윈도우를 1MSS씩 증가시키는 알고리즘
  • 빠른 회복 알고리즘: 세 번의 중복 ACK세그먼트를 수신했을 때 느린 시작은 건너뛰고 혼잡 회피를 수행하는 알고리즘

0개의 댓글