정보통신기사 필기

4계층 — 전송 계층 (Transport Layer)

역할: 종단 간(End-to-End) 프로세스 간 데이터 전송. 포트번호로 프로세스 구분 (신뢰성 제공 여부는 프로토콜에 따라 다름)
PDU: 세그먼트(TCP) / 데이터그램(UDP) | 장비: L4스위치, 로드밸런서

TCP — Transmission Control Protocol

연결지향형 / 신뢰성 보장
3-way 핸드셰이크로 연결
4-way 핸드셰이크로 종료
흐름제어(슬라이딩 윈도우)
혼잡제어 / 오류제어(ARQ)
헤더: 최소 20 bytes
PDU: 세그먼트

UDP — User Datagram Protocol

비연결형 / 신뢰성 없음
연결 수립 과정 없음
확인·재전송 없음
속도 빠름 / 오버헤드 최소
체크섬만 존재
헤더: 고정 8 bytes
PDU: 데이터그램

TCP 6가지 플래그
플래그풀네임역할사용 시점
SYNSynchronize연결 요청3-way 핸드셰이크 1·2단계
ACKAcknowledgment수신 확인연결 후 거의 모든 패킷
FINFinish정상 종료 요청4-way 핸드셰이크
RSTReset강제 연결 초기화오류·비정상 종료 시
PSHPush즉시 전달 요청버퍼 기다리지 말고 바로
URGUrgent긴급 데이터 표시우선 처리 필요 데이터
3-way: SYN→ / SYN+ACK← / ACK→
4-way: FIN→ / ACK← / FIN← / ACK→
3-way로 열고 4-way로 닫는 이유: 서버가 FIN 받아도 보낼 데이터가 남아있을 수 있어서 ACK 먼저, FIN 나중에
⚙️ 처리 방법 — 이 계층이 하는 일
기능내용
분할 · 재조립
Segmentation
상위에서 내려온 큰 데이터를 세그먼트로 쪼개고, 받는 쪽에서 다시 합친다
다중화 · 역다중화포트 번호로 어느 프로세스의 데이터인지 구분. 한 IP에서 여러 앱이 동시에 통신 가능
연결 설정 · 해제TCP는 3-way 핸드셰이크로 열고 4-way로 닫는다
순서 제어Sequence Number 로 순서를 매겨, 뒤섞여 도착해도 원래 순서로 복원
흐름 제어슬라이딩 윈도우 — 수신 측 버퍼가 감당할 만큼만 보낸다
오류 제어체크섬으로 검출, ACK가 안 오면 재전송(ARQ)
혼잡 제어네트워크가 막힐 때 전송량을 줄인다 (흐름 제어와 다름)
⚠ 흐름 제어 vs 혼잡 제어 기출 함정
• 흐름 제어 = 수신자가 못 따라올까 봐 조절 → 슬라이딩 윈도우
• 혼잡 제어 = 네트워크가 막힐까 봐 조절 → Slow Start, 혼잡 회피
"혼잡 시 윈도우를 1로 줄인다"는 혼잡 제어(Slow Start) 이지 슬라이딩 윈도우의 특성이 아니다.
📦 TCP 헤더 구조 (최소 20바이트)
0 16 31 ┌───────────────────┬───────────────────┐ │ 출발지 포트 16bit │ 목적지 포트 16bit │ ├───────────────────┴───────────────────┤ │ 순서 번호 (Sequence Number) 32bit │ ├───────────────────────────────────────┤ │ 확인 응답 번호 (ACK Number) 32bit │ ├─────┬─────┬───────┬───────────────────┤ │offset│예약 │플래그 │ 윈도우 크기 16bit │ ├─────┴─────┴───────┼───────────────────┤ │ 체크섬 16bit │ 긴급 포인터 16bit │ └───────────────────┴───────────────────┘
필드크기역할
출발지 / 목적지 포트각 16비트0 ~ 65535. 어느 프로세스인지 지정 기출: 32비트 아님
순서 번호32비트이 세그먼트 데이터의 첫 번째 바이트 번호 기출: 마지막 아님
확인 응답 번호32비트다음에 받기를 기대하는 바이트 번호
플래그6비트SYN · ACK · FIN · RST · PSH · URG
윈도우 크기16비트수신 가능한 버퍼 크기 → 흐름 제어
체크섬16비트헤더 + 데이터 오류 검출
UDP 헤더는 고정 8바이트 — 출발지 포트 · 목적지 포트 · 길이 · 체크섬, 이렇게 4개 필드뿐이다. 순서 번호도 ACK도 없어서 오버헤드가 최소다.
🤝 연결 설정과 해제

3-way 핸드셰이크 (연결)

① A → B : SYN
② B → A : SYN + ACK
③ A → B : ACK
→ 연결 수립 (ESTABLISHED)

4-way 핸드셰이크 (해제)

① A → B : FIN
② B → A : ACK
③ B → A : FIN
④ A → B : ACK → TIME_WAIT

해제가 4단계인 이유 — 한쪽이 FIN을 보내도 반대 방향은 아직 보낼 데이터가 남아 있을 수 있어서, 각 방향을 따로 닫는다(Half-close).
🚦 혼잡 제어 4단계 — 출제 1순위

실제 전송량 = min(cwnd, rwnd) — 혼잡 윈도우(네트워크 사정)와 수신 윈도우(상대 버퍼) 중 작은 쪽을 따른다. 흐름 제어는 rwnd, 혼잡 제어는 cwnd를 조절하는 것이다.

단계동작증가 방식
① 느린 시작
Slow Start
cwnd = 1 MSS로 시작, ACK 하나마다 cwnd를 1씩 증가 → RTT마다 2배
임계값(ssthresh)에 도달하면 ②로 전환
지수적
1 → 2 → 4 → 8
② 혼잡 회피
Congestion Avoidance
ssthresh 이후에는 조심스럽게 RTT마다 1 MSS씩만 증가 선형
8 → 9 → 10
③ 빠른 재전송
Fast Retransmit
중복 ACK 3개를 받으면 재전송 타이머 만료를 기다리지 않고 즉시 재전송 —
④ 빠른 회복
Fast Recovery
재전송 후 cwnd를 1로 떨어뜨리지 않고 ssthresh부터 혼잡 회피로 복귀 (TCP Reno) 선형 재개
⚠ 손실을 감지하는 두 경로가 다르게 처리된다
· 타임아웃 (심각한 혼잡으로 판단) → ssthresh = cwnd2, cwnd = 1 → 느린 시작부터 다시 TCP Tahoe
· 중복 ACK 3개 (경미한 손실로 판단) → ssthresh = cwnd2, cwnd = ssthresh → 혼잡 회피로 복귀 TCP Reno
이 증감 방식을 AIMD(Additive Increase / Multiplicative Decrease)라 한다 — 늘릴 땐 더하기, 줄일 땐 반으로.
🔄 TCP 상태 전이 · TIME_WAIT
서버 : CLOSED → LISTEN → SYN_RECEIVED → ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED 클라 : CLOSED → SYN_SENT → ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
상태의미
LISTEN서버가 SYN을 기다리는 대기 상태
ESTABLISHED연결 수립 완료. 실제 데이터 송수신 중
CLOSE_WAIT상대 FIN을 받고 ACK를 보낸 상태. 내 쪽 close() 호출을 기다리는 중
TIME_WAIT마지막 ACK를 보낸 뒤 2MSL 동안 대기 (능동적으로 먼저 닫은 쪽만 거침)
📖 TIME_WAIT가 2MSL인 이유 두 가지 — MSL(Maximum Segment Lifetime) = 패킷이 網에 살아있을 수 있는 최대 시간
① 마지막 ACK가 유실되면 상대가 FIN을 재전송하는데, 이때 응답할 수 있어야 한다
② 이전 연결의 지연된 패킷이 같은 포트로 열린 새 연결에 섞여 들어가는 것을 막는다
⚠ 실무 · 기출 포인트
· TIME_WAIT 누적 → 먼저 연결을 끊는 쪽(주로 클라이언트·프록시)에서 발생. 포트 고갈의 원인
· CLOSE_WAIT 누적 → 애플리케이션이 close()를 호출하지 않은 것. 코드 버그의 신호
🔌 포트 번호 분류 · 소켓
구분범위설명
잘 알려진 포트
Well-known
0 ~ 1023IANA 지정. 서버가 열려면 관리자 권한 필요. HTTP 80, HTTPS 443, SSH 22
등록 포트
Registered
1024 ~ 49151제조사·서비스 등록용. MySQL 3306, PostgreSQL 5432, 8080
동적 · 사설 포트
Dynamic / Ephemeral
49152 ~ 65535클라이언트가 통신할 때마다 임시로 배정받는 출발지 포트
소켓(Socket) = IP 주소 + 포트 번호 — 예: 192.168.0.100:52413
하나의 TCP 연결은 4-tuple(출발지 IP · 출발지 포트 · 목적지 IP · 목적지 포트)로 유일하게 식별된다. 그래서 같은 서버의 80번 포트에 수천 명이 동시 접속해도 서로 구분된다 — 클라이언트의 임시 포트가 다르기 때문이다.
⏱️ TCP 타이머 4종 · MSS
타이머역할
재전송 타이머
RTO
ACK가 오지 않으면 재전송. RTT를 측정해 동적으로 계산(Karn 알고리즘 — 재전송된 세그먼트는 RTT 측정에서 제외)
지속 타이머
Persistence
수신 측이 윈도우 0을 통보한 뒤 "이제 받을 수 있다"는 갱신 통보가 유실되면 교착에 빠진다. 이를 막으려 주기적으로 Window Probe를 보낸다
킵얼라이브 타이머유휴 연결의 생존 확인 (기본 2시간)
TIME_WAIT 타이머2MSL 대기
MSS vs MTU — MTU는 2계층이 한 번에 실어나를 수 있는 최대 크기(이더넷 1500 byte), MSS는 그중 TCP 데이터가 차지할 수 있는 최대 크기다.
MSS = MTU − IP헤더(20) − TCP헤더(20) = 1500 − 40 = 1460 byte
MSS는 3-way 핸드셰이크의 SYN 옵션으로 서로 알려주고 더 작은 값을 채택한다.
🧩 TCP 옵션 · 헤더 길이 필드
항목내용
데이터 오프셋
4bit
헤더 길이를 4바이트 단위로 표시. 최소 5(=20byte), 최대 15(=60byte)
옵션이 없으면 항상 5
MSS 옵션최대 세그먼트 크기 협상 (SYN에만 포함)
윈도우 스케일윈도우 필드가 16비트라 최대 64KB가 한계. 이를 곱셈으로 확장해 고속·장거리 회선에서 처리량 확보
SACK
선택적 확인응답
중간에 빠진 조각만 골라서 재전송 요청. 전체 재전송 낭비를 줄임
타임스탬프정밀한 RTT 측정, 순서번호 순환(PAWS) 방지
⚠ 작은 세그먼트 문제 2종
· Nagle 알고리즘(송신 측) — 작은 데이터를 모아 한 번에 전송해 효율을 높이지만 지연이 생긴다. 실시간 통신에서는 TCP_NODELAY로 끈다
· Silly Window Syndrome — 아주 작은 윈도우를 반복 광고해 효율이 무너지는 현상. 수신 측은 Clark 해법, 송신 측은 Nagle로 대응
📡 UDP를 쓰는 프로토콜 · 다른 전송계층 프로토콜
프로토콜포트UDP를 쓰는 이유
DNS53질의·응답 1회로 끝나 연결 수립이 낭비
단, 응답 512byte 초과·존 전송(AXFR)은 TCP 기출
DHCP67 / 68주소가 없는 상태라 브로드캐스트가 필요 — TCP는 브로드캐스트 불가
TFTP69단순 파일 전송. 자체적으로 최소한의 확인만
SNMP161 / 162다수 장비를 가볍게 폴링
NTP123지연이 정확도를 해침
RIP520주기적 브로드캐스트 방식
Syslog514로그 유실보다 부하 최소화가 우선
RTP / VoIP가변재전송된 늦은 음성은 쓸모없다 — 지연 > 유실
프로토콜특징
SCTPTCP + UDP의 장점 결합. 멀티스트리밍(HOL 블로킹 회피) · 멀티호밍(경로 이중화). 연결은 4-way(쿠키 방식). SS7 시그널링 전송에 사용
DCCP비신뢰 전송 + 혼잡 제어. 스트리밍용
QUICUDP 기반으로 TCP+TLS 기능을 구현. HTTP/3의 전송 프로토콜
OSI TP0~TP4ISO 전송계층 클래스. TP0 최소 기능 ~ TP4 오류 검출 + 복구(= TCP에 해당)
🔧 장비 · 📐 계측

장비

L4 스위치 / 로드밸런서 — IP + 포트를 보고 서버로 분산
방화벽 — 포트 기반 접근 제어 (ACL)
NAT / PAT 장비 — 포트를 바꿔 주소 변환

보안 장비로는 방화벽이 이 계층의 대표

계측 · 점검 항목

• RTT (왕복 지연) · 지터
• 재전송률 — 높으면 회선·혼잡 문제
• 윈도우 크기 · 처리량(Throughput)
• 동시 연결 수 · TIME_WAIT 누적
• 포트 스캔 탐지

🔗 이 계층과 이어지는 단원
📝 4계층 시험 포인트
• PDU = 세그먼트(TCP) / 데이터그램(UDP), 주소 = 포트 번호
• 포트는 각 16비트 (출발지+목적지 합쳐 32비트)
• Sequence Number = 데이터의 첫 바이트 번호
• 흐름 제어 = 슬라이딩 윈도우 / 혼잡 제어 = Slow Start (구분!)
• 연결 3-way, 해제 4-way
• UDP 헤더는 고정 8바이트, 멀티캐스트 가능