TCP & UDP

보안노트·2024년 5월 20일
0

TCP vs UDP


  • TCP는 Transmission Control Protocol의 약자이다.

  • UDP는 User Datagram Protocal의 약자이다.

  • 두 프로토콜 모두 패킷을 하나의 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현되어 있지만, 서로 다른 특징을 가지고 있다.




TCP vs UDP 송신 과정



  • TCP는 신뢰성이 요구되는 어플리케이션에서 사용한다. 신뢰성은 높지만 UDP에 비해 속도가 느리다는 점이 있다.

  • UDP는 데이터를 빠른 속도로 전송하고자 하는 어플리케이션에서 사용한다. 신뢰성은 낮지만 TCP보다 전송 속도가 빠르다.




TCP (Transmission Control Protocol)


  • TCP는 네트워크 계층 중 전송 계층에 해당하는 프로토콜이다.

  • 장치들 사이에 논리적인 접속을 성립하기 위하여 연결을 설정하는 신뢰성을 보장하는 연결형 서비스 이다.

  • 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 오류없이 교환할 수 있게 된다.




TCP의 특징


  • 연결형 서비스

    • 3-way handshaking 과정을 통해 연결을 설정.

    • 4-way handshaking 과정을 통해 연결을 해제.


  • 흐름 제어 (Flow Control)

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

    • 송신자가 감당안되는 많은 데이터를 빠르게 보내 수신자가 문제가 일어나는 것을 막는다.

    • 수신자가 윈도우크기(Window Size) 값을 통해 수신량을 정할 수 있다.


  • 혼잡 제어 (Congestion Control)

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

    • 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.


  • 신뢰성이 높은 전송 (Reliable Transmission)

    • Dupack-based retransmission

      • 정상적인 상황에서는 ACK 값이 연속적으로 전송되어야 한다.

      • 그러나 ACK 값이 중복으로 올 경우 패킷 이상을 감지하고 재전송을 요청한다.

    • Timeout-based retransmssion

      • 일정 시간동안 ACK 값이 수신을 못할 경우 재전송을 요청한다.

  • 전이중, 점대점 방식

    • 전이중 (Full-Duplex)

      • 전송이 양방향으로 동시에 일어날 수 있다.
    • 점대점 (Point to Point)

      • 각 연결이 정확히 2개의 종단점을 가지고 있다.




ACK & NAK & SYN & FIN


  • ACK는 Acknowledgement의 약자이다.

    • ACK는 데이터 수신측에서 패킷을 올바르게 받았다는 뜻으로,
      다음으로 필요한 패킷의 번호(받은 패킷 번호 +1)와 함께 보내진다.

  • NAK 또는 NACK는 Negative Acknowledgement의 약자이다.

    • NAK는 받은 패킷에 오류가 있다거나 잘못된 순서로 받았다는 뜻으로,
      문제가 있는 패킷의 번호와 함께 보내진다.

  • SYN은 Synchronize의 약자이다.

    • SYN은 클라이언트가 서버에게 연결 요청을 하는 의미이다.

  • FIN은 Finish의 약자이다.

    • FIN은 TCP 연결을 종료하기 위해 사용되는 플래그이다.




TCP 연결 & 해제 과정





TCP Connection (3-way handshake)


  1. 먼저 클라이언트가 서버에게 SYN을 보내고 SYN_SENT 상태로 대기한다.

    • SYN_SENT : 클라이언트가 서버에게 SYN 패킷을 보낸 후, 서버의 SYN-ACK 응답을 기다리는 상태.

  1. SYN 패킷을 받은 서버는 SYN-ACK 패킷을 클라이언트에게 보낸 후 SYN_RCVD 상태로 바꾼다.

    • SYN_RCVD : 서버가 클라이언트의 SYN 패킷을 받고, SYN-ACK 패킷을 보낸 후 클라이언트의 ACK 응답을 기다리는 상태.

  1. SYN-ACK을 받은 클라이언트는 서버에게 응답 ACK를 보낸 후 ESTABLISHED 상태로 변경한다.

    • ESTABLISHED : 클라이언트와 서버가 모두 ACK 패킷을 교환하여 연결이 설정된 상태로, 양방향 데이터 전송이 가능한 상태.




TCP Disconnection (4-way handshake)


  1. 클라이언트가 서버에게 FIN 패킷을 보낸 후 FIN_WAIT_1 상태로 대기한다.

    • FIN_WAIT_1 : 클라이언트가 FIN 패킷을 전송한 후 서버의 ACK 응답을 기다리는 상태.

  1. FIN 패킷을 받은 서버는 클라이언트에게 응답 ACK를 보낸 후 CLOSE_WAIT 상태로 바꾼다. 동시에 해당 포트에 연결되어있는 어플리케이션에게 close() 요청을 한다.

    • CLOSE_WAIT : 서버가 클라이언트의 FIN 패킷을 수신한 후, 연결 종료를 준비하는 상태.

  1. ACK 패킷을 받은 클라이언트는 FIN_WAIT_2 상태로 변경한다.

    • FIN_WAIT_2 : 클라이언트가 서버의 ACK 패킷을 수신한 후, 서버의 FIN 패킷을 기다리는 상태.

  1. close() 요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고 FIN 패킷을 클라이언트에게 보내 LAST_ACK 상태로 바꾼다.

    • LAST_ACK : 서버가 자신의 FIN 패킷을 전송한 후, 클라이언트의 ACK 응답을 기다리는 상태.

  1. FIN 패킷을 받은 클라이언트는 ACK를 서버에 다시 전송하고 TIME_WAIT 상태로 변경한다.

    TIME_WAIT 상태에서 일정 시간이 지나면 CLOSED가 된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.

    • TIME_WAIT : 클라이언트가 서버의 FIN 패킷에 대해 ACK 패킷을 보낸 후, 일정 시간 동안 해당 상태를 유지하는 상태.
    • CLOSED : 연결이 완정히 종료된 상태.

  • 반드시 서버만 CLOSE_WAIT 상태를 갖는 것이 아니다.
  • 서버가 먼저 종료하겠다고 FIN을 보낼 수 있고, 이러한 경우 서버가 FIN_WAIT_1 상태가 된다.
  • 누가 먼저 close()를 요청하느냐에 따라 상태가 달라질 수 있다.




TCP Header 구조

  • Source Port : 출발지 IP + 포트번호

  • Destination Port : 목적지 IP + 포트번호

  • Sequence Number : 시퀀스 번호를 전송하는 데이터의 순서를 의미.

  • Acknowledgement Number : 수신하기 기대하는 다음 바이트 번호.

    • 상대방이 보낸 시퀀스 번호 + 1을 의미. 즉, 다음 세그먼트를 수신할 준비가 되었다는 것을 의미.
  • HLEN or Data offset

    • 헤더의 길이 또는 데이터의 시작 위치를 의미.
    • 32bit 워드 단위 사용. 1 Word = 4byte를 의미.
  • Reserved

    • 차후 사용을 위해 남겨둔 필드.
    • 혼잡 제어 기능 향상을 위해 3bit를 Flag 필드로 넘겨서 NS, CWR, ECE Flag가 추가됨.
  • Flags

    • URG(Urgent Pointer) : 긴급 포인터

      • 필드에 값이 채워져있다는 의미의 flag
      • 송신측 상위 계층이 긴급 데이터라고 알려주면 긴급비트 URG 값을 1로 설정하고 순서 상관없이 먼저 송신됨.
    • ACK(Acknowledgment) : 승인 번호

      • ACK 값이 1로 설정되면 확인 번호 유효를 의미.
      • ACK 값이 0으로 설정되면 확인 번호 미포함.
      • 확인 번호는 Acknowledgement Number(32bit)를 의미.
    • PSH(Push)

      • 수신 측에게 데이터를 최대한 빠르게 응용프로그램에게 전달해달라는 flag.
      • PSH 값이 1이라면 TCP 버퍼가 다 채워지기 전 전송하게 되는 방식.
      • PSH 값이 0이라면 TCP 버퍼가 다 채워진 후 전송하게 되는 방식.
    • RST(Reset) : 강제 연결 초기화

      • ESTABLISHED된 상태에서 어떠한 문제로 인해 연결 상태를 리셋하는 flag.
      • RST 값이 1이라면 연결 초기화로 해당 패킷 수신 거부를 의미.
    • SYN(Synchronize) : 연결 시작

    • FIN(Finish) : 연결 종료

    • NS

      • CWR, ECE 필드가 실수 및 악의적으로 은폐되는 경우를 방지하기 위해 추가된 필드.
    • ECE(ECN Echo)

      • ECE 값이 1이면서, SYN 값이 1이라면 ECN을 사용한다고 상대방에게 알리는 의미.
      • ECE 값이 1이면서, SYN 값이 0이라면 네트워크 혼잡으로 데이터의 양을 줄여달라는 요청을 의미.
    • CWR

      • ECE Flag를 받아서 데이터의 양(세그먼트 윈도우)을 줄였다는 의미.
  • Window Size

    • 한 번에 전송할 수 있는 데이터의 양을 의미.
    • 16bit로 2^16 = 65535의 범위를 가짐.
  • Checksum

    • 데이터 송신 중 발생할 수 있는 오류 검출을 위한 값.
  • Urgent Pointer

    • 긴급 데이터인 URG flag의 값이 1일 때, 마지막 긴급 데이터의 위치를 의미.
    • 데이터 필드에서 어디부터 어디까지가 긴급 데이터인지 나타내며 마지막 긴급 데이터의 바이트를 가르킴.
  • Options

    • TCP 연결 관리 기능을 확장시키는데 사용되는 옵션 필드.




UDP (User Datagram Protocol)


  • 데이터를 데이터크램 단위로 처리하는 프로토콜이다.

  • 테이터그램이란, 독립적인 관계를 지니는 패킷을 뜻하며 UDP는 연결을 위해 할당되는 논리적인 경로가 없어서 데이터를 서로 다른 경로로 독립적으로 처리하는 것을 말한다.




UDP의 특징


  • 비연결형 서비스로 데이터그램 방식을 제공한다.

  • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.

  • UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.

  • 신뢰성이 낮다.

  • TCP보다 속도가 빠르다.




UDP Header 구조

  • Source Port : 송신 측 포트 번호
  • Destination Port : 수신 측 포트 번호
  • Length : UDP 헤더와 데이터를 합한 길이를 의미.
  • Checksum : UDP 헤더와 데이터를 모두 포함하여 오류 검출.




TCP & UDP 공통점과 차이점


  • 공통점

    • 포트 번호를 이용하여 주소를 지정

    • 데이터 오류 검사를 위한 CheckSum 필드 존재


  • 차이점

    • TCP

      • 연결이 성공해야 통신이 가능(연결형 프로토콜).

      • 데이터의 경계를 구분하지 않음 (Byte-Stream Service)

      • 신뢰성 있는 데이터 전송 (데이터의 재전송 존재)

      • 일 대 일 (Unicast)통신


    • UDP

      • 연결 없이 통신이 가능(비연결형 프로토콜).

      • 데이터의 경계를 구분함 (Datagram Service)

      • 비신뢰성 있는 데이터 전송(데이터의 재전송 없음)

      • 일 대 일, 일 대 다(Broadcast), 다 대 다(Multicast)통신

0개의 댓글

관련 채용 정보