본문 바로가기

TCP·UDP·DNS·HTTP·TLS 프로토콜 분석

패킷 분석기에서 SYN, ACK, 200 같은 값을 찾는 일은 어렵지 않다. 어려운 것은 그 값을 누가 누구에게, 어떤 상태에서, 무엇을 기대하며 보냈는지 판단하는 일이다. 같은 ACK도 연결 수립, 데이터 확인, 종료 과정에서 의미가 다르고, 응답이 없다는 증상도 DNS 질의 실패·TCP 연결 실패·TLS 인증…

참조모델·캡슐화·Ethernet·IPv6 전달 경계와 시간초과·재시도·멱등성과 부분실패에서 관찰 위치와 재시도의 책임을 먼저 연결한다. TCP 바이트·윈도, DNS 캐시, 인증서 검증 축은 서로 다른 기준으로 판정한다.

0. 패킷 한 줄은 대화의 한 장면일 뿐이다

패킷 분석기에서 SYN, ACK, 200 같은 값을 찾는 일은 어렵지 않다. 어려운 것은 그 값을 누가 누구에게, 어떤 상태에서, 무엇을 기대하며 보냈는지 판단하는 일이다. 같은 ACK도 연결 수립, 데이터 확인, 종료 과정에서 의미가 다르고, 응답이 없다는 증상도 DNS 질의 실패·TCP 연결 실패·TLS 인증 실패·HTTP 처리 지연으로 갈린다.

프로토콜 분석은 필드를 많이 외우는 기술이 아니다. 먼저 대화의 양 끝과 방향을 식별하고, 메시지를 시간순으로 놓은 뒤, 명세가 정한 상태와 기대 응답에 맞는지 확인한다. 이 절은 TCP·UDP 위에서 DNS, HTTP와 TLS가 어떻게 이어지는지를 동일한 읽기법으로 설명한다.

프로토콜 분석: 필드·상태·시간·방향을 규칙과 대조한다

프로토콜 분석은 포착한 메시지의 필드, 대화 상태, 시간간격과 방향을 해당 프로토콜의 형식·순서·오류 처리 규칙과 대조하여 정상 동작과 위반·실패 경계를 판단하는 일이다. 앞 절의 참조모델·PDU·전달경계를 바탕으로 실제 대화 상태를 읽는다.

분석 결과는 정상/비정상 한 단어가 아니라 다음 네 문장으로 남긴다.

  1. 관찰: 어느 지점·방향·시간에 어떤 원시 필드가 보였다.
  2. 기대: 현재 상태에서 명세상 어떤 다음 메시지나 상태가 기대된다.
  3. 차이: 실제 메시지·시간·반복이 기대와 어떻게 달랐다.
  4. 한계: 암호화·포착 누락·내부 상태처럼 이 증거만으로 확인할 수 없는 것이 있다.

전체에서 어디인가: 이름에서 보호된 응답까지

사용자가 https://service.example 주소를 지정하면 DNS로 사용할 주소를 찾고, 대표 TCP 경로에서 연결·순서·확인·윈도·재전송 상태를 만든다. 그 바이트 흐름 위의 TLS 합의·인증이 보호채널을 제공하고 HTTP가 메서드·대상·필드·상태·콘텐츠 의미를 주고받는다. DNS 캐시와 질의, TCP 수립과 종료를 각각 실제 대화로 확인한다. DNS의 UDP/TCP는 실제 포착을 따르며, 아래 HTTP/3의 QUIC 경계는 이 대표 TCP 경로와 구분한다.

이 그림은 HTTPS의 대표 경로다. 모든 HTTP가 반드시 TCP를 사용한다는 뜻은 아니다. HTTP/3은 QUIC 위에서 HTTP 의미를 전달한다. 반대로 DNS도 한 전송방식으로 고정해 추측하지 않고 실제 캡처의 전송 프로토콜과 포트를 확인한다.

먼저 알아둘 것

프로토콜은 메시지 형식뿐 아니라 순서·시간·오류 처리의 약속이며, 송신 측은 상위 PDU를 아래 계층에 캡슐화하고 수신 측은 역순으로 해석하고, 이름·네트워크 주소·링크 주소·포트는 서로 다른 대상을 구별한다. 시간초과는 기다림을 끝내는 정책이고 재시도는 새 시도이므로, 중복 실행이 안전한지는 별도의 멱등성 조건을 확인해야 한다. 이 기초는 앞의 프로토콜·계층·주소·이름·경로, 시간초과·재시도·멱등성과 부분실패, 참조모델·캡슐화·Ethernet·IPv6 전달 경계에서 배웠다.

1. TCP와 UDP: 종단 프로그램 사이 전달방식이 다르다

TCP: 상태를 가진 신뢰 가능한 바이트 스트림

전송 제어 프로토콜(Transmission Control Protocol, TCP)은 두 종단의 포트 사이에 연결 상태를 만들고, 순서번호·확인응답·재전송·흐름제어를 사용해 신뢰 가능한 순서 있는 바이트 스트림을 제공하는 전송 프로토콜이다. 바이트 스트림은 응용이 보낸 메시지 경계를 보존한다는 뜻이 아니다. 한 번 보낸 데이터가 여러 TCP 세그먼트로 나뉘거나 여러 번의 쓰기가 한 읽기로 보일 수 있으므로 응용 프로토콜이 자기 메시지 경계를 정의해야 한다.

포트 번호는 한 호스트 안에서 전송 접점을 구별하는 값이다. 양 끝 IP 주소와 포트의 네 값, 즉 출발 IP·출발 포트·목적 IP·목적 포트를 4-tuple(네 값 묶음)이라고 한다. TCP 안에서는 이 묶음과 방향으로 대화 후보를 구별한다. 주소변환(Network Address Translation, NAT)은 네트워크 경계에서 관찰되는 IP 주소나 포트 값을 바꾸는 기능이다. NAT·중계 전후에는 같은 대화의 4-tuple이 달라질 수 있으므로 포착 위치와 변환 기록을 함께 본다.

순서번호는 TCP 바이트 흐름의 위치를 나타내고, 확인번호는 수신자가 다음에 기대하는 순서번호를 누적해 알린다. TCP 머리의 Window는 수신자가 받아들일 여유를 알리는 수신 윈도다. 혼잡 윈도는 네트워크 혼잡을 통제하려고 송신자가 내부에 유지하는 제한이며 TCP 머리 필드로 직접 전송되지 않는다.

TCP 머리는 다섯 질문으로 읽는다

질문핵심 필드해석
어느 프로그램 사이인가Source Port, Destination Port방향과 종단 접점 후보를 구별
바이트 흐름의 어디인가Sequence Number이 세그먼트 데이터의 시작 위치를 추적
어디까지 받았는가Acknowledgment Number, ACK다음 기대 위치와 수신 확인 범위를 추적
상태를 어떻게 바꾸는가SYN, FIN, RST 등 제어 비트연결 수립·정상 종료·즉시 중단의 사건
얼마나 더 받을 수 있는가Window수신 측이 광고한 흐름제어 여유

Checksum, Data Offset, Options 같은 필드도 중요하지만 목적에 맞게 연다. 분석기가 표시한 relative sequence number는 보기 쉽게 기준을 바꾼 값일 수 있으므로 원시 순서번호와 구분한다. ACK라는 말도 제어 비트와 확인번호를 함께 가리킬 수 있어 답안에는 어느 쪽인지 적는다.

연결 수립과 종료: 번호보다 상태 전이를 읽는다

TCP 수립은 양쪽 초기 번호와 상태를 맞춘다 · 상태 따라가기

클라이언트가 초기 번호 x로 SYN을 보내 수립을 시작한다. 모든 단계에서 클라이언트·서버의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.

TCP 수립은 양쪽 초기 번호와 상태를 맞춘다

넓은 화면과 모바일에서 같은 관계를 각각의 배치로 읽을 수 있습니다.

TCP 수립은 양쪽 초기 번호와 상태를 맞춘다클라이언트 SYN, 서버 SYN+ACK, 클라이언트 ACK의 대표 수립 순서다. x와 y는 서로 다른 방향의 초기 번호이며 ACK는 다음 기대 위치를 알린다. 연결 수립이 TLS·HTTP·업무 성공을 증명하지 않는다. SYN, seq=x SYN+ACK, seq=y, ack=x+1 ACK, ack=y+1클라이언트CLOSED서버LISTEN양쪽 ESTABLISHED: SYN은 순서번호 공간 1을 소비한다.

클라이언트 SYN, 서버 SYN+ACK, 클라이언트 ACK의 대표 수립 순서다. x와 y는 서로 다른 방향의 초기 번호이며 ACK는 다음 기대 위치를 알린다. 연결 수립이 TLS·HTTP·업무 성공을 증명하지 않는다.

TCP 수립: 초기 번호와 상태클라이언트 CLOSED와 서버 LISTEN에서 SYN seq=x, SYN+ACK seq=y ack=x+1, ACK ack=y+1의 세 방향을 실제 생명선과 화살표로 보존한다. 양쪽 ESTABLISHED이며 SYN은 순서번호 공간 1을 소비한다. TLS·HTTP·업무 성공과는 다르다.클라이언트CLOSED서버LISTENSYN, seq=xSYN+ACK, seq=y,ack=x+1ACK, ack=y+1양쪽 ESTABLISHEDSYN은 순서번호 공간 1을소비수립 ≠ TLS·HTTP·업무성공

이 예의 조건

  • 클라이언트 SYN, 서버 SYN+ACK, 클라이언트 ACK의 대표 수립 순서다. x와 y는 서로 다른 방향의 초기 번호이며 ACK는 다음 기대 위치를 알린다. 연결 수립이 TLS·HTTP·업무 성공을 증명하지 않는다.
  • 클라이언트 CLOSED와 서버 LISTEN에서 SYN seq=x, SYN+ACK seq=y ack=x+1, ACK ack=y+1의 세 방향을 실제 생명선과 화살표로 보존한다. 양쪽 ESTABLISHED이며 SYN은 순서번호 공간 1을 소비한다. TLS·HTTP·업무 성공과는 다르다.
  • 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
SYN x

클라이언트가 초기 번호 x로 SYN을 보내 수립을 시작한다.

  • 클라이언트: SYN_SENT·seq x
  • 서버: SYN 수신 전
  • SYN은 번호를 하나 소비한다.
SYN-ACK y

서버는 초기 번호 y와 ack x+1로 응답한다.

  • 클라이언트: 응답 수신 대기
  • 서버: SYN_RCVD·y,x+1
  • 양쪽 초기 번호를 서로 확인한다.
ACK y+1

클라이언트가 y+1을 확인하면 서버도 수립을 확인한다.

  • 클라이언트: 수립·ACK y+1
  • 서버: 최종 ACK 뒤 수립
  • 연결 수립은 TLS·HTTP·업무 성공이 아니다.

TCP 수립은 양쪽 초기 번호와 상태를 맞춘다 · 상태 따라가기

클라이언트가 초기 번호 x로 SYN을 보내 수립을 시작한다. 모든 단계에서 클라이언트·서버의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.

TCP 수립은 양쪽 초기 번호와 상태를 맞춘다

넓은 화면과 모바일에서 같은 관계를 각각의 배치로 읽을 수 있습니다.

TCP 수립은 양쪽 초기 번호와 상태를 맞춘다클라이언트 SYN, 서버 SYN+ACK, 클라이언트 ACK의 대표 수립 순서다. x와 y는 서로 다른 방향의 초기 번호이며 ACK는 다음 기대 위치를 알린다. 연결 수립이 TLS·HTTP·업무 성공을 증명하지 않는다. SYN, seq=x SYN+ACK, seq=y, ack=x+1 ACK, ack=y+1클라이언트CLOSED서버LISTEN양쪽 ESTABLISHED: SYN은 순서번호 공간 1을 소비한다.

클라이언트 SYN, 서버 SYN+ACK, 클라이언트 ACK의 대표 수립 순서다. x와 y는 서로 다른 방향의 초기 번호이며 ACK는 다음 기대 위치를 알린다. 연결 수립이 TLS·HTTP·업무 성공을 증명하지 않는다.

TCP 수립: 초기 번호와 상태클라이언트 CLOSED와 서버 LISTEN에서 SYN seq=x, SYN+ACK seq=y ack=x+1, ACK ack=y+1의 세 방향을 실제 생명선과 화살표로 보존한다. 양쪽 ESTABLISHED이며 SYN은 순서번호 공간 1을 소비한다. TLS·HTTP·업무 성공과는 다르다.클라이언트CLOSED서버LISTENSYN, seq=xSYN+ACK, seq=y,ack=x+1ACK, ack=y+1양쪽 ESTABLISHEDSYN은 순서번호 공간 1을소비수립 ≠ TLS·HTTP·업무성공

이 예의 조건

  • 클라이언트 SYN, 서버 SYN+ACK, 클라이언트 ACK의 대표 수립 순서다. x와 y는 서로 다른 방향의 초기 번호이며 ACK는 다음 기대 위치를 알린다. 연결 수립이 TLS·HTTP·업무 성공을 증명하지 않는다.
  • 클라이언트 CLOSED와 서버 LISTEN에서 SYN seq=x, SYN+ACK seq=y ack=x+1, ACK ack=y+1의 세 방향을 실제 생명선과 화살표로 보존한다. 양쪽 ESTABLISHED이며 SYN은 순서번호 공간 1을 소비한다. TLS·HTTP·업무 성공과는 다르다.
  • 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
SYN x

클라이언트가 초기 번호 x로 SYN을 보내 수립을 시작한다.

  • 클라이언트: SYN_SENT·seq x
  • 서버: SYN 수신 전
  • SYN은 번호를 하나 소비한다.
SYN-ACK y

서버는 초기 번호 y와 ack x+1로 응답한다.

  • 클라이언트: 응답 수신 대기
  • 서버: SYN_RCVD·y,x+1
  • 양쪽 초기 번호를 서로 확인한다.
ACK y+1

클라이언트가 y+1을 확인하면 서버도 수립을 확인한다.

  • 클라이언트: 수립·ACK y+1
  • 서버: 최종 ACK 뒤 수립
  • 연결 수립은 TLS·HTTP·업무 성공이 아니다.

양방향의 전송 종료는 각각 확인한다 · 상태 따라가기

한 방향의 전송을 끝내는 FIN을 보낸다. 모든 단계에서 먼저 닫는 쪽·반대 방향의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.

양방향의 전송 종료는 각각 확인한다

넓은 화면과 모바일에서 같은 관계를 각각의 배치로 읽을 수 있습니다.

양방향의 전송 종료는 각각 확인한다한 방향 FIN과 ACK, 반대 방향 FIN과 ACK를 나눈 대표 종료 예다. SYN·FIN은 순서번호 공간 하나를 소비한다. ACK와 FIN의 결합이나 재전송으로 실제 세그먼트 수가 바뀔 수 있어 네 줄을 보편 판정조건으로 삼지 않는다. FIN: 이 방향 종료 ACK FIN: 반대 방향 종료 ACK클라이언트ESTABLISHED서버ESTABLISHEDTIME-WAIT 등의 상태를 거쳐 종료한다. RST는 즉시 중단이다.

한 방향 FIN과 ACK, 반대 방향 FIN과 ACK를 나눈 대표 종료 예다. SYN·FIN은 순서번호 공간 하나를 소비한다. ACK와 FIN의 결합이나 재전송으로 실제 세그먼트 수가 바뀔 수 있어 네 줄을 보편 판정조건으로 삼지 않는다.

TCP 종료: 양 방향을 각각 확인양쪽 ESTABLISHED에서 클라이언트 FIN과 서버 ACK, 반대 방향 서버 FIN과 클라이언트 ACK의 네 방향을 보존한다. ACK/FIN 결합과 재전송으로 실제 세그먼트 수가 바뀔 수 있으며 TIME-WAIT 등의 상태와 RST 즉시 중단을 구분한다.클라이언트연결 수립완료서버연결 수립완료FIN: 이 방향 종료ACKFIN: 반대 방향 종료ACKTIME-WAIT 등의 상태를거쳐 종료RST는 즉시 중단ACK·FIN 결합·재전송으로실제 세그먼트 수가달라짐

이 예의 조건

  • 한 방향 FIN과 ACK, 반대 방향 FIN과 ACK를 나눈 대표 종료 예다. SYN·FIN은 순서번호 공간 하나를 소비한다. ACK와 FIN의 결합이나 재전송으로 실제 세그먼트 수가 바뀔 수 있어 네 줄을 보편 판정조건으로 삼지 않는다.
  • 양쪽 ESTABLISHED에서 클라이언트 FIN과 서버 ACK, 반대 방향 서버 FIN과 클라이언트 ACK의 네 방향을 보존한다. ACK/FIN 결합과 재전송으로 실제 세그먼트 수가 바뀔 수 있으며 TIME-WAIT 등의 상태와 RST 즉시 중단을 구분한다.
  • 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
첫 FIN

한 방향의 전송을 끝내는 FIN을 보낸다.

  • 먼저 닫는 쪽: 송신 종료 요청
  • 반대 방향: 수신 FIN
  • 양방향 전체 종료가 아직 아니다.
첫 ACK

반대편이 첫 FIN을 확인하되 자기 방향 전송은 남을 수 있다.

  • 먼저 닫는 쪽: FIN 확인받음
  • 반대 방향: 자기 방향 유지
  • 반쪽 종료와 전체 종료를 구별한다.
반대 FIN

반대 방향도 끝나면 별도의 FIN을 보낸다.

  • 먼저 닫는 쪽: 반대 FIN 수신
  • 반대 방향: 송신 종료 요청
  • 두 방향의 종료 확인은 별개다.
최종 ACK

남은 FIN을 확인하여 종료 조건으로 이어진다.

  • 먼저 닫는 쪽: 반대 FIN ACK
  • 반대 방향: 확인 수신
  • 동시 종료·패킷 합침으로 실제 패킷 수는 달라질 수 있다.

양방향의 전송 종료는 각각 확인한다 · 상태 따라가기

한 방향의 전송을 끝내는 FIN을 보낸다. 모든 단계에서 먼저 닫는 쪽·반대 방향의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.

양방향의 전송 종료는 각각 확인한다

넓은 화면과 모바일에서 같은 관계를 각각의 배치로 읽을 수 있습니다.

양방향의 전송 종료는 각각 확인한다한 방향 FIN과 ACK, 반대 방향 FIN과 ACK를 나눈 대표 종료 예다. SYN·FIN은 순서번호 공간 하나를 소비한다. ACK와 FIN의 결합이나 재전송으로 실제 세그먼트 수가 바뀔 수 있어 네 줄을 보편 판정조건으로 삼지 않는다. FIN: 이 방향 종료 ACK FIN: 반대 방향 종료 ACK클라이언트ESTABLISHED서버ESTABLISHEDTIME-WAIT 등의 상태를 거쳐 종료한다. RST는 즉시 중단이다.

한 방향 FIN과 ACK, 반대 방향 FIN과 ACK를 나눈 대표 종료 예다. SYN·FIN은 순서번호 공간 하나를 소비한다. ACK와 FIN의 결합이나 재전송으로 실제 세그먼트 수가 바뀔 수 있어 네 줄을 보편 판정조건으로 삼지 않는다.

TCP 종료: 양 방향을 각각 확인양쪽 ESTABLISHED에서 클라이언트 FIN과 서버 ACK, 반대 방향 서버 FIN과 클라이언트 ACK의 네 방향을 보존한다. ACK/FIN 결합과 재전송으로 실제 세그먼트 수가 바뀔 수 있으며 TIME-WAIT 등의 상태와 RST 즉시 중단을 구분한다.클라이언트연결 수립완료서버연결 수립완료FIN: 이 방향 종료ACKFIN: 반대 방향 종료ACKTIME-WAIT 등의 상태를거쳐 종료RST는 즉시 중단ACK·FIN 결합·재전송으로실제 세그먼트 수가달라짐

이 예의 조건

  • 한 방향 FIN과 ACK, 반대 방향 FIN과 ACK를 나눈 대표 종료 예다. SYN·FIN은 순서번호 공간 하나를 소비한다. ACK와 FIN의 결합이나 재전송으로 실제 세그먼트 수가 바뀔 수 있어 네 줄을 보편 판정조건으로 삼지 않는다.
  • 양쪽 ESTABLISHED에서 클라이언트 FIN과 서버 ACK, 반대 방향 서버 FIN과 클라이언트 ACK의 네 방향을 보존한다. ACK/FIN 결합과 재전송으로 실제 세그먼트 수가 바뀔 수 있으며 TIME-WAIT 등의 상태와 RST 즉시 중단을 구분한다.
  • 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
첫 FIN

한 방향의 전송을 끝내는 FIN을 보낸다.

  • 먼저 닫는 쪽: 송신 종료 요청
  • 반대 방향: 수신 FIN
  • 양방향 전체 종료가 아직 아니다.
첫 ACK

반대편이 첫 FIN을 확인하되 자기 방향 전송은 남을 수 있다.

  • 먼저 닫는 쪽: FIN 확인받음
  • 반대 방향: 자기 방향 유지
  • 반쪽 종료와 전체 종료를 구별한다.
반대 FIN

반대 방향도 끝나면 별도의 FIN을 보낸다.

  • 먼저 닫는 쪽: 반대 FIN 수신
  • 반대 방향: 송신 종료 요청
  • 두 방향의 종료 확인은 별개다.
최종 ACK

남은 FIN을 확인하여 종료 조건으로 이어진다.

  • 먼저 닫는 쪽: 반대 FIN ACK
  • 반대 방향: 확인 수신
  • 동시 종료·패킷 합침으로 실제 패킷 수는 달라질 수 있다.

SYN은 양쪽이 초기 순서번호와 선택사항을 맞추며 연결상태를 만드는 사건이다. SYN과 FIN은 순서번호 공간 하나를 소비하므로 위 예의 확인번호가 1 증가한다. 데이터 확인번호는 마지막으로 본 패킷 번호가 아니라 다음에 기대하는 바이트 위치다.

종료는 양 방향을 독립적으로 닫을 수 있어 흔히 네 세그먼트로 그리지만, ACK와 FIN이 합쳐지거나 재전송될 수 있다. 따라서 실제 캡처가 언제나 정확히 네 줄이어야 한다고 판정하지 않는다. RST는 정상 종료 교환과 달리 연결을 즉시 중단하는 신호이므로 앞선 상태와 송신 주체를 확인한다.

FIN은 한 방향의 끝이다. 클라이언트가 FIN을 보냈어도 서버는 자기 방향을 닫기 전까지 남은 데이터를 보낼 수 있다. 이를 반닫힘(half-close)이라고 한다. 예를 들어 클라이언트가 seq 7001부터 데이터 300바이트와 FIN을 함께 보내고 그 앞까지 공백이 없다면 서버의 다음 기대번호는 7001+300+1=7302다. 데이터 없는 순수 ACK는 순서번호 공간을 소비하지 않는다. 이 확인은 바이트와 종료 신호의 수신이며 응용의 업무 처리 완료를 뜻하지 않는다.

손실을 복구한다: 순서·누적 ACK·재전송 타이머

TCP 재전송은 보낸 순서범위가 확인되지 않았다고 판단해 같은 바이트 범위를 다시 보내는 동작이다. 송신자는 확인되지 않은 바이트를 보관하고, 수신자는 순서번호로 다음 기대 위치를 판단한다. 중간 바이트가 빠지면 이후 데이터가 도착해도 같은 다음 기대번호를 반복해서 알릴 수 있다. 송신자는 재전송 시간초과 또는 손실을 시사하는 ACK 패턴에 따라 누락 데이터를 다시 보낸다. 같은 순서범위가 다시 나타났다고 모두 네트워크 중복은 아니며 캡처 중복 가능성도 함께 본다.

재전송 시간초과(Retransmission Timeout, RTO)는 고정 숫자 하나가 아니다. 왕복시간(Round-Trip Time, RTT)은 한 지점에서 보낸 사건과 그에 대응하는 응답·확인이 같은 지점에 돌아오기까지의 경과시간이다. RFC 6298의 기본 구조는 측정한 RTT로 평활 왕복시간과 변동을 추정하고 RTO = 평활 RTT + 변동 여유로 잡으며, 타임아웃이 반복되면 기다림을 늘린다. 너무 짧으면 아직 오는 패킷을 잃었다고 오판하고, 너무 길면 실제 손실 회복이 늦다.

흐름제어에서는 수신자가 Window로 받을 여유를 광고한다. 수신 윈도가 작거나 0에 가까우면 수신 응용의 소비·버퍼 상태를 의심하며, 이를 곧 네트워크 혼잡으로 단정하지 않는다.

원시 Window와 계산된 바이트 윈도를 구별한다. Window 필드는 16비트지만 RFC 7323 §§2.2–2.3의 Window Scale을 합의한 연결에서는 각 방향의 합의된 shift를 적용한다. SYN 비트가 없는 세그먼트에서 원시 Window가 900이고 그 값을 광고한 방향의 shift가 3이면 수신 여유는 900×2³=7200바이트다. SYN·SYN+ACK의 Window에는 이 확대를 적용하지 않는다. 분석기가 이미 계산한 윈도를 표시한다면 다시 곱하지 않으며, 수립 패킷이 빠져 확대 조건을 모르면 원시 값만으로 정확한 rwnd를 확정하지 않는다.

순서번호를 실제 바이트로 따라간다

송신자의 초기 SYN 번호를 1000으로 정하면 SYN이 번호 하나를 사용하므로 첫 데이터는 1001에서 시작한다. 아래는 설명을 위해 수신자가 각 사건 뒤 즉시 누적 ACK를 보내고, 순서 밖 데이터도 보관하는 예다. 구간 [a,b)는 a부터 b−1까지의 바이트를 뜻하며 실제 ACK 빈도는 구현·지연 ACK 정책에 따라 달라질 수 있다.

수신 사건바이트 범위·길이연속 수신 상태다음 기대번호 ACK
첫 데이터 도착[1001,1501), 500바이트1001~1500 보유1501
다음 데이터가 아직 안 옴[1501,2001), 500바이트 공백공백 전까지만 연속1501 유지
뒤 데이터가 먼저 도착[2001,2501), 500바이트2001~2500은 따로 보관1501 반복
공백 데이터 재전송 도착[1501,2001), 500바이트1001~2500 연속으로 연결2501
같은 공백 범위가 또 도착[1501,2001), 중복 500바이트새 바이트 없음2501 유지

ACK 2501은 이 방향의 2500번 바이트까지 연속 수신했다는 뜻이다. 응용이 이 1500바이트를 읽거나 업무 처리를 끝냈다는 뜻은 아니다. 한 번의 반복 ACK만으로 재전송 알고리즘이 반드시 즉시 동작한다고 단정할 수 없으며, 처음 공백이 생긴 이유도 손실·순서 역전·관찰 누락을 추가로 대조해야 한다.

혼잡을 통제한다: cwnd는 패킷 필드가 아니라 송신자의 내부 제한이다

네트워크 혼잡은 일정 구간의 도착 부하가 병목의 처리능력을 넘어 대기열·지연·폐기 가능성이 커지는 상태다. 혼잡 윈도(congestion window, cwnd)는 네트워크가 감당할 수 있다고 송신자가 추정해, 확인 없이 전송 중일 수 있는 데이터 양을 제한하는 내부 상태다. 수신 윈도(receive window, rwnd)는 수신자가 TCP 머리로 광고하지만 cwnd와 slow start threshold(ssthresh)는 송신기 내부값이다. 실제 전송 가능량은 개념적으로 min(rwnd, cwnd)와 아직 확인되지 않은 바이트의 관계로 제한된다.

RFC 5681의 고전적 손실 기반 흐름은 다음과 같다.

  1. Slow Start: cwnd가 작을 때 ACK를 받으며 빠르게 전송범위를 늘려 가용 용량을 탐색한다.
  2. Congestion Avoidance: ssthresh 부근 이후에는 증가를 완만하게 하여 혼잡을 피한다.
  3. Fast Retransmit: 같은 누락을 시사하는 중복 ACK가 세 번 도착하면 RTO를 기다리지 않고 재전송한다.
  4. Fast Recovery: 손실 뒤 cwnd·ssthresh를 줄이고 ACK 진행을 보며 회복한다.
  5. Timeout: 더 심한 손실 신호로 보고 전송범위를 크게 줄이며 RTO를 지수적으로 늘린다.

현행 대표 알고리즘인 CUBIC은 한 번의 손실 전 윈도 크기를 기준으로 시간을 따라 오목하게 접근하고 이후 볼록하게 새 용량을 탐색하며, 혼잡 사건에는 곱셈식으로 윈도를 줄인다. 이는 대표 구현 선택이지 모든 TCP가 같은 알고리즘·상수를 쓴다는 뜻이 아니다. 패킷에는 cwnd가 없으므로 캡처만 보고 정확한 cwnd를 측정했다고 쓰지 않고 송신 호스트 지표와 함께 확인한다.

두 제한을 숫자로 적용해 보자. 이미 바이트 단위로 해석한 rwnd가 6000, 호스트 내부에서 확인한 cwnd가 4000이고, 보냈지만 아직 확인받지 않은 데이터가 2500바이트라고 하자. 다른 제한과 번호 경계 문제는 제외한 이 예에서 전송 중일 수 있는 상한은 min(6000,4000)=4000, 추가 전송 여유는 4000−2500=1500바이트다.

직접 풀어 보기 — 자체 조건 변경

확인 문제로 cwnd만 8000으로 늘리면 추가 여유는 얼마인가?

수신·혼잡 제한과 미확인 바이트

작은 제한이 rwnd 6000으로 바뀌므로 6000−2500=3500바이트다. 5500이라는 오답은 수신자의 여유를 무시한 것이고, 8000이라는 오답은 이미 전송 중인 바이트까지 다시 여유로 센 것이다. 수신·혼잡 제한의 주체와 미확인 바이트를 각각 다시 대조한다.

UDP: 연결 상태 없이 데이터그램 경계를 전달한다

사용자 데이터그램 프로토콜(User Datagram Protocol, UDP)은 출발·목적 포트, 길이와 체크섬의 작은 머리를 사용해 독립 데이터그램을 전달하는 전송 프로토콜이다. UDP 자체는 연결수립, 순서 재배열, 전달 확인, 재전송과 혼잡제어 상태를 제공하지 않는다. 그래서 UDP는 무조건 빠르다가 아니라 필요한 보장을 응용이 어디에서 책임지는지 묻는다.

UDP는 한 데이터그램의 경계를 보존한다. 수신자는 도착한 데이터그램 하나를 읽지만, 손실·중복·순서 역전 가능성을 응용 프로토콜이 고려해야 한다. 체크섬이 있다고 전달 성공이나 중복 방지가 보장되는 것도 아니다. 포착에서 요청은 있으나 응답이 없다면 서버 미응답, 역방향 손실, 정책 차단과 포착지점 누락을 구분한다.

TCP와 UDP를 같은 축으로 비교한다

축TCPUDP
전달 모습순서 있는 바이트 스트림독립 데이터그램
시작 상태연결 수립 상태교환전송계층 연결수립 없음
신뢰성 기능순서·누적 ACK·재전송자체 확인·재전송 없음
제어수신 흐름제어와 혼잡제어자체 연결 상태·윈도 없음
경계응용 메시지 경계 미보존데이터그램 경계 보존
분석 중심seq/ack, 플래그, 윈도, RTT, 재전송양 끝 포트, 길이, 데이터그램 짝과 응용 규칙

선택은 속도 한 축이 아니다. 메시지 경계, 손실·순서·중복 처리, 지연 민감도, 혼잡에 대한 책임과 응용 구현 복잡성을 함께 본다.

2. DNS: 이름을 분산된 기록에서 해석한다

도메인 이름 시스템(Domain Name System, DNS)은 계층적인 도메인 이름공간과 그 정보를 나누어 관리하는 이름서버, 질의를 수행하는 해석기(resolver)를 사용해 이름에 관한 자원 레코드를 찾는 분산 데이터 체계다. 해석기는 응용의 질문을 DNS 질의로 만들고, 이름서버는 자신이 가진 정보·위임·응답 상태에 따라 답한다.

자원 레코드(Resource Record, RR)는 이름에 관한 형식화된 정보 단위이며 이름, 유형, 클래스, 생존시간(Time to Live, TTL), 데이터 길이와 데이터로 표현된다. 여기서 DNS TTL은 캐시된 레코드를 얼마 동안 재사용할 수 있는지 나타내는 시간 경계이고 IPv6 Hop Limit과 다른 개념이다. 이 절은 확인된 양의 레코드 캐시만 다루며 DNS negative caching은 확보한 근거 범위에서 제외한다.

DNS는 UDP와 TCP를 모두 사용한다. 포착한 응답의 TC 비트가 잘림(truncation)을 나타내면 resolver가 TCP로 다시 질의하는 흐름을 고려한다. 그러나 TCP는 잘린 응답을 재시도할 때만 사용하는 방식이 아니다. RFC 7766 §5에 따라 처음부터 TCP로 질의할 수 있고 이미 열린 연결을 재사용할 수도 있다. 따라서 분석에서는 실제 질의·응답의 전송방식을 확인하며, 이 절은 연결 풀이나 타임아웃 운영정책까지 다루지는 않는다.

이름 해석: 질문을 권한 있는 정보 쪽으로 좁혀 간다

캐시 적중과 권한 질의는 서로 다른 경로다 · 상태 따라가기

현재 이름·질의종류의 유효 캐시가 있는지 확인한다. 모든 단계에서 질의·캐시·위임·권한 응답의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.

캐시 적중과 권한 질의는 서로 다른 경로다

넓은 화면과 모바일에서 같은 관계를 각각의 배치로 읽을 수 있습니다.

캐시 적중과 권한 질의는 서로 다른 경로다응용과 재귀 해석기, 루트 쪽·상위 도메인·권한 이름서버의 다섯 역할을 보여 준다. 유효한 양의 캐시 답이면 바로 반환하고, 없으면 대표 위임 경로를 따라 질의·응답 후 TTL에 따라 캐시한다. ALT의 두 조건은 대안이며 연속 실행이 아니다. UDP/TCP는 실제 포착을 따르고 negative caching과 현대 DNS-over-TCP 운영 세부를 추가하지 않는다.ALT[캐시에 유효한 양의 답이 있음][유효한 답이 없음: 대표 계층 질의] 레코드 질의 유효 답 반환 질의 다음 위임 질의 권한 위임 질의 자원 레코드 캐시 후 반환응용재귀 해석기루트 쪽상위 도메인권한 서버응답·TTL에 따라 양의 레코드 캐시대표 경로: 캐시·정책·병렬 질의에 따라 모든 단계를 매번 거치지는 않는다.

응용과 재귀 해석기, 루트 쪽·상위 도메인·권한 이름서버의 다섯 역할을 보여 준다. 유효한 양의 캐시 답이면 바로 반환하고, 없으면 대표 위임 경로를 따라 질의·응답 후 TTL에 따라 캐시한다. ALT의 두 조건은 대안이며 연속 실행이 아니다. UDP/TCP는 실제 포착을 따르고 negative caching과 현대 DNS-over-TCP 운영 세부를 추가하지 않는다.

DNS: 캐시 적중 또는 대표 위임응용→재귀 해석기 질의 뒤 ALT 두 조건을 분리한다. 유효한 양의 캐시 답이면 반환한다. 유효한 답이 없으면 같은 재귀 해석기가 루트 쪽·상위 도메인·권한 서버에 각각 질의하고 다음 위임·권한 위임·자원 레코드를 받으며 응답·TTL에 따라 양의 레코드를 캐시해 응용에 반환한다. 반복된 역할 이름은 동일 역할의 계속이며 ALT는 연속 실행이 아니다.응용재귀해석기레코드 질의ALT: 두 조건 중 하나[캐시에 유효한 양의 답이있음]유효 답 반환[유효한 답이 없음: 대표계층 질의]재귀해석기루트 쪽상위도메인권한 서버응용질의다음 위임질의권한 위임질의자원 레코드응답·TTL에 따라 양의레코드 캐시캐시 후 반환반복 이름은 동일 역할의계속ALT 두 조건은 대안이며연속 실행 아님캐시·정책·병렬 질의에따라 모든 단계를 매번거치지는 않음

이 예의 조건

  • 응용과 재귀 해석기, 루트 쪽·상위 도메인·권한 이름서버의 다섯 역할을 보여 준다. 유효한 양의 캐시 답이면 바로 반환하고, 없으면 대표 위임 경로를 따라 질의·응답 후 TTL에 따라 캐시한다. ALT의 두 조건은 대안이며 연속 실행이 아니다. UDP/TCP는 실제 포착을 따르고 negative caching과 현대 DNS-over-TCP 운영 세부를 추가하지 않는다.
  • 응용→재귀 해석기 질의 뒤 ALT 두 조건을 분리한다. 유효한 양의 캐시 답이면 반환한다. 유효한 답이 없으면 같은 재귀 해석기가 루트 쪽·상위 도메인·권한 서버에 각각 질의하고 다음 위임·권한 위임·자원 레코드를 받으며 응답·TTL에 따라 양의 레코드를 캐시해 응용에 반환한다. 반복된 역할 이름은 동일 역할의 계속이며 ALT는 연속 실행이 아니다.
  • 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
같은 질문의 캐시 검사

현재 이름·질의종류의 유효 캐시가 있는지 확인한다.

  • 질의·캐시: 동일 질문·캐시 판정 전
  • 위임·권한 응답: 위임 질의 전
  • hit와 miss는 이 캐시 검사 시작점의 배타적인 대안이다.
유효 캐시 hit 대안

유효한 캐시가 있는 경우 그 결과로 답하고 이 경로를 끝낸다.

  • 질의·캐시: 캐시 응답
  • 위임·권한 응답: 추가 위임 질의 없음
  • 캐시 답변 후 반드시 모든 서버를 차례로 묻는 실행이 아니다.
별도 miss 대안

캐시 검사 시작점으로 재설정해 miss인 경우 root·TLD·권한 서버의 위임을 따른다.

  • 질의·캐시: 같은 질문·캐시 miss
  • 위임·권한 응답: root→TLD→권한
  • 앞 캐시 응답의 후속이 아니며 위임 응답과 최종 주소 응답을 구별한다.
miss 경로의 최종 응답

권한 응답을 질의자에게 반환하고 정한 유효기간 등 캐시 조건을 따른다.

  • 질의·캐시: 질문 결과 확인
  • 위임·권한 응답: 권한 근거·주소 응답
  • DNS 답을 얻은 것이 연결이나 업무 성공을 뜻하지 않는다.

캐시 적중과 권한 질의는 서로 다른 경로다 · 상태 따라가기

현재 이름·질의종류의 유효 캐시가 있는지 확인한다. 모든 단계에서 질의·캐시·위임·권한 응답의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.

캐시 적중과 권한 질의는 서로 다른 경로다

넓은 화면과 모바일에서 같은 관계를 각각의 배치로 읽을 수 있습니다.

캐시 적중과 권한 질의는 서로 다른 경로다응용과 재귀 해석기, 루트 쪽·상위 도메인·권한 이름서버의 다섯 역할을 보여 준다. 유효한 양의 캐시 답이면 바로 반환하고, 없으면 대표 위임 경로를 따라 질의·응답 후 TTL에 따라 캐시한다. ALT의 두 조건은 대안이며 연속 실행이 아니다. UDP/TCP는 실제 포착을 따르고 negative caching과 현대 DNS-over-TCP 운영 세부를 추가하지 않는다.ALT[캐시에 유효한 양의 답이 있음][유효한 답이 없음: 대표 계층 질의] 레코드 질의 유효 답 반환 질의 다음 위임 질의 권한 위임 질의 자원 레코드 캐시 후 반환응용재귀 해석기루트 쪽상위 도메인권한 서버응답·TTL에 따라 양의 레코드 캐시대표 경로: 캐시·정책·병렬 질의에 따라 모든 단계를 매번 거치지는 않는다.

응용과 재귀 해석기, 루트 쪽·상위 도메인·권한 이름서버의 다섯 역할을 보여 준다. 유효한 양의 캐시 답이면 바로 반환하고, 없으면 대표 위임 경로를 따라 질의·응답 후 TTL에 따라 캐시한다. ALT의 두 조건은 대안이며 연속 실행이 아니다. UDP/TCP는 실제 포착을 따르고 negative caching과 현대 DNS-over-TCP 운영 세부를 추가하지 않는다.

DNS: 캐시 적중 또는 대표 위임응용→재귀 해석기 질의 뒤 ALT 두 조건을 분리한다. 유효한 양의 캐시 답이면 반환한다. 유효한 답이 없으면 같은 재귀 해석기가 루트 쪽·상위 도메인·권한 서버에 각각 질의하고 다음 위임·권한 위임·자원 레코드를 받으며 응답·TTL에 따라 양의 레코드를 캐시해 응용에 반환한다. 반복된 역할 이름은 동일 역할의 계속이며 ALT는 연속 실행이 아니다.응용재귀해석기레코드 질의ALT: 두 조건 중 하나[캐시에 유효한 양의 답이있음]유효 답 반환[유효한 답이 없음: 대표계층 질의]재귀해석기루트 쪽상위도메인권한 서버응용질의다음 위임질의권한 위임질의자원 레코드응답·TTL에 따라 양의레코드 캐시캐시 후 반환반복 이름은 동일 역할의계속ALT 두 조건은 대안이며연속 실행 아님캐시·정책·병렬 질의에따라 모든 단계를 매번거치지는 않음

이 예의 조건

  • 응용과 재귀 해석기, 루트 쪽·상위 도메인·권한 이름서버의 다섯 역할을 보여 준다. 유효한 양의 캐시 답이면 바로 반환하고, 없으면 대표 위임 경로를 따라 질의·응답 후 TTL에 따라 캐시한다. ALT의 두 조건은 대안이며 연속 실행이 아니다. UDP/TCP는 실제 포착을 따르고 negative caching과 현대 DNS-over-TCP 운영 세부를 추가하지 않는다.
  • 응용→재귀 해석기 질의 뒤 ALT 두 조건을 분리한다. 유효한 양의 캐시 답이면 반환한다. 유효한 답이 없으면 같은 재귀 해석기가 루트 쪽·상위 도메인·권한 서버에 각각 질의하고 다음 위임·권한 위임·자원 레코드를 받으며 응답·TTL에 따라 양의 레코드를 캐시해 응용에 반환한다. 반복된 역할 이름은 동일 역할의 계속이며 ALT는 연속 실행이 아니다.
  • 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
같은 질문의 캐시 검사

현재 이름·질의종류의 유효 캐시가 있는지 확인한다.

  • 질의·캐시: 동일 질문·캐시 판정 전
  • 위임·권한 응답: 위임 질의 전
  • hit와 miss는 이 캐시 검사 시작점의 배타적인 대안이다.
유효 캐시 hit 대안

유효한 캐시가 있는 경우 그 결과로 답하고 이 경로를 끝낸다.

  • 질의·캐시: 캐시 응답
  • 위임·권한 응답: 추가 위임 질의 없음
  • 캐시 답변 후 반드시 모든 서버를 차례로 묻는 실행이 아니다.
별도 miss 대안

캐시 검사 시작점으로 재설정해 miss인 경우 root·TLD·권한 서버의 위임을 따른다.

  • 질의·캐시: 같은 질문·캐시 miss
  • 위임·권한 응답: root→TLD→권한
  • 앞 캐시 응답의 후속이 아니며 위임 응답과 최종 주소 응답을 구별한다.
miss 경로의 최종 응답

권한 응답을 질의자에게 반환하고 정한 유효기간 등 캐시 조건을 따른다.

  • 질의·캐시: 질문 결과 확인
  • 위임·권한 응답: 권한 근거·주소 응답
  • DNS 답을 얻은 것이 연결이나 업무 성공을 뜻하지 않는다.

이 그림은 역할을 설명하는 대표 흐름이다. 실제 해석기는 캐시·정책·병렬 질의에 따라 모든 단계를 매번 밟지 않을 수 있다. 분석할 때는 클라이언트가 누구에게 물었는가, 그 서버가 최종 답·위임·오류 중 무엇을 보냈는가, 같은 ID와 질문에 대한 응답인가, TTL 안의 캐시인지를 본다.

양의 주소 레코드를 10:00:00에 TTL 60초로 캐시했다고 하자. 다른 정책 조건을 제외하면 10:00:40의 같은 질문은 남은 20초 안이므로 그 레코드를 재사용할 수 있지만, 10:01:01에는 61초가 지나 만료했으므로 그 캐시만으로 답하면 안 된다. 그 사이 권한 이름서버의 주소가 바뀌어도 캐시가 매번 서버를 조회하는 것은 아니다. TTL 0인 레코드는 진행 중인 질의 처리에는 쓸 수 있지만 뒤의 별도 질의를 위해 캐시해 재사용하는 기록으로 두지 않는다(RFC 1035 §4.1.3). 이 시간 계산은 양의 레코드에 대한 것이며 오류 응답의 캐시 정책과 섞지 않는다.

직접 풀어 보기 — 양의 캐시 기록의 자체 조건 변경

같은 10:00:00 캐시 기록의 TTL만 30초로 바꾸면 10:00:40에 그 기록을 재사용할 수 있는가? 남은 시간 또는 경과시간을 근거로 답한다.

DNS TTL 계산과 단위 교정

TTL을 30초로 바꾸면 10:00:40은 만료 뒤다. Hop Limit처럼 라우터 하나마다 TTL을 1 줄여 계산하는 오답은 시간과 전달 횟수라는 서로 다른 단위를 섞은 것이다. DNS 정의와 양의 캐시를 다시 읽는다.

DNS 메시지는 머리와 네 구역으로 읽는다

부분핵심 관찰분석 질문
HeaderID, 질의/응답 구분, 동작·권한·잘림·재귀 관련 비트, 응답코드, 구역별 개수같은 대화인가, 답의 성격과 오류는 무엇인가
Question질의 이름·유형·클래스응용이 실제로 무엇을 물었는가
Answer질문에 대한 자원 레코드사용할 답과 TTL은 무엇인가
Authority권한·위임 관련 레코드다음에 어느 권한 정보를 따라갈까
Additional처리를 돕는 추가 레코드답을 과대해석하지 않고 질문과 관계를 확인했는가

ID만으로 장시간의 모든 DNS 대화를 구별하지 않는다. 양 끝 주소·포트, 전송방식, 질문 이름·유형과 근접 시간을 함께 맞춘다. 응답 없음은 DNS 서버 자체 원인으로 단정하지 않고 요청이 서버에 도착했는지와 응답이 클라이언트까지 왔는지를 포착지점별로 나눈다.

3. HTTP: 의미와 전송 문법을 분리해 읽는다

하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol, HTTP)은 자원에 대한 요청과 응답의 의미를 메서드, 대상, 필드, 상태코드와 콘텐츠로 표현하는 응용 프로토콜이다. 메서드는 요청의 의도, 상태코드는 처리 결과의 분류, 필드는 메시지에 관한 추가 제어정보를 나타낸다.

RFC 9110은 HTTP 버전들이 공유하는 의미를 정의한다. HTTP/1.1의 메시지 문법은 RFC 9112, HTTP/2의 이진 프레임과 스트림은 RFC 9113, HTTP/3가 QUIC에서 HTTP 의미를 전달하는 방식은 RFC 9114가 맡는다. 의미와 전송 문법을 분리하면 200 같은 상태 의미는 이어지면서도 패킷에서 보이는 모양이 버전별로 다른 이유를 설명할 수 있다.

HTTP/1.1 요청·응답은 시작줄→필드→콘텐츠 경계로 읽는다

요청                                              응답
[메서드 대상 HTTP-버전]                          [HTTP-버전 상태코드 사유]
[필드 이름: 값]                                  [필드 이름: 값]
...                                               ...
[빈 줄로 머리 구역 종료]                         [빈 줄로 머리 구역 종료]
[선택적 콘텐츠]                                  [선택적 콘텐츠]

먼저 메서드와 요청 대상을 보고 무엇을 하려 했는지 확인한다. 다음으로 Host 등 라우팅·표현·조건·인증에 관여하는 필드를 목적에 맞게 읽는다. 응답에서는 상태코드 계열과 콘텐츠 경계를 확인하고, 요청부터 첫 응답 바이트·완료까지 시간을 나눈다.

GET 같은 안전한 메서드는 요청한 자원의 상태를 바꾸는 의미를 의도하지 않고, 멱등 메서드는 같은 의도의 요청을 여러 번 적용해도 의도된 효과가 한 번과 같아야 한다. 그러나 전송 재시도가 업무 부작용까지 자동으로 안전하게 만드는 것은 아니다. 서버 구현과 인증·결제 같은 업무 의미를 함께 확인한다.

문법을 실제 값에 연결하면 다음처럼 읽는다. TLS가 있으면 복호화 가능한 관찰점이나 서버 로그에서 읽는 HTTP/1.1 교육 예이며, 표시된 줄 구분은 메시지의 줄 경계를 나타낸다.

요청                 응답
GET /status HTTP/1.1  HTTP/1.1 200 OK
Host: service.example Content-Length: 2
[빈 줄]              [빈 줄]
                     OK

요청의 GET은 자원을 가져오려는 메서드, /status는 요청 대상, Host는 대상 서비스 이름이다. 응답의 200은 성공 계열 상태코드이며 뒤의 OK는 사유 문구다. 빈 줄 뒤의 OK가 실제 콘텐츠이고, 콘텐츠 뒤에 별도 줄바꿈이 없다고 가정한 이 예의 영문 두 글자는 2바이트이므로 Content-Length: 2와 맞는다. 사유 문구와 콘텐츠는 위치와 역할이 다르다.

콘텐츠 길이는 글자 수가 아니라 바이트 수다. 위 GET의 200 응답에 Content-Type: text/plain; charset=utf-8을 쓰고 콘텐츠를 줄바꿈 없는 성공으로 바꾸면 두 글자지만 UTF-8에서는 6바이트다. Transfer-Encoding이 없는 이 조건에서는 Content-Length: 6이어야 선언 길이와 콘텐츠가 맞는다. 글자 수 2를 그대로 쓰면 메시지 경계가 틀어지며, 200이라는 상태만으로 올바른 응답이라고 판정할 수 없다. 실제 경계는 메서드·상태·전송 코딩도 함께 확인한다. 예를 들어 HEAD 응답과 204 응답에는 본문이 없고, 송신자는 Transfer-Encoding과 Content-Length를 함께 보내면 안 된다(RFC 9112 §§6.2–6.3).

직접 풀어 보기 — 자체 조건 변경

독립적으로 판정해 보자. 상태줄은 그대로 두고 콘텐츠를 FAIL, 길이를 4로 바꿨다고 하자. 업무의 정상 판정 기준이 콘텐츠 OK일 때 HTTP 상태와 업무 결과를 각각 판정하자.

HTTP 상태와 업무 기준 판정

업무의 정상 판정 기준이 콘텐츠 OK라면 HTTP 성공 계열 응답을 받은 사실은 확인했어도 정상 판정 기준은 충족하지 못했다. 200이면 업무 성공이라는 오답은 상태코드와 응용의 판정 규칙을 합친 결과다.

HTTP/1.1·2·3: 의미는 이어지고 운반방식은 달라진다

버전운반 모습분석 초점
HTTP/1.1시작줄과 필드 구역을 가진 메시지를 연결 위에서 전달메시지 경계, 필드, 상태, 연결 재사용과 시간
HTTP/2한 연결에서 여러 스트림의 이진 프레임으로 HTTP 메시지를 전달연결 하나를 요청 하나로 오해하지 않고 스트림 식별자(stream ID)와 프레임 순서 확인
HTTP/3QUIC 스트림 위에 HTTP 의미를 매핑TCP seq/ack 대신 QUIC 연결·스트림 관찰범위, 암호화로 보이는 증거 한계

HTTP/3의 기본 분석에서는 먼저 HTTP 의미를 QUIC 스트림 위에서 전달한다는 경계를 확인한다. QUIC 연결·스트림과 HTTP 메시지를 구별하고, TCP 순서번호를 그대로 적용하지 않는다. QUIC 손실복구와 QPACK 헤더 압축의 세부 동작은 이 기본 경계를 익힌 뒤 별도로 학습한다.

4. TLS 1.3과 PKIX: 보호채널과 인증근거를 나눈다

전송계층 보안(Transport Layer Security, TLS) 1.3은 통신 양 끝이 프로토콜 버전·암호 매개변수와 키를 합의하고, 선택한 인증방식으로 상대를 확인한 뒤 응용 데이터를 기밀성·무결성이 보호된 기록으로 교환하게 하는 프로토콜이다. 현행 명세인 RFC 9846은 RFC 8446을 폐기했다.

TLS 핸드셰이크는 보호채널에 쓸 매개변수·키·인증 상태를 합의하는 대화이고, TLS record는 합의한 키와 상태로 핸드셰이크 또는 응용 데이터를 보호해 운반하는 단위다. 모든 TLS 연결이 인증서만 사용하는 것은 아니다. 이 절의 대표 흐름은 웹에서 흔한 서버 인증서 기반 TLS 1.3이다.

공개키 기반구조 X.509(Public-Key Infrastructure using X.509, PKIX)는 인증서 발급자 관계와 경로 검증 규칙으로 공개키를 이름·주체와 연결해 신뢰를 판단하는 체계다. 인증서 파일이 존재하는 것과 현재 접속 대상에 유효하게 신뢰되는 것은 다르다.

서비스 신원검증(service identity verification)은 클라이언트가 신뢰할 수 있는 입력으로 얻은 reference identifier와 서버 인증서가 제시한 presented identifier를 적합한 유형의 규칙으로 비교하는 과정이다. RFC 5280의 인증경로 검증이 성공해도 이 일치검사가 실패하면 의도한 서비스로 인증하면 안 된다. 두 검증을 하나로 합치거나 인증서의 Common Name 문자열만 임의 비교하지 않는다.

TLS 1.3의 session resumption은 이전 연결에서 얻은 사전공유키(Pre-Shared Key, PSK)를 사용해 새 핸드셰이크 비용을 줄일 수 있다. 0-RTT(Zero Round-Trip Time) early data는 핸드셰이크 완료 전에 일부 응용 데이터를 보내 지연을 줄이지만 replay될 수 있으므로, 재실행되어도 안전하다고 별도 정책으로 확인한 요청에만 허용해야 한다. 암호화되었다는 이유만으로 replay 안전성이 생기지는 않는다.

인증서 기반 TLS 1.3: 합의→인증→완료→응용 데이터

TLS 보호의 시작과 양쪽 완료를 구분한다 · 상태 따라가기

클라이언트가 지원 조건과 key share로 수립을 제안한다. 모든 단계에서 클라이언트·서버·보호의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.

TLS 보호의 시작과 양쪽 완료를 구분한다

넓은 화면과 모바일에서 같은 관계를 각각의 배치로 읽을 수 있습니다.

TLS 보호의 시작과 양쪽 완료를 구분한다0-RTT와 추가 클라이언트 인증을 제외한 인증서 기반 TLS 1.3의 일곱 대표 메시지다. ServerHello 뒤 핸드셰이크 메시지와 Finished도 handshake traffic key로 보호한다. Certificate는 공개키·이름·발급관계, CertificateVerify는 개인키 보유와 현재 핸드셰이크 결합, Finished는 키·핸드셰이크 무결성을 확인한다. 응용 traffic key 전환과 상대 Finished 검증은 서로 다른 사건이다. PSK·인증 조건에 따라 흐름이 달라진다.ServerHello 뒤: handshake traffic key로 보호 ClientHello ServerHello EncryptedExtensions Certificate CertificateVerify Finished Finished클라이언트서버경로·신원·서명·기간 검증서버 Finished 검증서버: 자신의 Finished 뒤 응용 키 사용 가능, 클라이언트 Finished 수신까지 대기 필수 아님클라이언트: 서버 인증·Finished 검증 → 자신의 Finished → 일반 응용 데이터

0-RTT와 추가 클라이언트 인증을 제외한 인증서 기반 TLS 1.3의 일곱 대표 메시지다. ServerHello 뒤 핸드셰이크 메시지와 Finished도 handshake traffic key로 보호한다. Certificate는 공개키·이름·발급관계, CertificateVerify는 개인키 보유와 현재 핸드셰이크 결합, Finished는 키·핸드셰이크 무결성을 확인한다. 응용 traffic key 전환과 상대 Finished 검증은 서로 다른 사건이다. PSK·인증 조건에 따라 흐름이 달라진다.

TLS 1.3: 보호·인증·완료의 경계ClientHello와 ServerHello 뒤의 일곱 대표 메시지 및 방향을 그대로 보존한다. ServerHello 뒤 EncryptedExtensions부터 양쪽 Finished까지 handshake traffic key 보호 경계다. 클라이언트의 인증·서버 Finished 검증은 자신의 Finished보다 앞선다. 서버는 자신의 Finished 뒤 응용 키 사용 가능하며 클라이언트 Finished 수신까지 대기할 필요는 없다. 일반 클라이언트 응용 데이터·응용 키 전환·상대 Finished 검증을 구분한다.클라이언트서버ClientHelloServerHelloServerHello 뒤:handshake traffickey로 보호EncryptedExtensionsCertificateCertificateVerifyFinished클라이언트:경로·신원·서명·기간검증서버 Finished 검증Finished서버: 자신의 Finished뒤 응용 키 사용 가능클라이언트 Finished수신까지 대기 필수 아님클라이언트: 서버인증·Finished 검증 →자신의 Finished → 일반응용 데이터응용 키 전환 ≠ 상대Finished 검증0-RTT·추가 클라이언트인증 제외; PSK·인증조건에 따라 달라짐

이 예의 조건

  • 0-RTT와 추가 클라이언트 인증을 제외한 인증서 기반 TLS 1.3의 일곱 대표 메시지다. ServerHello 뒤 핸드셰이크 메시지와 Finished도 handshake traffic key로 보호한다. Certificate는 공개키·이름·발급관계, CertificateVerify는 개인키 보유와 현재 핸드셰이크 결합, Finished는 키·핸드셰이크 무결성을 확인한다. 응용 traffic key 전환과 상대 Finished 검증은 서로 다른 사건이다. PSK·인증 조건에 따라 흐름이 달라진다.
  • ClientHello와 ServerHello 뒤의 일곱 대표 메시지 및 방향을 그대로 보존한다. ServerHello 뒤 EncryptedExtensions부터 양쪽 Finished까지 handshake traffic key 보호 경계다. 클라이언트의 인증·서버 Finished 검증은 자신의 Finished보다 앞선다. 서버는 자신의 Finished 뒤 응용 키 사용 가능하며 클라이언트 Finished 수신까지 대기할 필요는 없다. 일반 클라이언트 응용 데이터·응용 키 전환·상대 Finished 검증을 구분한다.
  • 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
ClientHello

클라이언트가 지원 조건과 key share로 수립을 제안한다.

  • 클라이언트: ClientHello 전송
  • 서버·보호: ServerHello 전
  • 초기 제안이 인증 완료는 아니다.
ServerHello

서버 선택과 key share 뒤 handshake 보호를 마련한다.

  • 클라이언트: 공유 조건 계산
  • 서버·보호: handshake 보호 시작
  • 뒤 handshake 메시지를 초기 평문과 구별한다.
서버 인증·Finished

정한 인증 메시지와 서버 Finished를 클라이언트가 검증한다.

  • 클라이언트: 서버 근거 검증
  • 서버·보호: 서버 Finished
  • 서버 보호 준비와 클라이언트 완료를 같게 보지 않는다.
클라이언트 Finished

클라이언트의 Finished를 확인한 뒤 양쪽 완료 조건을 맞춘다.

  • 클라이언트: 클라이언트 Finished
  • 서버·보호: 클라이언트 확인 완료
  • PSK·인증 조건의 변형을 원문의 범위 밖에서 새로 만들지 않는다.

TLS 보호의 시작과 양쪽 완료를 구분한다 · 상태 따라가기

클라이언트가 지원 조건과 key share로 수립을 제안한다. 모든 단계에서 클라이언트·서버·보호의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.

TLS 보호의 시작과 양쪽 완료를 구분한다

넓은 화면과 모바일에서 같은 관계를 각각의 배치로 읽을 수 있습니다.

TLS 보호의 시작과 양쪽 완료를 구분한다0-RTT와 추가 클라이언트 인증을 제외한 인증서 기반 TLS 1.3의 일곱 대표 메시지다. ServerHello 뒤 핸드셰이크 메시지와 Finished도 handshake traffic key로 보호한다. Certificate는 공개키·이름·발급관계, CertificateVerify는 개인키 보유와 현재 핸드셰이크 결합, Finished는 키·핸드셰이크 무결성을 확인한다. 응용 traffic key 전환과 상대 Finished 검증은 서로 다른 사건이다. PSK·인증 조건에 따라 흐름이 달라진다.ServerHello 뒤: handshake traffic key로 보호 ClientHello ServerHello EncryptedExtensions Certificate CertificateVerify Finished Finished클라이언트서버경로·신원·서명·기간 검증서버 Finished 검증서버: 자신의 Finished 뒤 응용 키 사용 가능, 클라이언트 Finished 수신까지 대기 필수 아님클라이언트: 서버 인증·Finished 검증 → 자신의 Finished → 일반 응용 데이터

0-RTT와 추가 클라이언트 인증을 제외한 인증서 기반 TLS 1.3의 일곱 대표 메시지다. ServerHello 뒤 핸드셰이크 메시지와 Finished도 handshake traffic key로 보호한다. Certificate는 공개키·이름·발급관계, CertificateVerify는 개인키 보유와 현재 핸드셰이크 결합, Finished는 키·핸드셰이크 무결성을 확인한다. 응용 traffic key 전환과 상대 Finished 검증은 서로 다른 사건이다. PSK·인증 조건에 따라 흐름이 달라진다.

TLS 1.3: 보호·인증·완료의 경계ClientHello와 ServerHello 뒤의 일곱 대표 메시지 및 방향을 그대로 보존한다. ServerHello 뒤 EncryptedExtensions부터 양쪽 Finished까지 handshake traffic key 보호 경계다. 클라이언트의 인증·서버 Finished 검증은 자신의 Finished보다 앞선다. 서버는 자신의 Finished 뒤 응용 키 사용 가능하며 클라이언트 Finished 수신까지 대기할 필요는 없다. 일반 클라이언트 응용 데이터·응용 키 전환·상대 Finished 검증을 구분한다.클라이언트서버ClientHelloServerHelloServerHello 뒤:handshake traffickey로 보호EncryptedExtensionsCertificateCertificateVerifyFinished클라이언트:경로·신원·서명·기간검증서버 Finished 검증Finished서버: 자신의 Finished뒤 응용 키 사용 가능클라이언트 Finished수신까지 대기 필수 아님클라이언트: 서버인증·Finished 검증 →자신의 Finished → 일반응용 데이터응용 키 전환 ≠ 상대Finished 검증0-RTT·추가 클라이언트인증 제외; PSK·인증조건에 따라 달라짐

이 예의 조건

  • 0-RTT와 추가 클라이언트 인증을 제외한 인증서 기반 TLS 1.3의 일곱 대표 메시지다. ServerHello 뒤 핸드셰이크 메시지와 Finished도 handshake traffic key로 보호한다. Certificate는 공개키·이름·발급관계, CertificateVerify는 개인키 보유와 현재 핸드셰이크 결합, Finished는 키·핸드셰이크 무결성을 확인한다. 응용 traffic key 전환과 상대 Finished 검증은 서로 다른 사건이다. PSK·인증 조건에 따라 흐름이 달라진다.
  • ClientHello와 ServerHello 뒤의 일곱 대표 메시지 및 방향을 그대로 보존한다. ServerHello 뒤 EncryptedExtensions부터 양쪽 Finished까지 handshake traffic key 보호 경계다. 클라이언트의 인증·서버 Finished 검증은 자신의 Finished보다 앞선다. 서버는 자신의 Finished 뒤 응용 키 사용 가능하며 클라이언트 Finished 수신까지 대기할 필요는 없다. 일반 클라이언트 응용 데이터·응용 키 전환·상대 Finished 검증을 구분한다.
  • 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
ClientHello

클라이언트가 지원 조건과 key share로 수립을 제안한다.

  • 클라이언트: ClientHello 전송
  • 서버·보호: ServerHello 전
  • 초기 제안이 인증 완료는 아니다.
ServerHello

서버 선택과 key share 뒤 handshake 보호를 마련한다.

  • 클라이언트: 공유 조건 계산
  • 서버·보호: handshake 보호 시작
  • 뒤 handshake 메시지를 초기 평문과 구별한다.
서버 인증·Finished

정한 인증 메시지와 서버 Finished를 클라이언트가 검증한다.

  • 클라이언트: 서버 근거 검증
  • 서버·보호: 서버 Finished
  • 서버 보호 준비와 클라이언트 완료를 같게 보지 않는다.
클라이언트 Finished

클라이언트의 Finished를 확인한 뒤 양쪽 완료 조건을 맞춘다.

  • 클라이언트: 클라이언트 Finished
  • 서버·보호: 클라이언트 확인 완료
  • PSK·인증 조건의 변형을 원문의 범위 밖에서 새로 만들지 않는다.

ServerHello 뒤의 핸드셰이크 메시지는 handshake traffic key로 암호화된다. Finished 자체도 이 보호 안에 있으며, 보호된 record가 Finished 뒤에 처음 만들어지는 것은 아니다. Certificate는 공개키와 이름·발급관계를 제시하고, CertificateVerify는 해당 개인키 보유와 현재 핸드셰이크의 결합을 증명하며, Finished는 합의된 키와 핸드셰이크 무결성을 확인한다. 클라이언트 인증이 요구되거나 사전공유키를 쓰면 흐름은 달라질 수 있다.

캡처에서 ClientHello는 있으나 ServerHello가 없으면 버전·정책·경로·서버 도달을 나누고, TLS 경고가 보이면 앞선 메시지와 인증 검증 로그를 함께 본다. 암호화된 뒤에는 키 없이 HTTP 의미가 보이지 않는 것이 정상일 수 있다.

위 그림은 0-RTT를 제외한 인증서 기반의 기본 흐름이다. 서버가 상대 Finished보다 먼저 응용 데이터를 보낼 때는 핸드셰이크가 아직 완료되지 않았으므로 상대의 신원이나 상대가 현재 살아 있는 참여자인지까지 확인된 것은 아니다(RFC 9846 §4.5.3). 서버는 자신의 Finished를 보낸 뒤 application traffic key로 응용 데이터를 보낼 수 있으므로 반드시 클라이언트 Finished 수신까지 기다리는 것은 아니다. 클라이언트는 서버 인증과 Finished를 검증하고 자신의 Finished를 보낸 뒤 일반 응용 데이터를 보낸다. handshake traffic key와 application traffic key의 전환, 상대의 Finished 검증, 양방향 완료는 서로 구별되는 사건이다. 0-RTT 조기 데이터와 추가 클라이언트 인증은 별도 조건·보안 경계를 갖는다.

인증서 검증은 서명만 맞음으로 끝나지 않는다

  1. 신뢰경로: 최종 인증서에서 신뢰하도록 설정된 anchor까지 발급자 관계가 이어지는가.
  2. 서명: 경로의 인증서 서명이 해당 발급자 공개키로 검증되는가.
  3. 유효기간: 검증 시각이 각 인증서의 허용기간 안인가.
  4. 제약과 용도: 기본 제약, 이름 제약, 키 사용과 확장 키 사용이 경로와 현재 용도를 허용하는가.
  5. 서비스 신원: 신뢰한 source domain 등으로 만든 reference identifier가 인증서의 적합한 subjectAltName presented identifier와 일치하는가.
  6. 정책상 폐기상태: 환경의 검증정책이 요구하는 폐기정보를 확인했는가.

RFC 5280의 인증경로 검증과 RFC 9525의 서비스 신원검증은 서로 다른 축이며 둘 다 성공해야 인증서 기반 서버 인증을 완성할 수 있다. HTTPS는 HTTP의 의미를 TLS 보호채널로 운반하는 사용형태이며, TLS가 서버 응용의 권한 오류·입력검증 실패·악성 콘텐츠까지 해결하지는 않는다.

예를 들어 사용자가 신뢰할 수 있게 지정한 접속 이름이 service.example이면 이것이 비교 기준인 reference identifier다. 서버 인증서의 적합한 subjectAltName에 제시된 DNS 이름이 api.example뿐이라면 이것은 presented identifier이며 두 이름이 일치하지 않는다. 경로·서명·기간 검증이 모두 통과했더라도 의도한 서비스의 인증은 실패한다.

직접 풀어 보기 — 자체 조건 변경

확인 문제로 인증서 이름을 service.example로 고쳤지만 검증 시각이 유효기간 뒤라면 어떨까?

인증서 이름·기간의 별도 검증

이름 축은 통과해도 기간 축이 실패하므로 여전히 인증해서는 안 된다. 검증 절차의 각 축을 모두 통과해야 하며 한 축의 성공으로 다른 실패를 지울 수 없다.

5. 패킷에서 상태를 복원하는 절차

아홉 단계로 프로토콜 대화를 읽는다

  1. 질문·시간범위 고정: 어떤 사용자 동작의 어느 실패를 설명할지 정한다.
  2. 포착점·방향 확인: 클라이언트·서버·중간 지점 중 어디에서 본 것인지 표시한다.
  3. 대화 후보 분리: 주소·포트·프로토콜·DNS ID·HTTP stream 등 적합한 키를 쓴다.
  4. 계층 열기: Ethernet→IPv6→TCP/UDP→응용 순으로 선언 길이와 종류를 확인한다.
  5. 시간순 배열: 요청·응답, seq/ack, 핸드셰이크를 한 방향씩 놓는다.
  6. 상태기계 대조: 현재 메시지 뒤 기대할 다음 상태·메시지를 명세와 맞춘다.
  7. 시간·반복 측정: RTT, 응답단계 시간, 재전송과 반복 질의를 구분한다.
  8. 다른 증거 대조: 서버·TLS 인증·응용 로그와 호스트 내부 지표를 같은 사건에 연결한다.
  9. 판정과 한계 기록: 관찰→기대→차이→원인 후보→추가 검증 순으로 쓴다.

Wireshark 4.7.3 같은 분석도구의 색상·요약 문구는 출발점이지 판정근거 전체가 아니다. 표시 필드를 원시 값과 대조하고, 도구가 추론한 재전송·문제 표시는 포착 위치와 앞뒤 패킷으로 재검증한다.

자주 틀리는 판정과 교정법

잘못된 판정빠진 사실교정
SYN 세 줄이 보이면 서비스 정상TLS·HTTP 상태는 아직 모름계층별 완료시점을 분리
중복 ACK가 보이면 서버 오류앞선 데이터 손실·순서 역전 가능seq/ack와 양 방향 포착 대조
Window가 작으면 혼잡머리 Window는 수신 흐름제어 값rwnd와 내부 cwnd·대기열 지표 분리
DNS 응답이 있으면 이름해석 정상질문·응답코드·답·TTL 불일치 가능ID뿐 아니라 질문과 레코드를 대조
HTTP 200이면 업무 성공콘텐츠·업무 결과가 실패할 수 있음상태 의미와 응용 불변조건을 확인
TLS 암호화면 안전이름·경로·기간·용도 검증이 빠질 수 있음PKIX 검증 결과와 정책 로그 확인
패킷이 안 보이면 전송 안 됨포착 위치·필터·오프로딩·손실 가능다른 지점·인터페이스 통계로 검증

프로토콜 분석에서 확인할 학습 내용

정의에서 메시지·상태·실패 판정까지 다음 연결을 스스로 설명해 본다.

  • 정의: formal-protocol-evidence-analysis와 TCP·UDP·DNS·HTTP·TLS의 정식 정의가 분석대상과 상태를 확정한다.
  • 작동원리: TCP 수립·신뢰성·혼잡, DNS 해석, HTTP 메시지, TLS 핸드셰이크가 메시지 순서와 필드를 보여 준다.
  • 비교: TCP/UDP, HTTP 버전, 수신/혼잡 윈도와 계층별 증거를 같은 축으로 구분한다.
  • 실패조건: protocol-analysis-failure-modes가 단일 필드·도구 추론·암호화의 한계를 통제한다.
  • 절차: protocol-analysis-nine-steps가 질문에서 판정·추가증거까지 재현 가능한 분석을 만든다.
  • 연습(practice)·답안 전환: 아래 자체 제작 10점·25점 문제의 목차·도식·모범답안이 정의와 절차를 실제 논점으로 추적한다.

앞 절의 계층·PDU·Ethernet/IPv6 경계로 메시지를 해석하고, 다음 절에서는 패킷·로그·지표를 연결해 서비스 원인을 진단한다.

6. 기출 후보와 답안 전환

문항별 direct·partial·legacy 경계를 둔다

문항 ID관계본문 연결과 현대화
IM-0065-P01-Q02direct 후보DNS 정의를 resolver·이름서버·자원 레코드·메시지 분석으로 확장
IM-0092-P01-Q05legacy/modernizedSSL 작동원리는 역사 신호로만 두고 현행 TLS 1.3 명세 RFC 9846으로 교체
IM-0098-P04-Q06partialS01에는 참조모델 direct, 이 절에는 TCP/IP 프로토콜 해석 배경만 연결
IM-0104-P02-Q04direct 후보이름·IP·링크 주소의 사용범위와 데이터 전달 중 관찰 변화를 프로토콜 관점으로 분석
IM-0113-P02-Q05direct/modernized 후보HTTP 자체의 취약점 대신 평문 전송의 보호 부재와 HTTPS/TLS의 제공·비제공 범위로 교정
IM-0130-P03-Q03direct/correction-required공식 원문 요구 1 구성요소, 2 감지, 3 제어에 더해 누락된 4 혼잡 윈도우 크기를 반드시 포함
IM-0133-P01-Q13direct 후보3-way 수립과 흔한 4-segment 종료를 상태·seq/ack·변형 가능성으로 설명
IM-0136-P02-Q06direct/modernized 후보TLS 1.2 취약점의 포괄 단정은 피하고 TLS 1.3 구조·핸드셰이크·PKIX 검증을 현행 기준으로 작성
IM-0137-P03-Q05direct 후보오류·혼잡·슬라이딩 윈도를 TCP 상태에 연결하되 일반 프로토콜 설계 전체는 관련 절 참조
IM-0131-P02-Q05partial/modernized 후보TCP 소켓 흐름만 지원; 소켓 API 유형과 WebSocket은 이 절에서 가르치지 않아 답안에 추가하지 않음
IM-0138-P04-Q04direct 후보오류 검출·정정과 Stop-and-Wait/Go-Back-N 요구를 프로토콜 분석 대상으로 연결하되 TCP 누적 ACK와 같은 것으로 축약하지 않음

사람 원문검증·배점·대표성 승인 수는 0이다. 최신 연도라는 이유만으로 정확성·현행성 승인을 부여하지 않는다.

IM-0130-P03-Q03의 누락 요구를 답안 구조에서 복구한다

기존 후보 텍스트는 공식 PDF의 네 번째 요구 혼잡 윈도우 크기를 빠뜨렸다. 답안은 다음처럼 네 요구를 독립 목차로 보존한다.

  1. 구성요소: cwnd·ssthresh·ACK·RTO와 송신 중 데이터
  2. 감지: 중복 ACK·타임아웃 등 손실 신호와 RTT·대기 증가의 보조 관찰
  3. 제어: slow start, congestion avoidance, fast retransmit/recovery, timeout backoff
  4. 혼잡 윈도우 크기: 증가·감소 원리, rwnd와의 차이, 패킷에서 직접 보이지 않는 관측 한계

자동 군집 TOP-01194는 socket/WebSocket, TCP 혼잡·손실 대응, TCP 연결 생명주기의 서로 다른 세 답안 골격을 합쳤으므로 reject_and_split 후보다. 소켓·WebSocket, TCP 혼잡·손실 대응, TCP 연결 생명주기의 세 논점으로 나누고, 기존 반복점수는 무효화한 뒤 사람 군집검토 후 다시 계산한다. 분할 후보의 실제 멤버는 각각 IM-0131-P02-Q05와 IM-0116-P03-Q06, IM-0130-P03-Q03과 partial인 IM-0066-P03-Q06, 그리고 IM-0133-P01-Q13이다. 이 가운데 IM-0116-P03-Q06과 IM-0066-P03-Q06은 이번 15문항 감사 집합 밖이므로 감사 분모나 반복 근거로 세지 않는다. 공식 문항 단위와 교정된 하위 요구를 기준으로 연결한다.

시험에서는 어떻게 묻는가: 10점

다음은 자체 제작 문제다.

TCP의 연결 수립과 신뢰성 확보 원리를 설명하고, 수신 윈도와 혼잡 윈도의 차이를 제시하시오.

세그먼트 이름만 쓰지 말고 seq/ack의 의미, 재전송 조건, rwnd/cwnd의 소유자·표시 위치·제한 대상을 연결한다.

답안 목차·풀이·교정 근거 보기

10점 답안 목차

  1. TCP 정의: 연결 상태·순서 있는 신뢰 바이트 스트림
  2. 수립: SYN→SYN+ACK→ACK, 초기 순서번호와 상태
  3. 신뢰성: 바이트 seq, 다음 기대번호 ACK, RTO·빠른 재전송
  4. 제어 비교: rwnd=수신 여유 광고 / cwnd=송신자 내부 혼잡 제한
  5. 실패·분석: 재전송·RST·작은 rwnd와 정확한 cwnd 관측 한계

10점 답안 도식

TCP 수립·종료 도식의 x/y와 상태를 먼저 확인하고, 실제 바이트·ACK 예의 누락 범위·반복 ACK·재전송을 연결한다.

제한주체보이는 곳
rwnd수신자의 수신 여유TCP Window 필드로 광고
cwnd송신자의 혼잡 제한패킷에 직접 없고 호스트 내부 지표 필요

송신 범위는 두 제한 중 작은 제약과 미확인 바이트의 영향을 받는다. 손실을 시사하는 ACK 패턴 또는 RTO로 재전송하며, ACK는 패킷 번호나 업무 처리 완료가 아닌 다음 기대 바이트다.

10점 모범답안

TCP는 두 종단 포트 사이에 연결 상태를 만들고 순서 있는 신뢰 가능한 바이트 스트림을 제공한다. 클라이언트가 SYN과 초기 순서번호 x를 보내면 서버는 자기 순서번호 y와 ack=x+1인 SYN+ACK를 보내고, 클라이언트의 ack=y+1 ACK로 수립된다. 순서번호는 바이트 흐름 위치, 확인번호는 다음에 기대하는 위치다.

송신자는 확인되지 않은 데이터를 보관하고 RTO나 누락을 시사하는 ACK 패턴에 따라 재전송한다. RTO는 측정 RTT와 변동을 반영하고 반복 타임아웃에는 기다림을 늘린다. rwnd는 수신 버퍼 여유를 수신자가 TCP Window 필드로 광고하는 흐름제어 값이고, cwnd는 네트워크 혼잡을 제한하려고 송신자가 내부에 유지하는 값이다. 실제 전송은 두 제약과 미확인 데이터량의 영향을 받는다. 캡처로 rwnd는 읽을 수 있지만 cwnd를 직접 읽을 수 없으므로 송신 호스트 지표와 대조한다. 작은 rwnd는 수신 종단 지연, 재전송과 RTT·대기열 증가는 구간 혼잡 후보로 분리해 검증한다.

시험에서는 어떻게 묻는가: 25점

다음도 자체 제작 문제다.

사용자가 HTTPS 서비스에 접속하지 못한 상황에서 DNS, TCP, TLS 1.3과 HTTP의 메시지·상태를 패킷으로 분석하는 절차와 계층별 실패 판정기준을 설명하시오.

기술 네 개를 따로 나열하지 않고 하나의 시간선에서 이름→연결→보호채널→응용 응답의 마지막 정상과 최초 이상을 찾는다.

답안 목차·풀이·교정 근거 보기

25점 답안 목차

  1. 분석원칙: 질문·포착점·방향·시계, 관찰/기대/차이/한계
  2. DNS: ID·질문·응답코드·Answer/Authority·RR·TTL, 요청/응답 위치
  3. TCP: 4-tuple과 방향, SYN 상태, seq/ack, RTT·RTO·재전송·윈도
  4. TLS 1.3: Client/ServerHello, Certificate/Verify/Finished, PKIX 검증
  5. HTTP: 버전별 관찰단위, 메서드·대상·필드·상태·콘텐츠·단계시간
  6. 상관·판정: 같은 사용자 사건의 마지막 정상/최초 이상과 서버 로그 대조
  7. 실패·한계: 암호화, 포착 누락, NAT·중계, cwnd 내부값, 도구 추론
  8. 개선: 추가 포착·로그·호스트 지표와 재현조건을 명시

25점 답안 도식

사용자 사건의 단계대조할 메시지·결과판정 축
DNS, t1Query, Response·RR이름·질문·ID·응답코드·TTL, 실제 전송
TCP, t2SYN, SYN+ACK, ACK상태·번호·수립 완료와 방향
TLS, t3CH, SH, Cert·Verify, Finished키·인증·완료와 암호화 관찰 한계
HTTP, t4Request, Status·Content버전·의미·업무 성공 기준

이 표의 t1~t4는 단계 표기이며 측정값을 만들지 않는다. 각 단계에 관찰점·방향, 원시 필드, 기대 상태, 경과시간, 반복·오류를 붙이고 마지막 정상과 최초 이상을 찾는다. 실제 메시지는 DNS·TCP·TLS 도식에서, HTTP 문법은 원문 요청·응답 예에서 다시 읽는다. 원인 후보는 로그·지표로 대조하고 확인 한계를 남긴다.

25점 모범답안

프로토콜 분석은 필드·상태·시간·방향을 명세의 메시지 형식과 상태 전이에 대조하는 일이다. 먼저 실패한 사용자 동작과 시간범위를 정하고 클라이언트·서버·중간 포착점의 위치, 방향과 시계차를 기록한다. 각 계층에서 관찰·기대·차이·확인 한계를 분리한다.

DNS에서는 질의 ID와 양 끝뿐 아니라 질문 이름·유형을 맞추고 응답코드, Answer·Authority·Additional 구역의 자원 레코드와 TTL을 읽는다. 질의만 보이면 서버 도착과 역방향을 다른 지점에서 확인한다. TCP에서는 양 끝 IP 주소와 포트의 네 값인 4-tuple과 방향으로 대화를 나누고 SYN→SYN+ACK→ACK의 상태, seq/ack의 진행, RTT 기반 RTO, 재전송과 Window를 본다. 주소변환(NAT)·중계 전후에는 관찰한 값이 달라질 수 있어 포착 위치를 붙인다. rwnd는 수신자가 광고하지만 cwnd는 송신기 내부 혼잡 제한이므로 캡처만으로 정확한 값을 단정하지 않는다.

TCP 수립 뒤 인증서 기반 TLS 1.3은 ClientHello·ServerHello의 합의, Certificate·CertificateVerify의 인증, Finished의 핸드셰이크 완료를 시간순으로 확인한다. 인증서는 RFC 5280에 따라 신뢰경로, 서명, 기간, 제약·용도와 폐기상태를 검증하고, RFC 9525에 따라 reference identifier와 인증서의 적합한 subjectAltName presented identifier를 비교한다. 암호화 뒤 HTTP 내용이 안 보이는 것은 정상일 수 있으므로 TLS·서버 로그가 필요하다.

HTTP는 버전을 먼저 구분한다. HTTP/1.1은 시작줄·필드·콘텐츠 경계, HTTP/2는 연결 안의 stream과 프레임, HTTP/3은 QUIC 스트림 위 HTTP 의미를 본다. 메서드·대상·상태코드와 콘텐츠, 요청부터 첫 응답과 완료까지 시간을 구분한다. DNS 응답, TCP 수립, TLS 완료, HTTP 응답 중 마지막 정상과 최초 이상을 찾고 서버·인증·응용 로그와 대조해 원인 후보를 검증한다. 포착 누락·중계·암호화·도구 추론은 한계로 명시한다.

근거와 현행성

프로토콜 분석의 공통 프레임은 ITU-T X.200 (07/1994) §§5.1, 5.2.1, 5.2.2.1–5.2.2.7, 5.3, 5.6과 6.1–6.3의 계층·서비스·프로토콜·PDU 경계, RFC 1122 §§1.1.3, 2.4, 3.1과 §4의 인터넷 계층 경계를 엮어 교재가 제한적으로 종합했다. 어느 한 문서가 본문의 분석 절차 전체를 규범으로 정한다고 주장하지 않는다.

TCP의 핵심·머리·상태·순서·수신윈도는 RFC 9293 §§2.2, 3.1, 3.3.2, 3.4–3.8, 3.8.1–3.8.2와 3.8.6 중 본문에서 실제 가르친 범위만, UDP의 최소 서비스·머리·체크섬은 RFC 768 Introduction, Format, Fields, IP Interface를 기준으로 했다. RFC 768에는 번호 절이 없으므로 가짜 절 번호를 만들지 않으며 UDP Options는 다루지 않는다. 네트워크 혼잡의 용어 경계는 RFC 9522 §§1.4, 2.2, TCP 혼잡제어의 Reno 기준은 RFC 5681 §§2, 3.1–3.2, RTT 기반 RTO와 backoff는 RFC 6298 §§2–3, §5, 대표 CUBIC은 RFC 9438 §§3–4, 4.3–4.6, 4.8, 4.10에서 실제 가르친 범위만 사용했다.

DNS 분산구조·구성요소·위임·처리는 RFC 1034 §§2.2, 2.4, 4.2, 4.3.2와 5.3.3, 메시지·RR·TTL과 resolver 처리는 RFC 1035 §§3.2.1, 4.1–4.2.2와 7.1–7.4를 사용했다. HTTP 공통 의미·메서드·상태는 RFC 9110 §§6, 9, 9.2와 15, HTTP/1.1 문법은 RFC 9112 §§2–5와 6.2–6.3, HTTP/2 프레임·스트림은 RFC 9113 §§2, 4.1, 5와 8.1, HTTP/3의 QUIC·request stream 경계는 RFC 9114 §§1.2, 2, 3.2, 4.1, 6, 7과 7.2만 확인했다. DNS negative caching, QUIC 손실복구와 QPACK은 포함하지 않았다.

TLS 1.3 명세는 RFC 9846 §§1–2, 4.5–4.5.3, 5와 5.2이며, PSK 재개·0-RTT와 replay 경계는 §§2.2–2.3, 8과 Appendix F.5를 사용했다. 2026-09-01 기준 폐기된 RFC 8446을 현행 명세로 인용하지 않는다. 인증서 필드·확장·경로검증은 RFC 5280 §§4.1–4.2, 5, 6과 6.1, 서비스의 reference/presented identifier와 일치 판정은 RFC 9525 §§1.2, 2, 6과 6.1을 사용했다. 패킷 분석도구는 Wireshark User’s Guide 4.7.3 §§4.10, 6.4, 7.2, 7.4, 7.5, 7.6, 7.6.3, 7.8.1–7.8.3과 7.10.1–7.10.3을 구현 예로만 사용했다. 원문 표·그림·패킷 화면을 복제하지 않고 모든 흐름·표·문제를 새로 구성했다.

기준 확인일은 2026-09-01이다. 기술 정확성·현행성·출제 적합성·기출 연결·권리에 대한 사람 승인 수는 0이며 상태는 candidate / human-validation-pending이다.

30초 정리

  1. 프로토콜 분석은 필드 하나가 아니라 양 끝·방향·상태·시간순서를 명세와 대조한다.
  2. TCP는 상태·순서·ACK·재전송·rwnd/cwnd를 쓰는 바이트 스트림이고 UDP는 연결 상태 없는 데이터그램이다.
  3. DNS는 질문·응답코드·구역·자원 레코드·TTL을, HTTP는 버전별 운반방식과 공통 의미를 읽는다.
  4. TLS 1.3은 ServerHello 뒤의 핸드셰이크부터 record를 보호하며, Finished 검증과 응용 traffic key 전환을 구분한다. 인증서는 PKIX 경로·이름·기간·용도를 검증한다.
  5. 답안은 각 단계의 마지막 정상·최초 이상·추가증거와 캡처로 볼 수 없는 내부 상태를 함께 쓴다.

다시 읽을 때는 DNS로 찾고, TCP로 상태를 만들고, TLS로 보호하고, HTTP로 의미를 주고받는다를 한 시간선에 놓은 뒤 각 화살표의 기대 응답을 말해 본다.

직접 연습: 필드 값의 단위와 완료 조건을 바꾸어 본다

  1. SYN이 없는 세그먼트의 원시 Window는 900이며, 이 방향의 Window Scale shift 3이 수립 때 합의되었습니다. 호스트에서 확인한 cwnd는 8000바이트, 미확인 데이터는 2500바이트입니다. 본문의 단순화 조건에서 rwnd와 추가 전송 여유는 얼마인가요? 수립 캡처가 없어서 shift를 모르는 경우에도 같은 계산을 확정할 수 있나요?
풀이: 원시 필드와 두 바이트 제한

rwnd는 900×2³=7200바이트이고, 전송 중 상한은 min(7200,8000)=7200, 추가 여유는 7200−2500=4700바이트입니다. 900은 확대 전 필드 값이고 8000은 송신자 내부 혼잡 제한이므로 둘을 그대로 같은 단위로 비교하면 안 됩니다. SYN 세그먼트에는 확대를 적용하지 않습니다. shift를 모르면 원시 900만 관찰했다고 기록하고 수립 기록이나 호스트 정보를 더 확인해야 하며, 정확한 바이트 여유를 추측해 확정하지 않습니다.

  1. 순서번호 7001부터의 데이터 300바이트 뒤에 같은 세그먼트의 FIN이 있고 앞선 공백은 없습니다. 수신자가 이를 모두 받아 누적 확인하면 ACK는 얼마인가요? 이 ACK 뒤 서버가 남은 응답 데이터를 보내는 것은 모순인가요?
풀이: 데이터·FIN·반닫힘

데이터는 [7001,7301)이고 FIN이 위치 하나를 더 사용하므로 ACK는 7302입니다. 순수 ACK 자체는 추가 위치를 사용하지 않습니다. 클라이언트 FIN은 클라이언트가 보내는 방향의 종료이므로 서버는 자기 방향을 닫기 전까지 남은 응답을 보낼 수 있습니다. 수신 확인과 응용의 처리 완료도 별개입니다.

  1. GET에 대한 200 응답이고 Transfer-Encoding·압축·끝 줄바꿈이 없으며 콘텐츠는 UTF-8 성공입니다. Content-Length를 2로 선언해도 되나요? 반대로 Content-Length를 6으로 고쳤지만 업무 기준이 본문 OK라면 정상 판정까지 성공하나요?
풀이: 바이트 경계와 업무 판정

UTF-8 성공은 6바이트이므로 이 조건의 선언 값은 6이어야 합니다. 2는 글자 수와 바이트 수를 섞은 값입니다. 길이를 6으로 고치면 길이 축은 맞지만 본문이 OK가 아니므로 주어진 정상 판정 기준은 여전히 실패합니다. 메시지 경계의 적합성, HTTP 상태, 업무 기준을 각각 판정합니다.

이 페이지 목차

이 페이지 목차

0. 패킷 한 줄은 대화의 한 장면일 뿐이다프로토콜 분석: 필드·상태·시간·방향을 규칙과 대조한다전체에서 어디인가: 이름에서 보호된 응답까지먼저 알아둘 것1. TCP와 UDP: 종단 프로그램 사이 전달방식이 다르다TCP: 상태를 가진 신뢰 가능한 바이트 스트림TCP 머리는 다섯 질문으로 읽는다연결 수립과 종료: 번호보다 상태 전이를 읽는다손실을 복구한다: 순서·누적 ACK·재전송 타이머순서번호를 실제 바이트로 따라간다혼잡을 통제한다: cwnd는 패킷 필드가 아니라 송신자의 내부 제한이다직접 풀어 보기 — 자체 조건 변경UDP: 연결 상태 없이 데이터그램 경계를 전달한다TCP와 UDP를 같은 축으로 비교한다2. DNS: 이름을 분산된 기록에서 해석한다이름 해석: 질문을 권한 있는 정보 쪽으로 좁혀 간다직접 풀어 보기 — 양의 캐시 기록의 자체 조건 변경DNS 메시지는 머리와 네 구역으로 읽는다3. HTTP: 의미와 전송 문법을 분리해 읽는다HTTP/1.1 요청·응답은 시작줄→필드→콘텐츠 경계로 읽는다직접 풀어 보기 — 자체 조건 변경HTTP/1.1·2·3: 의미는 이어지고 운반방식은 달라진다4. TLS 1.3과 PKIX: 보호채널과 인증근거를 나눈다인증서 기반 TLS 1.3: 합의→인증→완료→응용 데이터인증서 검증은 서명만 맞음으로 끝나지 않는다직접 풀어 보기 — 자체 조건 변경5. 패킷에서 상태를 복원하는 절차아홉 단계로 프로토콜 대화를 읽는다자주 틀리는 판정과 교정법프로토콜 분석에서 확인할 학습 내용6. 기출 후보와 답안 전환문항별 direct·partial·legacy 경계를 둔다IM-0130-P03-Q03의 누락 요구를 답안 구조에서 복구한다시험에서는 어떻게 묻는가: 10점10점 답안 목차10점 답안 도식10점 모범답안시험에서는 어떻게 묻는가: 25점25점 답안 목차25점 답안 도식25점 모범답안근거와 현행성30초 정리