4-1. IP의 한계와 포트

IP 프로토콜의 한계

1. 비연결형 프로토콜
- 송,수신 호스트 간에 사전 연결 수립 작업을 거치지 않고, 수신지를 향해 패킷을 보내기만 한다.
2. 신뢰할 수 없는 프로토콜
- 통신과정에서 패킷의 데이터가 손상되거나, 중복된 패킷이 전송되었더라도 확인 할 수 없다.
전송 계층 역할 1. IP의 한계 보완
1. 전송 계층은 연결형 통신을 가능하게 한다.
- 연결형 통신의 대표적인 프로토콜인 TCP는 두 호스트가 정보를 주고 받기 전에 연결을 수립함.
2. 전송 계층은 신뢰성 있는 통신을 가능하게 한다.
- TCP 프로토콜의 경우 패킷이 수신지까지 올바른 순서대로 확실히 전달되는 것을 보장함
- 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등의 기능을 제공
전송 계층 역할 2. 응용 계층과의 연결 다리(포트)

포트

패킷이 IP 주소에 해당하는 컴퓨터에 도달한다고 해서 통신이 종료되는게 아니라, 해당 컴퓨터 안에 어떤 프로그램인지, 어떤 어플리케이션에 전달되야 하는지를 알아야 한다.
즉 , 패킷이 특정 어플리케이션 정보를 식별할 수 있도록 하는 정보를 포트라고 부른다.
포트의 분류

포트번호는 0번부터 65535번까지, 총65536개가 존재한다. 포트 번호는 범위에 따라서 세 종류로 나뉜다.
- 잘 알려진 포트 : 0~1023번까지의 포트 번호로, 범용적으로 사용되는 프로토콜의 포트 번호.
- 등록된 포트 : 덜 범용적이지만, 흔히 사용되는 어플리케이션에 할당하기 위해 사용되는 포트 번호.
- 동적 포트 : 할당된 어플리케이션이 없고, 특별히 관리되지 않아 자유롭게 사용이 가능한 포트 번호.
서버로 동작하는 프로그램은 일반적으로 잘 알려진 포트 또는 등록된 포트를 사용하며, 서비스 특성상 포트 번호가 사전에 관례적으로 정해져 있는 경우가 많다.
반면에 클라이언트로서 동작하는 프로그램은 동적 포트 번호 중에서 임의의 번호가 할당되는 경우가 많다. 예를 들어 웹 브라우저를 통해 웹 사이트에 접속하면, 서버는 80번이나 443번과 같은 고정된 포트를 사용하지만, 웹 브라우저는 요청을 보낼 때 동적 포트 중 하나를 자동으로 할당받아 서버와 패킷을 주고받는다.
포트 기반 NAT
NAT란 IP 주소를 변환하는 기술이며, 주로 네트워크 내부에서 사용되는 사설 IP 주소와 공인 IP 주소를 변환하는데 사용된다고 했는데, 이러한 변환을 위해 주로 사용되는 것이 NAT 변환 테이블이다.
NAT 변환 테이블

NAT 변환 테이블을 보면 변환의 대상이 되는 IP 주소가 일대일로 대응되어 있다. 하지만 사설 IP 주소와 공인 IP 주소가 일대일로 대응된다면 네트워크 내부에서 사용되는 사설 IP 주소의 수만큼 공인 IP 주소가 필요하기 때문에 무리가 있다.
따라서 오늘날 대중적으로 사용되는 NAT 기술은 대부분 다수의 사설 IP 주소를 그보다 적은 수의 공인 IP 주소로 변환하는데, 여기서 포트가 활용된다.
NAPT(Network Address Port Translation)

NAPT는 포트를 활용해 하나의 공인 IP 주소를 여러 사설 IP 주소가 공유할 수 있도록 하는 NAT의 일종이다. NAT 테이블에 변환할 IP 주소 쌍과 더불어 포트 번호도 함께 기록하고, 변환한다.
이처럼 공인 IP 주소가 같더라도 포트 번호가 다르면 네트워크 내부의 호스트를 특정할 수 있기 때문에, 다수의 사설 IP 주소를 그보다 적은 수의 공인 IP 주소로 변환할 수 있게 되므로, N:1로 관리할 수 있게 된다. 이러한 점에서 NAPT는 공인 IP 주소 수 부족 문제를 개선한 기술로도 간주된다.
4-2. TCP와 UDP
TCP 통신 단계와 세그먼트 구조

TCP는 통신 하기 전에 (1)연결을 수립하고, (2)데이터를 송수신 한 후, (3) 통신이 끝나면 연결을 종료한다.
TCP의 연결 수립과 종료를 알려면 MSS(Maximum Segment Size) 와 TCP 세그먼트 구조를 이해해야한다.
MSS(Maximum Segment Size)
MSS(Maximum Segement Size)란 TCP로 전송할 수 있는 최대 페이로드 크기를 의미한다.

TCP 세그먼트 구조

- 송신지 포트, 수신지 포트 : 송신지, 수신지 어플리케이션의 포트 번호 명시하는 필드다.
- 순서 번호 : 송수신되는 세그먼트의 올바른 순서를 보장하기 위한 번호가 명시된 필드다.
- 확인 응답 번호 : 상대 호스트가 보낸 세그먼트에 대한 응답으로 수신하기를 기대하는 순서 번호가 명시된 필드다.
- 제어 비트 : 세그먼트에 대한 부가 정보를 나타내는 필드로 ACK, SYN, FIN과 같은 TCP Flag가 부여된다.
- 윈도우 : 한 번에 수신하고자 하는 데이터의 양을 의미한다.
TCP 연결 수립과 종료
연결 수립 : 3-Way Handshake

연결 종료 : 4-way HandShake

TCP 상태
TCP는 연결형 통신 & 신뢰할 수 있는 통신을 유지하기 위해 다양한 상태를 유지한다.
상태라는 것은 현재 어떤 통신 과정에 있는지를 나타내는 정보로, TCP는 상태를 유지하고 활용한다는 점에서 Stateful 프로토콜이라고도 부른다.

1. 연결이 수립되지 않은 상태
- CLOSED : 아무런 연결이 없는 상태.
- LISTEN : 연결 대기 상태로, Listen 상태의 호스트에게 SYN을 보내면 3-WAY Handshake가 시작.
2. 연결 수립 상태

- SYN-SENT : SYN을 보낸 뒤 그에 대한 응답인 SYN+ACK를 기다리는 상태.
- SYN-RECEIVED : SYN+ACK 세그먼트를 보낸 뒤, 그에 대한 ACK 세그먼트를 기다리는 상태.
- ESTABLISHED : TCP 연결이 수립되어서, 데이터를 송수신할 수 있는 상태.
3. 연결 종료 상태

- FIN-WAIT-1 : FIN 세그먼트를 보내 연결 종료를 요청한 상태.
- CLOSE-WAIT : 종료 요청인 FIN 세그먼트를 받은 호스트가 ACK를 보낸 후 대기하는 상태.
- FIN-WAIT-2 : FIN-WAIT-1 상태에서 ACK를 받게된 후, 상대 호스트의 FIN을 기다리는 상태
- LAST-ACK : FIN을 전송한 뒤, 이에 대한 ACK를 기다리는 상태.
- TIME-WAIT : FIN을 수신 후 이에 대한 ACK를 전송한 뒤 접어드는 상태로, 일정 시간(2*MSL)을 기다린 뒤 CLOSED 상태로 전이.
UDP 데이터그램 구조

UDP는 TCP와 달리 비연결형 통신을 수행하는 신뢰할 수 없는 프로토콜이다. TCP와 다르게 연결 수립, 오류 제어, 흐름 제어, 혼잡 제어 등을 수행하지 않고, 상태를 유지하지도 않는다.
UDP는 TCP에 비해 적은 오버헤드로 패킷을 빠르게 처리할 수 있다는 장점이 있어, 스트리밍 서비스, 인터넷 전화처럼 실시간성이 강조되는 상황에서 많이 사용된다.
4-3. TCP의 오류, 흐름, 혼잡 제어

(1) 오류 제어 : 재전송 기법
TCP는 신뢰성을 보장하기 위해서 잘못된 세그먼트를 재전송한다.
TCP 세그먼트에 포함된 체크섬(checksum) 필드는 세그먼트가 전송 중 훼손되었는지를 검증하는 역할을 하지만, 전송 과정에서의 문제까지는 판단할 수는 없다.
따라서 TCP는 신뢰성을 보장하기 위해 다음 두 가지 요소가 필수적이다.
- 송신 호스트가 송신한 세그먼트에 문제가 있음을 인지해야 한다.
- 오류를 감지하면 해당 세그먼트를 재전송해야 한다.
재전송 상황 1 : 중복된 ACK 세그먼트를 수신했을 때
TCP는 중복된 ACK 세그먼트를 수신했을 때 오류가 생겼음을 감지한다.
재전송 상황 2 : 타임아웃이 발생했을 때
TCP는 타임아웃이 발생하면 문제가 생겼음을 인지한다.
TCP 세그먼트를 송신하는 호스트는 모두 재전송 타이머라는 값을 유지한다. 세그먼트를 전송할 때 마다 재전송 타이머를 시작하게 되고, 카운트다운이 끝나면 타임아웃이 발생하게 된다.
타임아웃이 발생할 때 까지 ACK 세그먼트를 받지 못하면 상대 호스트에게 정상적으로 도착하지 않았다고 판단하여 재전송한다.
ARQ : 재전송 기법
수신 호스트의 답변(ACK)과 타임아웃 발생을 토대로 문제가 생긴 메시지를 재전송하는 걸 ARQ(Automatic Repeat Request)라고 한다.
ARQ에는 크게 3가지 방식이 존재한다.
- Stop-and-Wait ARQ : 제대로 전달했음을 확인하기 전까지는 새로운 메시지를 보내지 않는 방식
- Go-Back-N ARQ : 여러 세그먼트를 전송하고, 도중에 잘못 전송된 세그먼트가 발생할 경우, 해당 세그먼트부터 전부 다시 전송하는 방식
- Selective Repeat ARQ : Go-Back-N ARQ처럼 여러 세그먼트를 전송하고, 올바르게 수신 받지 못한 ACK 세그먼트에 대해서만 재전송을 하는 방식
(2) 흐름 제어 : 슬라이딩 윈도우
Go-Back-N ARQ와 Selective Repeat ARQ와 같이 여러 세그먼트를 연속적으로 전송하는 파이프라이닝 기반 전송 방식에서는, 송신 측이 수신 측의 처리 능력을 초과하여 데이터를 보내지 않도록 흐름 제어를 함께 고려해야 한다.
전송할 때 수신 버퍼의 크기를 고려하지 않으면 버퍼 오버플로우가 발생한다.
- 수신 버퍼 : 수신된 세그먼트가 어플리케이션 프로세스에 의해 읽히기 전에 임시로 저장되는 공간
- 버퍼 오버플로 : 저장 가능한 공간보다 더 많은 데이터가 들어오면 버퍼가 넘치는 문제 상황을 의미

오늘날 TCP에서는 흐름 제어로 슬라이딩 윈도우(Sliding Window)를 사용한다. 윈도우란 송신 호스트가 파이프라이닝 할 수 있는 최대량을 의미하는데, 윈도우의 크기만큼 확인 응답을 받지 않고도 한 번에 전송이 가능하다.
수신 호스트는 TCP 헤더(윈도우 필드) 를 통해, 자신이 현재 수신 가능한 데이터의 양을 송신 호스트에게 알리면 송신 호스트는 이 값을 기반으로 전송 가능한 데이터의 범위, 즉 송신 윈도우 크기를 결정하고, 수신 호스트의 처리 능력을 초과하지 않도록 전송량을 조절한다.
이 과정에서 송신 호스트는 윈도우 범위 내에서 여러 세그먼트를 연속적으로 전송하며, ACK가 수신될 때마다 전송이 완료된 구간을 제외하고 새로운 데이터 전송 범위를 확장한다.
(3) 혼잡 제어
여러 호스트가 한 대의 라우터에 연결되어 있을 때, 해당 호스트들이 한번에 최대 양으로 세그먼트를 전송하면 라우터에 과부하가 생겨 모든 정보를 처리 못하게 된다. 이렇듯 혼잡이란 많은 트래픽으로 인해 패킷의 처리속도가 늦어지거나 유실될 우려가 있는 네트워크 상태를 의미한다.
흐름 제어의 주체가 수신 호스트라면 혼잡 제어의 주체는 송신 호스트로, 송신 호스트는 혼잡한 정도에 맞춰 유동적으로 전송량을 조절하며 전송해야 한다. 송신 호스트는 혼잡 윈도우의 크기가 어느정도가 적절할지 직접 계산해서 알아내야 한다.
- 혼잡 윈도우(CWND, Congestion WiNDow) : 혼잡 없이 전송할 수 있을 법한 데이터 양
혼잡 제어 알고리즘 종류
- AIMD : 혼잡이 감지되지 않는다면 혼잡 윈도우를 RTT마다 1씩 선형적으로 증가, 혼잡이 감지되면 혼잡 윈도우를 절반으로 떨어뜨리는 동작을 반복하는 알고리즘이다.
- 느린 시작 알고리즘 : 혼잡 윈도우를 1부터 시작해 문제없이 수신된 ACK 세그먼트 하나 당 1씩 증가시키는 방식이다.
- 혼잡 회피 알고리즘 : RTT(Round Trip Time)마다 혼잡 윈도우를 1 MSS(Maximum Segment Size)씩 증가시키는 알고리즘.
- 빠른 회복 알고리즘 : 세 번의 중복 ACK 세그먼트를 수신했을 때 느린 시작은 건너뛰고 혼잡 회피를 수행하는 알고리즘.
'컴퓨터네트워크' 카테고리의 다른 글
| [혼공네] 3장 네트워크 계층 (0) | 2025.10.12 |
|---|---|
| [혼공네] 2장 물리 계층과 데이터 링크 계층 - (2) (0) | 2025.10.07 |
| [혼공네] 2장 물리 계층과 데이터 링크 계층 - (1) (0) | 2025.10.05 |
| [혼공네] 1장 컴퓨터 네트워크 시작하기 (1) | 2025.08.31 |