네트워크/와이어샤크

[와이어샤크][Day 5] HTTP 분석

playalone 2025. 7. 19. 20:25

이 글은 제 공부의 목적으로 작성하는 글로써, 틀린 부분이 있을 수 있습니다.

틀린 부분이 있을 시, 댓글로 친절히 설명해 주시면 감사하겠습니다.

 

오늘은 http 분석을 해보겠다.

 

사이트는 http://example.com을 사용하겠다.

(먼저 들어간다면 캐시 문제 때문에 not modified가 뜨니까 와이어샤크를 켠 상태로 접속하기를 권장한다.)

 

Example Domain

Example Domain This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission. More information...

example.com

 

 

 

해당 사이트에 접속한 결과이다.

 

사이트에 /의 html을 요청한 후, html을 받아온 뒤,

favicon.ico를 요청한 후, favicon.ico가 없다는 의미이다.

이후, timeout이 뜨고 있다.

 

이 요청과 응답은 지연으로 인해 와이어샤크가 캡처하는 순서가 연속적이지 않을 수 있다. 

따라서, 어떤 요청이 어떤 응답과 대응하는지를 먼저 살펴야 한다.

 

이는 GET / HTTP/1.1과 HTTP / 1.1 200 OK (text/html)의 전송계층 레이어 정보를 확인한 것이다.

 

SeqNumber와 AckNumber를 확인하면, 왼쪽의 Seq Number는 1이고, Seqment Len이 449이므로, 대응하는 패킷의 ACK Number는 450이어야 한다. 오른쪽의 Ack Number가 450이기 때문에 왼쪽의 요청에 대해 오른쪽의 응답을 받은 것임을 확인할 수 있다.

 

HTML

요청

이제, 각각의 HyperText trasfer protocol을 확인해 보자.

 이는, GET / HTTP/1.1의 HyperText transfer protocol 데이터이다.

각각을 살펴보면

Request Method: http 요청의 방식

Request URI: 요청 URI

Request Version: http 버전

Host: 기반 url

Connection: keep alive : 지속적인 연결

Upgrade-Insecure-Request: 보안 및 인증된 응답에 대한 선호 (Boolean)

User-Agent: 웹서버에서 자신을 식별하기 위한 정보 = 나에 대한 정보

Accept: 서버에서 어떠한 형식으로 데이터를 받고 싶은지에 대한 정보

Accept-Encoding: 전송받은 데이터의 압축형식

Accept-Language: 전송받은 데이터의 언어

 

즉, http://example.com/에 http/1.1 버전으로 Get요청을 보내며, 응답의 형식은 text/html이다.

응답

Response Version: 응답 http 버전

Status Code: http 상태 코드

Response Phrase: 상태 메시지

Accept-Range: 요청 단위와 범위

Content-Type: 응답 타입

Etag: 캐시 관련 정보. 변경 여부 확인

Last-Modified: 마지막 업데이트 일자

Vary: 동일한 url로의 요청에 대해 사용자의 특징에 따라 다른 응답을 주기 위한 헤더

Content-Encoding: 응답 압축 형식

Cache-Control: 캐시 제어를 위한 헤더. 옵션이 여러 개임. (필요할 때 찾아보기)

Date: 응답 날짜

Content-Length: 응답 길이

Connection: keep-alive: 지속적 연결

Content-encoded entity body: 압축 후 크기

File data: 압축 후 실제 크기

 

이후, Line-base text data는 응답 html 및 데이터이다.

 

favicon.ico도 비슷하기 때문에 따로 분석하지는 않겠다.

 

Timeout

발생 이유

http만 확인하면 Timeout이 발생한 이유를 확인할 수 없다.

따라서, tcp전체를 한번 확인해 보도록 하겠다.

이를 확인해 보면, 3626, 3627, 3628번 포트에서 사이트에 연결을 시도하는 것을 확인할 수 있다.

syn, syn/ack, ack을 모두 받으며 3 way handshake가 이뤄지고 있다.

하지만, 앞서 살펴본 html 요청 및 favicon.ico 요청에서는 3626번 포트를 사용 중이다. 

따라서, 연결된 tcp 연결 중 사용되지 않은 포트는 연결이 해제되어야 하고, 이는 요청에 응답하지 않음으로써 timeout이 발생하도록 하여 해결한 것으로 보인다.

 

실제 정보를 보면

3627, 3628 포트에서 타임아웃이 발생하고 있음을 확인할 수 있다.

패킷의 형식은 앞서 분석한 패킷과 같은 형식이기 때문에 따로 분석을 하지 않도록 하겠다.

 

이렇게, http://example.com에 통신하는 과정을 살펴보았다.

 

이제 이 글을 마치도록 하겠다.