[CS - 네트워크] TCP & UDP, 3 Way Handshake, 4 Way Handshake

Jo HangJoon·2022년 10월 13일
0

CS 공부

목록 보기
10/17

질문의 핵심

  • TCP와 UDP의 차이는?
  • TCP 연결 설정 과정(3 way)과 연결 종료 과정(4 way)의 단계가 차이나는 이유는?
  • Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면?

1. TCP

TCP(Transmission Control Protocol)란?

  • 인터넷상에서 데이터를 메세지의 형태(세그먼트 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
  • TCP는 애플리케이션에게 신뢰적이고 연결지향성인 서비스를 제공한다.
  • TCP는 일반적으로 IP와 함께 사용되며, IP는 배달을, TCP는 패킷의 추적 및 관리를 한다.

특징

  • 3 Way Handshaking으로 연결을 설정, 4 Way Handshaking으로 연결을 해제한다.
  • 흐름 제어 및 혼잡 제어를 한다.
  • 흐름 제어: 데이터를 송신하는 곳과 수신하는 곳의 데이터 러시 속도를 조절하여 수신자의 버퍼 Overflow를 방지한다.
  • 혼잡 제어: 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지한다.
  • 높은 신뢰성을 보장한다.
  • UDP보다 속도가 느리다.
  • Full-Duplex, Point to Point 방식이다.
  • Full-Delex(전이중): 전송이 양방향으로 동시에 일어날 수 있음.
  • Point to Point(점대점): 각 연결이 정확히 2개의 종단점을 가지고있음.

포트 상태 정보

  • CLOSED: 포트가 닫힌 상태
  • LISTEN: 포트가 열린 상태로 연결 요청 대기 중
  • SYN_SENT: SYNC 요청을 보낸 상태
  • SYN_RECEIVED: SYNC 요청에 응답하고 상대방의 확인을 기다리는 중
  • ESTABLISHED: 포트 연결 상태
  • FIN-WAIT: FIN 을 보내고 응답을 기다리는 상태
  • LISTEN: 접속 요청을 기다리는 상태

플래그 정보

TCP 헤더에는 플래그 비트(컨트롤 비트)가 존재한다. 각 비트는 URG-ACK-PSH-RST-SYN-FIN의 의미를 가진다.

  • SYN(Synchronize Sequence Number): 000010. 연결 설정.
  • ACK(Acknowledgement): 010000. 응답 확인.
  • FIN(Finish): 000001. 연결 해제.

연결 해제 종류

  • Graceful connection release: 정상적인 연결 해제. 양쪽 커넥션이 서로 모두 커넥션을 닫을 때까지 연결되어 있음.
  • Abrupt connection release: 갑작스런 연결 해제. 갑자기 한 TCP 엔티티가 연결을 강제로 닫거나 한 사용자가 두 데이터 전송 방향을 모두 닫을 때 발생.

2. UDP

UDP(User Datagram Protocol)란?

데이터를 데이터그램(독립적인 관계를 지니는 패킷) 단위로 처리하는 프로토콜이다.

특징

  • 비연결형 프로토콜이다. 데이터를 서로 다른 경로로 독립적으로 처리한다.
  • 연결을 성정하고 해제하는 과정이 존재하지 않는다.
  • 재조립, 흐름제어 및 혼잡제어 과정이 없어 속도가 빠르고 네트워크 부하가 적다.
  • 데이터 전송의 신뢰성이 낮다.
  • UDP 헤더의 CheckSum을 통해 최소한의 오류만 검출한다.
  • 연속성이 중요한 실시간 서비스(ex. 스트리밍)에 좋다.

TCP vs UDP

  • TCP와 UDP는 각각 별도의 포트 주소 공간을 관리하므로 같은 포트 번호를 사용해도 서로 다른 포트로 간주한다.

3. TCP 3 Way Handshake

TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish)하는 과정이다.

역할

  • 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장함.
  • 실제로 데이터 전달이 시작하기 전에 상대방이 준비되었다는 것을 알 수 있도록 함.
  • TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립함.

동작 과정

TCP 통신은 PAR(Positive Acknowledgement with Re-transmission)을 통해 신뢰적인 통신을 제공함.

  1. Client(연결 요청을 먼저 시도한 송신자)가 Server(연결 요청을 받은 수신자)에 접속을 요청하는 SYN 패킷을 전송한다. 이때 Client는 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다. SYN 패킷은 세션을 설정하는 데 사용되며 초기에 시퀀스 번호를 보낸다.
  2. SYN 요청을 받은 Server는 Client에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송한다. Server는 Client의 ACK 응답을 기다리는 SYN_RCV 상태가 된다. Client의 시퀀스 번호에 1을 더한 것을 ACK로 돌려준다.
  3. Client는 Server에 ACK를 전송하고 이후부터는 연결이 이루어져 데이터가 오가게 된다. 이때 Server의 상태는 ESTABLISHED 이다.

4. TCP 4 Way Handshake

TCP의 연결을 설정(초기화)할 때 사용하는 3 Way Handshake와 달리, 4 Way Handshake는 연결을 해제하기 위해 사용한다.

동작과정

  1. Client가 Server에 연결을 종료하겠다는 FIN 패킷을 전송한다. 이 FIN 패킷에는 실질적으로 ACK가 포함되어 있는데, 이는 Half-Close 기법을 사용하기 때문이다.

Half-Close 기법
1. 연결을 종료하기 전에 완전히 종료하지 않고 반만 종료.
2. 수신자가 남은 데이터를 모두 보내고 나면 다시 요청자에게 FIN 패킷을 보냄으로써 모든 데이터가 처리되었다는 신호를 보냄(3번 과정).
3. 요청자는 나머지 반을 닫아 좀 더 안전하게 연결이 종료됨.

  1. Server는 Client에 확인 메시지(ACK)를 보내고 자신의 통신이 끝나기를 기다린다.
  2. 통신이 끝나면 Server는 연결이 종료되었다고 Client에 FIN 패킷을 전송한다.
  3. Client는 Server에 확인 메시지(ACK)를 보낸다. 이때 아직 Server로부터 받지 못한 데이터가 있을 수 있으므로 Client는 TIME_WAIT 상태로 기다린다.

Time_WAIT 상태로 인해 Client는 Server로 부터 FIN 플래그를 수신하더라도 잉여 패킷을 기다린다(Default는 240sec). 이를 통해 Client에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 유실되는 문제를 방지한다.


참조

0개의 댓글