모르는게 많은 개발자

TCP/UDP 특징 총정리 본문

알아가는 개발

TCP/UDP 특징 총정리

Awdsd 2020. 5. 5. 17:49
반응형

TCP와 UDP는 데이터를 보내기 위한 전송 계층 프로토콜이다. 두개의 차이점이 무엇인지 알아보자.


1. TCP(Transmission Control Protocol)

 

특징
  • 연결형 서비스를 제공하는 전송 프로트콜 -> 가상 회선 연결 방식 (전송 계층)
  • 3-way-handshake를 통한 연결, 4-way-handshake를 통한 연결해제
  • 신뢰성 높은 데이터 전송 보장
  • 데이터가 누락될 시 재전송
  • 흐름 제어, 혼잡 제어
  • 전이중, 점대점 방식

3-way-handshake

3-way-handshake

TCP는 3-way-handshake를 통해 서버와 클라이언트간 연결을 한다. 순서는 다음과 같다.

  1. Server에서 서버를 작동시켜 Listen()이 실행돼 Client를 기다린다.
  2. Client에서 Connect()를 통해 Server에 요청을 보내면서 SYN(a)패킷을 보낸다.(a는 난수)
  3.  Server에서 Client의 요청을 수락했다는 응답으로 ACK(a+1)패킷과 SYN(b)패킷을 Client로 전송
  4. Client에서 Server의 SYN(b) 패킷의 응답으로 ACK(b+1)패킷 전송

4-way-handshake

4-way-handshake

TCP는 4-way-handshake를 통해 서버와 클라이언트간 연결을 해제한다. 순서는 다음과 같다.

  1. Client가 Close()를 실행하여 Server에 FIN플래그를 전송하며 연결해제 요청
  2. Server에서 close_wait으로 바꾼후 응답으로 ACK패킷 전송 (ACK전송후 남은 데이터 전송을 위해 )
  3. Server에서 Close()실행후 FIN 플래그를 Client에 전송
  4. Client에서 FIN을 받은후 응답으로 Server에 ACK패킷 전송

재전송(Retransmission) 상황

TCP는 패킷 전송과정에서 분실시 재전송(Retransmission)을 하게 된다.

재전송 발생 상황은 3가지가 있다.

  1. Packet lost
    송신자가 패킷을 보냈지만, 중간에 유실되어 수신측에 도달하지 못함.
    수신측에 도달하지 못했으므로 ACK를 송신자에게 보내지 않기 때문에 Timer만료
  2. ACK lost
    송신자가 패킷을 보냈고, 수신자도 ACK를 보냄
    하지만 중간에 ACK가 유실되어 송신자 Timer만료
  3. Early Timeout
    송신자가 패킷을 보냈고, 수신자도 ACK를 보냄
    하지만 네트워크지연이 발생해 송신자의 Timer가 만료된 후 ACK도착

RTO, RTT Retransmission

RTO(Retransmission Timeout) : 재전송할 Timer 시간

RTO는 보통 운영체제마다 별도의 초기값을 가지지만 네트워크에 따라 동적으로 변경된다.

동적으로 변경 될 때 RTT에 의해서 변한다.

※ RTT : 호스트 간 송신에 대한 응답(ACK)를 받기까지의 시간

※ SampleRTT : 측정된 RTT

 

송신자가 보낸 패킷에 대한 ACK를 받기까지의 RTO를 SampleRTT로 설정할 경우, 재전송이 발생했을 때 응답온 ACK가 원래의 패킷에 대한 응답이지 재전송에 대한 응답인지 구분하기 어렵다.

 

그래서 Karn의 Partrdge Algorithm을 사용한다.

알고리즘에 대해 간단히 설명하면
RTO Timer가 만료되면 RTO 값을 2배로 늘린다. 여기서 SampleRTT는 송/수신이 완료된 전송에 대해 값을 기록.

이 값을 이용해 RTO를 계산하는데 사용


Fast Retransmission

Fast Retransmission

Fast Retransmission은 송신측에서 데이터를 전송할 때 데이터가 유실될 경우 수신측에서 duplicate ACK 패킷을 보내게 되는데, 이 패킷을 3개이상 받을 경우 데이터가 손실되었다 판단하고 타이머가 끝나는 것을 기다리지 않고 재전송하는 방법이다.


Nagle Algorithm

Nagle 알고리즘은 '한번에 많이 보내자' 원칙을 기반으로 만들어진 알고리즘이다

패킷을 전송할 때 수신측으로부터 ACK를 받을 때까지 버퍼에 패킷을 쌓고 전송하는 방식이다->트래픽 감소 목적, 응답성 떨어짐

 


Delayed ACK

Delayed ACK는 패킷을 받은 수신측에서 ACK를 바로 전송하는게 아니라 시간을 두고 그 사이에 패킷 전송할 것이 있으면 ACK랑 같이 실어 보내는 방식 -> 트래픽 감소 목적


2.  UDP(User Datagram Protocol)

 

특징
  • 비연결형 서비스를 제공하는  전송 프로토콜
  • 데이터를 데이터그램 단위로 처리
  • 데이터를 주고 받을 때 전송, 응답 신호절차를 거치지 않음. -> 신뢰성이 낮음
  • 흐름제어가 없어 오류를 확인할 수 없음
  • TCP보다 속도가 빠르다
  • 신뢰성보다는 성능에 중점을 둔다. ex) 실시간 서비스
  • TFTP, SNMP, DHCP, NFS, DNS, RIP등에서 사용
  • 데이터그램 단위로 전송되며, 크기는 65535바이트로, 크기가 초과되면 잘라서 전송

※ 데이터그램 : 독립적인 관계를 지니는 패킷

 

 

 

 

 

https://mangkyu.tistory.com/15

https://asfirstalways.tistory.com/356

https://movefast.tistory.com/36

https://snowdeer.github.io/common-sense/2017/08/17/nagle-algorithm/

반응형
Comments