← 홈으로

08장. TCP 3-way 실패

--:--

1. 3-way — 연결은 이렇게 열린다

"연결이 안 돼요"는 사실 여러 고장이 뭉뚱그려진 말이에요. 실패의 모양만 읽어도 수색 범위가 반으로 줄어듭니다.

TCP는 데이터를 보내기 전에 3-way 핸드셰이크로 양편이 준비됐는지 확인합니다.

cli ──SYN──▶ srv "연결 열자" cli ◀─SYN-ACK── srv "그래, 나도 준비됨" cli ──ACK──▶ srv "확인" → ESTABLISHED

실패는 반드시 이 세 단계 어디선가 납니다. 어디가, 어떻게 깨졌는지가 지문이에요.

2. 실패의 세 가지 지문

빨리 실패는 오히려 좋은 신호입니다 — 누군가 응답은 했다는 뜻이라 수색이 좁아요. 느리게 실패가 후보가 넓습니다.

증상걸리는 시간패킷
타임아웃수 초SYN만 반복SYN이 조용히 버려짐 (DROP / 경로 유실)
Connection refused즉시SYN → RST목적지까지 갔는데 포트가 닫힘 (또는 누가 RST를 쏨)
중간자 RST즉시SYN → RST겉은 refused인데 방화벽이 srv인 척 쏜 것

05장 블랙홀(침묵)과 refused(즉시 자백)의 TCP 버전이에요.

3. 이 랩의 형태 · 장전된 고장

같은 서버 10.8.2.10포트 네 개에 운명을 네 가지 심어 둡니다.

cli ──── fw(nft) ──── srv(10.8.2.10) :6060 정상 socat 리스너 → succeeded (기준선) :8080 fw가 SYN DROP → 타임아웃 :9090 fw 통과, srv에 리스너 없음 → refused (진짜 srv RST) :7070 fw가 REJECT with tcp-reset → refused처럼 보이지만 중간자 RST

이 랩은 일부러 고장을 장전한 채 시작합니다. 증상부터 보고, 패킷으로 가르고, 계층별로 고칩니다.

터미널 연결 준비됨
우측 상단의 [실습 환경 시작] 버튼을 누르면 이 영역에 Xterm.js 웹 터미널이 로드됩니다.