<aside> 💡
누군가와 의사소통을 할때 서로다른 언어를 사용하면 의사소통에 문제가 생긴다. 네트워크도 마찬가지로 이러한 의사소통을 통신이라고 하는데 통신을 하기 위해 주체들이 따라야 하는 형식, 절차, 규약 등을 프로토콜이라고 한다.
HTTP는 텍스트 기반의 프로토콜로 요청(Request)과 응답(Response) 두가지 주요 메시지를 통해 이루어 진다. HTTP는 응용 계층으로 표현 계층, 세션 계층 (7~5계층)데이터 단위는 데이터라고 부른다. HTTP의 메시지 규칙은 아래와 같다.
GET 요청(Request)
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
GET 응답(Response)
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
Server: Apache
<html>
<body>
<h1>Welcome to my website!</h1>
</body>
</html>
POST 요청(Request)
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 54
{
"name": "John Doe",
"email": "[email protected]",
"age": 30
}
POST 응답(Response)
HTTP/1.1 201 Created
Location: /api/users/123
Content-Type: application/json
Content-Length: 59
{
"id": 123,
"name": "John Doe",
"email": "[email protected]",
"age": 30
}
요약 요청(Request)
<HTTP 메서드> <경로> <버전>
<헤더1>: <값1>
<헤더2>: <값2>
...
<빈 줄>
<본문>
요약 응답(Response)
<버전> <상태 코드> <상태 메시지>
<헤더1>: <값1>
<헤더2>: <값2>
...
<빈 줄>
<본문>
요청에는 HTTP 메서드(GET, POST, PUT, DELETE..), 데이터를 요청할 경로가 있고 응답에는 상태코드(200, 404..), 상태 메시지(OK, Not Found..)가 있다.
HTTP는 상태 비저장(stateless) 프로토콜이기 때문에 각 요청은 독립적이며 이전의 요청과 관련이 없다.
장점
단점
TCP는 Transmission 정확하게 전송 Control 흐름, 혼잡, 에러 제어 프로토콜로 연결을 통해 신뢰성 있는 데이터 전송할수 있도록 보장하는 역할을 한다. HTTP, FTP, SMTP와 같은 프로토콜이 데이터 송수신을 할 때 주로 사용된다. TCP의 데이터 단위는 세그먼트(작은 조각)라고 부른다.
왜 작은 조각이라고 명명하는걸까? 만약에 1MB 크기의 데이터를 전송하려고 할때 이 데이터는 네트워크의 MTU(Maximum Transmission Unit)에 맞춰 여러 개의 세그먼트로 분할되어 전송한다. 만약 세그먼트 크기가 100KB라면 1MB 데이터는 10개의 세그먼트로 나누어 전송이 되고 수신측에서 송신자에게 전달받은 시퀀스 넘버(2. 프로토콜 - seq : 내가 지금 보내는 데이터가 몇 번부터 시작하는지 알려주는 번호.)로 순서대로 재조립해서 애플리케이션 계층으로 전달한다.