2022. 4. 10. 23:20ㆍTech/Network
- 목차
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다.
서론
이전에 올린 Network 관련 글들에서, 데이터를 전송한다는 표현을 많이 했습니다. 그럼 데이터의 전송은 어떻게 이뤄질까요?
본론에 들어가기 앞서, 일반적으로 물건을 옮긴다는 상황을 생각해 보겠습니다. 저 같은 경우 간단하게 장을 보기도 하지만, 종종 손으로 들고 가기에는 많은 양의 물건을 사곤 합니다. 그럴 경우 여러 번 왔다 갔다 할까요? 아니죠, 봉지나 바구니 등 물건을 담을 수 있는 무언가에 물건들을 담고 들고 갑니다.
데이터도 마찬가지입니다. 바구니 같은 보관 수단에 담아 주고받는 게 일반적이죠. 이미지 파일을 주고받는 상황에서 이미지 파일의 정보뿐 아니라, 어디서 온 것인지, 어떤 프로토콜을 사용하는지, 암호화가 되어있다면 키는 무엇인지 등...
여타 필요한 정보들이 많을 테니 함께 묶어서 보내는 게 당연할 수 있겠습니다. 이런 묶음을 패킷(Packet)이라 합니다.
패킷(Packet)
패킷(Packet) = 화물(Package) + 덩어리(Bucket)의 합성어입니다. 단어의 뜻에서 보듯이, 위에서 예를 들었듯이 통신에서 주고받는 데이터의 구조(데이터의 묶음 단위)라고 생각하면 됩니다.
웹 통신은 전체 처리할 데이터를 일정 크기로 나누어 주고받습니다. 근데 요청이 잦을수록 좋지 않다고 알고 있지 않나요? 그런데, 한 번에 처리할 거 다 보내서 처리받으면 될 텐데 왜 일정 크기로 나누면서 여러 번 주고받는 거죠? 답은 간단합니다. 처리하는데 오래 걸리니까요. 한 번에 다 받아서 처리하고 보내주면, 이 데이터를 처리하는 동안 다른 녀석들은 오래 기다려야 합니다. 또한 중간에 실패라도 한다면 그 큰 크기를 다시 처리해야 하니까 일정 크기로 나누어 처리하고 보내주는 식으로 진행이 되는 것입니다.
패킷을 다르게 정의해 보면 네트워크상에 주고 받는 데이터 블록입니다.
이전 글에서 부터 말했던 주고받는 메시지, 텍스트, 데이터 모두 이 패킷인 겁니다.
패킷의 구조
HTTP 통신으로 보내는 패킷은 크게 헤더(Header)와 바디(Body) 부분으로 나뉩니다. 헤더는 데이터 이외에 HTTP 선두에 삽입되는 부분을 말하며, 목적에 따라 응답/요청 헤더로 나뉩니다. 바디는 실제 데이터 부분입니다. 페이로드(Payload)라고도 하며 html텍스트 이외에도 이미지 등과 같은 이진 데이터도 가능합니다. 헤더와 바디 부분의 구분은 라인 공백(CRLF)으로 구분합니다. 그럼 요청과 응답 패킷을 살펴보도록 하겠습니다.
[요청/응답 라인] [헤더] [CRLF] [바디]
헤더 부분의 각 항목(각 줄)을 보면 일정한 구조를 가집니다.(이름 - value 구조)
예시) Host : www.naver.com => 호스트명 항목, 호스트명은 “www.naver.com” 이처럼 [이름 : value]의 나열이 이어지며 공백 줄일 경우 헤더의 끝을 의미
요청 패킷
클라이언트에서 서버로부터 보내는(요청) 패킷입니다.
첫 번째 라인 부분을 '요청 라인'이라고 부릅니다. 텍스트로 표시하면 다음과 같습니다.
그림의 첫 번째 줄인 요청 라인 [GET(공백)/(공백) HTTP/1.1] 부분을 살펴보겠습니다.
요청라인에 포함된 정보는 요청 방식 / 요청 url / http버전입니다. 해석해보면 GET Method를 사용하고, /(root 경로) url로 http 1.1을 사용하겠다는 뜻입니다. 각 부분은 공백(Space)으로 구분합니다.
이러한 요청라인 다음으로 헤더 부분이 나옵니다. 요청 패킷의 바디 부분은 POST 요청의 경우 사용자들에게 정보를 보이지 않게 하기 위하여 인코딩해서 바디 부분에 넣어 요청하기 때문에 비어있지 않고, 그 외에는 비어있는 상태라고 합니다.
응답 패킷
클라이언트의 요청에 따른 결과를 서버가 보내주는(응답)데 사용하는 패킷
요청 라인 대신 응답 라인(상태 라인이라고도 한다)이 있고, 이곳에는 http버전과 요청 성공 여부와 그 이유가 포함됩니다.
위 이미지 가장 첫번째줄을 보겠습니다. [HTTP/1.1 200 OK] 부분이 있을 것입니다. 해석해보면, "http 1.1 버전이 이용되었으며 요청 성공(200)했고 요청이 받아들여젔기(OK) 때문"입니다. '200' 은 상태 코드라고 해서 3자리 숫자로 이루어져 있으며 다음과 같은 의미를 가집니다.
100~ : 정보성
200~ : 성공
300~ : 리다이렉트
400~ : 클라이언트 오류
500~ : 서버 오류
인터넷을 이용하다보면 가끔 404 Not found라는 페이지를 볼 때가 있죠. 여기서 404가 바로 상태 코드입니다. 400번대 이니까 클라이언트 오류라는 뜻이고, 404 코드는 클라이언트가 서버에서 파일을 찾지 못했을 때 응답받는 상태 코드입니다. 결국 요청이 클라이언트 오류로 실패했다는 뜻이 되는 것이죠.
응답 패킷의 바디에는 요청에따라 서버에서 보내주는 데이터들이 들어갑니다. 이미지, html 등등
리소스 출처
[그림 1~3] : 분도랑, http://withbundo.blogspot.com/2017/07/http-10-http.html
'Tech > Network' 카테고리의 다른 글
[Network]프로토콜(Protocol) - https의 보안 (0) | 2022.04.10 |
---|---|
[Network]프로토콜(Protocol) - http / https (0) | 2022.04.10 |