[Network] TCP & UDP & 3,4 Way Handshake

박세건·2024년 4월 29일
0

CS 학습

목록 보기
17/23

TCP(Transmission Control Protocol)

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

특징

  • 3 Way Handshaking으로 연결, 4 Way Handshaking으로 **해제
  • 흐름 제어 및 혼잡 제어
    • 흐름 제어 : 송신과 수신의 속도차이를 조절하여 수신자의 Overflow를 방지
    • 혼잡 제어 : 네트워크 내의 패킷 수가 넘치지 않도록 방지
  • 높은 신뢰성을 보장
  • UDP에 비하면 속도가 느리다
  • Full-Duplex, Point to Point 방식 사용
    • Full-Duplex : 전이중 : 전송이 양방향에서 동시에 발생할 수 있음 : 전송 효율 좋음
    • Point to Point : 점대점 : 1 : 1로 직접 연결 : 안정적

세그먼트 단위를 사용하고 TCP 세그먼트는 header와 body로 나눠지고 각각은 정보와 데이터를 의미한다.

Port 상태 정보

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

플래그 정보

TCP 헤더에는 서로의 요청에 대한 상태를 확인하기위한 플래그 비트가 존재합니다.
중요한 3가지 플래그 비트를 알아보자

  • SYN : 000010 : 연결 설정
  • ACK : 010000 : 응답 확인
  • FIN : 000001 : 연결 해제

UDP(User DataGram Protocol)

UDP란, 데이터를 데이터그램(독릭접인 관계를 지니는 패킷) 단위로 처리하는 프로토콜입니다.

특징

  • 비연결형 프로토콜(데이터를 서로 다른 경로로 처리)
  • 연결과 해제의 과정이 존재하지 않는다
  • 흐름제어, 혼잡제어와 같은 과정이 없어 빠르고 부하가 적다
  • 신뢰성이 낮다
  • UDP 헤더의 CheckSum을 통해 최소한의 오류만 검출
  • 예시) 스트리밍

비교

TCP와 UDP는 같은 포트 공간에서도 다른 공간을 관리하기 때문에 서로 같은 포트번호를 사용해도 다른 포트로 간주합니다.


TCP 3 Way HandShake

TCP 통신을 통해 데이터를 전송하기 위해서 네트워크 연결을 설정하는 과정입니다.
양쪽 모두가 데이터를 주고 받을 준비가 되었다는 것을 보장하는 과정입니다.
데이터 전달이 시작되기전에 사전에 세션을 수립하는 과정입니다.

동작 과정


1. 클라이언트가 서버에게 접속을 요청하는 SYN 패킷을 전송합니다. SYN 패킷은 세션을 설정하는 데 사용되며 초기에 시퀀스 번호를 보냅니다.
시퀀스 번호 : TCP 세그먼트의 데이터 순서 번호
2. SYN 요청을 받은 Server는 Client에게 요청을 수락한다는 ACK과 접속을 요청하는 SYN 패킷을 전송합니다.
받은 시퀀스 번호에 1을 더해서 ACK로 돌려줍니다.
3. Client는 Server에게 ACK 패킷을 전송하고 이후 부터는 연결이 이루졌음을 의미하고 데이터를 교환하게 된다. 이상태를 ESTABLISHED 라고 한다.

TCP 4 Way Handshake

TCP 연결을 해제하기위해 사용합니다.

동작 과정

  1. Client 가 Server에게 연결을 종료하겠다는 FIN 패킷을 전송합니다.
  • 이 과정에서 FIN을 보내면서 모든 연결을 종료한다면 안전하지 않다 때문에 Half-Close 기법을 사용해서 안전하게 종료합니다.
  1. Server는 이를 확인하고 ACK 패킷을 보내고 통신이 끝나는 것을 기다립니다.
  2. 통신이 끝나는 것을 확인하고 Client 에게 FIN 패킷을 전송합니다.
  • 이 과정에서 이전에 사용했던 Half-Close 기법으로 완전히 종료합니다.
  1. Client는 Server에게 확인했다는 ACK 패킷을 보냅니다. 연결이 종료되었다는 패킷을 확인했지만 받지 못한 여분의 데이터가 있을 수 있으므로 Client는 TIME_WAIT 상태로 기다립니다(대략 240초) 240 초 후 종료

Half Close

연결을 종료하는 과정에서 바로 연결을 종료한다면 문제가 발생할 수 있기때문에 반정도 종료해놓고 상대의 응답을 기다립니다. 상대로부터 FIN 패킷 응답이 온다면 나머지 반을 종료하고 ACK 패킷으로 응답합니다.
이 과정으로 좀 더 안정적인 종료과정을 수행할 수 있습니다.

profile
멋있는 사람 - 일단 하자

0개의 댓글

관련 채용 정보