노션에 적은 글을 벨로그로 옮겼습니다.
많은 패치와 수정속에서 글이 보기 좋지않게되었습니다. 해당 문서는 아래 노션 링크를 참조해주세요
https://www.notion.so/TCP-IP-HTTP-f93939d5068348939180acef92bf2bae
: 인터넷 네트워크, 혹은 웹이라는 기술에서 쓰이는 용어인데
정보를 주거나 받기 위해서 지켜야 할 규칙 (약속)
프로토콜이 맞는 예
req) 번호좀 알려주세요
res) 010 - 1234 - 5678
프로토콜이 맞지 않는 예
req) 번호좀 알려주세요
res) 010 - 001 010 011 100 - 101 110 111 000 오버플로익셉션인데요?
req).. (도망)
너무 당연하지만 사람들사이에서 숫자를 말할때는 당연히 10진수로 말해야한다는 규칙이 있다. 이것또한 일종의 프로토콜
실제로 다양한 프로토콜을 사용하는 예시를 보면
TCP : Transmission Control Protocol
IP : Internet Protocol
UDP : User Datagram Protocol
Https : secure Hyper Text Transer Protocol
Http : Hyper Text Transer Protocol
FTP : File Transfer Protocol
sFTP, FTPs, tFTP
Telnet : Terminal Network
SSH : Secure Shell
SMTP : Simple Mail Transfer Protocol
: HTTP는 TCP/IP 로 이루어졌다는데 이건 또 뭘까?
TCP : Transmission Control Protocol, 전송 제어 프로토콜
: Transmission Control, 즉 전송제어를 달성하기 위해서는 몇가지 핵심 특징이 있는데
연결의 시작과 끝 : 3-way handshaking, 4-way handshaking
Flow Control : 흐름제어
Congestion Control : 혼잡제어
Packet Switching : 패킷 스위칭, TCP/IP 이전에는 패킷스위칭이 아닌 써킷스위칭이라서 회선의 중간에 하나를 단선시키면, 네트워크가 불능이 되는 방식이였다
: 그리고, 이 패킷 스위칭 덕분에, 중간에 패킷이 하나가 분실되도 재 전송을 요청하면 되기 때문에, 데이터의 무결성을 보장할 수 있다. 그래서 이메일이나 소스코드, 파일전송과 같은 분야에 쓰임
IP : Internet Protocol, 인터넷 프로토콜
: 모든 컴퓨터에 주소(Address)를 할당해서 각 컴퓨터에게 필요한 정보를 전송한다. 이 인터넷상의 주소를 IP Address 라고 부른다.
Packet , 패킷 이란 네트워크 상에서 정보를 주고받을 때 쓰는 "표준택배상자"
Capsulation : 위의 패킷에서 택배를 싸는데, 내용물만 보내는게 아니라 내용물에다가 택배상자를 붙이고, 완충재를넣고, 테이프를 붙여서 마감하고, 접수하고, 송장을 붙이는것까지의 일련의 과정이 있다. 이러한 과정을 Capsulation
ENCapsulation : 택배를 싸는과정
DECapsulation : 택배를 푸는 과정, 이건 택배를 쌀때의 반대순서로 작업을 하면 된다.
결론 : Capsulation 의 정확한 정의는 데이터를 Packet이라는 택배박스에다가 목적지 까지 잘 갈수 있도록 포장하고, 받고도 택배박스에서 내용물을 꺼내기까지 모든 과정에 대한 작업을 지칭함
: OSI-7레이어라는게 있다는데, 내가 봤을때 이건 안다룰수 없으면서도 왜다루는지 모르겠다.
내 생각에 이건 마치 군대에서 그냥 판쵸우의 갈아입는 법을 판쵸우의 착용 7단계 구분동작으로해서 숙련된 조교의 시범과 함께 구분동작으로 배웠는데
네트워크도 그냥 필요해서 만들다 보니까 여러 기술들이 섞이고 섞이게 됬고 이걸 나중에 좀 구분할 필요가 있어지다 보니까 존나 멋있게 7레이어로 구분지은 느낌이랄까.
7레이어를 완벽하게 알아서 얻을수 있는거라곤 정보처리기사 시험문제를 맞출수있다. 그러니까 그냥 이런게 있구나 하고 넘어간다
TCP/IP에서 연결이 성립하기 위해서는 메시지가 3번(3-way) 오고가야 되는데 이거를 악수같다고 해서 부르는 이름

SYN: 클라이언트가 서버에게 SYN 메시지를 보낸다. 이 메시지에 포함된 시퀀스 번호는 클라이언트가 임의로 설정한 값 A.
SYN-ACK: 서버가 클라이언트에게 SYN-ACK 메시지로 응답한다. 이 메시지에 포함된 시퀀스 번호는 서버가 임의로 설정한 값 B, 응답 번호는 (A + 1).
ACK: 클라이언트가 서버에게 ACK 메시지를 보낸다. 이 메시지에 포함된 응답 번호는 (B + 1).
: 네이버를 접속하기 위해서 www.naver.com 을 써야되는데, 20.157.56.222 같은 IP 주소로 접속하는 사람은 없다. 근데, 컴퓨터는 저런 숫자로 말해줘야 되기 때문에,
인간의 주소와 컴퓨터의 주소를 변경해주는 서버 혹은 그런 시스템을 DNS 라고 부른다.
: HyperText Transfer Protocol
HTTP의 가장큰 특징은 1요청당 HTML페이지 하나만 전송하고 연결이 종료됨
위에서 HTTP 는 요청-전송-연결종료 순서로 이루어진다 했는데, 여기서
요청 : Request : 클라이언트가 서버에게 보내는 메시지
전송 : Response : 서버가 클라이언트에게 응답하는 메시지
실제로 HTTP 의 요청과 전송할때는 바이트단위의 "메시지"로 주고받는데, 아주 간략하게 살펴보면 아래 그림

: Hyper Text Markup Language
Hyper Text : text를 넘어서 링크, 이미지 등 다양한 것들을 표현할 수 있는 것
Markup Language : 프로그래밍 랭귀지랑 다르다는 의미에서 마크업 랭귀지
: 프로그램이, 미리 코딩한(pro) 내용을 읽어가며 실행(gram) 하는 것과는 다르게
: 뼈대만 만드는(Markup) 그러한 언어라는 의미에서 마크업 랭귀지라고 부름
그래서 결론은
HTML이란, 웹 문서의 뼈대를 구성하는 언어
브라우저를 통해서 웹 문서를 읽을 때, 전체적인 틀을 잡아주는 언어
대표적인 HTTP 상태코든는 아래와

등등 많음... MDN보셈
이 상태코드들은 웹페이지의 응답 (response)할때 헤더에 붙어서 해당 요청에 대한 처리결과를 사용자에게 알려주는 역할을 함

GET : GET 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 합니다.
HEAD : HEAD 메서드는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함하지 않습니다.
POST : POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰입니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.
PUT : PUT 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 바꿉니다.
DELETE : DELETE 메서드는 특정 리소스를 삭제합니다.
CONNECT : CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺습니다.
OPTIONS : OPTIONS 메서드는 목적 리소스의 통신을 설정하는 데 쓰입니다.
TRACE : TRACE 메서드는 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 합니다.
PATCH : PATCH 메서드는 리소스의 부분만을 수정하는 데 쓰입니다.
HTTP 메소드는 이런거인데..

: 나중에 REST API랑도 연관되니까 알아두세요 (여기다 resource, message만 첨가하면 됨)
리퀘스트 URI로 식별된 리소스를 가져올 수 있도록 요청한다. 내용은 지정된 리소스를 서버가 해석한 결과이다.
GET / index.html HTTP /1.1
Host : www.xxx.xx
index.html 리소스를 돌려준다.
GET /index.html HTTP /1.1
Host: www.xxx.xx
If-Modified-Since: Thu. 12 Jul 2012 07:30:0 GMT
index.html 리소스가 지정날짜 이후에 갱신된 경우에만 리소스를 돌려준다. 그 이전이라면 상태코드 304 Not Modified 리스폰스를 돌려준다.
GET으로도 전송가능하지만 주로 POST로 전송한다.
POST / submit.cgi HTTP/1.1
Host : www.xxx.xx
Content-Length:1500(1560바이트)
submit.cgi가 수신한 데이터의 처리한 결과를 되돌려준다.
FTP에 의한 파일 업로드와 같이, 리퀘스트 중에 포함된 엔티티를 리퀘스트 URI로 지정한 곳에 보존하도록 요구한다.
HTTP/ 1.1 자체에는 인증기능이 없어 누구든지 파일을 업로드 가능하여 보안 상의 문제가 있다. 웹 애플리케이션에 의한 인증기능기능과 같이 쓰이거나 REST와 같이 웹끼리 연계하는 설계양식을 사용할때 이용한다.
PUT / example.html HTTP /1.1
Host: www.xxx.xx
Content-type:text/html
Content-Length: 1500(1560바이트)
상태코드 204 Not NoContent 리스폰스를 돌려준다.
GET과 같지만 메시지 바디는 돌려주지 않는다. URI 유효성과 리소스 갱신 시간을 확인하는 목적으로 사용된다.
HEAD /index.html HTTP/1.1
Host: www.www.ww
index.html에 관련된 리스폰스 헤더를 돌려줌.
리퀘스트 URI로 지정된 리소스의 삭제를 요청한다. 인증기능이 없어 웹애플리케이션등에 의한 인증기능과 사용하며 REST사용하는 경우 사용된다.
DELETE /example.html HTTP/1.1
Host: www.www.ww
상태코드 204 Not Content의 리스폰스를 돌려준다.
리퀘스트 URI로 지정한 리소스가 제공하고 있는 메소드를 조사
OPTIONS * HTTP/ 1.1
Host: www.ww.www
HTTP /1.1 200 OK
Allow : GET, POST, HEAD, OPTIONS
웹 서버에 접속해서 자신에게 통신을 되돌려 받는 루프백을 발생시킨다.
위에서 배운것처럼, HTTP 를 이용한 통신에서는
즉 클라이언트로 부터 통신이 시작되며, 서버는 리퀘스트를 수신하지 않으면 리스폰스가 발생하는 경우는 없다.
HTTP 메시지는 복수 행(개행 CR+LF)의 데이터로 구성된 텍스트 문자열이다.
크게 구분하면 메시지 헤더와 메시지 바디로 구성되어 있고, 최초에 나타나는 개행 문자로(CR+LF) 메시지 헤더와 바디를 구분한다. 메시지 바디가 항상 존재한다고는 할 수 없다.
http 메시지(리퀘, 리스폰)는 기본적으로 3가지 구성요소가 있는데
: 메시지 헤더, CR+LF, 메시지 바
리퀘스트 메시지는 메소드, URI, 프로토콜버전, 옵션 리퀘스트 헤더필드 엔티티로 구성되어있다
리퀘스트를 받은 서버는 내용을 처리한 결과를 리스폰스로 되돌려 준다.
리스폰스 메시지는 프로토콜 버전, 상태코드, 상태코드설명 프레이즈, 옵션의 리스폰스 헤더필드와 바디로 구성되어 있다.
클라→ 서버 : 리퀘스트 보내기 메시지의 내용 1
GET /index.html HTTP/1.1
Host: www.xxxx.xxx
내용 설명
HTTP 서버 상에 있는 /index.html 리소스가 필요하다는 리퀘스트 이다.
리퀘스 보내기 메시지의 내용 2
POST/ form/entry HTTP/1.1
Host : www.xxx.xxx
HTTP /1.1 200 OK
response header field
body
: state, 즉 상태가 less없다는 말
앞에서 말한거처럼, HTTP는 단한번만 통신하고 끊어지는데, 그렇기 때문에 상태를 저장하지 않는다, 상태가 없다.
서버, 클라 서로 요청한것을 기억하지 못한다.
: 다만, 서버가 클라이언트를 기억하는 기법은 "세션/저장소" 같은 방식으로 이용하여 기억하는것처럼 동작하게 한다
서버와 클라이언트 각자 통신은 독립적이며 1회 수행하고 끊어진다는 점을 기억하자
클라이언트에게서 요청메시지를 받고 응답하는데, 서버는 클라이언트에 관한 어떤 상태정보도 저장하지 않는다.
만약 클라이언트가 몇초 후에 같은 객체를 두번 요청한다면 잠시전에 이미 그 객체를 보냈다고 해도 서버에게 알려주면 좋지만 서버는 이전에 한 일을 기억하지 못한다.
HTTP프로토콜은 상태 유지가 안되는 프로토콜입니다. 이전에 무엇을 했고, 지금 무엇을 했는지에 대한 정보를 갖고 있지 않습니다. 웹 브라우저(클라이언트)의 요청에 대한 응답을 하고 나면 해당 클라이언트와의 연결을 지속하지 않습니다.
상태 유지를 위해 Cookie와 Session기술이 등장합니다. 즉, 클라이언트가 두 번째, 세 번째 요청을 했을 때에는 이 클라이언트가 누구이구나라는 정보를 알게 한다거나 등등 여러 가지의 이런 상태를 유지해 주기 위한 기술인 Cookie와 Session이 등장하게 됩니다.
쿠키
세션
출처 : https://nbkw.tistory.com/148
: non-persistent 비지속연결이란,
: HTTP 1.1표준에서는 연결 방법은 두가지인데, 지속연결 비지속연결 두가지가 생김
HTTP 는 기본적인 컨셉이 온디멘드(on-demand) 방식으로 동작.
on-demand란, 그들(클라이언트, 사용자)이 원할 때 원하는 것을 수신한다.
그리고, HTTP는 비상태 프로토콜(stateless) → 서버에서 클라이언트에 대한 정보를 유지하지 않음.
비지속연결은 각 요청객체마다 새로운 연결이 설정되어야 함.
-> TCP버퍼가 할당되어야 하고 TCP변수들이 클라이언트와 서버 양쪽에 유지 되어야 함으로 웹서버에 심각한 부담을 줌.
-> 또한 각 객체마다 2RTT를 필요로 하는데 이를 별도로 진행해야 함으로 성능이 떨어짐.
RTT란?
-> 패킷이 클라이언트로부터 서버까지 가고, 다시 클라이언트에게 돌아오는 데 걸리는 시간 RTT(round-trip time)
지속연결:persistent : HTTP/1.0에서 TCP 연결문제 해결을 위해 등장한 기술
<비지속연결 vs 지속연결>
요구/응답쌍이 분리된 TCP연결을 통해 보내져야 하는가?---> 비지속연결
요구와 해당하는 응답들이 같은 TCP연결상으로 보내져야 하는가?--->지속연결
비지속 연결을 사용하므로 각 TCP연결은 하나의 요청메시지와 하나의 응답메시지만 전송,그래서 위는 사용자가 웹 페이지 요청시 11개의 TCP연결이 만들어진다.
이들 객체에 대한 요구는 진행중인 요구에대한 응답을 기다리지 않고 연속해서 만들어낼 수 있다.(파이프라이닝)
일반적으로 HTTP서버는 일정기간(타임아웃)사용되지 않으면 연결을 닫는다.
최신 글에 떠있길래 봤는데 동 포스트였군요.
잘보고갑니다!! 저도 내일 영한님 강의 구매 해서 학습하려고 합니다 ㅎㅎ.