[개념 콕] TCP 3 way handshake

내일배움캠프 수료생이 개발에 꼭 필요한 핵심 개념만 콕 집어 드립니다.
May 29, 2024
[개념 콕] TCP 3 way handshake
✍🏼
개발을 시작하시는 여러분, 정보가 너무 많고 배워야 할 것도 산더미라 어디서부터 시작해야 할지 막막하신가요? 내일배움캠프 수료생들이 4개월 동안 배운 엄선된 핵심 개념을 직접 정리해서 알려 드립니다. 공부하다 막히거나 헷갈리는 개념이 있다면 개념 콕으로 정리해보세요.
 

TCP (Transmission Control Protocol)

TCP란?

TCP(Transmission Control Protocol)는 IP 프로토콜 위에서 동작하는 전송 계층 프로토콜로, 패킷 전송의 신뢰성을 보장하기 위해 설계 되었습니다. IP 프로토콜은 패킷의 전송만을 담당하기 때문에, 패킷의 순서 뒤바뀜이나 유실과 같은 문제가 발생할 수 있습니다. TCP는 이러한 IP의 한계를 극복하고, 안정적이고 신뢰할 수 있는 데이터 전송을 가능하게 합니다.

TCP의 특징

1) 연결 지향성
TCP는 데이터를 전송하기 전에 송신자와 수신자 간의 연결을 설정합니다. 이를 통해 데이터 전송의 신뢰성을 보장할 수 있습니다.
2) 패킷 순서 제어
TCP는 패킷에 번호를 부여하여 수신자가 패킷을 올바른 순서로 재조립할 수 있도록 합니다. 이는 IP 프로토콜에서 발생할 수 있는 패킷 순서 뒤바뀜 문제를 해결합니다.
3) 패킷 재전송
패킷이 전송 도중 유실되었을 경우, TCP는 유실된 패킷을 감지하고 재전송을 요청합니다. 이를 통해 데이터의 완전성을 보장할 수 있습니다.
4) 흐름 제어
TCP는 송신자와 수신자 간의 데이터 전송 속도를 조절하여, 수신자의 처리 능력에 맞게 데이터를 전송할 수 있습니다. 이는 송신자가 수신자의 버퍼를 초과하여 데이터를 전송하는 것을 방지합니다.
5) 혼잡 제어
TCP는 네트워크 혼잡을 감지하고, 전송 속도를 조절하여 네트워크의 과부하를 방지합니다. 이를 통해 네트워크의 안정성과 효율성을 향상시킬 수 있습니다.
 

TCP와 IP의 차이점

TCP와 IP는 모두 인터넷 통신을 위한 프로토콜이지만, 각자 담당하는 역할과 기능에 있어 분명한 차이가 있습니다.
IP는 인터넷 상에서 데이터를 한 지점에서 다른 지점으로 전송하기 위한 규칙을 정의합니다. 이는 마치 우편 시스템에서 편지 봉투에 수신자의 주소를 쓰는 것과 유사합니다. IP는 패킷이 목적지에 도달할 수 있도록 주소 지정과 라우팅을 담당하지만, 패킷의 순서나 완전성, 오류 등은 보장하지 않습니다.
반면에 TCP는 IP 위에서 동작하며, IP가 제공하는 기능 외에 추가적인 서비스를 제공합니다. TCP는 데이터의 순서를 보장하고, 손실된 패킷을 재전송하며, 수신자의 수신 속도에 맞춰 전송 속도를 조절하는 등의 기능을 수행합니다. 이는 마치 등기 우편과 같이, 단순히 주소를 쓰는 것 이상으로 수신자 확인, 배송 과정 추적, 배송 완료 확인 등의 부가 서비스를 제공하는 것과 유사합니다.
 
즉, IP는 데이터를 목적지까지 전달하는 것에 초점을 맞추는 반면, TCP는 데이터를 안정적이고 신뢰할 수 있게 전달하는 것에 초점을 맞춥니다. IP는 전송의 기본 규칙을 제공하고, TCP는 그 위에 신뢰성과 안정성을 더하는 역할을 합니다. 따라서 IP와 TCP는 상호 보완적인 관계로, 함께 사용될 때 인터넷 통신의 효율성과 신뢰성을 보장할 수 있습니다.
 
이렇게 TCP에 대하여 알아보았으므로 이제 TCP가 장치와 장치 사이에 통신을 시작할 때 서로 준비가 완료됐는지 교차검증하는 3-way handsake에 대하여 알아보겠습니다.
 

TCP 3 way handshake

TCP 3-way handshake는 클라이언트와 서버 간의 연결을 설정하는 과정으로, 다음과 같은 단계로 이루어집니다.
 
notion image
  1. 클라이언트는 서버에 연결을 요청하기 위해 SYN(Synchronize) 패킷을 보냅니다. 이때 클라이언트는 서버의 응답을 기다리는 SYN_SENT 상태로 전환됩니다.
  1. 서버는 LISTEN 상태에서 클라이언트의 SYN 요청을 받으면, 클라이언트에게 요청을 수락하는 ACK(Acknowledgement) 패킷과 함께 자신의 SYN 패킷을 보냅니다. 그런 다음 서버는 SYN_RCVD(SYN_RECEIVED) 상태로 변경되며, 클라이언트의 ACK 패킷을 기다립니다.
  1. 클라이언트는 서버로부터 SYN-ACK 패킷을 받은 후, 서버에게 ACK 패킷을 보내어 연결 설정을 완료합니다. 이후 클라이언트와 서버는 모두 ESTABLISHED 상태가 되어 데이터 통신을 시작할 수 있게 됩니다.
 
이 과정에서 사용되는 주요 플래그(Flag)는 다음과 같습니다.
Flag
설명
SYN (Synchronize)
TCP 연결 설정 시 가장 먼저 보내는 패킷으로, 상대방에게 연결을 요청할 때 사용됩니다.
ACK (Acknowledgement)
상대방으로부터 패킷을 성공적으로 수신했음을 알리는 패킷입니다. 다른 플래그와 함께 사용되는 경우도 있습니다.
위 1~3 단계를 거쳐 클라이언트와 서버 간의 연결이 정상적으로 설정되면, 양측은 데이터를 주고받을 수 있는 상태가 됩니다. 이를 통해 안정적이고 신뢰할 수 있는 TCP 통신이 이루어집니다.
 
 

내일배움캠프는 개발에 필요한 핵심만 배웁니다

지금까지 꼭 필요한 개발 지식에 대해 알아보았습니다. 내일배움캠프에서는 전문가들이 선별한 핵심 개발 지식으로 개발 공부도, 취업도 보다 효율적으로 할 수 있는데요. 국내 유수의 IT기업 출신 튜터님들과 실습 위주의 독보적인 커리큘럼으로 개발자 취업을 체계적으로 준비해보세요. 내일배움캠프 4개월, 여러분 인생의 가장 큰 터닝 포인트입니다.
 
 
 
CREDIT
글 | 황규정 내일배움캠프 수료생 편집 | 정효재 팀스파르타 에디터
 
 

취업 준비, 어디서부터 시작해야 할지 모르겠다면?

 
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
 
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
 
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
 
 
Share article
Subscribe to our newsletter

내일배움캠프 블로그