패킷?
패킷(Packet) = 화물(Package) + 덩어리(Bucket) 의 합성어이다. 단어의 뜻에서 보듯이 통신에서 주고 받는 데이터의 구조(데이터의 묶음 단위)라고 생각하면 된다. 웹 통신은 전체 처리할 데이터를 일정 크기로 나누어 주고 받는다. 사실 요청이 잦을수록 좋지 않다면, 한번에 처리할거 다 보내서 처리 받으면 될텐데 왜 일정크기로 나눈거지? 답은 간단하다. 처리하는데 오래 걸리니까. 한번에 다 받아서 처리하고 보내주면, 이 데이터를 처리하는동안 다른 녀석들은 오래 기다려야 한다. 또한 중간에 실패라도 한다면 그 큰크기를 다시 처리해야 하니까 일정크기로 나누어 처리하고 보내주는 식으로 진행이 되는 것이다.
간단히 정리하자면 네트워크상에 주고 받는 데이터 블록이다.
이전 포스트에서 말했던 주고받는 메시지, 텍스트, 데이터 모두 이 패킷인것이다.
패킷의 구조
HTTP 통신으로 보내는 패킷은 크게 헤더(Header)와 바디(Body)부분으로 나뉜다. 헤더는 데이터 이외에 HTTP 선두에 삽입되는 부분을 말하며, 목적에따라 응답/요청 헤더로 나뉜다. 바디는 실제 데이터 부분이다. 페이로드(Payload)라고도 하며 html텍스트 이외에도 이미지등과 같은 이진데이터도 가능하다. 헤더와 바디부분의 구분은 라인공백(CRLF)으로 구분한다. 요청과 응답 패킷을 살펴보도록 하겠다.
[요청/응답 라인] [헤더] [CRLF] [바디]
헤더부분의 각 항목(각 줄)을 보면 일정한 구조를 가진다. 바로 이름 - value 구조이다. 예시) Host : www.naver.com => 호스트명 항목, 호스트명은 “www.naver.com” 이처럼 [이름 : value]의 나열이 이어지며 공백줄일 경우 헤더의 끝을 의미한다.
요청 패킷
클라이언트에서 서버로부터 보내는(요청) 패킷이다. [출처 : 분도랑, http://withbundo.blogspot.com/2017/07/http-10-http.html]
위 이미지는 요청패킷의 구조를 예시로 든것이다. 첫번째 라인부분을 ‘요청라인’ 이라고 부른다. 텍스트로 표시하면 다음과 같다.
[출처 : 분도랑, http://withbundo.blogspot.com/2017/07/http-10-http.html]
위 그림의 첫번째 줄인 요청라인 [GET(공백)/(공백)HTTP/1.1] 부분을 살펴보자. 요청라인에 포함된 정보는 요청방식 / 요청url / http버전 이다. 해석해보면 GET Method를 사용하고, /(root 경로) url로 http 1.1을 사용하겠다는 뜻이다. 각 부분은 공백(Space)으로 구분한다. 이러한 요청라인 다음으로 헤더부분이 나온다.
요청패킷의 바디부분은 POST 요청의 경우 사용자들에게 정보를 보이지 않게 하기위하여 인코딩해서 바디부분에 넣어 요청하기때문에 비어있지 않고, 그외에는 비어있는 상태라고한다.
응답 패킷
클라이언트의 요청에 따른 결과를 서버가 보내주는(응답)데 사용하는 패킷이다. [출처 : 분도랑, http://withbundo.blogspot.com/2017/07/http-10-http.html]
요청라인 대신 응답라인(상태라인이라고도 한다)이 있고, 이곳에는 http버전과 요청성공여부와 그 이유가 포함된다.
[출처 : 분도랑, http://withbundo.blogspot.com/2017/07/http-10-http.html]
위 이미지 가장 첫번째줄을 보자. [HTTP/1.1 200 OK] 부분이 있을것이다. 해석해보면, “http 1.1 버전이 이용되었으며 요청 성공(200)했고 요청이 받아들여젔기(OK) 때문” 이다. ‘200’ 은 상태코드라고 해서 3자리 숫자로 이루어져있으며 다음과 같은 의미를 가진다.
- 100~ : 정보성
- 200~ : 성공
- 300~ : 리다이렉트
- 400~ : 클라이언트 오류
- 500~ : 서버 오류
인터넷을 이용하다보면 가끔 404 Not found 라는 페이지를 볼때가 있다. 여기서 404가 바로 상태코드이다. 400번대 이니까 클라이언트 오류라는 뜻이고, 404코드는 클라이언트가 서버에서 파일을 찾지 못했을때 응답받는 상태코드이다. 결국 요청이 클라이언트 오류로 실패했다는 뜻이다.
응답 패킷의 바디에는 요청에따라 서버에서 보내주는 데이터들이 들어간다. 이미지, html 등등