[Network] 전송 계층
✦ 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 통신 단계
- 연결 수립
- 데이터 송수신
- 재전송 → 오류 제어, 흐름 제어, 혼잡 제어
- 연결 종료
- 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의 오류 · 흐름 · 혼잡 제어
◆ 오류 제어 : 재전송 기법
- 오류 검출
- 중복된 ACK 세그먼트 수신
- 타임아웃 발생
- 재전송 타이머 (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 헤더 윈도우 필드로 받을 수 있는 데이터 양 전송 → 송신 호스트가 그 속도 맞춰 세그먼트 전송하는 것
- 윈도우 (Window) : 송신 호스트가 파이프라이닝 할 수 있는 최대량
◆ 혼잡 제어
- 혼잡 (Congestion) : 많은 트래픽으로 패킷 처리 속도 ↓ or 유실 우려 있는 네트워크 상황
- 혼잡 제어 : 혼잡 제어 위한 기능
- 혼잡 윈도우 (Congestion Window) : 혼잡 없이 전송할 수 있을 법한 데이터 양 (이정도?)
- 혼잡 제어 알고리즘 : 혼잡 제어 수행 방법
- AIMD (Additive Increase / Multiplicative Decrease)
- 합으로 증가, 곱으로 감소
- 혼잡 감지 X → 혼잡 윈도우 RTT 마다 + 1
-
혼잡 감지 O → 혼잡 윈도우 절반

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