[Boostcamp] 18-19. TCP

코딩감자·2024년 8월 7일

Naver Boostcamp

목록 보기
11/13
post-thumbnail

TCP

1.1 TCP란

: 애플리케이션 사이에서 안전하게 데이터를 통신하는 규약

1.2 TCP 통신과정

  1. 데이터 스트림에서 받은 데이터를 일정 단위로 분할
  2. 분할된 데이터 단위에 TCP 헤더를 붙여서 TCP 세그먼트를 생성
  3. TCP 세그먼트를 IP 데이터그램으로 변환
    • IP 데이터그램: 인터넷 통신에 사용되는 데이터 패킷
  4. 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 헤더에 명시
profile
코딩감자

0개의 댓글