TCP 와 UDP

박영준·2023년 8월 10일
0

Network

목록 보기
3/6

TCP/UDP에 대한 설명은 개발자 면접에서 자주 나오는 질문 중의 하나!

TCP 와 UDP

  • OSI 7 계층들 中 TCP/IP 의 전송 계층에서 사용되는 프로토콜

    • 데이터의 전달 담당
    • 전달되는 패킷의 오류를 검사
    • 재전송 요구

    전송 계층
    송신자와 수신자를 연결하는 통신 서비스를 제공하는 계층

    TCP/IP (Transmission Control Protocol/Internet Protocol)

    • TCP와 IP를 합쳐서 부르는 말
    • TCP/IP 프로토콜을 사용한다는 것은 송신자가 IP주소를 사용해서 수신자에게 데이터를 전달하고, TCP를 이용해서 송수신자 간 논리적 연결을 생성하고 신뢰성을 유지하는 것을 의미
      (논리적 연결: 송신자와 수신자만을 위한 통로를 하나 만들어서 이 통로를 이용해서 통신하겠다는 의미)
    • 데이터가 의도된 목적지에 닿을 수 있도록 보장해주는 통신 규약

TCP (Transmission Control Protocol)

1. 정의

  • 연결 지향적 프로토콜

    • 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 프로토콜

    • 장치들 사이에 논리적인 접속을 성립하기 위해, 연결을 설정해 신뢰성을 보장

      • TCP는 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟(데이터, 메시지, 세그먼트라는 블록 단위)을 안정적으로, 순서대로, 에러 없이 교환할 수 있게 한다.

2. 특징

TCP 는 '신뢰성을 보장'하는 '연결형 서비스'다. (이것이 1, 2, 3 특징을 가지는 이유)

  • 연결형 서비스이기 때문에, 흐름 제어와 혼잡 제어가 가능해서
    결론적으로 신뢰성있는 서비스가 된다.

1) 연결형 서비스로 가상 회선 방식을 제공

  • 3-way handshaking 과정을 통해, 연결을 설정
    4-way handshaking 과정을 통해, 연결을 해제

    • 3-way handshaking : 발신지와 수신지 사이에 논리적인 접속(세션)을 성립하는 과정
  • "가상 회선 방식을 제공"

    • 발신지와 수신지를 연결하여, 패킷을 전송하기 위한 논리적 경로를 배정한다

2) 흐름 제어 (Flow control)

  • 데이터 처리 속도를 조절하여, 수신자의 버퍼 오버플로우를 방지

    버퍼 오버플로우

    • 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리 범위를 넘어선 위치에 자료를 읽거나 쓸 때 발생
    • 오작동 또는 악의적 코드를 실행할 수 있게 됨

3) 혼잡 제어 (Congestion control)

  • 네트워크 내의 패킷 수가 과도하게 증가하지 않도록 방지

    패킷

    • 패키지(package) + 버킷(bucket, 덩어리)의 합성어
    • 통신망을 통해 전송하기 쉽도록 자른 데이터의 전송 단위

4) 전이중(Full-Duplex), 점대점(Point to Point) 방식

  • 전이중(Full-Duplex) : 전송이 양방향으로 동시에 일어날 수 있다.

  • 점대점(Point to Point) : 각 연결이 정확히 2개의 종단점을 가지고 있다.

5) 높은 신뢰성을 보장

단점!

  • 신뢰성이 높은 전송을 하기 때문에 UDP보다 속도가 느림
    • 따라서, TCP 는 연속성보다 신뢰성 있는 전송이 중요할 때 사용하는 프로토콜
      • 예시 : 파일 전송

3. TCP 연결 과정 (3-way handshake)

  1. 먼저 Open 한 클라이언트가 SYN(내 말 들려?)를 보내고,
    클라이언트는 SYN_SENT 상태로 대기한다.

  2. 서버는 SYN-RECEIVED 상태로 바꾸고,
    클라이언트에게 SYN 과 응답 ACK(어 잘 들려! 내 말은 들려?)를 보낸다.

  3. 클라이언트는 SYN 과 응답 ACK를 받고,
    ESTABLISHED 상태로 변경 후, 서버에게 응답 ACK(잘 들려!)를 보낸다.

  4. 서버는 응답 ACK 를 받고, ESTABLISHED 상태로 변경한다.

    • SYN(synchronize sequence numbers) : 연결 확인을 보내는 무작위의 숫자 값 (내 말 들려?)
    • ACK(acknowledgements) : Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK (잘 들려!)
    • 상태

      • CLOSED : 연결 수립을 시작하기 전의 기본 상태 (연결 없음)

      • LISTEN : 포트가 열린 상태로 연결 요청 대기 중

      • SYN-SENT : SYN을 요청한 상태

      • SYN-RECEIVED : SYN 요청을 받고 상대방의 응답을 기다리는 중

      • ESTABLISHED : 연결 수립이 완료된 상태, 서로 데이터를 교환할 수 있다.

4. TCP 연결 해제 과정 (4-way handshake)

  1. 먼저 close를 실행한 클라이언트가 FIN(연결 끊자!)을 보내고, FIN-WAIT-1 상태로 대기한다.

  2. 서버는 CLOSE-WAIT으로 바꾸고, 클라이언트에게 응답 ACK(알겠어! 잠시만~)를 전달한다.
    동시에 해당 포트에 연결되어 있는 애플리케이션에게 close를 요청한다.

  3. 클라이언트는 ACK 를 받고, 상태를 FIN-WAIT-2로 변경한다.

  4. 서버 애플리케이션은 close 요청을 받고, 종료 프로세스를 진행하고
    클라이언트에게 FIN(나도 끊을게!)을 보내고, 서버를 LAST_ACK 상태로 바꾼다.

  5. 클라이언트는 FIN 을 받은 후, 서버에게 ACK(알겠어!)를 다시 전송하고
    클라이언트를 TIME-WAIT 상태로 바꾼다.

    • TIME-WAIT
      • 먼저 연결을 끊는 쪽에서 생성되는 소켓
      • 혹시 모를 전송 실패에 대비하기 위해 존재하는 소켓
      • TIME-WAIT 에서 일정 시간이 지나면 CLOSE 된다.
        ACK를 받은 서버도 포트를 CLOSED로 닫는다.
      • TIME-WAIT 이 없다면, 패킷의 손실이 발생하거나 통신자 간 연결 해제가 제대로 되지 않을 수 있다.
    • 상태

      • ESTABLISHED : 연결 수립이 완료된 상태, 서로 데이터를 교환할 수 있다.

      • FIN-WAIT-1 : 자신이 보낸 FIN에 대한 ACK를 기다리거나 상대방의 FIN을 기다린다.

      • FIN-WAIT-2 : 자신이 보낸 FIN에 대한 ACK를 받았고, 상대방의 FIN을 기다린다.

      • CLOSE-WAIT : 상대방의 FIN(종료 요청)을 받은 상태. 상대방 FIN에 대한 ACK를 보내고 어플리케이션에 종료를 알린다.

      • LAST-ACK : COLSE-WAIT 상태를 처리 후 자신의 FIN 요청을 보낸 후 FIN에 대한 ACK를 기다리는 상태.

      • TIME-WAIT : 모든 FIN에 대한 ACK를 받고 연결 종료가 완료된 상태. 새 연결과 겹치지 않도록 일정 시간 기다린 후 CLOSED로 전이 한다.

      • CLOSED : 연결 수립을 시작하기 전의 기본 상태 (연결 없음)

UDP (User Datagram Protocol)

1. 정의

  • 비연결형 프로토콜

    • 연결을 위해 할당되는 논리적인 경로가 X
    • 각각의 패킷은 다른 경로로 전송되며, 독립적인 관계를 지닌다.
  • 신뢰성보다는 연속성 있는 전송이 필요할 때 사용하는 프로토콜

    • 예시 : 실시간 서비스(streaming)

2. 특징

  • 비연결형 서비스이기 때문에, 송수신을 제어할 수 없어서(전송 순서 바뀔수 있고, 수신 여부 확인 안 함)
    결론적으로 신뢰성 낮은 서비스가 된다.

1) TCP보다 빠른 속도

  • 서로 다른 경로로 독립적으로 처리하며, 흐름 제어 또는 혼잡 제어와 같은 기능을 처리하지 않기 때문

2) 1:1 & 1:N & N:N 통신이 가능

3) 비연결형 서비스로 데이터그램 방식을 제공

  • 데이터의 전송 순서가 바뀔 수 있다.

4) 데이터 수신 여부를 확인하지 X

단점!

  • TCP 의 3-way handshaking 과 같은 과정 X
    • UDP 는 비연결형 서비스이기 때문에, 연결을 설정하고 해제하는 과정이 존재하지 않기 때문

5) 신뢰성 ↓

단점!

  • 흐름 제어(flow control)가 없어서 제대로 전송되었는지/오류가 없는지 확인할 수 X

TCP vs UDP


참고: TCP와 UDP의 특징 및 차이점 알아보기
참고: [Network] TCP / IP란 무엇인가?

profile
개발자로 거듭나기!

1개의 댓글

comment-user-thumbnail
2023년 8월 10일

덕분에 TCP, UDP 잘 이해했습니다 (_ _) 감사합니다!

답글 달기