[CS] TCP

Lena·2021년 2월 3일
0

💡 Transmission Control Protocol

TCP

TCP는 Protocol인데, 프로토콜이란 네트워킹을 위한 일련의 규칙을 말한다.

TCP/IP 프로토콜 통신 방식은 크게 4개의 Layer를 거쳐 데이터가 전송되는데,
Transport Layer(전송 계층)에 속하는 TCP에 대해 알아보자.

Packet Switching

TCP 이전에는 통신을 하기 위해 물리적인 회선 하나를 독점하는 방식으로 데이터를 전송했는데, 이는 회선에 문제가 생길 경우에는 데이터를 주고 받을 수 없는 문제가 있었다.

이를 개선하기 위해 데이터를 하나의 회선에 한꺼번에 보내지않고 패킷 단위로 잘게 쪼개 여러 회선에 나눠 보내는 패킷 교환 방식(Packet Switching)이 등장했다.

하지만 패킷 단위로 데이터를 전송하게 되면, 나눠서 전달된 데이터의 순서를 보장할 수 없고 도중에 유실되는 데이터가 발생할 수도 있다. TCP는 이러한 문제를 보완해서 누락된 데이터가 있을 경우 재전송을 요청하고, 패킷마다 번호를 매겨 데이터의 순서를 보장한다.

패킷은 패키지(Package)와 버킷(bucket)의 합성어라고 한다.

TCP Header

데이터가 도착해야 할 위치 등 필요한 정보를 헤더에 포함시켜 전송한다. 헤더에 어떤 정보들이 포함되는지 간략히 살펴보자.


TCP의 헤더는 기본 20bytes를 사용해서 다음과 같은 정보를 전달한다.

  • source port, destination port : 출발지와 목적지의 포트 번호
  • sequence number : 데이터의 순서를 구분하기 위한 번호
  • acknowledgment number : 데이터를 받은 수신자가 예상하는 다음 시퀀스 번호
  • data offset : 헤더가 아닌 실제 데이터가 시작되는 위치
  • window size : 한 번에 전송 할 수 있는 데이터의 양
  • checksum : 데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값

💡 TCP 헤더와 관련된 내용은 이 글을 참고했으며, 자세히 설명되어 있다.

3-ways handshake

이렇게 TCP 헤더 정보를 포함한 패킷을 전달하기 전에, TCP는 서버와 클라이언트 양쪽이 모두 데이터를 주고 받을 준비가 되어있는지 확인하는 과정을 거치는데 이를 3-ways handshake 라고 한다.

  • client ➡️ server : SYN
  • server ➡️ client : SYN + ACK
  • client ➡️ : ACK

SYN은 Syncronize, ACK은 Acknowledge을 의미한다. 3-ways handshake는 위와 같은 순서로 SYN, ACK 패킷을 주고받으면서 서로 인증을 요청하고 승인해 논리적으로 연결한다.

Socket

이렇게 TCP 통신 방식을 기반으로 네트워킹할 수 있는 프로그램을 만들도록 도와주는 API들을 (TCP) 소켓 라이브러리라고 하며, 프로그램이 서로 네트워킹을 할 수 있도록 연결부(마치 콘센트 같은)를 제공한다고 해서 소켓이라는 단어를 사용한 것 같다.


0개의 댓글