HTTP 1.1을 사용한다
accept할 수 있는 포맷 (text/html
, application/xhtml+xml
, application/xml
, image/avif
등)이 존재한다고 알려준다
처음 요청을 날렸을 때는 http://yonsei.rip
를 http://yonsei.rip/
로 리다이렉트하는 응답을 받아 301 Moved Permanently 응답 코드를 받았다.
리다이렉트 된 후에는 페이지를 정상적으로 받아 200 OK를 받았다.
현재 수신 받은 html은 2023년 5월 1일에 마지막으로 수정되었다
파일 데이터는 gzip 인코딩되어 515바이트다
이 html은 gzip 방식으로 인코딩되었다.
아니요. 첫번째 GET 요청은 리다이렉트되고, 두번째 요청에서 html페이지를 응답 받으며, 세번째 요청에서 If-Modified-Since
을 관찰할 수 있다.
If-None-Match
는 요청을 조건부로 만든다. 값으로 서버가 반환한 ETag (entity-tag) 값을 가지는데, 서버가 제공하는 컨텐츠의 변경여부를 확인하기 위해 사용된다.
첫번째 GET 요청은 페이지를 처음 받아오고, 두번째 GET 요청은 이론적으로 캐시에서 페이지를 받아온다는 점에서 차이가 있다. 브라우저는 If-Modified-Since
항목으로 캐시의 유효성을 검증하고 If-None-Match
는 ETag값을 가지는 캐시가 있는지 확인한다
내 실습의 경우 Cache-Control: max-age=0
설정이 되어있어 캐시를 활용하지 않은 것으로 보인다
브라우저는 리다이렉트된 첫 GET 요청, 응답을 받아온 두번째 GET 요청, 도합 두번 요청을 전송했다.
41, 42, 43 프레임이 헌법 정보를 담고 있다.
서버는 하나의 대용량 파일에 대해 3개의 TCP 응답(#41~43)을 보냈다. 하나의 HTTP 응답을 보냈다.
리다이렉트된 첫 요청을 제외하면 총 두번의 GET 요청을 서버에 보냈다.
yonsei.rip의 IP주소(IPv4)는 101.101.211.92이고, 연세대 이미지 서버는 165.132.13.38이다.
첫 요청은 리다이렉트되어 301 Moved Permanently를 받는다
두번째 요청은 html 파일을 받아 200 OK를 받는다
세번째 요청은 유효한 이미지가 있는 주소로 리다이렉트해서 301 Moved Permanently를 반환한다
301 응답 코드를 담은 코드의 Location을 확인하면 어떤 URL로 리다이렉트되었는지 알 수 있다.
TCP 연결이 성립된 시간을 비교해 병렬적으로 다운로드되었는지 확인할 수 있다. 첫 TCP 연결이 닫히기 전에 두번째 TCP 연결이 열리면 병렬처리되었다고 할 수 있다.
여기에서는 텍스트 파일을 받기 위한 TCP 연결이 종료된 후에 이미지를 받기 위한 연결이 시작되어 병렬적이지 않게 다운로드되었다고 생각한다
UDP가 활용되었다. DNS은 연결 속도가 중요하기 때문에 UDP를 선호한다.
하지만 메시지 크기가 512 byte보다 크거나, zone transfer를 수행해야 할 때는 TCP를 사용한다
DNS 쿼리패킷의 수신 포트는 53이다
DNS 응답 패킷의 송신 포트는 53이다.
DNS쿼리 패킷은 ifconfig 명령어를 활용하여 나오는 로컬 DNS서버다
첫 쿼리는 A type, 즉 IPv4 주소를 묻는 쿼리 타입이다. 쿼리에는 Answer는 없지만 응답에는 존재한다.
두번째 쿼리는 HTTPS type으로, HTTPS로 서비스를 접근하는데 필요한 설정 정보와 파라미터를 요청하고 전달한다.
첫 응답은 authoritative nameserver 정보를 전달한다.
두번째 응답은 A type의 Answer가 존재한다. 응답은 다양한 레코드 종류일 수 있는데, alias면 CNAME, 메일이면 MX, IPv6 주소면 AAAA 등이 있다. 어떤 레코드인지를 나타내기 위해 다양한 종류가 존재한다.
HTTPS binding을 활용하기 위해 다른 종류의 Answer 포함하는 것으로 보인다.
노
DNS 쿼리 패킷의 수신 포트는 53이고, 송신 포트는 53111다.
DNS 응답 패킷의 수신 패킷은 53111고, 송신 포트는 53이다.
쿼리는 A type을 사용한다.
Non-authoritative answer를 포함한다. 즉, DNS recursive resolver를 사용했다는 의미다. Authoritative nameserver가 아니므로 변경 사항이 반영되지 않았을 수 있기 때문에 이런 경고를 띄우는 건데, DNS 조회시 권한있는 이름 서버를 명시적으로 명령하면 이 경고를 없앨 수 있다.
NS 쿼리 타입을 사용한다
NS type의 answer가 두개 존재한다. ns1-2.ns-ncloud.com의 네임서버의 데이터 길이는 21인 answer와 ns1-1.ns-ncloud.com의 네임서버의 데이터 길이는 8인 answer다.
DNS 응답은 Non-authoritative answer를 반환한다
8.8.8.8로 type A 쿼리 메시지가 발송되었다.
DNS 응답 메시지에는 type A의, non-authoritative, TTL 300초의 Answer가 포함되어있다.
넹. TLS Client Hello & Server Hello로 시작하는것이 보임
Client Hello Content Type: Handshake (22)
Server Hello Content Type: Handshake (22)
Cipher Suite에 담아서 보낸다. TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256
넹. brotli 알고리즘으로 압축해서 보낼 것을 요구함
Client Hello 프로토콜은 TLS 1.0, Server Hello프로토콜은 TLS 1.2. Client Hello가 지원가능한 프로토콜 버전을 명시해서 보냄
HTTP. Server Hello가 상위 프로토콜을 명시해서 보냄
Client Hello: 송신 포트: 49405 수신 포트: 443
Server Hello: 송신 포트: 443 수신 포트: 49405
41번. 클라이언트와 서버가 Change Cipher Spec을 서로에게 보내면 통신 준비가 완료 되어 핸드쉐이크는 종료된다