Computer Science (CS)

[CS공부 - 1회] TCP와 UDP

표자 2023. 10. 20. 10:59
728x90
반응형

TCP는 Transmission Contorl Protocol으로, 전송 제어 프로토콜입니다.

TCP는 신뢰성 있는 데이터 전송을 위해 사용되는 연결지향 프로토콜입니다.

 

UDP는 User Datagram Protocol으로 사용자 데이터그램 프로토콜입니다.

UDP는 빠른 데이터 전송을 중요시하는 비연결 프로토콜입니다.

두 단어 모두에게 존재하는 프로토콜(Protocol)이 디지털 장치간의 서로 통신하고 상호작용하기 위한 규칙의 집합입니다.

 

TCP와 UDP의 차이점은 다음과 같습니다.

  • 신뢰성
    • TCP는 데이터 손실이나 순서의 뒤섞임이 발생하지 않습니다.
    • UDP는 정확성을 확인하거나 재전송을 요청할 수 없기에 데이터가 손실 되거나 순서가 뒤섞일 수 있습니다
  • 연결
    • TCP는 데이터를 전송하기 전에 연결을 설정하고, 전송후 연결을 해제합니다. 연결 및 해제과정에서 추가적인 오버헤드는 초래할 수 있으나, 신뢰성 있는 통신을 보장합니다.
    (오버헤드: 데이터전송 및 처리 과정에서 추가 부담이나 리소스 낭비를 뜻함)
    • UDP는 연결 및 해제 단계가 없기에 빠른 전송이 가능하지만 데이터의 무결성을 보장하지 않습니다.
  • 사용사례
    • TCP는 주로 이메일, 파일 전송과 같이 신뢰성이 중요한 경우 사용됩니다.
    • UDP는 실시간 스트리밍, 온라인 게임, 음성통화 같이 데이터 전송 속도가 중요한 경우 사용됩니다.

TCP 패킷의 재전송 과정

  1. 패킷 송신 : 송신자는 여러개의 패킷으로 나눠 수신자에게 보냄. 각 패킷은 고유한 일련번호를 가지고 있습니다.
  2. 패킷 수신 : 수신자는 패킷을 받고, 패킷의 일련번호를 확인하여 순서대로 재조립합니다.
  3. 패킷 손실 확인 : 만약 패킷이 손실되었다고 감지하면, 송신자에게 패킷 손실을 알리기 위한 메시지를 보냅니다.
  4. 재전송 요청 : 송신자는 손실된 패킷을 재전송하고, 이 패킷의 일련번호를 통해 수신자는 어떤 패킷이 재전송된 것인지 판단할 수 있습니다.
  5. 패킷 재전송 : 재전송된 패킷은 수신자에게 도착하고 재조립합니다.

TCP 세션 관리 (연결의 설정과 종료 과정) - Easy Version

  1. 연결 설정 (Handshake)
    • 두 컴퓨터 간의 통신을 먼저 연결 설정해야 합니다. 이 단계를 연결 설정 또는 핸드쉐이크라고 부릅니다.
  2. 데이터 전송
    • 연결 설정후, 데이터를 주고 받을 수 있습니다. A는 작은 조각으로 나눠 B에게 보내면 재조립하여 사용합니다.
  3. 연결 해제 (Termination)
    • 데이터 통신이 끝난 후, 연결을 해제합니다.
    • A는 B에게 끝내고자 하는 의사를 전달합니다. B는 요청을 수락하고 연결이 종료됩니다.

TCP 3-way Handshake (연결 설정)TCP 4-way Handshake (연결 해제) - Hard Version

더보기

TCP 3-way Handshake (연결 설정):

  1. Step 1 - 클라이언트가 서버에게 SYN 보내기 (SYN, Seq=X): 연결 설정 단계에서 클라이언트가 서버에게 연결을 요청하는 SYN 패킷을 보냅니다. 이 패킷은 클라이언트의 초기 순서 번호(X)를 포함하고, 연결을 시작함을 나타냅니다.
  2. Step 2 - 서버가 클라이언트에게 응답하기 (SYN, ACK, Seq=Y, Ack=X+1): 서버는 클라이언트의 요청을 받고, 클라이언트의 순서 번호를 확인한 후 자신의 순서 번호(Y)와 함께 SYN/ACK 패킷을 보냅니다. 이것은 연결 수락을 의미하며, 서버는 다음에 올 것으로 예상되는 데이터 패킷의 순서 번호(X+1)를 보냅니다.
  3. Step 3 - 클라이언트가 서버에게 응답하기 (ACK, Seq=X+1, Ack=Y+1): 클라이언트는 서버의 응답을 받고, 서버의 순서 번호(Y)를 확인한 후 ACK 패킷을 보냅니다. 이것은 서버가 연결을 수락했음을 확인하고, 클라이언트가 서버의 예상 순서 번호(Y+1)로부터 데이터를 보낼 것임을 나타냅니다.

필요성:

  • 3-way handshake는 양쪽 간에 상호 동의된 초기 순서 번호를 설정하고, 연결을 설정하며, 통신을 시작하는 데 필요합니다. 이 단계가 없으면 데이터 통신이 시작되지 않습니다.

TCP 4-way Handshake (연결 해제):

  1. Step 1 - 클라이언트가 서버에게 연결 종료 요청 (FIN, Seq=X): 데이터 통신이 끝나면 클라이언트는 서버에게 연결 종료를 요청하는 FIN 패킷을 보냅니다. 이것은 클라이언트가 더 이상 데이터를 보내지 않을 것임을 나타냅니다.
  2. Step 2 - 서버가 클라이언트에게 응답하기 (ACK, Seq=Y, Ack=X+1): 서버는 클라이언트의 FIN 요청을 받고 확인하기 위해 ACK 패킷을 보냅니다. 그러나 서버는 아직 데이터를 보내기 위해 준비 중입니다.
  3. Step 3 - 서버가 클라이언트에게 연결 종료 요청 (FIN, Seq=Z, Ack=X+1): 서버가 데이터 전송을 마치면, 서버는 연결 종료를 요청하는 FIN 패킷을 클라이언트에게 보냅니다. 이것은 서버가 클라이언트에게 더 이상 데이터를 보내지 않을 것임을 나타냅니다.
  4. Step 4 - 클라이언트가 서버에게 응답하기 (ACK, Seq=X+1, Ack=Z+1): 클라이언트는 서버의 FIN 요청을 받고, 클라이언트도 더 이상 데이터를 보내지 않을 것임을 나타내는 ACK 패킷을 보냅니다. 이로써 연결이 종료됩니다.

필요성:

  • 4-way handshake는 양쪽 간의 데이터 통신이 완료되고 연결이 종료됨을 보장합니다. 이 단계가 없으면 연결이 계속 유지될 수 있으며, 다른 데이터 전송이 불가능합니다.

 

"SYN"은 "Synchronize"의 약자로 동기입니다.

"ACK"는 "Acknowledgment"의 약자로 승인입니다.

"FIN"은 "Finish"의 약자로 종료입니다. 그 과정을 리눅스를 통해 3way, 4way인 것이 보입니다.

중간의 P의 경우, 패킷의 약자로 데이터 패킷을 전송하는 과정입니다.

 

TCP와 UDP를 그림으로 표현했을때 다음과 같습니다.

 

TCP (Transmission Control Protocol)

연결 지향 방식, 패킷 교환방식

3way handshaking 으로 연결 4way handshaking으로 해제

흐름제어 - 송.수신측의 데이터 처리속도 차이 줄이기 위함, receiver가 현재 상태를 sender에게 피드백해 패킷 수를 조절

혼잡 제어 - 송신측의 데이터 전달과 네트워크 데이터 처리 속도 차이를 해결 하기 위함

위 두가지 기능 가능

높은 신뢰성- 낮은 성능

전이중(각각의 독립된 회선 사용), 점대점(1대1통신) 방식

각각의 패킷들은 연결되어있으며 번호가 매겨짐

신뢰성있는 전송이 필요할때 사용

가변길이 헤더

 

 

UDP (User Datagram Protocol)

비연결형 방식, 데이터그램 방식

정보를 주고받을떄 신호절차를 가지고 있지 않음

UDP헤더의 CheckSum 필드로 최소한의 오류 검출

낮은 신뢰성 -높은 성

각각의 패킷들은 독립되어있다

빠른 전송이 필요할때 사용

고정 길이 헤더

 

일반적으로는 저런 내용이지만 UDP는 커스터마이징이 가능하며 개발자의 역량에 따라서 UDP를 이용해

TCP와 비슷한 신뢰성 가지게 할 수 있음

ex) QUIC

 

728x90
반응형