[네트워크] TCP 3way-Handshake

박지영·2021년 5월 26일
0
post-thumbnail
  • 네트워크
    데이터를 교환하기 위해 전송 매체를 매개로 서로 연결되어 있는 것

  • 인터넷
    전세계 컴퓨터들이 서로 연결되어 있는 거대한 네트워크

  • 프로토콜
    네트워크 상에서 데이터를 주고받기 위한 일종의 규약

  • OSI 7계층, TCP/IP 4계층

네트워크 상에서 정보를 주고받기 위해서는 여러 계층별 프로토콜이 필요하다. 따라서, 상호 독립적이면서 유기적인 관계를 가진 계층 구조를 바탕으로 데이터가 교환될 수 있다.

여기서는, 전송계층을 다루겠다.

전송계층 (Transport Layer)
: 전송계층의 프로토콜은 크게 TCP와 UDP로 나뉜다.

  • TCP
    - 연결지향적

    • 데이터를 전송하는 측과 데이터를 전송받는 측에서 전용의 데이터 전송 선로(Session)을 만들어 통신함
    • 데이터 전송 성공/실패에 대한 신뢰도가 중요하다고 판단될 때 사용
  • UDP
    - 비연결지향

    • 최소한의 오류제어 기능만 수행
      • 단순히 데이터를 받거나, 보내기만 하는 프로토콜
    • 실시간 멀티미디어 정보를 처리하기 위해 주로 사용됨

TCP가 연결지향적 특성을 갖게 해주는 방법이 바로 3way-handshake!

  • 3way-Handshake란?
    전송 제어 프로토콜(TCP)에서 통신을 하는 장치 사이에 서로 연결되어 있는지 확인하는 방법
  • 3way-Handshake 과정

SYN: Synchronize sequence numbers
ACK: Acknowledgements

[Step1]
클라이언트1은 A서버에 접속을 요청하는 SYN 패킷을 보낸다.
이때, 클라이언트1은 요청한 서버로부터 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.

[Step2]
A서버는 Listen 상태로 포트 서비스가 가능한 상태여야한다.
닫힌 상태였던 A서버는 SYN요청을 받고 Listen 상태가 되며, 클라이언트1에게 요청을 수락한다는 ACK요청과 SYN flag가 설정된 패킷을 발송한다.
그리고 클라이언트1이 다시 ACK를 보내기를 기다린다.
이때, A서버는 SYN_RECEIVED 상태가 된다.

[Step3]
클라이언트1은 A서버에게 ACK을 보내고 이후로부터는 두 매체 간의 연결이 이루어진다.
이때의 A서버 상태가 ESTABILISHED 이다.

  • 실제 과정

3way-Handshake 과정에서, 두 매체는 서로 랜덤한 숫자를 보내고 이를 잘 받았다는 ACK로 1을 더해주는 방식을 사용한다.

이처럼, TCP는 연결지향적인 특성과 자체적으로 오류를 처리하며 순서가 뒤바뀐 패킷을 교정해주는 기능을 제공한다. 데이터 전송의 신뢰도가 중요하다고 판단될 때 쓰이는 방식이지만, 데이터 전송 속도가 중요시되는 경우면 제한적인 방법이다.
UDP는 위와 같은 과정없이 단순히 데이터만 전송하기 때문에 속도는 빠르다.
스트리밍 서비스의 경우에는 데이터의 손실은 있더라도 끊기지 않은 데이터 전송이 중요하므로 UDP 방식이 더 사용하기 적합하다.

profile
개발 커리어 저장소

0개의 댓글