면접 질문

TCP vs UDP

노엠디엔 2023. 10. 8. 17:16

면접 질문 공부를 하다 유튜브에 TCP와 UDP에 대해  우아한 테크쇼 영상에 잘 정리되어 있어서
기록으로 남겨본다!

https://www.youtube.com/watch?v=ikDVGYp5dhg&t=475s

트랜스포트 계층 TransPortLayer(계층)

EndPoint 간 신뢰성 있는 데이터 전송을 담당하는 계층

  • 애플리케이션 계층과 네트워크 계층 사이에 존재하는 네트워크 구조의 핵심역할을 하는 계층
  • 서로 다른 호스트에서 동작하는 애플리케이션 프로세스 간의 논리적 통신을 제공한다.
  • 트랜스포트 계층의 프로토콜은 종단 시스템에서만 구현된다.컴퓨터나 스마트폰 등등에서 구현됨?

트랜스포트 계층이 없다면 Flow흐름 문제와 Congestion혼잡문제 등이 발생할 수 있다고 함

Flow 흐름 문제는 수송자 간의 데이터 처리 속도 차이로 인한 데이터의 누락이 발생할 수 있음!

Congestion 혼잡문제는 네트워크 데이터 처리 속도로 인한 데이터를 받지 못하는 등의 문제

 

TCP와 UDP는 OSI 7 계층들 중 TCP/IP의 전송 계층에서 사용되는 프로토콜이라고 한다.

  1. 물리 계층
  2. 데이터 링크 계층
  3. 네트워크 계층
  4. 전송 계층
  5. 세션 계층
  6. 표현 계층
  7. 응용 계층

프로토콜이란?

통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서메시지를 주고받는 양식과 규칙의 체계이다. 즉 통신 규약 및 약속이다.

 

프로토콜의 기본 요소

  • 구문(Syntax) : 전송하고자 하는 데이터의 형식(Format), 부호화(Coding), 신호 레벨(Signal Level) 등을 규정
  • 의미(Semantics) : 두 기기 간의 효율적이고 정확한 정보 전송을 위한 협조 사항과 오류 관리를 위한 제어 정보를 규정
  • 시간(Timing) : 두 기기 간의 통신 속도, 메시지의 순서 제어 등을 규정

TCP (Transmission Control Protocol)

연결 지향적 프로토콜,. 연결 지향적 프로토콜은 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 프로토콜

      • 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
        • 3-way handshaking 과정을 통해 연결을 설정하고 - 양방향 통신,
        • 4-way handshaking 과정을 통해 연결을 해제한다. 연결형
      • 혼잡 제어(Congestion control) 
      • 데이터의 순차 전송을 보장
      • 높은 신뢰성을 보장
        • 신뢰성이 높은 전송을 하기 때문에 UDP보다 속도가 느림
      •  전이중(Full-Duplex), 점대점(Point to Point) 방식네트워크 내의 패킷 수가 과도하게 증가하지 않도록 방지
        • 전이중(Full-Duplex) : 전송이 양방향으로 동시에 일어날 수 있다.
        • 점대점(Point to Point) : 각 연결이 정확히 2개의 종단점을 가지고 있다.
      • 흐름 제어(Flow control) 데이터
      • Error Detection (오류 감지)

세크먼트(Segment) - TCP 프로토콜의 PDU(프로토콜 데이터 유닛)

TCP세그먼트는 TCP로 연결된 세션 간의전달되는 데이터 단위를  말하는데.

데이터가 전송되면 TCP 프로토콜 안에서 Data를 잘라서  TCP Header라는 것을 Data 추가하게 된다 

이것이 세그먼트이다.

 

TCP 헤더는 TCP 세션을 설정하고 종료하는 데 사용되는 여러 플래그를 포함하고 있으며,
이 중에서 중요한 것은 SYN, ACK 및 FIN 플래그인 것 같다.

  1. SYN (Synchronize)
    • SYN 플래그는 TCP 연결을 초기화하는 데 사용된다..
    • 클라이언트가 서버에게 연결을 요청할 때, 클라이언트가 SYN 플래그를 설정하여 연결을 요청합니다.
    • 서버는 SYN을 수신하고, 연결을 수락하고자 할 때 SYN과 ACK 플래그를 함께 설정하여 응답합니다.
      이것은 서버가 클라이언트의 요청을 수락한다는 것을 의미합니다.
  2. ACK (Acknowledgment)
    • ACK 플래그는 데이터 전송의 확인을 나타냅니다.
    • 데이터 전송 중에는 ACK 플래그를 설정하여 이전에 받은 데이터를 확인하고,
      다음 데이터를 전송할 수 있음을 표시한다.
    • 연결 설정 단계에서는 ACK 플래그가 설정되지 않을 수 있으며,
      SYN과 함께 ACK가 설정되면 서버가 클라이언트의 연결 요청을 수락한다는 것을 나타냅니다.
  3. FIN (Finish)
    • FIN 플래그는 TCP 연결을 종료하는 데 사용된다.
    • 어떤 한쪽에서 FIN 플래그를 설정하면, 해당 쪽은 데이터 전송을 마친 것으로 간주하고 연결 종료를 요청합니다.
    • 다른 쪽은 FIN을 수신하고 ACK 플래그로 응답한 후, 자신의 데이터 전송을 마칠 때까지 데이터를 보낼 수 있습니다.
    • 양쪽에서 FIN이 설정되면 연결이 완전히 종료된다.

TCP 3-way handshake (Connection 연결)

TCP 가 처음 server와 통신할 때 사용되는 3-way handshake 연결은 다음과 같다

  1. 첫 번째 단계 (SYN):
    • 클라이언트가 서버에 연결을 요청하려면 클라이언트는 초기 시퀀스 번호(ISN)를 선택하고,
      SYN(Synchronize) 플래그를 설정하여 연결을 시작한다.
    • 클라이언트의 SYN 패킷은 목적지 서버로 전송된다.
    • 이 SYN 패킷에는 클라이언트가 선택한 ISN 값이 포함되어 있다.
  2. 두 번째 단계 (SYN-ACK):
    • 서버는 클라이언트의 요청을 받았고, 연결을 수락하려고 준비되었다는 신호로서
      SYN과 ACK(Acknowledgment) 플래그를 함께 설정하여 응답한다.
    • 서버는 자체적으로 초기 시퀀스 번호(ISN)를 선택하고, 클라이언트의 ISN 값을 확인하면서 ACK 패킷을
      생성한다.
    • 이 패킷에는 서버의 ISN 값이 포함되어 있다.
  3. 세 번째 단계 (ACK):
    • 클라이언트는 서버의 응답을 받고, 이를 확인하기 위해 ACK 패킷을 보낸다.
    • 이 ACK 패킷은 클라이언트의 ISN 값과 서버의 ISN 값을 기반으로 한 확인 번호(ACK 번호)를 포함한다.
    • 이제 클라이언트와 서버 간의 연결이 완료되었으며, 데이터 전송이 시작한다.
    • 만약 클라이언트에서 ACK를 못 받았다면 클라이언트가 대기하였다가 다시 Packet을 서버로 보낸다.  

TCP 3-way handshake (Connection  close 연결 끊기)

      1. 번째 단계 (FIN from Client):
        • 클라이언트가 연결을 종료하려면 클라이언트는 FIN(Finish) 플래그를 설정하여
          연결을 종료하겠다는 신호를 서버에게 보낸다.
      2. 두 번째 단계 (ACK from Server):
        • 서버는 클라이언트의 FIN 패킷을 수신하고, 데이터 전송이 완료되었음을 인지하고자
          ACK(Acknowledgment) 플래그를 설정하여 응답한다.
        • 서버는 종료 준비를 마칠 때까지 아직 보내야 할 데이터가 있다면 계속 보낼 수 있음.
      3. 세 번째 단계 (FIN from Server):
        • 서버가 클라이언트의 FIN을 수신하고 데이터를 모두 보냈다면, 서버는 자체적으로 FIN 플래그를 설정하여
          클라이언트에게 연결 종료를 요청한다.
      4. 네 번째 단계 (ACK from Client):
        • 클라이언트는 서버의 FIN을 수신하고 이를 확인하기 위해 ACK 패킷을 보냅니다.
        • FIN 받은 클라이언트는 를 서버에 다시 전송하고 TIME-WAIT으로 상태를 바꾼다.
        • TIME-WAIT에서 일정 시간이 지나면 CLOSE 된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.
        • 먼저 연결을 끊는 쪽에서 생성되는 소켓으로, 혹시 모를 전송 실패에 대비하기 위해 존재하는 소켓이며,
          TIME-WAIT이 없다면, 패킷의 손실이 발생하거나 통신자 간 연결 해제가 제대로 되지 않을 수 있다.
    1.  
  1.  

TCP는 전송의 신뢰성은 보장하지만 매번 Connection을 연결해서 시간 손실이 발생할 수 있고 (3-way-handshake)

패킷을 조금만 손실해도 재전송하게 되는 문제가 있다고 한다. 그래서 경우에 따라 UDP(User Datagram Protocol)

를 사용한다고 한다

 UDP(User Datagram Protocol)

비연결형 프로토콜.
연결을 위해 할당되는 논리적인 경로가 없고, 각각의 패킷은 다른 경로로 전송되며, 독립적인 관계를 지닌다.

  • TCP보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜
  • 비연결형 서비스로 데이터그램 방식을 제공한다.( 데이터의 전송 순서가 바뀔 수 있다)
  • 순차 전송, 흐름 제어, 혼잡 제어 등이 포함되지 않음
  • Error detection  에러만 검출
  • 비교적 데이터의 신뢰성이 중요하지 않을 때 사용  스트리밍 서비스 등

User Datagram(UPD 프로토콜의 PDU)

UDP에서는 받은 데이터를 UDP Header라는 것을 Data와 합쳐진다. 

추가 설정이 필요하다면 애플리케이션 단에서 잘라줘야 하는 경우가 있다?

UDP의 데이터 전송방식은 클라이언트가 서버에 패킷을 전송하는 것 밖에 없다!

 

후  유튜브를 통해 우아한 테크를 몇 번 봤었는데 정말 죄다 도움이 될만한 영상 밖에 없어서 언제 다 볼지는 모르겠다.

천천히 다시 보면서 정리해 나가야 될 것 같다.

 

 

 

 

 참고 블로그 : https://dev-coco.tistory.com/144

https://nogan.tistory.com/20

'면접 질문' 카테고리의 다른 글

브라우저 저장소  (0) 2023.02.27
HTTP  (0) 2023.02.23
캐시(Cache)  (0) 2023.02.23
라이브러리와 프레임워크  (0) 2023.02.23
RESTful API란?  (0) 2023.02.21