이전 포스트 : https://bans.tistory.com/5
위의 게시글에서 DNS 프로토콜의 헤더와 패킷분석까지 진행했다.
tracert (traceroute) 라는 명령어를 통해
실제 도메인 주소 (blog.example.com.) 을 통해 ip주소의 라우팅 경로를 모두 알 수 있으며,
이를 wireshark 를 통해 분석함으로써 라우팅 경로를 모두 알 수 있다.
참조 블로그 : programming119.tistory.com/154 | m.blog.naver.com/shj1126zzang/220058972700
다음으로,
실제 url 주소를 입력하여 접속하는 과정에서의 패킷캡쳐를 통해
TCP / HTTP 프로토콜을 분석해보았다.
(ex. menapay.co.kr) (이 도메인을 선정한 이유는, https 가 적용되지 않은, 예전에 간단히 작업했던 웹페이지이기에 선정했다)
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
2. HTTP
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 > OSI 7 Layers' 카테고리의 다른 글
[정리] 내 디바이스가 웹서버와 연결하기까지 [1] (DHCP / IP / ARP / DNS ) (0) | 2021.02.01 |
---|---|
ip 할당과정에 필요한 프로토콜 (ARP, DHCP, UDP, DNS) (0) | 2021.01.28 |
와이어샤크(Wireshark) 를 이용한 패킷캡쳐/분석하기 (0) | 2021.01.26 |
OSI 7 Layer Model 에 대하여 (0) | 2021.01.25 |