HTTP2.0 Pipeline 패킷 분석

2020. 5. 26. 01:31카테고리 없음

 

 

 

HTTP 2.0 이상에서 지원하는 Pipeline 패킷에 대한 질문을 보고 나도 궁금해서 빠르게 분석해보았다.

 

Pipeline 패킷은 한번에 여러개의 요청을 Stream화하여 기다리지 않고 요청하여 응답받는다.

 

그림이 굉장히 설명 잘해준다.

 

 

 

궁금증의 요지는 7계층에서 구현된 HTTPS 패킷인데 어떻게 우측그림에서 각 요청을 서로 구분할 수 있는가? 이다.

 

 

 

여기 사이트에 설명이 잘되어 있어 HTTP2.0이 구현된 사이트로 테스트해볼까 했는데 왠일... 네이버에 들어갔는데 바로 HTTP2.0 패킷이 보였다.

 

 

 

처음 로딩할 때 GET요청으로 여러 그림파일들을 한번에 요청한다.

 

 

각 요청의 패킷은 다음과 같다

 

logo/006.png 요청패킷

 

logo/008.png 요청패킷

 

 

logo/011.png 요청패킷

 

 

와이어샤크가 파싱을 잘 해준다. 각 TCP 요청의 포트는 역시나 같은 세션이며 첫번째 그림의 Seq (674) + Len (322)는 다음 그림의 Seq (996)과 같다. 이로써 각 Seq와 Length의 무결성을 보장한다.

 

7계층의 HTTP2는 Stream Identifier로 하단에 따라오는 수신패킷을 구분한다.

 

Follow HTTP Stream이 아닌 TLS Stream으로 분석해보면 Pipeline Stream 시작 시 HTTPS Session들이 열리며 하단의 여러 데이터(PNG 파일)들은 HTTPS2의 Stream Identifier로 구분하여 데이터를 조합한다. 이게 답이었다.

HTTPS2에는 Flags 항목도 존재했는데 마치 IP헤더의 More Fragment 항목처럼 패킷의 마지막을 구분하는 비트가 있다.

 

 

 

 

 

 

HTTPS 평문 분석하는 방법 Ref

https://http2.tistory.com/6