JuBin's personal study blog

[네트워크] TCP와 UDP 본문

네트워크

[네트워크] TCP와 UDP

JuBin 2024. 4. 7. 00:00
반응형
  • TCP와 UDP는 모두 전송계층에서 사용되는 프로토콜 이다.
    💬 전송계층은 송신자와 수신자를 연결을 제공하는 계층이다.
  • 데이터 전달을 담당하며, 전달되는 패킷의 오류를 검사하고 재전송 등 제어를 담당한다.

 

TCP

TCP는 연속성보다 신뢰성이 있는 전송이 중요할때 사용하는 프로토콜이다.

  • 연결 지향적 프로토콜이다.
    💬 연결 지향적 프로토콜은 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 프로토콜이다.
  • 높은 신뢰성을 보장한다.
    때문에 UDP보다는 속도가 느리다.
  • 데이터를 안정적으로, 순서대로, 에러없이 교환할 수 있도록 한다.
  • 3-way-handshaking 과정으로 연결을 설정하고, 4-way-handshaking 과정으로 연결을 해제한다.
    3-way-handshaking과 4-way-handshaking란?
  • 흐름을 제어한다.
    데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지한다.
  • 혼잡 제어
    네트워크 내 패킷 수가 과도하게 증가하지 않도록 방지한다.
  • 전이중(Full-Duplex), 점대점(Point to Point) 방식
    💬 전이중 : 전송이 양방향으로 동시에 일어남
    💬 점대점 : 각 연결이 2개의 종단점을 갖고 있다.

3-way-handshaking & 4-way-handshaking

3-way-handshaking 을 간단히 표현하면 다음과 같다. (TCP의 연결 과정)

1. Client -> Server : 내말들려?

2. Server -> Client : 응 잘들려. 내말은 들려?
3. Client -> Server : 잘들려

3-way-handshake

💬 SYN : 연결 확인을 보내는 무작위 숫자값

💬 ACK : Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다라는 응답값

 

위 그림의 순서를 보면

1. 먼저 Open한 ClientSYN을 보내고 SYN_SEND 상태로 대기한다.

2. ServerSYN_RECEIVED 상태로 바꾸고, SYN과 ACK를 보낸다.

3. SYN과 ACK를 받은 Client는 상태를 ESTABLISHED로 바꾸고 Server에게 ACK를 보낸다.

4. ACK를 받은 Server도 상태를 ESTABLISHED로 바꾼다

 

4-way-handshaking 을 간단히 표현하면 다음과 같다. (TCP의 연결 해제 과정)

1. Client -> Server : 나는 내 할일 끝났어. 이제 끊자

2. Server -> Client : 웅 잠깐만

3. Server -> Client : 나도 끊을게

4. Client -> Server : 웅 수고했어

4-way-handshake

 

💬 TIME-WAIT : 먼저 연결을 끊는쪽에서 생성되는 소켓으로, 혹시 모를 전송 실패에 대비 하기 위한 소켓이다. 
TIME-WAIT가 없다면 패킷의 손실이 발생하거나 통신자 간 연결 해제가 제대로 되지 않을 수 있다.

💬 FIN : 종료요청

 

위 그림의 순서를 보면

 

1. 먼저 Close를 실행할 ClientFIN을 보내고 FIN_WAIT_1 상태로 대기한다.

2. ServerCLOSE_WAIT로 상태를 바꾸고, 응답(ACK)을 전달한다. 동시에 해당 포트에 연결되어 있는 어플리케이션에게 Close를 요청한다.

3. ACK를 받은 Client는 상태를 FIN_WAIT_2로 변경한다.

4. Close 요청을 받은 Server 어플리케이션은 종료 프로세스를 진행하고, FIN을 클라이언트로 보낸 후 LAST_ACK 상태로 바꾼다.

5. FIN을 받은 ClientACK를 다시 Server로 전송하고, TIME_WAIT 상태로 바꾼다. TIME_WAIT에서 일정 시간이 지나면 CLOSE 상태가 된다. ACK를 받은 Server도 포트를 CLOSED로 닫는다.


UDP

UDP는 신뢰성보다는 연속성이 있는 전송이 필요할때 사용하는 프로토콜이다.

  • 비연결형 프로토콜이다.
    비연결형 서비스 이기 떄문에 데이터의 전송 순서가 바뀔수 있다.
    💬 연결을 위해 할당되는 논리적인 경로가 없고, 각 패킷들은 다른 경로로 전송되며, 독립적인 관계를 갖는다.
  • 데이터 수신 여부를 확인하지 않는다.
    TCP처럼 3-way-handshaking 과정이 없다.
  • 신뢰성이 낮다.
    흐름제어가 없어서 제대로 전송이 되었는지 오류가 없는지 확인할 수 없다.
  • TCP 보다 속도가 빠르다.
  • 주로 실시간 서비스(스트리밍)에 자주 사용된다

TCP vs UDP

TCP
UDP

비교하면

  • TCP는 연결형 프로토콜, UDP는 비연결형 프로토콜
  • TCP는 전송 순서를 보장하지만 UDP는 그렇지 않다
  • TCP는 수신 여부를 확인하지만 UDP는 그렇지 않다
  • TCP는 1:1로 통신하지만 UDP는 1:1 or 1:N or N:N 방식으로 통신한다.
  • TCP는 신뢰성이 높고, UDP는 낮다.
  • TCP는 속도가 느리고, UDP는 빠르다.

요약하면

TCP는 연속성보다 신뢰성이 있는 전송이 중요할때 사용되며, UDP는 TCP 보다 빠르고 네트워크 부하가 작다라는 장점이 있지만 신뢰성을 보장하지는 않는다. 그렇기 때문에 UDP는 실시간 스트리밍과 같은 서비스에 자주 사용된다.

 

반응형