네트워크 실습

지니🧸·2023년 9월 21일
0

GDSC

목록 보기
8/12

Lab 1: HTTP

1. 단순 요청/응답 HTTP 프로토콜

1) 여러분들의 브라우저는 어떤 HTTP 버젼을 사용하나요? 서버는 어떤 HTTP 버젼을 사용하나요? HINT : 1.0 혹은 1.1 일 가능성이 높습니다.

HTTP 1.1을 사용한다

2) 어떤 종류의 언어를 인식할 수 있다고 브라우저가 서버에게 알려주나요?

accept할 수 있는 포맷 (text/html, application/xhtml+xml, application/xml, image/avif 등)이 존재한다고 알려준다

3) 어떤 HTTP status code를 받았나요?

처음 요청을 날렸을 때는 http://yonsei.riphttp://yonsei.rip/로 리다이렉트하는 응답을 받아 301 Moved Permanently 응답 코드를 받았다.

리다이렉트 된 후에는 페이지를 정상적으로 받아 200 OK를 받았다.

4) 현재 수신받은 html은 언제 마지막으로 수정되었나요?

현재 수신 받은 html은 2023년 5월 1일에 마지막으로 수정되었다

5) 이 html의 크기는 얼마인가요?

파일 데이터는 gzip 인코딩되어 515바이트다

6) 이 html은 어떤 방식으로 인코딩되어 전송되었나요?

이 html은 gzip 방식으로 인코딩되었다.

2. HTTP 캐싱

7) 첫 GET 요청을 관찰하였을 때, “If-Modified-Since” 관련 항목이 관찰되나요?

아니요. 첫번째 GET 요청은 리다이렉트되고, 두번째 요청에서 html페이지를 응답 받으며, 세번째 요청에서 If-Modified-Since을 관찰할 수 있다.

8) 두 번째 GET 요청에서 관찰되는 “IF-None-Match”는 어떤 역할을 수행할까요?

If-None-Match는 요청을 조건부로 만든다. 값으로 서버가 반환한 ETag (entity-tag) 값을 가지는데, 서버가 제공하는 컨텐츠의 변경여부를 확인하기 위해 사용된다.

9) 첫 번째 GET 요청과 두 번째 GET 요청은 어떤 차이가 있을까요? 어떤 항목을 비교하여 캐시가 존재하는지 브라우저가 확인할까요?

첫번째 GET 요청은 페이지를 처음 받아오고, 두번째 GET 요청은 이론적으로 캐시에서 페이지를 받아온다는 점에서 차이가 있다. 브라우저는 If-Modified-Since 항목으로 캐시의 유효성을 검증하고 If-None-Match는 ETag값을 가지는 캐시가 있는지 확인한다

내 실습의 경우 Cache-Control: max-age=0 설정이 되어있어 캐시를 활용하지 않은 것으로 보인다

3. HTTP를 통한 대용량 파일 전송

10) 브라우저가 몇 개의 GET 요청을 전송하였나요? 몇 번 패킷이 html 관련 헌법 정보를 담고있나요?

브라우저는 리다이렉트된 첫 GET 요청, 응답을 받아온 두번째 GET 요청, 도합 두번 요청을 전송했다.

41, 42, 43 프레임이 헌법 정보를 담고 있다.

11) 몇 번째 패킷이 HTTP 응답을 담고 있나요? 하나의 대용량 html 파일에 대하여 몇 개의 TCP 응답을 서버에서 보냈나요? 몇 개의 HTTP 응답을 서버에서 보냈나요?

서버는 하나의 대용량 파일에 대해 3개의 TCP 응답(#41~43)을 보냈다. 하나의 HTTP 응답을 보냈다.

12) 어떤 응답 코드와 응답 문구가 사용되었나요?

4. 외부 객체가 삽입된 형태의 HTML 파일 전송

13) 이번에는 몇 개의 GET 요청을 보냈나요? GET 요청을 보낸 서버의 IP 주소는 각각 어떻게 되나요? 어떤 IP 주소가 yonsei.rip 이고 어떤 IP 주소가 연세대 이미지 서버인가요?

리다이렉트된 첫 요청을 제외하면 총 두번의 GET 요청을 서버에 보냈다.

yonsei.rip의 IP주소(IPv4)는 101.101.211.92이고, 연세대 이미지 서버는 165.132.13.38이다.

14) 각 요청에 대한 응답 코드와 문구는 어떻게 되나요? 왜 하나는 응답 코드가 200이고 다른 것들은 301이 나올까요? 각 응답 코드는 어떤 의미를 담고있나요?

첫 요청은 리다이렉트되어 301 Moved Permanently를 받는다

두번째 요청은 html 파일을 받아 200 OK를 받는다

세번째 요청은 유효한 이미지가 있는 주소로 리다이렉트해서 301 Moved Permanently를 반환한다

15) 301 응답 코드를 담은 코드를 보면, 어떤 URL로 리디렉션 되어야 하는지 어떻게 알 수 있을까요? 이에 대하여 브라우저는 새로운 요청을 생성하였나요? HINT: http 필터를 없애고, Destination IP 주소를 비교하여 보세요. 새로운 요청이 연세대 이미지 서버로 생성되었나요?

301 응답 코드를 담은 코드의 Location을 확인하면 어떤 URL로 리다이렉트되었는지 알 수 있다.

16) 브라우저는 이미지를 다운로드 받을 때 병렬적으로 다운로드 받나요? 어떻게 병렬적인지/병렬적이지 않은지 알 수 있죠? 이에 대하여 자신만의 논리로 설명해주세요.

TCP 연결이 성립된 시간을 비교해 병렬적으로 다운로드되었는지 확인할 수 있다. 첫 TCP 연결이 닫히기 전에 두번째 TCP 연결이 열리면 병렬처리되었다고 할 수 있다.

여기에서는 텍스트 파일을 받기 위한 TCP 연결이 종료된 후에 이미지를 받기 위한 연결이 시작되어 병렬적이지 않게 다운로드되었다고 생각한다

2. Lab 2: DNS

1) DNS 쿼리 요청과 응답을 관찰해보세요. UDP와 TCP 중 어떤 프로토콜이 활용되었나요? DNS는 반드시 UDP와 TCP 중 하나의 프로토콜만을 활용하나요?

UDP가 활용되었다. DNS은 연결 속도가 중요하기 때문에 UDP를 선호한다.

하지만 메시지 크기가 512 byte보다 크거나, zone transfer를 수행해야 할 때는 TCP를 사용한다

2) DNS 쿼리 패킷의 수신 포트(destination port)는 무엇인가요? DNS 응답 패킷의 송신 포트(source port)는 어떻게 되나요?

DNS 쿼리패킷의 수신 포트는 53이다
DNS 응답 패킷의 송신 포트는 53이다.

3) DNS 쿼리 패킷은 어떤 IP 주소가 목적지로 설정되어 있나요? ipconfig / ifconfig 명령어를 활용하여 로컬 DNS 서버 IP주소를 확인하여 주세요. 둘의 IP 주소가 일치하는 것이 존재하나요?

DNS쿼리 패킷은 ifconfig 명령어를 활용하여 나오는 로컬 DNS서버다

4) DNS 쿼리 패킷을 관찰하여보세요. 어떤 “Type”를 가진 DNS 쿼리 메시지가 활용되었나요? 쿼리 메시지는 Answer(Answer RRs) 관련 정보를 가지고 있나요?

첫 쿼리는 A type, 즉 IPv4 주소를 묻는 쿼리 타입이다. 쿼리에는 Answer는 없지만 응답에는 존재한다.

두번째 쿼리는 HTTPS type으로, HTTPS로 서비스를 접근하는데 필요한 설정 정보와 파라미터를 요청하고 전달한다.

5) DNS 응답 패킷을 확인해주세요. 어떤 종류의 Answer가 포함되어 있나요? 모든 응답 패킷은 동일한 Answer를 포함하고 있나요? 왜 다른 종류의 Answer를 포함하고 있을까요? 이것이 의미하는 바는 무엇일까요?

첫 응답은 authoritative nameserver 정보를 전달한다.

두번째 응답은 A type의 Answer가 존재한다. 응답은 다양한 레코드 종류일 수 있는데, alias면 CNAME, 메일이면 MX, IPv6 주소면 AAAA 등이 있다. 어떤 레코드인지를 나타내기 위해 다양한 종류가 존재한다.

HTTPS binding을 활용하기 위해 다른 종류의 Answer 포함하는 것으로 보인다.

6) 이 페이지는 현재 이미지를 포함하고 있습니다. 이 이미지를 다운로드 받을 때 새로운 DNS 쿼리를 생성하나요?

7) DNS 쿼리 패킷의 수신 포트(destination port)는 어떻게 되나요? DNS 응답 패킷의 송신 포트(source port)는 어떻게 되나요?

DNS 쿼리 패킷의 수신 포트는 53이고, 송신 포트는 53111다.
DNS 응답 패킷의 수신 패킷은 53111고, 송신 포트는 53이다.

8) DNS 쿼리 메시지를 확인하여 주세요. 어떤 종류의 “Type”를 사용하나요?

쿼리는 A type을 사용한다.

9) DNS 응답 메시지를 확인하여 주세요. 이 패킷에는 Answer가 포함되어 있나요? 어떤 종류의 Answer가 있나요?

Non-authoritative answer를 포함한다. 즉, DNS recursive resolver를 사용했다는 의미다. Authoritative nameserver가 아니므로 변경 사항이 반영되지 않았을 수 있기 때문에 이런 경고를 띄우는 건데, DNS 조회시 권한있는 이름 서버를 명시적으로 명령하면 이 경고를 없앨 수 있다.

10) DNS 쿼리 메시지를 확인하여 주세요. 어떤 종류의 “Type”를 사용하나요?

NS 쿼리 타입을 사용한다

11) DNS 응답 메시지를 확인하여 주세요. 이 패킷에는 Answer가 포함되어 있나요? 어떤 종류의 Answer가 있나요?

NS type의 answer가 두개 존재한다. ns1-2.ns-ncloud.com의 네임서버의 데이터 길이는 21인 answer와 ns1-1.ns-ncloud.com의 네임서버의 데이터 길이는 8인 answer다.

DNS 응답은 Non-authoritative answer를 반환한다

12) DNS 쿼리 메시지를 확인하여 주세요. 어떤 IP 주소로 메시지가 발송되었나요? 어떤 종류의 “Type”를 사용하나요?

8.8.8.8로 type A 쿼리 메시지가 발송되었다.

13) DNS 응답 메시지를 확인하여 주세요. 이 패킷에는 Answer가 포함되어 있나요? 어떤 종류의 Answer가 있나요? 이 Answer의 Time to live는 어떻게 되나요?

DNS 응답 메시지에는 type A의, non-authoritative, TTL 300초의 Answer가 포함되어있다.

Lab 8 : TLS/SSL

1) 통신을 수립하는 과정에서 TLS handshake 과정을 거쳤나요? 어떻게 알 수 있죠?

넹. TLS Client Hello & Server Hello로 시작하는것이 보임

2) Client Hello의 Content Type은 어떻게 되나요? Server Hello의 Content Type은 어떻게 되나요?

Client Hello Content Type: Handshake (22)
Server Hello Content Type: Handshake (22)

3) Client Hello에서 서버에게 사용 가능 암호화 프로토콜을 보내나요? 보낸다면, 어떤 사용 가능 암호화 프로토콜을 보내는 지 3개 적어주세요.

Cipher Suite에 담아서 보낸다. TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256

4) Client Hello에서 인증서를 요구하나요? 인증서를 압축해서 보내라고 요구하나요? 어떤 압축 방식을 요구하죠?

넹. brotli 알고리즘으로 압축해서 보낼 것을 요구함

5) Client Hello 프로토콜과 Server Hello 프로토콜 버젼은 같나요? 다르다면 어떻게 프로토콜 버젼을 맞췄는지 설명해주세요.

Client Hello 프로토콜은 TLS 1.0, Server Hello프로토콜은 TLS 1.2. Client Hello가 지원가능한 프로토콜 버전을 명시해서 보냄

6) 두 프로토콜의 상위 프로토콜은 어떻게 되나요? 어떻게 그 정보를 알 수 있나요?

HTTP. Server Hello가 상위 프로토콜을 명시해서 보냄

7) Client Hello 패킷의 송신 포트와 수신 포트는 어떻게 되나요? Server Hello 패킷의 송신 포트와 수신 포트는 어떻게 되나요? 어떤 암호화 어플리케이션 프로토콜인지 추측이 가능한가요?

Client Hello: 송신 포트: 49405 수신 포트: 443
Server Hello: 송신 포트: 443 수신 포트: 49405

8) TLS 통신 중 몇 번 패킷이 통신 종료 내용을 담고 있나요? 어떻게 알 수 있나요?

41번. 클라이언트와 서버가 Change Cipher Spec을 서로에게 보내면 통신 준비가 완료 되어 핸드쉐이크는 종료된다

profile
우당탕탕

0개의 댓글