Network/OSI 7 Layers

[정리] 내 디바이스가 웹서버와 연결하기까지 [2] ( TCP / HTTP )

Bans 2021. 2. 2. 02:51
이전 포스트 : https://bans.tistory.com/5
 

[정리] 내 디바이스가 웹서버와 연결하기까지 [1] (DHCP / IP / ARP / DNS )

내 디바이스가 웹 서버와 연결하기까지 [1] (DHCP / IP / ARP / DNS )  - Wireshark 를 통한 패킷캡쳐 OSI 7 Layers - 7계층 구조를 통해 네트워크의 구성요소와 각 계층의 특징 / 역할 / 대표 프로토콜 등..

bans.tistory.com

위의 게시글에서 DNS 프로토콜의 헤더와 패킷분석까지 진행했다.

 

tracert (traceroute) 라는 명령어를 통해

실제 도메인 주소 (blog.example.com.) 을 통해 ip주소의 라우팅 경로를 모두 알 수 있으며,

이를 wireshark 를 통해 분석함으로써 라우팅 경로를 모두 알 수 있다.

 

참조 블로그 : programming119.tistory.com/154 | m.blog.naver.com/shj1126zzang/220058972700

 

[패킷 분석] tracert 분석

이번에는 tracert 패킷을 분석해보자. 1. tracerttracert는 패킷이 목적지까지 도달하는 동안 거치는 라우...

blog.naver.com

 

[네트워크📶] Tracert 작동원리 / Traceroute 작동 방식 ✨

들어가기 앞서 Traceroute는 ICMP Error메세지를 통해 진행됩니다. ICMP 프로토콜의 원리를 알고 계시면 좋습니다. 링크 : Traceroute / Tracert 작동방식 특정 IP까지의 라우팅 경로를 알고 싶을때, 운영체제

programming119.tistory.com

 

다음으로,

실제 url 주소를 입력하여 접속하는 과정에서의 패킷캡쳐를 통해

TCP / HTTP 프로토콜을 분석해보았다.

(ex. menapay.co.kr) (이 도메인을 선정한 이유는, https 가 적용되지 않은, 예전에 간단히 작업했던 웹페이지이기에 선정했다)

 

HTTP 패킷을 우클릭 - > Follow -> TCP Stream 을 통해 정렬한 결과

 

1. TCP

* TCP Window Update : 흐름 제어를 위해 Window Size 를 조절하는 것

 

#Data Send / Receive 과정

# TCP Flag 종류와 의미

 

SYN(Synchronization) : 세션을 설정하는 데에 사용되며 초기에 임의생성된 시퀀스 번호를 보내게 된다.


ACK(Acknowledgement) : 
받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK를 보낸다.

ACK의 번호와 응답을 통해 보낸 패킷에 대한 손실을 판단하여 재전송 하거나 다음 패킷을 전송한다. 


FIN(Finish) : 세션을 종료시키는 데에 사용되며 보낸 사람이 더이상 보낸 데이터가 없음을 보여준다. 


RST(Reset) :재설정(Reset)을 하는 과정이며 양방향에서 동시에 일어나는 중단 작업이다. 비 정상적인 세션 연결 끊기에 해당한다

 
PSH(Push) : 대화형 트랙픽에 사용되는 것으로 버퍼가 채워지기를 기다리지 않고 데이터를 전달한다.

데이터는 버퍼링 없이 바로 위 Layer가 아닌 7 Layer의 응용프로그램으로 바로 전달한다. 


URG(Urgent) : Urgent pointer 유효한 것인지를 나타낸다.

Urgent pointer란 전송하는 데이터 중에서 긴급히 전당해야 할 내용이 있을 경우에 사용한다

 

참고 블로그 : https://m.blog.naver.com/tkdldjs35/221838726823
 

[02] WireShark를 이용한 TCP/UDP 패킷 분석

실습 환경정보 Client IP : 192.168.183.209 [ Windows PC ] Server IP : 192.168.183.211 [ Hyp...

blog.naver.com

 

 

2. HTTP

간략하게 보는 HTTP Header

 

HTTP 공통 헤더 (General Header)

HTTP 헤더 내 일반 헤더  항목

- 요청 및 응답 메시지 모두에서 사용 가능한 일반 목적의 (기본적) 헤더 항목

 

* 주요 항목들

- Date : HTTP 메시지를 생성한 일시 

- Connection : 클라이언트와 서버 간 연결에 대한 옵션 설정 ( close, Keep-Alive 등 )

- Cache-Control : (쿠키/캐시 관련)

- Pragma

- Trailer


HTTP 엔티티 헤더 (Entity Header)

HTTP 헤더 내 엔티티/개체 해더 항목

- 요청 및 응답 메시지 모두에서 사용 가능한 Entity (콘텐츠, 본문, 리소스 등)에 대한 설명 헤더 항목

> HTTP 메시지 내 포함된 선택적인 개체에 대한 구체적인 미디어 타입 등의 설명

> HTTP 메시지는 이미지, 비디오, 오디오, HTML 문서, 전자메일 등의 개체들을 운반할 수 있다.

 

* 주요 항목들

- Content-Type : 해당 개체에 포함되는 미디어 타입 정보. 컨텐츠 타입 및 문자 인코딩 방식 지정. [공통]

Ex) Content-Type : text/html; charset-latin-1

- Content-Language : 해당 개체와 가장 잘 어울리는 사용자 언어 [공통]

- Content-Encoding : 해당 개체 데이터의 압축 방식 [공통]

Ex) Content-Encoding: gzip, deflate

- Content-Length : 전달되는 해당 개체의 바이트 길이 또는 크기 [공통]

- Content-Location : 해당 개체의 실제 위치를 알려준다 [공통]

- Content-Dispisition : 응답 Body 를 브라우저가 어떻게 표시해야할지 알려준다. [응답]

> inline 인 경우 웹페이지 화면에 표시되고, attachment인 경우 다운로드한다.

Ex) Content-Disposition: inline

Ex) Content-Disposition: attachment; filename='filename.csv'

- Content-Security-Policy : 다른 외부 파일들을 불러오는 경우, 차단할 소스와 불러올 소스를 명시한다. [응답]

Ex) Content-Security-Policy: default-src https: // https를 통해서만 파일을 가져온다

Ex) Content-Security-Policy: default-src 'self' // 자신의 도메인의 파일들만 가져온다

Ex) Content-Security-Policy: default-src 'none' // 파일을 가져올 수 없다.

- Location : 리소스가 리다이렉트 된 때에 이동된 주소, 또는 새로 생성된 리소스 주소를 명시한다. [응답]

> 새로 생성된 리소스의 경우 202 Created 반환

- Last-Modified : 리소스를 마지막으로 갱신한 일시 [응답]

- Transfer-Encoding [응답]


HTTP 요청 헤더 (Request Header)

HTTP 헤더 내 요청 헤더 항목

-  요청 헤더는 HTTP 요청 메시지 내에서만 나타나며, 가장 방대하다

 

* 주요 항목들

- Host : 요청하는 호스트에 대한 호스트명 및 포트번호 (필수)

- User-Agent : 클라이언트 소프트웨어 명칭 및 버전 정보

- From : 클라이언트 사용자 메일 주소

- Cookie : 서버에 의해 Set-Cookie로 클라이언트에게 설정된 쿠키 정보 [쿠키/캐시]

- Referer : 바로 직전에 머물렀던 웹 링크 주소

- If-Modified-Since : 제시한 일시 이후로만 변경된 리소스를 취득 요청

- Authorization : 인증 토큰(JWT/Bearer 토큰)을 서버로 보낼 때 사용되는 헤더

- Origin : 서버로 POST 요청을 보낼 때, 요청이 어느 주소에서 시작되었는지 나타낸다.,

 

- Accept : 클라이언트 자신이 원하는 미디어 타입 및 우선순위를 알린다.

- Accept-Charset : 클라이언트 자신이 원하는 문자 집합

- Accept-Encoding : 클라이언트 자신이 원하는 문자 인코딩 방식

- Accept-Language : 클라이언트 자신이 원하는 가능한 언어

>> 이 네 개의 항목은 HTTP 에서 Body 의 속성 또는 내용 협상용 항목들이며,

Entity Header 항목 안에 Content-Type, Content-Type

charset-xxx, Content-Encoding, Content-Language 과 일데일로 대응된다.

 


HTTP 응답 헤더 (Response Header)

HTTP 헤더 내 응답 해더 항목

- 특정 유형의 HTTP 요청이나 특정 HTTP 헤더를 수신했을 때, 이에 응답한다.

 

* 주요 항목들

- Server : 서버 소프트웨어 정보

- Accept-Range

- Set-Cookie : 서버측에서 클라이언트에게 세션 쿠키 정보를 설정 [쿠키/캐시 관련]

- Expires : 리소스가 지정된 일시까지 캐시로서 유효함을 나타낸다 - 만료일시를 표기 [쿠키/캐시 관련]

- Age : 캐시 응답. max-age 시간 내에서 얼마나 흘렀는지 초 단위로 알려준다. [쿠키/캐시 관련]

- ETag : HTTP 컨텐츠가 바뀌었는지를 검사할 수 있는 태그 [쿠키/캐시 관련]

- Proxy-authenticate

- Allow : 헤당 엔티티에 대해 서버 측에서 지원 가능한 HTTP 메소드의 리스트를 나타낸다.

Ex) Allow: GET, HEAD

- Access-Control-Allow-Origin : 요청을 보내는 프론트 주소와 받는 백엔드 주소가 다르면 CORS 에러발생

 


HTTP 캐시/쿠키 관련 헤더

 

 

참고 블로그 : https://gmlwjd9405.github.io/2019/01/28/http-header-types.html
 

[Network] HTTP 헤더의 종류 및 항목 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io