TCP

1.1 TCP란
: 애플리케이션 사이에서 안전하게 데이터를 통신하는 규약
1.2 TCP 통신과정
- 데이터 스트림에서 받은 데이터를 일정 단위로 분할
- 분할된 데이터 단위에 TCP 헤더를 붙여서 TCP 세그먼트를 생성
- TCP 세그먼트를 IP 데이터그램으로 변환
- IP 데이터그램: 인터넷 통신에 사용되는 데이터 패킷
- IP 데이터그램을 수신 애플리케이션에 보낸다
1.3 TCP 세그먼트
- Source Port: 데이터를 발송하는 애플리케이션의 포트 번호
- Destination Port: 데이터를 수신하는 애플리케이션의 포트 번호
- Sequence Number(SYN): TCP 통신 과정에서 데이터를 일정 단위로 분할. 분할된 데이터의 순서
- Acknowledgment Number(ACK): 데이터를 수신하는 애플리케이션 입장에서, 다음으로 받고 싶은 TCP 세그먼트의 Sequence Number
1.4 TCP Handshake
- SYN: 클라이언트가 서버에게 SYN을 전송. SYN은 임의 숫자 A다
- SYN-ACK: 서버가 SYN-ACK로 답장
- SYN은 새로운 임의 숫자 B이고, ACK는 클라이언트로부터 전달받은 SYN의 1을 덧셈한 것이다(A+1).
- ACK: 클라이언트가 서버에게 ACK(B+1)를 전송
2. HTTP Request와 Response

2.1 HTTP
- HTTP (HyperText Transfer Protocol): HyperText를 전송하기 위한 통신 규약
- HyperText: 초월적인 텍스트, 텍스트 간 이동 할 때, 순차적 접근 방식이 아닌 비순차적(초월적) 접근 방식을 따르는 텍스트
- Transfer Protocol: 통신 장비 간 데이터 교환 방식에 대해 합의한 내용
- 통신을 원하는 두 개체가 무엇을, 어떻게 통신할 것인가에 대해 약속하고 이를 규칙으로 정의한 것
2.2 HTTP 특징
- 클라이언트-서버 프로토콜
- 클라이언트 요청을 생성하기 위해 연결을 연 다음 응답을 받을때 까지 기다리는 모델
- 데이터 스트림이 아닌 개별적인 메시지 교환을 통해 통신
- 클라이언트에 의해 전송되는 메시지를 요청(requests)이라 하고, 요청에 대해 서버에서 응답으로 전송하는 메시지를 응답(responses)이라고 한다
- 상태가 없고, 세션이 있다
- HTTP는 상태를 저장하지 않는다. (Stateless)
- 요청은 서로 연관성을 가지지 않고 독립적이다
- HTTP 쿠키를 사용하면 상태를 저장하는 세션을 사용할 수 있다
- HTTP 쿠키: 서버가 웹 브라우저에 전송하는 작은 데이터 조각
- 브라우저는 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재요청 시 저장된 데이터를 함께 전송
- 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용하며, 이를 통해 사용자의 로그인 상태를 유지할 수 있다
2.3 HTTP 메시지
: 서버와 클라이언트 간에 데이터가 교환되는 방식

- 요청(request)과 응답(response) 두 가지 타입이 존재하며, 각각 특정한 포맷을 갖는다
- HTTP 메시지의 시작 줄과 HTTP 헤더를 묶어서 요청 헤드(head) 라고 부르며, 이와 반대로 HTTP 메시지의 페이로드는 본문(body)이라 한다
- 시작줄(start-line): HTTP 요청 또는 요청에 대한 성공 또는 실패가 기록
- HTTP 헤더: 시작줄 다음으로 요청에 대한 설명 또는 메시지 본문에 대한 설명
- 빈 줄: 요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄이 삽입된다. (헤드와 본문 사이)
- 본문(optional): 요청과 관련된 데이터(HTML form 콘텐츠 등) 또는 응답과 관련된 문서(document)가 선택적으로 들어간다. 본문의 존재와 크기는 시작 줄 및 HTTP 헤더에 명시